@signalcore/ui 0.1.0 → 1.0.0-beta.1

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 (611) hide show
  1. package/README.md +896 -513
  2. package/dist/AgentAbout.d.ts +186 -0
  3. package/dist/AgentAbout.js +1020 -0
  4. package/dist/AgentAbout.js.map +1 -0
  5. package/dist/AgentCard.d.ts +49 -0
  6. package/dist/AgentCard.js +77 -0
  7. package/dist/AgentCard.js.map +1 -0
  8. package/dist/AgentChat.d.ts +233 -0
  9. package/dist/AgentChat.js +1127 -0
  10. package/dist/AgentChat.js.map +1 -0
  11. package/dist/AgentSpace.d.ts +112 -0
  12. package/dist/AgentSpace.js +339 -0
  13. package/dist/AgentSpace.js.map +1 -0
  14. package/dist/AgentTasks.d.ts +48 -0
  15. package/dist/AgentTasks.js +120 -0
  16. package/dist/AgentTasks.js.map +1 -0
  17. package/dist/BrowserView.d.ts +52 -0
  18. package/dist/BrowserView.js +328 -0
  19. package/dist/BrowserView.js.map +1 -0
  20. package/dist/FileView.d.ts +63 -0
  21. package/dist/FileView.js +449 -0
  22. package/dist/FileView.js.map +1 -0
  23. package/dist/Modes.d.ts +13 -0
  24. package/dist/Modes.js +75 -0
  25. package/dist/Modes.js.map +1 -0
  26. package/dist/VoiceCall.d.ts +91 -0
  27. package/dist/VoiceCall.js +302 -0
  28. package/dist/VoiceCall.js.map +1 -0
  29. package/dist/about.d.ts +212 -0
  30. package/dist/about.js +136 -0
  31. package/dist/about.js.map +1 -0
  32. package/dist/agentIcons.d.ts +33 -0
  33. package/dist/agentIcons.js +36 -0
  34. package/dist/agentIcons.js.map +1 -0
  35. package/dist/automation/Automation.d.ts +35 -0
  36. package/dist/automation/Automation.js +268 -0
  37. package/dist/automation/Automation.js.map +1 -0
  38. package/dist/automation/RunView.d.ts +25 -0
  39. package/dist/automation/RunView.js +187 -0
  40. package/dist/automation/RunView.js.map +1 -0
  41. package/dist/automation/cron.d.ts +41 -0
  42. package/dist/automation/cron.js +169 -0
  43. package/dist/automation/cron.js.map +1 -0
  44. package/dist/automation/marks.js +121 -0
  45. package/dist/automation/marks.js.map +1 -0
  46. package/dist/automation/messages.d.ts +113 -0
  47. package/dist/automation/messages.js +113 -0
  48. package/dist/automation/messages.js.map +1 -0
  49. package/dist/automation/record.d.ts +47 -0
  50. package/dist/automation/record.js +177 -0
  51. package/dist/automation/record.js.map +1 -0
  52. package/dist/automation/types.d.ts +143 -0
  53. package/dist/automation/when.d.ts +36 -0
  54. package/dist/automation/when.js +168 -0
  55. package/dist/automation/when.js.map +1 -0
  56. package/dist/blocks.d.ts +185 -0
  57. package/dist/browser.js +292 -0
  58. package/dist/browser.js.map +1 -0
  59. package/dist/call.d.ts +89 -0
  60. package/dist/call.js +218 -0
  61. package/dist/call.js.map +1 -0
  62. package/dist/channelParts.js +26 -0
  63. package/dist/channelParts.js.map +1 -0
  64. package/dist/classes.js +8 -3
  65. package/dist/classes.js.map +1 -0
  66. package/dist/client.d.ts +146 -54
  67. package/dist/client.js +204 -1
  68. package/dist/client.js.map +1 -0
  69. package/dist/conversationFiles.js +46 -0
  70. package/dist/conversationFiles.js.map +1 -0
  71. package/dist/credentials.d.ts +45 -0
  72. package/dist/credentials.js +98 -0
  73. package/dist/credentials.js.map +1 -0
  74. package/dist/dev.js +17 -0
  75. package/dist/dev.js.map +1 -0
  76. package/dist/es.d.ts +17 -0
  77. package/dist/es.js +382 -0
  78. package/dist/es.js.map +1 -0
  79. package/dist/files.d.ts +21 -0
  80. package/dist/files.js +214 -0
  81. package/dist/files.js.map +1 -0
  82. package/dist/frames.d.ts +115 -0
  83. package/dist/frames.js +219 -0
  84. package/dist/frames.js.map +1 -0
  85. package/dist/icons.js +29 -0
  86. package/dist/icons.js.map +1 -0
  87. package/dist/index.d.ts +63 -60
  88. package/dist/index.js +59 -45
  89. package/dist/kit/AudioPlayer.d.ts +20 -0
  90. package/dist/kit/AudioPlayer.js +116 -0
  91. package/dist/kit/AudioPlayer.js.map +1 -0
  92. package/dist/kit/Button.d.ts +29 -0
  93. package/dist/kit/Button.js +59 -0
  94. package/dist/kit/Button.js.map +1 -0
  95. package/dist/kit/Card.d.ts +16 -0
  96. package/dist/kit/Card.js +36 -0
  97. package/dist/kit/Card.js.map +1 -0
  98. package/dist/kit/Chart.js +152 -0
  99. package/dist/kit/Chart.js.map +1 -0
  100. package/dist/kit/Choices.d.ts +21 -0
  101. package/dist/kit/Choices.js +99 -0
  102. package/dist/kit/Choices.js.map +1 -0
  103. package/dist/kit/Combobox.d.ts +26 -0
  104. package/dist/kit/Combobox.js +190 -0
  105. package/dist/kit/Combobox.js.map +1 -0
  106. package/dist/kit/DateField.d.ts +17 -0
  107. package/dist/kit/DateField.js +133 -0
  108. package/dist/kit/DateField.js.map +1 -0
  109. package/dist/kit/Field.d.ts +40 -0
  110. package/dist/kit/Field.js +98 -0
  111. package/dist/kit/Field.js.map +1 -0
  112. package/dist/kit/FileField.d.ts +113 -0
  113. package/dist/kit/FileField.js +341 -0
  114. package/dist/kit/FileField.js.map +1 -0
  115. package/dist/kit/FileMark.d.ts +15 -0
  116. package/dist/kit/FileMark.js +39 -0
  117. package/dist/kit/FileMark.js.map +1 -0
  118. package/dist/kit/Inputs.d.ts +59 -0
  119. package/dist/kit/Inputs.js +205 -0
  120. package/dist/kit/Inputs.js.map +1 -0
  121. package/dist/kit/List.d.ts +47 -0
  122. package/dist/kit/List.js +85 -0
  123. package/dist/kit/List.js.map +1 -0
  124. package/dist/kit/Mark.d.ts +30 -0
  125. package/dist/kit/Mark.js +27 -0
  126. package/dist/kit/Mark.js.map +1 -0
  127. package/dist/kit/MarkStack.d.ts +15 -0
  128. package/dist/kit/MarkStack.js +26 -0
  129. package/dist/kit/MarkStack.js.map +1 -0
  130. package/dist/kit/Note.d.ts +11 -0
  131. package/dist/kit/Note.js +31 -0
  132. package/dist/kit/Note.js.map +1 -0
  133. package/dist/kit/Popover.js +90 -0
  134. package/dist/kit/Popover.js.map +1 -0
  135. package/dist/kit/RangeField.d.ts +14 -0
  136. package/dist/kit/RangeField.js +47 -0
  137. package/dist/kit/RangeField.js.map +1 -0
  138. package/dist/kit/RatingField.d.ts +14 -0
  139. package/dist/kit/RatingField.js +50 -0
  140. package/dist/kit/RatingField.js.map +1 -0
  141. package/dist/kit/Stat.d.ts +26 -0
  142. package/dist/kit/Stat.js +46 -0
  143. package/dist/kit/Stat.js.map +1 -0
  144. package/dist/kit/Switch.d.ts +14 -0
  145. package/dist/kit/Switch.js +21 -0
  146. package/dist/kit/Switch.js.map +1 -0
  147. package/dist/kit/Tag.d.ts +16 -0
  148. package/dist/kit/Tag.js +20 -0
  149. package/dist/kit/Tag.js.map +1 -0
  150. package/dist/kit/Tile.d.ts +34 -0
  151. package/dist/kit/Tile.js +52 -0
  152. package/dist/kit/Tile.js.map +1 -0
  153. package/dist/kit/TimeField.d.ts +31 -0
  154. package/dist/kit/TimeField.js +109 -0
  155. package/dist/kit/TimeField.js.map +1 -0
  156. package/dist/kit/context.d.ts +22 -0
  157. package/dist/kit/context.js +46 -0
  158. package/dist/kit/context.js.map +1 -0
  159. package/dist/kit/dates.d.ts +14 -0
  160. package/dist/kit/dates.js +129 -0
  161. package/dist/kit/dates.js.map +1 -0
  162. package/dist/kit/messages.d.ts +99 -0
  163. package/dist/kit/messages.js +66 -0
  164. package/dist/kit/messages.js.map +1 -0
  165. package/dist/kit/numbers.d.ts +12 -0
  166. package/dist/kit/numbers.js +40 -0
  167. package/dist/kit/numbers.js.map +1 -0
  168. package/dist/kit/options.d.ts +10 -0
  169. package/dist/kit/options.js +23 -0
  170. package/dist/kit/options.js.map +1 -0
  171. package/dist/kit/uploads.d.ts +42 -0
  172. package/dist/kit/uploads.js +165 -0
  173. package/dist/kit/uploads.js.map +1 -0
  174. package/dist/kit/waveform.js +76 -0
  175. package/dist/kit/waveform.js.map +1 -0
  176. package/dist/locale.d.ts +1 -0
  177. package/dist/locale.js +1 -0
  178. package/dist/markdown.js +84 -0
  179. package/dist/markdown.js.map +1 -0
  180. package/dist/marks.js +217 -0
  181. package/dist/marks.js.map +1 -0
  182. package/dist/reveal.js +48 -0
  183. package/dist/reveal.js.map +1 -0
  184. package/dist/stepGlyphs.js +62 -0
  185. package/dist/stepGlyphs.js.map +1 -0
  186. package/dist/surface/Form.js +264 -0
  187. package/dist/surface/Form.js.map +1 -0
  188. package/dist/surface/Markdown.js +42 -0
  189. package/dist/surface/Markdown.js.map +1 -0
  190. package/dist/surface/Surface.d.ts +31 -17
  191. package/dist/surface/Surface.js +480 -57
  192. package/dist/surface/Surface.js.map +1 -0
  193. package/dist/surface/scope.d.ts +32 -0
  194. package/dist/surface/scope.js +23 -0
  195. package/dist/surface/scope.js.map +1 -0
  196. package/dist/surface/values.d.ts +44 -0
  197. package/dist/surface/values.js +237 -0
  198. package/dist/surface/values.js.map +1 -0
  199. package/dist/tint.d.ts +10 -0
  200. package/dist/tint.js +19 -0
  201. package/dist/tint.js.map +1 -0
  202. package/dist/types.d.ts +541 -0
  203. package/dist/types.js +16 -0
  204. package/dist/types.js.map +1 -0
  205. package/dist/useAgentFace.d.ts +18 -0
  206. package/dist/useAgentFace.js +45 -0
  207. package/dist/useAgentFace.js.map +1 -0
  208. package/dist/useCall.d.ts +39 -0
  209. package/dist/useCall.js +273 -0
  210. package/dist/useCall.js.map +1 -0
  211. package/dist/useConversation.d.ts +77 -0
  212. package/dist/useConversation.js +523 -0
  213. package/dist/useConversation.js.map +1 -0
  214. package/dist/useDictation.d.ts +17 -0
  215. package/dist/useDictation.js +68 -0
  216. package/dist/useDictation.js.map +1 -0
  217. package/dist/useLive.d.ts +26 -0
  218. package/dist/useLive.js +88 -0
  219. package/dist/useLive.js.map +1 -0
  220. package/dist/usePolled.js +68 -0
  221. package/dist/usePolled.js.map +1 -0
  222. package/dist/voice/Orb.d.ts +10 -9
  223. package/dist/voice/Orb.js +43 -39
  224. package/dist/voice/Orb.js.map +1 -0
  225. package/dist/voice/StillOrb.js +33 -0
  226. package/dist/voice/StillOrb.js.map +1 -0
  227. package/dist/voice/WebGLOrb.js +98 -0
  228. package/dist/voice/WebGLOrb.js.map +1 -0
  229. package/dist/voice/fluidDots.js +161 -0
  230. package/dist/voice/fluidDots.js.map +1 -0
  231. package/dist/voice/motion.js +84 -0
  232. package/dist/voice/motion.js.map +1 -0
  233. package/dist/voice/orbs.d.ts +32 -0
  234. package/dist/voice/orbs.js +16 -0
  235. package/dist/voice/orbs.js.map +1 -0
  236. package/dist/voice/useReducedMotion.js +16 -16
  237. package/dist/voice/useReducedMotion.js.map +1 -0
  238. package/dist/voice/wave.js +116 -0
  239. package/dist/voice/wave.js.map +1 -0
  240. package/dist/voice/webgl.js +177 -0
  241. package/dist/voice/webgl.js.map +1 -0
  242. package/dist/widget.js +284 -8
  243. package/package.json +49 -39
  244. package/src/AgentAbout.tsx +1621 -0
  245. package/src/AgentCard.tsx +123 -0
  246. package/src/AgentChat.tsx +1812 -0
  247. package/src/AgentSpace.tsx +540 -0
  248. package/src/AgentTasks.tsx +163 -0
  249. package/src/BrowserView.tsx +442 -0
  250. package/src/FileView.tsx +620 -0
  251. package/src/Modes.tsx +112 -0
  252. package/src/VoiceCall.tsx +411 -0
  253. package/src/about.ts +355 -0
  254. package/src/agentIcons.ts +56 -0
  255. package/src/automation/Automation.tsx +308 -0
  256. package/src/automation/RunView.tsx +213 -0
  257. package/src/automation/cron.ts +196 -0
  258. package/src/automation/marks.tsx +144 -0
  259. package/src/automation/messages.ts +231 -0
  260. package/src/automation/record.ts +206 -0
  261. package/src/automation/types.ts +146 -0
  262. package/src/automation/when.ts +195 -0
  263. package/src/blocks.ts +249 -0
  264. package/src/browser.ts +334 -0
  265. package/src/call.ts +300 -0
  266. package/src/channelParts.ts +17 -0
  267. package/src/classes.ts +10 -0
  268. package/src/client.ts +397 -0
  269. package/src/conversationFiles.ts +54 -0
  270. package/src/credentials.ts +158 -0
  271. package/src/dev.ts +20 -0
  272. package/src/es.ts +423 -0
  273. package/src/files.ts +238 -0
  274. package/src/frames.ts +291 -0
  275. package/src/icons.tsx +49 -0
  276. package/src/index.ts +271 -0
  277. package/src/kit/AudioPlayer.tsx +129 -0
  278. package/src/kit/Button.tsx +97 -0
  279. package/src/kit/Card.tsx +47 -0
  280. package/src/kit/Chart.tsx +129 -0
  281. package/src/kit/Choices.tsx +131 -0
  282. package/src/kit/Combobox.tsx +247 -0
  283. package/src/kit/DateField.tsx +156 -0
  284. package/src/kit/Field.tsx +137 -0
  285. package/src/kit/FileField.tsx +492 -0
  286. package/src/kit/FileMark.tsx +56 -0
  287. package/src/kit/Inputs.tsx +250 -0
  288. package/src/kit/List.tsx +135 -0
  289. package/src/kit/Mark.tsx +64 -0
  290. package/src/kit/MarkStack.tsx +29 -0
  291. package/src/kit/Note.tsx +42 -0
  292. package/src/kit/Popover.tsx +121 -0
  293. package/src/kit/RangeField.tsx +53 -0
  294. package/src/kit/RatingField.tsx +62 -0
  295. package/src/kit/Stat.tsx +60 -0
  296. package/src/kit/Switch.tsx +28 -0
  297. package/src/kit/Tag.tsx +32 -0
  298. package/src/kit/Tile.tsx +74 -0
  299. package/src/kit/TimeField.tsx +157 -0
  300. package/src/kit/context.tsx +246 -0
  301. package/src/kit/dates.ts +150 -0
  302. package/src/kit/messages.ts +160 -0
  303. package/src/kit/numbers.ts +44 -0
  304. package/src/kit/options.ts +30 -0
  305. package/src/kit/uploads.ts +244 -0
  306. package/src/kit/waveform.ts +84 -0
  307. package/src/locale.ts +6 -0
  308. package/src/markdown.ts +69 -0
  309. package/src/marks.tsx +328 -0
  310. package/src/reveal.ts +52 -0
  311. package/src/stepGlyphs.ts +83 -0
  312. package/src/styles.css +6970 -0
  313. package/src/surface/Form.tsx +299 -0
  314. package/src/surface/Markdown.tsx +55 -0
  315. package/src/surface/Surface.tsx +605 -0
  316. package/src/surface/scope.ts +82 -0
  317. package/src/surface/values.ts +361 -0
  318. package/src/tint.ts +14 -0
  319. package/src/types.ts +604 -0
  320. package/src/useAgentFace.ts +47 -0
  321. package/src/useCall.ts +292 -0
  322. package/src/useConversation.ts +627 -0
  323. package/src/useDictation.ts +83 -0
  324. package/src/useLive.ts +115 -0
  325. package/src/usePolled.ts +60 -0
  326. package/src/voice/Orb.tsx +45 -0
  327. package/src/voice/StillOrb.tsx +29 -0
  328. package/src/voice/WebGLOrb.tsx +98 -0
  329. package/src/voice/fluidDots.tsx +171 -0
  330. package/src/voice/motion.ts +112 -0
  331. package/src/voice/orbs.ts +39 -0
  332. package/src/voice/useReducedMotion.ts +24 -0
  333. package/src/voice/wave.tsx +129 -0
  334. package/src/voice/webgl.ts +209 -0
  335. package/src/widget/css.d.ts +5 -0
  336. package/src/widget/element.tsx +535 -0
  337. package/src/widget/index.ts +10 -0
  338. package/src/widget/mount.ts +27 -0
  339. package/src/widget/widget.css +253 -0
  340. package/dist/SignalcoreProvider.d.ts +0 -113
  341. package/dist/SignalcoreProvider.js +0 -84
  342. package/dist/automations/AppMarks.d.ts +0 -11
  343. package/dist/automations/AppMarks.js +0 -18
  344. package/dist/automations/AutomationCard.d.ts +0 -27
  345. package/dist/automations/AutomationCard.js +0 -53
  346. package/dist/automations/AutomationsWindow.d.ts +0 -38
  347. package/dist/automations/AutomationsWindow.js +0 -57
  348. package/dist/automations/Card.d.ts +0 -46
  349. package/dist/automations/Card.js +0 -45
  350. package/dist/automations/ScheduleMarks.d.ts +0 -13
  351. package/dist/automations/ScheduleMarks.js +0 -24
  352. package/dist/automations/presentationIcons.d.ts +0 -7
  353. package/dist/automations/presentationIcons.js +0 -67
  354. package/dist/automations/schedule.d.ts +0 -25
  355. package/dist/automations/schedule.js +0 -59
  356. package/dist/automations/time.d.ts +0 -3
  357. package/dist/automations/time.js +0 -25
  358. package/dist/browser/BrowserView.d.ts +0 -43
  359. package/dist/browser/BrowserView.js +0 -94
  360. package/dist/browser/room.d.ts +0 -21
  361. package/dist/browser/room.js +0 -33
  362. package/dist/browser/useBrowserSession.d.ts +0 -17
  363. package/dist/browser/useBrowserSession.js +0 -67
  364. package/dist/builder/BuilderChat.d.ts +0 -32
  365. package/dist/builder/BuilderChat.js +0 -41
  366. package/dist/builder/BuilderTranscript.d.ts +0 -49
  367. package/dist/builder/BuilderTranscript.js +0 -62
  368. package/dist/builder/StatusLine.d.ts +0 -8
  369. package/dist/builder/StatusLine.js +0 -17
  370. package/dist/builder/answer.d.ts +0 -7
  371. package/dist/builder/answer.js +0 -8
  372. package/dist/builder/blocks.d.ts +0 -31
  373. package/dist/builder/blocks.js +0 -74
  374. package/dist/builder/items.d.ts +0 -15
  375. package/dist/builder/items.js +0 -21
  376. package/dist/builder/steps.d.ts +0 -20
  377. package/dist/builder/steps.js +0 -120
  378. package/dist/builder/time.d.ts +0 -4
  379. package/dist/builder/time.js +0 -24
  380. package/dist/builder/useBuildSession.d.ts +0 -36
  381. package/dist/builder/useBuildSession.js +0 -130
  382. package/dist/builder/workingOn.d.ts +0 -7
  383. package/dist/builder/workingOn.js +0 -15
  384. package/dist/chat/AgentChat.d.ts +0 -37
  385. package/dist/chat/AgentChat.js +0 -21
  386. package/dist/chat/ChatView.d.ts +0 -25
  387. package/dist/chat/ChatView.js +0 -34
  388. package/dist/chat/Composer.d.ts +0 -20
  389. package/dist/chat/Composer.js +0 -22
  390. package/dist/chat/MessageRow.d.ts +0 -22
  391. package/dist/chat/MessageRow.js +0 -32
  392. package/dist/chat/arrival.d.ts +0 -15
  393. package/dist/chat/arrival.js +0 -25
  394. package/dist/chat/history.d.ts +0 -24
  395. package/dist/chat/history.js +0 -45
  396. package/dist/chat/moments.d.ts +0 -25
  397. package/dist/chat/moments.js +0 -72
  398. package/dist/chat/types.d.ts +0 -12
  399. package/dist/chat/types.js +0 -1
  400. package/dist/chat/useComposer.d.ts +0 -46
  401. package/dist/chat/useComposer.js +0 -62
  402. package/dist/chat/useConversation.d.ts +0 -35
  403. package/dist/chat/useConversation.js +0 -71
  404. package/dist/chat/useStickToBottom.d.ts +0 -9
  405. package/dist/chat/useStickToBottom.js +0 -33
  406. package/dist/chat/useTurns.d.ts +0 -49
  407. package/dist/chat/useTurns.js +0 -111
  408. package/dist/classes.d.ts +0 -2
  409. package/dist/development.d.ts +0 -5
  410. package/dist/development.js +0 -8
  411. package/dist/flow/FlowWindow.d.ts +0 -42
  412. package/dist/flow/FlowWindow.js +0 -126
  413. package/dist/flow/index.d.ts +0 -16
  414. package/dist/flow/index.js +0 -16
  415. package/dist/flow/kinds.d.ts +0 -23
  416. package/dist/flow/kinds.js +0 -48
  417. package/dist/flow/map.d.ts +0 -44
  418. package/dist/flow/map.js +0 -225
  419. package/dist/flow/nodePaths.d.ts +0 -7
  420. package/dist/flow/nodePaths.js +0 -17
  421. package/dist/flow/relations.d.ts +0 -42
  422. package/dist/flow/relations.js +0 -174
  423. package/dist/host.d.ts +0 -124
  424. package/dist/host.js +0 -1
  425. package/dist/live/LiveView.d.ts +0 -28
  426. package/dist/live/LiveView.js +0 -55
  427. package/dist/live/capture.d.ts +0 -20
  428. package/dist/live/capture.js +0 -100
  429. package/dist/live/follow.d.ts +0 -26
  430. package/dist/live/follow.js +0 -72
  431. package/dist/live/paint.d.ts +0 -13
  432. package/dist/live/paint.js +0 -77
  433. package/dist/live/useLiveStream.d.ts +0 -16
  434. package/dist/live/useLiveStream.js +0 -57
  435. package/dist/look.d.ts +0 -33
  436. package/dist/look.js +0 -241
  437. package/dist/messages/en.d.ts +0 -3
  438. package/dist/messages/en.js +0 -251
  439. package/dist/messages/es.d.ts +0 -3
  440. package/dist/messages/es.js +0 -251
  441. package/dist/messages/index.d.ts +0 -16
  442. package/dist/messages/index.js +0 -33
  443. package/dist/messages/types.d.ts +0 -246
  444. package/dist/messages/types.js +0 -1
  445. package/dist/parts/Button.d.ts +0 -18
  446. package/dist/parts/Button.js +0 -17
  447. package/dist/parts/Icon.d.ts +0 -39
  448. package/dist/parts/Icon.js +0 -37
  449. package/dist/parts/Input.d.ts +0 -6
  450. package/dist/parts/Input.js +0 -11
  451. package/dist/parts/Spinner.d.ts +0 -2
  452. package/dist/parts/Spinner.js +0 -7
  453. package/dist/patterns.d.ts +0 -15
  454. package/dist/patterns.js +0 -5
  455. package/dist/presets.d.ts +0 -82
  456. package/dist/presets.js +0 -81
  457. package/dist/primitives.d.ts +0 -22
  458. package/dist/primitives.js +0 -58
  459. package/dist/request/RequestCard.d.ts +0 -34
  460. package/dist/request/RequestCard.js +0 -101
  461. package/dist/request/approval/ApprovalPreview.d.ts +0 -5
  462. package/dist/request/approval/ApprovalPreview.js +0 -27
  463. package/dist/request/approval/shapes.d.ts +0 -32
  464. package/dist/request/approval/shapes.js +0 -68
  465. package/dist/request/apps.d.ts +0 -11
  466. package/dist/request/apps.js +0 -27
  467. package/dist/request/cards.d.ts +0 -12
  468. package/dist/request/cards.js +0 -24
  469. package/dist/request/deliver.d.ts +0 -12
  470. package/dist/request/deliver.js +0 -21
  471. package/dist/request/handOver.d.ts +0 -18
  472. package/dist/request/handOver.js +0 -33
  473. package/dist/request/kinds/Approval.d.ts +0 -3
  474. package/dist/request/kinds/Approval.js +0 -9
  475. package/dist/request/kinds/Choice.d.ts +0 -3
  476. package/dist/request/kinds/Choice.js +0 -8
  477. package/dist/request/kinds/Connect.d.ts +0 -9
  478. package/dist/request/kinds/Connect.js +0 -119
  479. package/dist/request/kinds/FreeText.d.ts +0 -3
  480. package/dist/request/kinds/FreeText.js +0 -20
  481. package/dist/request/kinds/HandOver.d.ts +0 -13
  482. package/dist/request/kinds/HandOver.js +0 -20
  483. package/dist/request/kinds/Secret.d.ts +0 -7
  484. package/dist/request/kinds/Secret.js +0 -49
  485. package/dist/request/kinds/Upload.d.ts +0 -6
  486. package/dist/request/kinds/Upload.js +0 -47
  487. package/dist/request/types.d.ts +0 -83
  488. package/dist/request/types.js +0 -1
  489. package/dist/safeUrl.d.ts +0 -6
  490. package/dist/safeUrl.js +0 -8
  491. package/dist/stream/builder.d.ts +0 -176
  492. package/dist/stream/builder.js +0 -202
  493. package/dist/stream/reduce.d.ts +0 -51
  494. package/dist/stream/reduce.js +0 -58
  495. package/dist/stream/untilAborted.d.ts +0 -7
  496. package/dist/stream/untilAborted.js +0 -32
  497. package/dist/stream/useRunStream.d.ts +0 -26
  498. package/dist/stream/useRunStream.js +0 -137
  499. package/dist/styles.css +0 -2318
  500. package/dist/surface/HostNode.d.ts +0 -14
  501. package/dist/surface/HostNode.js +0 -30
  502. package/dist/surface/Node.d.ts +0 -7
  503. package/dist/surface/Node.js +0 -49
  504. package/dist/surface/SurfaceBoundary.d.ts +0 -26
  505. package/dist/surface/SurfaceBoundary.js +0 -20
  506. package/dist/surface/bindings.d.ts +0 -14
  507. package/dist/surface/bindings.js +0 -37
  508. package/dist/surface/check.d.ts +0 -27
  509. package/dist/surface/check.js +0 -102
  510. package/dist/surface/format.d.ts +0 -10
  511. package/dist/surface/format.js +0 -32
  512. package/dist/surface/hosts.d.ts +0 -6
  513. package/dist/surface/hosts.js +0 -11
  514. package/dist/surface/scene.d.ts +0 -21
  515. package/dist/surface/scene.js +0 -8
  516. package/dist/surface/templates/Browser.d.ts +0 -6
  517. package/dist/surface/templates/Browser.js +0 -11
  518. package/dist/surface/templates/Chart.d.ts +0 -6
  519. package/dist/surface/templates/Chart.js +0 -13
  520. package/dist/surface/templates/Choices.d.ts +0 -3
  521. package/dist/surface/templates/Choices.js +0 -12
  522. package/dist/surface/templates/Form.d.ts +0 -3
  523. package/dist/surface/templates/Form.js +0 -44
  524. package/dist/surface/templates/KeyValue.d.ts +0 -3
  525. package/dist/surface/templates/KeyValue.js +0 -7
  526. package/dist/surface/templates/Layout.d.ts +0 -5
  527. package/dist/surface/templates/Layout.js +0 -16
  528. package/dist/surface/templates/Live.d.ts +0 -6
  529. package/dist/surface/templates/Live.js +0 -9
  530. package/dist/surface/templates/Media.d.ts +0 -5
  531. package/dist/surface/templates/Media.js +0 -13
  532. package/dist/surface/templates/Slots.d.ts +0 -3
  533. package/dist/surface/templates/Slots.js +0 -19
  534. package/dist/surface/templates/Table.d.ts +0 -3
  535. package/dist/surface/templates/Table.js +0 -12
  536. package/dist/surface/templates/Text.d.ts +0 -4
  537. package/dist/surface/templates/Text.js +0 -15
  538. package/dist/surface/templates/index.d.ts +0 -7
  539. package/dist/surface/templates/index.js +0 -32
  540. package/dist/surface/types.d.ts +0 -68
  541. package/dist/surface/types.js +0 -6
  542. package/dist/theme.d.ts +0 -62
  543. package/dist/theme.js +0 -9
  544. package/dist/useTokens.d.ts +0 -7
  545. package/dist/useTokens.js +0 -41
  546. package/dist/voice/VoiceWindow.d.ts +0 -18
  547. package/dist/voice/VoiceWindow.js +0 -35
  548. package/dist/voice/index.d.ts +0 -13
  549. package/dist/voice/index.js +0 -12
  550. package/dist/voice/meter.d.ts +0 -16
  551. package/dist/voice/meter.js +0 -52
  552. package/dist/voice/orbColors.d.ts +0 -16
  553. package/dist/voice/orbColors.js +0 -75
  554. package/dist/voice/pushable.d.ts +0 -16
  555. package/dist/voice/pushable.js +0 -56
  556. package/dist/voice/useDictation.d.ts +0 -24
  557. package/dist/voice/useDictation.js +0 -60
  558. package/dist/voice/useReducedMotion.d.ts +0 -5
  559. package/dist/voice/useVoice.d.ts +0 -70
  560. package/dist/voice/useVoice.js +0 -197
  561. package/dist/voice/useVoicePrimitives.d.ts +0 -7
  562. package/dist/voice/useVoicePrimitives.js +0 -11
  563. package/dist/voice/voice.d.ts +0 -55
  564. package/dist/voice/voice.js +0 -9
  565. package/dist/voice/webSpeech.d.ts +0 -33
  566. package/dist/voice/webSpeech.js +0 -258
  567. package/dist/widget.js.map +0 -1
  568. package/dist/windows/AgentSpace.d.ts +0 -78
  569. package/dist/windows/AgentSpace.js +0 -135
  570. package/dist/windows/Captions.d.ts +0 -13
  571. package/dist/windows/Captions.js +0 -22
  572. package/dist/windows/Dock.d.ts +0 -37
  573. package/dist/windows/Dock.js +0 -22
  574. package/dist/windows/Journal.d.ts +0 -15
  575. package/dist/windows/Journal.js +0 -19
  576. package/dist/windows/KindMark.d.ts +0 -7
  577. package/dist/windows/KindMark.js +0 -31
  578. package/dist/windows/Pending.d.ts +0 -8
  579. package/dist/windows/Pending.js +0 -17
  580. package/dist/windows/Stage.d.ts +0 -18
  581. package/dist/windows/Stage.js +0 -21
  582. package/dist/windows/StatusLabel.d.ts +0 -9
  583. package/dist/windows/StatusLabel.js +0 -7
  584. package/dist/windows/Strip.d.ts +0 -17
  585. package/dist/windows/Strip.js +0 -42
  586. package/dist/windows/SurfaceWindow.d.ts +0 -20
  587. package/dist/windows/SurfaceWindow.js +0 -12
  588. package/dist/windows/WindowFrame.d.ts +0 -23
  589. package/dist/windows/WindowFrame.js +0 -22
  590. package/dist/windows/hearing.d.ts +0 -11
  591. package/dist/windows/hearing.js +0 -26
  592. package/dist/windows/kinds.d.ts +0 -47
  593. package/dist/windows/kinds.js +0 -28
  594. package/dist/windows/reduce.d.ts +0 -98
  595. package/dist/windows/reduce.js +0 -151
  596. package/dist/windows/registry.d.ts +0 -18
  597. package/dist/windows/registry.js +0 -61
  598. package/dist/windows/reveal.d.ts +0 -9
  599. package/dist/windows/reveal.js +0 -6
  600. package/dist/windows/space.d.ts +0 -21
  601. package/dist/windows/space.js +0 -6
  602. package/dist/windows/status.d.ts +0 -11
  603. package/dist/windows/status.js +0 -30
  604. package/dist/windows/types.d.ts +0 -15
  605. package/dist/windows/types.js +0 -1
  606. package/dist/windows/useLoaded.d.ts +0 -44
  607. package/dist/windows/useLoaded.js +0 -58
  608. package/dist/windows/useUnread.d.ts +0 -7
  609. package/dist/windows/useUnread.js +0 -21
  610. package/dist/windows/useWindows.d.ts +0 -70
  611. package/dist/windows/useWindows.js +0 -60
package/dist/reveal.js ADDED
@@ -0,0 +1,48 @@
1
+ import { useEffect, useRef, useState } from "react";
2
+ //#region src/reveal.ts
3
+ /**
4
+ * The words of a reply as they stream, shown at a reading pace. The model writes in bursts (often
5
+ * the whole answer in a second or two, after it has thought): drawn as they land they pop in
6
+ * rather than flow. Revealed a few characters a frame, faster the further behind, they flow like
7
+ * writing and never lag the stream by more than about a second.
8
+ */
9
+ /** At least this many characters a frame: about 150 a second at 60 frames. */
10
+ const MIN_STEP = 2.5;
11
+ /** How many characters to show next frame, of `total`, having shown `shown`. */
12
+ function nextShown(shown, total) {
13
+ if (shown >= total) return total;
14
+ const behind = total - shown;
15
+ return Math.min(total, shown + Math.max(MIN_STEP, behind / 60));
16
+ }
17
+ /**
18
+ * `text` as far as it is revealed: from `from` characters on, a little more each frame until all
19
+ * of it shows. Text that starts again (a new reply) starts the reveal again; `onShown` hears how
20
+ * far it got, so another reveal can go on from there.
21
+ */
22
+ function useReveal(text, from = 0, onShown) {
23
+ const [shown, setShown] = useState(() => Math.min(from, text.length));
24
+ const told = useRef(onShown);
25
+ told.current = onShown;
26
+ const visible = Math.min(shown, text.length);
27
+ useEffect(() => {
28
+ if (visible >= text.length) return void 0;
29
+ if (typeof requestAnimationFrame === "undefined") {
30
+ setShown(text.length);
31
+ return;
32
+ }
33
+ const frame = requestAnimationFrame(() => {
34
+ setShown((now) => nextShown(Math.min(now, text.length), text.length));
35
+ });
36
+ return () => {
37
+ cancelAnimationFrame(frame);
38
+ };
39
+ }, [visible, text.length]);
40
+ useEffect(() => {
41
+ told.current?.(Math.floor(visible));
42
+ }, [visible]);
43
+ return text.slice(0, Math.floor(visible));
44
+ }
45
+ //#endregion
46
+ export { MIN_STEP, nextShown, useReveal };
47
+
48
+ //# sourceMappingURL=reveal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reveal.js","names":[],"sources":["../src/reveal.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\n/**\n * The words of a reply as they stream, shown at a reading pace. The model writes in bursts (often\n * the whole answer in a second or two, after it has thought): drawn as they land they pop in\n * rather than flow. Revealed a few characters a frame, faster the further behind, they flow like\n * writing and never lag the stream by more than about a second.\n */\n\n/** At least this many characters a frame: about 150 a second at 60 frames. */\nexport const MIN_STEP = 2.5;\n/** Within about this many frames whatever is behind is shown. */\nexport const CATCH_UP = 60;\n\n/** How many characters to show next frame, of `total`, having shown `shown`. */\nexport function nextShown(shown: number, total: number): number {\n if (shown >= total) return total;\n const behind = total - shown;\n return Math.min(total, shown + Math.max(MIN_STEP, behind / CATCH_UP));\n}\n\n/**\n * `text` as far as it is revealed: from `from` characters on, a little more each frame until all\n * of it shows. Text that starts again (a new reply) starts the reveal again; `onShown` hears how\n * far it got, so another reveal can go on from there.\n */\nexport function useReveal(text: string, from = 0, onShown?: (count: number) => void): string {\n const [shown, setShown] = useState(() => Math.min(from, text.length));\n const told = useRef(onShown);\n told.current = onShown;\n const visible = Math.min(shown, text.length);\n\n useEffect(() => {\n if (visible >= text.length) return undefined;\n if (typeof requestAnimationFrame === \"undefined\") {\n setShown(text.length);\n return undefined;\n }\n const frame = requestAnimationFrame(() => {\n setShown((now) => nextShown(Math.min(now, text.length), text.length));\n });\n return () => {\n cancelAnimationFrame(frame);\n };\n }, [visible, text.length]);\n\n useEffect(() => {\n told.current?.(Math.floor(visible));\n }, [visible]);\n\n return text.slice(0, Math.floor(visible));\n}\n"],"mappings":";;;;;;;;;AAUA,MAAa,WAAW;;AAKxB,SAAgB,UAAU,OAAe,OAAuB;CAC9D,IAAI,SAAS,OAAO,OAAO;CAC3B,MAAM,SAAS,QAAQ;CACvB,OAAO,KAAK,IAAI,OAAO,QAAQ,KAAK,IAAI,UAAU,SAAA,EAAiB,CAAC;AACtE;;;;;;AAOA,SAAgB,UAAU,MAAc,OAAO,GAAG,SAA2C;CAC3F,MAAM,CAAC,OAAO,YAAY,eAAe,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC;CACpE,MAAM,OAAO,OAAO,OAAO;CAC3B,KAAK,UAAU;CACf,MAAM,UAAU,KAAK,IAAI,OAAO,KAAK,MAAM;CAE3C,gBAAgB;EACd,IAAI,WAAW,KAAK,QAAQ,OAAO,KAAA;EACnC,IAAI,OAAO,0BAA0B,aAAa;GAChD,SAAS,KAAK,MAAM;GACpB;EACF;EACA,MAAM,QAAQ,4BAA4B;GACxC,UAAU,QAAQ,UAAU,KAAK,IAAI,KAAK,KAAK,MAAM,GAAG,KAAK,MAAM,CAAC;EACtE,CAAC;EACD,aAAa;GACX,qBAAqB,KAAK;EAC5B;CACF,GAAG,CAAC,SAAS,KAAK,MAAM,CAAC;CAEzB,gBAAgB;EACd,KAAK,UAAU,KAAK,MAAM,OAAO,CAAC;CACpC,GAAG,CAAC,OAAO,CAAC;CAEZ,OAAO,KAAK,MAAM,GAAG,KAAK,MAAM,OAAO,CAAC;AAC1C"}
@@ -0,0 +1,62 @@
1
+ import { ArrowUUpLeftIcon, ArrowsDownUpIcon, BookOpenTextIcon, BookmarkSimpleIcon, CameraIcon, ChatTeardropTextIcon, CursorClickIcon, DownloadSimpleIcon, FilePlusIcon, FileTextIcon, GlobeSimpleIcon, HandIcon, MagicWandIcon, MagnifyingGlassIcon, NotePencilIcon, PaperPlaneTiltIcon, PlayIcon, PlugIcon, SlidersHorizontalIcon, TextboxIcon, VideoCameraIcon, WrenchIcon } from "@phosphor-icons/react";
2
+ //#region src/stepGlyphs.ts
3
+ /**
4
+ * A step's glyph by its action: the kind of work it is, v2's (reading, writing, changing,
5
+ * searching, running, settings, asking, remembering, an app), so the list reads at a glance. An
6
+ * action this package does not know, an agent's own among them, is work: a wrench.
7
+ */
8
+ const GLYPHS = {
9
+ show: WrenchIcon,
10
+ ask_person: ChatTeardropTextIcon,
11
+ escalate: ChatTeardropTextIcon,
12
+ notify: ChatTeardropTextIcon,
13
+ search_files: MagnifyingGlassIcon,
14
+ remember: BookmarkSimpleIcon,
15
+ recall: BookmarkSimpleIcon,
16
+ load_skill: FileTextIcon,
17
+ data_find: MagnifyingGlassIcon,
18
+ data_add: FilePlusIcon,
19
+ data_update: NotePencilIcon,
20
+ squad_agents: FileTextIcon,
21
+ create_agent: FilePlusIcon,
22
+ update_agent: NotePencilIcon,
23
+ set_tools: SlidersHorizontalIcon,
24
+ test_automation: PlayIcon,
25
+ switch_automation: SlidersHorizontalIcon,
26
+ run_automation: PlayIcon,
27
+ find_apps: MagnifyingGlassIcon,
28
+ connect_app: PlugIcon,
29
+ app_tools: PlugIcon,
30
+ app_events: PlugIcon,
31
+ give_app: PlugIcon,
32
+ take_app: PlugIcon,
33
+ read_code: FileTextIcon,
34
+ write_code: FilePlusIcon,
35
+ delete_code: NotePencilIcon,
36
+ run_action: PlayIcon,
37
+ create_table: FilePlusIcon,
38
+ give_table: SlidersHorizontalIcon,
39
+ take_table: SlidersHorizontalIcon,
40
+ ask_key: ChatTeardropTextIcon,
41
+ ask_builder: MagicWandIcon,
42
+ agent_files: MagnifyingGlassIcon,
43
+ keep_agent_file: FilePlusIcon,
44
+ browser_open: GlobeSimpleIcon,
45
+ browser_read: BookOpenTextIcon,
46
+ browser_click: CursorClickIcon,
47
+ browser_fill: TextboxIcon,
48
+ browser_scroll: ArrowsDownUpIcon,
49
+ browser_back: ArrowUUpLeftIcon,
50
+ browser_submit: PaperPlaneTiltIcon,
51
+ browser_hand_over: HandIcon,
52
+ browser_attach: FilePlusIcon,
53
+ browser_download: DownloadSimpleIcon,
54
+ browser_screenshot: CameraIcon,
55
+ browser_record: VideoCameraIcon,
56
+ browser_fill_key: TextboxIcon
57
+ };
58
+ const stepGlyph = (action) => GLYPHS[action] ?? WrenchIcon;
59
+ //#endregion
60
+ export { stepGlyph };
61
+
62
+ //# sourceMappingURL=stepGlyphs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stepGlyphs.js","names":[],"sources":["../src/stepGlyphs.ts"],"sourcesContent":["import {\n ArrowUUpLeftIcon,\n ArrowsDownUpIcon,\n BookOpenTextIcon,\n BookmarkSimpleIcon,\n CameraIcon,\n ChatTeardropTextIcon,\n CursorClickIcon,\n DownloadSimpleIcon,\n FilePlusIcon,\n FileTextIcon,\n GlobeSimpleIcon,\n HandIcon,\n MagicWandIcon,\n MagnifyingGlassIcon,\n NotePencilIcon,\n PaperPlaneTiltIcon,\n PlayIcon,\n PlugIcon,\n SlidersHorizontalIcon,\n TextboxIcon,\n VideoCameraIcon,\n WrenchIcon,\n type Icon,\n} from \"@phosphor-icons/react\";\n\n/**\n * A step's glyph by its action: the kind of work it is, v2's (reading, writing, changing,\n * searching, running, settings, asking, remembering, an app), so the list reads at a glance. An\n * action this package does not know, an agent's own among them, is work: a wrench.\n */\nconst GLYPHS: Readonly<Record<string, Icon>> = {\n show: WrenchIcon,\n ask_person: ChatTeardropTextIcon,\n escalate: ChatTeardropTextIcon,\n notify: ChatTeardropTextIcon,\n search_files: MagnifyingGlassIcon,\n remember: BookmarkSimpleIcon,\n recall: BookmarkSimpleIcon,\n load_skill: FileTextIcon,\n data_find: MagnifyingGlassIcon,\n data_add: FilePlusIcon,\n data_update: NotePencilIcon,\n squad_agents: FileTextIcon,\n create_agent: FilePlusIcon,\n update_agent: NotePencilIcon,\n set_tools: SlidersHorizontalIcon,\n test_automation: PlayIcon,\n switch_automation: SlidersHorizontalIcon,\n run_automation: PlayIcon,\n find_apps: MagnifyingGlassIcon,\n connect_app: PlugIcon,\n app_tools: PlugIcon,\n app_events: PlugIcon,\n give_app: PlugIcon,\n take_app: PlugIcon,\n read_code: FileTextIcon,\n write_code: FilePlusIcon,\n delete_code: NotePencilIcon,\n run_action: PlayIcon,\n create_table: FilePlusIcon,\n give_table: SlidersHorizontalIcon,\n take_table: SlidersHorizontalIcon,\n ask_key: ChatTeardropTextIcon,\n ask_builder: MagicWandIcon,\n agent_files: MagnifyingGlassIcon,\n keep_agent_file: FilePlusIcon,\n browser_open: GlobeSimpleIcon,\n browser_read: BookOpenTextIcon,\n browser_click: CursorClickIcon,\n browser_fill: TextboxIcon,\n browser_scroll: ArrowsDownUpIcon,\n browser_back: ArrowUUpLeftIcon,\n browser_submit: PaperPlaneTiltIcon,\n browser_hand_over: HandIcon,\n browser_attach: FilePlusIcon,\n browser_download: DownloadSimpleIcon,\n browser_screenshot: CameraIcon,\n browser_record: VideoCameraIcon,\n browser_fill_key: TextboxIcon,\n};\n\nexport const stepGlyph = (action: string): Icon => GLYPHS[action] ?? WrenchIcon;\n"],"mappings":";;;;;;;AA+BA,MAAM,SAAyC;CAC7C,MAAM;CACN,YAAY;CACZ,UAAU;CACV,QAAQ;CACR,cAAc;CACd,UAAU;CACV,QAAQ;CACR,YAAY;CACZ,WAAW;CACX,UAAU;CACV,aAAa;CACb,cAAc;CACd,cAAc;CACd,cAAc;CACd,WAAW;CACX,iBAAiB;CACjB,mBAAmB;CACnB,gBAAgB;CAChB,WAAW;CACX,aAAa;CACb,WAAW;CACX,YAAY;CACZ,UAAU;CACV,UAAU;CACV,WAAW;CACX,YAAY;CACZ,aAAa;CACb,YAAY;CACZ,cAAc;CACd,YAAY;CACZ,YAAY;CACZ,SAAS;CACT,aAAa;CACb,aAAa;CACb,iBAAiB;CACjB,cAAc;CACd,cAAc;CACd,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,cAAc;CACd,gBAAgB;CAChB,mBAAmB;CACnB,gBAAgB;CAChB,kBAAkB;CAClB,oBAAoB;CACpB,gBAAgB;CAChB,kBAAkB;AACpB;AAEA,MAAa,aAAa,WAAyB,OAAO,WAAW"}
@@ -0,0 +1,264 @@
1
+ import { useKit } from "../kit/context.js";
2
+ import { Button } from "../kit/Button.js";
3
+ import { Field } from "../kit/Field.js";
4
+ import { FileField } from "../kit/FileField.js";
5
+ import { Chips, Choices } from "../kit/Choices.js";
6
+ import { Combobox } from "../kit/Combobox.js";
7
+ import { DateField } from "../kit/DateField.js";
8
+ import { Checkbox, NumberInput, SecretInput, TextArea, TextInput } from "../kit/Inputs.js";
9
+ import { RangeField } from "../kit/RangeField.js";
10
+ import { RatingField } from "../kit/RatingField.js";
11
+ import { DateTimeField, TimeField } from "../kit/TimeField.js";
12
+ import { useScope, useSurfaceParts } from "./scope.js";
13
+ import { filled, problemsOf, startValues } from "./values.js";
14
+ import { useRef, useState } from "react";
15
+ import { CheckIcon } from "@phosphor-icons/react";
16
+ import { jsx, jsxs } from "react/jsx-runtime";
17
+ //#region src/surface/Form.tsx
18
+ /**
19
+ * Fields to fill and the one button that sends them. It starts from what the person already sent
20
+ * when the surface was answered (and draws it so, closed), else from what the agent gave.
21
+ */
22
+ function FormView({ block }) {
23
+ const { answered } = useScope();
24
+ const mine = answered?.name === block.action ? answered.data : void 0;
25
+ return /* @__PURE__ */ jsx(Filling, {
26
+ block,
27
+ answered: mine
28
+ }, mine ? "answered" : "open");
29
+ }
30
+ /**
31
+ * The form's values, held here. Sending checks every field first: what is wrong shows under
32
+ * each (a file field also says what it still waits on: a file on its way, one that failed), the
33
+ * first such field takes the focus, and from then on the words follow the values.
34
+ */
35
+ function Filling({ block, answered }) {
36
+ const { active, onAction, files } = useScope();
37
+ const { messages, code } = useKit();
38
+ const part = useSurfaceParts();
39
+ const form = useRef(null);
40
+ const [values, setValues] = useState(() => startValues(block.fields, answered));
41
+ const [waits, setWaits] = useState({});
42
+ const [tried, setTried] = useState(false);
43
+ const check = () => ({
44
+ ...problemsOf(block.fields, values, code, messages),
45
+ ...waits
46
+ });
47
+ const problems = tried ? check() : {};
48
+ const submit = (event) => {
49
+ event.preventDefault();
50
+ if (!active) return;
51
+ const found = check();
52
+ const first = block.fields.find((field) => field.name in found);
53
+ if (first) {
54
+ setTried(true);
55
+ focusField(form.current, first.name);
56
+ return;
57
+ }
58
+ onAction(filled(block, values, code, messages, files?.known));
59
+ };
60
+ const waitOn = (name) => (problem) => {
61
+ setWaits((now) => {
62
+ if ((now[name] ?? null) === problem) return now;
63
+ const { [name]: _, ...rest } = now;
64
+ return problem === null ? rest : {
65
+ ...rest,
66
+ [name]: problem
67
+ };
68
+ });
69
+ };
70
+ return /* @__PURE__ */ jsx("form", {
71
+ ref: form,
72
+ noValidate: true,
73
+ onSubmit: submit,
74
+ part: "form",
75
+ className: part("sc-surface__form"),
76
+ children: /* @__PURE__ */ jsxs("fieldset", {
77
+ disabled: !active && !answered,
78
+ children: [block.fields.map((field) => /* @__PURE__ */ jsx(Field, {
79
+ name: field.name,
80
+ label: field.kind === "checkbox" ? void 0 : field.label,
81
+ optional: !field.required,
82
+ help: field.help,
83
+ error: problems[field.name],
84
+ group: grouped(field),
85
+ children: (ids) => /* @__PURE__ */ jsx(Control, {
86
+ field,
87
+ ids,
88
+ value: values[field.name] ?? null,
89
+ disabled: !active,
90
+ onChange: (value) => setValues((now) => ({
91
+ ...now,
92
+ [field.name]: value
93
+ })),
94
+ onWait: waitOn(field.name)
95
+ })
96
+ }, field.name)), /* @__PURE__ */ jsx("div", {
97
+ className: part("sc-surface__foot"),
98
+ children: answered ? /* @__PURE__ */ jsxs("p", {
99
+ className: part("sc-surface__sent"),
100
+ children: [/* @__PURE__ */ jsx(CheckIcon, {
101
+ "aria-hidden": true,
102
+ weight: "bold"
103
+ }), messages.sent]
104
+ }) : /* @__PURE__ */ jsx(Button, {
105
+ type: "submit",
106
+ tone: "primary",
107
+ className: part("sc-surface__submit"),
108
+ children: block.submit ?? messages.send
109
+ })
110
+ })]
111
+ })
112
+ });
113
+ }
114
+ /** Puts the focus on a field's first control that takes it. */
115
+ function focusField(form, name) {
116
+ form?.querySelector(`[data-field="${name}"] :is(input, textarea, button[tabindex="0"], button:not([tabindex]))`)?.focus();
117
+ }
118
+ /** Whether the field draws as a group of buttons rather than one control a label points at. */
119
+ function grouped({ kind, options = [], times }) {
120
+ if (kind === "select") return options.length <= 5;
121
+ if (kind === "multiselect") return options.length <= 8;
122
+ if (kind === "time") return times !== void 0;
123
+ return kind === "rating" || kind === "datetime" || kind === "file";
124
+ }
125
+ /**
126
+ * The kit's control for the field's kind, given the field's narrowing; a select or a
127
+ * multiselect by how many options it has: all in sight when few, a list to search when many.
128
+ */
129
+ function Control({ field, ids, value, disabled, onChange, onWait }) {
130
+ const { messages } = useKit();
131
+ const { files } = useScope();
132
+ const control = {
133
+ ...ids,
134
+ label: field.label ?? field.placeholder,
135
+ required: field.required,
136
+ disabled
137
+ };
138
+ const text = typeof value === "string" ? value : "";
139
+ const number = typeof value === "number" ? value : null;
140
+ const options = field.options ?? [];
141
+ switch (field.kind) {
142
+ case "text":
143
+ case "email":
144
+ case "phone":
145
+ case "url": return /* @__PURE__ */ jsx(TextInput, {
146
+ ...control,
147
+ kind: field.kind,
148
+ value: text,
149
+ onChange,
150
+ placeholder: field.placeholder
151
+ });
152
+ case "textarea": return /* @__PURE__ */ jsx(TextArea, {
153
+ ...control,
154
+ value: text,
155
+ onChange,
156
+ placeholder: field.placeholder
157
+ });
158
+ case "secret": return /* @__PURE__ */ jsx(SecretInput, {
159
+ ...control,
160
+ value: text,
161
+ onChange,
162
+ placeholder: field.placeholder
163
+ });
164
+ case "number": return /* @__PURE__ */ jsx(NumberInput, {
165
+ ...control,
166
+ value: number,
167
+ onChange,
168
+ min: field.min,
169
+ max: field.max,
170
+ step: field.step,
171
+ unit: field.unit,
172
+ placeholder: field.placeholder
173
+ });
174
+ case "checkbox": return /* @__PURE__ */ jsx(Checkbox, {
175
+ ...control,
176
+ value: value === true,
177
+ onChange,
178
+ children: field.label ?? field.placeholder
179
+ });
180
+ case "date": return /* @__PURE__ */ jsx(DateField, {
181
+ ...control,
182
+ value: text || null,
183
+ onChange,
184
+ dates: field.dates,
185
+ earliest: field.earliest,
186
+ latest: field.latest,
187
+ placeholder: field.placeholder
188
+ });
189
+ case "time": return /* @__PURE__ */ jsx(TimeField, {
190
+ ...control,
191
+ value: text || null,
192
+ onChange,
193
+ times: field.times,
194
+ placeholder: field.placeholder
195
+ });
196
+ case "datetime": return /* @__PURE__ */ jsx(DateTimeField, {
197
+ ...control,
198
+ value: text || null,
199
+ onChange,
200
+ dates: field.dates,
201
+ earliest: field.earliest,
202
+ latest: field.latest,
203
+ times: field.times
204
+ });
205
+ case "range": return /* @__PURE__ */ jsx(RangeField, {
206
+ ...control,
207
+ value: number ?? field.min ?? 0,
208
+ onChange,
209
+ min: field.min,
210
+ max: field.max,
211
+ step: field.step,
212
+ unit: field.unit
213
+ });
214
+ case "rating": return /* @__PURE__ */ jsx(RatingField, {
215
+ ...control,
216
+ value: number,
217
+ onChange,
218
+ max: field.max
219
+ });
220
+ case "select": return grouped(field) ? /* @__PURE__ */ jsx(Choices, {
221
+ ...control,
222
+ options,
223
+ value: text || null,
224
+ onChange
225
+ }) : /* @__PURE__ */ jsx(Combobox, {
226
+ ...control,
227
+ options,
228
+ value: text ? [text] : [],
229
+ multiple: false,
230
+ onChange: (ids) => onChange(ids[0] ?? null),
231
+ placeholder: field.placeholder ?? messages.pick
232
+ });
233
+ case "multiselect": {
234
+ const picked = Array.isArray(value) ? value : [];
235
+ return grouped(field) ? /* @__PURE__ */ jsx(Chips, {
236
+ ...control,
237
+ options,
238
+ value: picked,
239
+ onChange
240
+ }) : /* @__PURE__ */ jsx(Combobox, {
241
+ ...control,
242
+ options,
243
+ value: picked,
244
+ multiple: true,
245
+ onChange,
246
+ placeholder: field.placeholder ?? messages.pick
247
+ });
248
+ }
249
+ case "file": return /* @__PURE__ */ jsx(FileField, {
250
+ ...control,
251
+ value: Array.isArray(value) ? value : [],
252
+ onChange,
253
+ files,
254
+ accept: field.accept,
255
+ multiple: field.multiple,
256
+ maxMb: field.max_mb,
257
+ onWait
258
+ });
259
+ }
260
+ }
261
+ //#endregion
262
+ export { FormView };
263
+
264
+ //# sourceMappingURL=Form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.js","names":[],"sources":["../../src/surface/Form.tsx"],"sourcesContent":["import { CheckIcon } from \"@phosphor-icons/react\";\nimport { useRef, useState, type FormEvent } from \"react\";\n\nimport type { FieldValue, FormBlock, FormField } from \"../blocks\";\nimport { Button } from \"../kit/Button\";\nimport { Chips, Choices } from \"../kit/Choices\";\nimport { Combobox } from \"../kit/Combobox\";\nimport { useKit } from \"../kit/context\";\nimport { DateField } from \"../kit/DateField\";\nimport { Field, type FieldIds } from \"../kit/Field\";\nimport { FileField } from \"../kit/FileField\";\nimport { Checkbox, NumberInput, SecretInput, TextArea, TextInput } from \"../kit/Inputs\";\nimport { RangeField } from \"../kit/RangeField\";\nimport { RatingField } from \"../kit/RatingField\";\nimport { DateTimeField, TimeField } from \"../kit/TimeField\";\nimport { useScope, useSurfaceParts } from \"./scope\";\nimport { FEW_CHIPS, FEW_OPTIONS, filled, problemsOf, startValues, type Values } from \"./values\";\n\n/**\n * Fields to fill and the one button that sends them. It starts from what the person already sent\n * when the surface was answered (and draws it so, closed), else from what the agent gave.\n */\nexport function FormView({ block }: { block: FormBlock }) {\n const { answered } = useScope();\n const mine = answered?.name === block.action ? answered.data : undefined;\n // An answer that lands later starts the form again from it.\n return <Filling key={mine ? \"answered\" : \"open\"} block={block} answered={mine} />;\n}\n\n/**\n * The form's values, held here. Sending checks every field first: what is wrong shows under\n * each (a file field also says what it still waits on: a file on its way, one that failed), the\n * first such field takes the focus, and from then on the words follow the values.\n */\nfunction Filling({\n block,\n answered,\n}: {\n block: FormBlock;\n answered: Record<string, unknown> | undefined;\n}) {\n const { active, onAction, files } = useScope();\n const { messages, code } = useKit();\n const part = useSurfaceParts();\n const form = useRef<HTMLFormElement>(null);\n const [values, setValues] = useState<Values>(() => startValues(block.fields, answered));\n const [waits, setWaits] = useState<Readonly<Record<string, string>>>({});\n const [tried, setTried] = useState(false);\n const check = () => ({ ...problemsOf(block.fields, values, code, messages), ...waits });\n const problems = tried ? check() : {};\n\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!active) return;\n const found = check();\n const first = block.fields.find((field) => field.name in found);\n if (first) {\n setTried(true);\n focusField(form.current, first.name);\n return;\n }\n onAction(filled(block, values, code, messages, files?.known));\n };\n\n const waitOn = (name: string) => (problem: string | null) => {\n setWaits((now) => {\n if ((now[name] ?? null) === problem) return now;\n const { [name]: _, ...rest } = now;\n return problem === null ? rest : { ...rest, [name]: problem };\n });\n };\n\n return (\n <form ref={form} noValidate onSubmit={submit} part=\"form\" className={part(\"sc-surface__form\")}>\n {/* Answered, each control is closed on its own, so what still opens (a file sent) can. */}\n <fieldset disabled={!active && !answered}>\n {block.fields.map((field) => (\n <Field\n key={field.name}\n name={field.name}\n label={field.kind === \"checkbox\" ? undefined : field.label}\n optional={!field.required}\n help={field.help}\n error={problems[field.name]}\n group={grouped(field)}\n >\n {(ids) => (\n <Control\n field={field}\n ids={ids}\n value={values[field.name] ?? null}\n disabled={!active}\n onChange={(value) => setValues((now) => ({ ...now, [field.name]: value }))}\n onWait={waitOn(field.name)}\n />\n )}\n </Field>\n ))}\n <div className={part(\"sc-surface__foot\")}>\n {answered ? (\n <p className={part(\"sc-surface__sent\")}>\n <CheckIcon aria-hidden weight=\"bold\" />\n {messages.sent}\n </p>\n ) : (\n <Button type=\"submit\" tone=\"primary\" className={part(\"sc-surface__submit\")}>\n {block.submit ?? messages.send}\n </Button>\n )}\n </div>\n </fieldset>\n </form>\n );\n}\n\n/** Puts the focus on a field's first control that takes it. */\nfunction focusField(form: HTMLFormElement | null, name: string) {\n form\n ?.querySelector<HTMLElement>(\n `[data-field=\"${name}\"] :is(input, textarea, button[tabindex=\"0\"], button:not([tabindex]))`,\n )\n ?.focus();\n}\n\n/** Whether the field draws as a group of buttons rather than one control a label points at. */\nfunction grouped({ kind, options = [], times }: FormField): boolean {\n if (kind === \"select\") return options.length <= FEW_OPTIONS;\n if (kind === \"multiselect\") return options.length <= FEW_CHIPS;\n if (kind === \"time\") return times !== undefined;\n return kind === \"rating\" || kind === \"datetime\" || kind === \"file\";\n}\n\n/**\n * The kit's control for the field's kind, given the field's narrowing; a select or a\n * multiselect by how many options it has: all in sight when few, a list to search when many.\n */\nfunction Control({\n field,\n ids,\n value,\n disabled,\n onChange,\n onWait,\n}: {\n field: FormField;\n ids: FieldIds;\n value: FieldValue;\n disabled: boolean;\n onChange: (value: FieldValue) => void;\n onWait: (problem: string | null) => void;\n}) {\n const { messages } = useKit();\n const { files } = useScope();\n const control = {\n ...ids,\n label: field.label ?? field.placeholder,\n required: field.required,\n disabled,\n };\n const text = typeof value === \"string\" ? value : \"\";\n const number = typeof value === \"number\" ? value : null;\n const options = field.options ?? [];\n switch (field.kind) {\n case \"text\":\n case \"email\":\n case \"phone\":\n case \"url\":\n return (\n <TextInput\n {...control}\n kind={field.kind}\n value={text}\n onChange={onChange}\n placeholder={field.placeholder}\n />\n );\n case \"textarea\":\n return (\n <TextArea {...control} value={text} onChange={onChange} placeholder={field.placeholder} />\n );\n case \"secret\":\n return (\n <SecretInput\n {...control}\n value={text}\n onChange={onChange}\n placeholder={field.placeholder}\n />\n );\n case \"number\":\n return (\n <NumberInput\n {...control}\n value={number}\n onChange={onChange}\n min={field.min}\n max={field.max}\n step={field.step}\n unit={field.unit}\n placeholder={field.placeholder}\n />\n );\n case \"checkbox\":\n return (\n <Checkbox {...control} value={value === true} onChange={onChange}>\n {field.label ?? field.placeholder}\n </Checkbox>\n );\n case \"date\":\n return (\n <DateField\n {...control}\n value={text || null}\n onChange={onChange}\n dates={field.dates}\n earliest={field.earliest}\n latest={field.latest}\n placeholder={field.placeholder}\n />\n );\n case \"time\":\n return (\n <TimeField\n {...control}\n value={text || null}\n onChange={onChange}\n times={field.times}\n placeholder={field.placeholder}\n />\n );\n case \"datetime\":\n return (\n <DateTimeField\n {...control}\n value={text || null}\n onChange={onChange}\n dates={field.dates}\n earliest={field.earliest}\n latest={field.latest}\n times={field.times}\n />\n );\n case \"range\":\n return (\n <RangeField\n {...control}\n value={number ?? field.min ?? 0}\n onChange={onChange}\n min={field.min}\n max={field.max}\n step={field.step}\n unit={field.unit}\n />\n );\n case \"rating\":\n return <RatingField {...control} value={number} onChange={onChange} max={field.max} />;\n case \"select\":\n return grouped(field) ? (\n <Choices {...control} options={options} value={text || null} onChange={onChange} />\n ) : (\n <Combobox\n {...control}\n options={options}\n value={text ? [text] : []}\n multiple={false}\n onChange={(ids) => onChange(ids[0] ?? null)}\n placeholder={field.placeholder ?? messages.pick}\n />\n );\n case \"multiselect\": {\n const picked = Array.isArray(value) ? value : [];\n return grouped(field) ? (\n <Chips {...control} options={options} value={picked} onChange={onChange} />\n ) : (\n <Combobox\n {...control}\n options={options}\n value={picked}\n multiple\n onChange={onChange}\n placeholder={field.placeholder ?? messages.pick}\n />\n );\n }\n case \"file\":\n return (\n <FileField\n {...control}\n value={Array.isArray(value) ? value : []}\n onChange={onChange}\n files={files}\n accept={field.accept}\n multiple={field.multiple}\n maxMb={field.max_mb}\n onWait={onWait}\n />\n );\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { parse } from "../markdown.js";
2
+ import { Fragment } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/surface/Markdown.tsx
5
+ /** A heading sits two levels under the page's own (its title, a dialog's): `#` is an `h3`. */
6
+ const HEADINGS = [
7
+ "h3",
8
+ "h4",
9
+ "h5",
10
+ "h6"
11
+ ];
12
+ /** The little Markdown of an agent's words, as headings, paragraphs and lists; the chat's too. */
13
+ function Markdown({ text }) {
14
+ return parse(text).map((node, index) => {
15
+ if (node.kind === "heading") {
16
+ const Heading = HEADINGS[Math.min(node.level, HEADINGS.length) - 1] ?? "h6";
17
+ return /* @__PURE__ */ jsx(Heading, { children: /* @__PURE__ */ jsx(Words, { inline: node.inline }) }, index);
18
+ }
19
+ return node.kind === "list" ? /* @__PURE__ */ jsx("ul", { children: node.items.map((item, at) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Words, { inline: item }) }, at)) }, index) : /* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(Words, { inline: node.inline }) }, index);
20
+ });
21
+ }
22
+ /** One line's words, its bold, italic, code and links drawn; a link opens apart, never in place. */
23
+ function Words({ inline }) {
24
+ return inline.map((part, index) => {
25
+ switch (part.kind) {
26
+ case "text": return /* @__PURE__ */ jsx(Fragment, { children: part.text }, index);
27
+ case "strong": return /* @__PURE__ */ jsx("strong", { children: part.text }, index);
28
+ case "em": return /* @__PURE__ */ jsx("em", { children: part.text }, index);
29
+ case "code": return /* @__PURE__ */ jsx("code", { children: part.text }, index);
30
+ case "link": return /* @__PURE__ */ jsx("a", {
31
+ href: part.href,
32
+ target: "_blank",
33
+ rel: "noopener noreferrer",
34
+ children: part.text
35
+ }, index);
36
+ }
37
+ });
38
+ }
39
+ //#endregion
40
+ export { Markdown, Words };
41
+
42
+ //# sourceMappingURL=Markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markdown.js","names":[],"sources":["../../src/surface/Markdown.tsx"],"sourcesContent":["import { Fragment } from \"react\";\n\nimport { parse, type Inline } from \"../markdown\";\n\n/** A heading sits two levels under the page's own (its title, a dialog's): `#` is an `h3`. */\nconst HEADINGS = [\"h3\", \"h4\", \"h5\", \"h6\"] as const;\n\n/** The little Markdown of an agent's words, as headings, paragraphs and lists; the chat's too. */\nexport function Markdown({ text }: { text: string }) {\n return parse(text).map((node, index) => {\n if (node.kind === \"heading\") {\n const Heading = HEADINGS[Math.min(node.level, HEADINGS.length) - 1] ?? \"h6\";\n return (\n <Heading key={index}>\n <Words inline={node.inline} />\n </Heading>\n );\n }\n return node.kind === \"list\" ? (\n <ul key={index}>\n {node.items.map((item, at) => (\n <li key={at}>\n <Words inline={item} />\n </li>\n ))}\n </ul>\n ) : (\n <p key={index}>\n <Words inline={node.inline} />\n </p>\n );\n });\n}\n\n/** One line's words, its bold, italic, code and links drawn; a link opens apart, never in place. */\nexport function Words({ inline }: { inline: Inline[] }) {\n return inline.map((part, index) => {\n switch (part.kind) {\n case \"text\":\n return <Fragment key={index}>{part.text}</Fragment>;\n case \"strong\":\n return <strong key={index}>{part.text}</strong>;\n case \"em\":\n return <em key={index}>{part.text}</em>;\n case \"code\":\n return <code key={index}>{part.text}</code>;\n case \"link\":\n return (\n <a key={index} href={part.href} target=\"_blank\" rel=\"noopener noreferrer\">\n {part.text}\n </a>\n );\n }\n });\n}\n"],"mappings":";;;;;AAKA,MAAM,WAAW;CAAC;CAAM;CAAM;CAAM;AAAI;;AAGxC,SAAgB,SAAS,EAAE,QAA0B;CACnD,OAAO,MAAM,IAAI,CAAC,CAAC,KAAK,MAAM,UAAU;EACtC,IAAI,KAAK,SAAS,WAAW;GAC3B,MAAM,UAAU,SAAS,KAAK,IAAI,KAAK,OAAO,SAAS,MAAM,IAAI,MAAM;GACvE,OACE,oBAAC,SAAD,EAAA,UACE,oBAAC,OAAD,EAAO,QAAQ,KAAK,OAAS,CAAA,EACtB,GAFK,KAEL;EAEb;EACA,OAAO,KAAK,SAAS,SACnB,oBAAC,MAAD,EAAA,UACG,KAAK,MAAM,KAAK,MAAM,OACrB,oBAAC,MAAD,EAAA,UACE,oBAAC,OAAD,EAAO,QAAQ,KAAO,CAAA,EACpB,GAFK,EAEL,CACL,EACC,GANK,KAML,IAEJ,oBAAC,KAAD,EAAA,UACE,oBAAC,OAAD,EAAO,QAAQ,KAAK,OAAS,CAAA,EAC5B,GAFK,KAEL;CAEP,CAAC;AACH;;AAGA,SAAgB,MAAM,EAAE,UAAgC;CACtD,OAAO,OAAO,KAAK,MAAM,UAAU;EACjC,QAAQ,KAAK,MAAb;GACE,KAAK,QACH,OAAO,oBAAC,UAAD,EAAA,UAAuB,KAAK,KAAe,GAA5B,KAA4B;GACpD,KAAK,UACH,OAAO,oBAAC,UAAD,EAAA,UAAqB,KAAK,KAAa,GAA1B,KAA0B;GAChD,KAAK,MACH,OAAO,oBAAC,MAAD,EAAA,UAAiB,KAAK,KAAS,GAAtB,KAAsB;GACxC,KAAK,QACH,OAAO,oBAAC,QAAD,EAAA,UAAmB,KAAK,KAAW,GAAxB,KAAwB;GAC5C,KAAK,QACH,OACE,oBAAC,KAAD;IAAe,MAAM,KAAK;IAAM,QAAO;IAAS,KAAI;IACjD,UAAA,KAAK;GACL,GAFK,KAEL;EAET;CACF,CAAC;AACH"}
@@ -1,21 +1,35 @@
1
- import type { SurfaceAction, SurfaceData } from "./types.js";
1
+ import { Surface as Surface$1 } from "../blocks.js";
2
+ import { KitLocale, KitMessages } from "../kit/messages.js";
3
+ import { FileHost } from "../kit/uploads.js";
4
+ import { SurfaceAction } from "./values.js";
5
+ import { SurfaceClassNames, SurfaceComponents } from "./scope.js";
6
+ //#region src/surface/Surface.d.ts
2
7
  export interface SurfaceProps {
3
- surface: SurfaceData;
4
- /**
5
- * What the user did on the surface (a pick, a form), in the shape the API's `Action` expects.
6
- * Without it the surface is a record of what was shown: nothing on it can be pressed.
7
- */
8
- onAction?: ((action: SurfaceAction) => void) | undefined;
9
- /** The agent is at work on it now: a browser in it shows it working. */
10
- active?: boolean | undefined;
8
+ surface: Surface$1;
9
+ onAction: (action: SurfaceAction) => void;
10
+ /** False draws the inputs disabled: a surface already answered, or one from an older turn. */
11
+ active?: boolean | undefined;
12
+ /** What the person already did on it: the option picked, the button pressed, the form sent. */
13
+ answered?: SurfaceAction | undefined;
14
+ components?: SurfaceComponents | undefined;
15
+ classNames?: SurfaceClassNames;
16
+ /** The words its controls say, in the host's language; English by default. */
17
+ messages?: Partial<KitMessages> | undefined;
18
+ /** The language of its calendar, days, times and numbers; English by default. */
19
+ locale?: KitLocale | undefined;
20
+ /**
21
+ * Where its file fields' files go (uploaded as they are picked) and how the ones sent are found
22
+ * and opened: the conversation's. None: a file field takes no files.
23
+ */
24
+ files?: FileHost | undefined;
11
25
  }
12
26
  /**
13
- * Draws what an agent shows: a surface of the `signalcore-basic.v1` catalog (see
14
- * `signalcore_core.ui`). Only catalog components exist here, styled by us, plus the host's own
15
- * where the provider registers them; a surface is data, never code. Picks and form submissions
16
- * go back as an action, never as typed text.
17
- *
18
- * A surface that cannot be drawn (a damaged payload, a component nobody here knows) or whose
19
- * drawing throws shows its text twin instead, so one bad surface never takes the page down.
27
+ * What the agent showed, drawn block by block with the kit's primitives (a `card` is a `Card`, a
28
+ * `list` a `List` of `Row`s, a form's fields its controls); a block or a field kind the API has
29
+ * grown since this renderer was written leaves the whole surface to its text twin, so nothing
30
+ * is half-drawn. Each block's action comes back through `onAction`; the host wraps it with the
31
+ * surface's id.
20
32
  */
21
- export declare function Surface(props: SurfaceProps): import("react").JSX.Element;
33
+ export declare function Surface({ surface, onAction, active, answered, components, classNames, messages, locale, files }: SurfaceProps): import("react").JSX.Element;
34
+ //#endregion
35
+ //# sourceMappingURL=Surface.d.ts.map