@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/src/es.ts ADDED
@@ -0,0 +1,423 @@
1
+ /**
2
+ * The package's words in Spanish, for the people an agent serves: the chat, the browser it drives,
3
+ * the kit's controls (with an automation's and its runs'), a call and the agent's space. English
4
+ * is every component's default; a host in Spanish passes these as `messages`, the calendar's
5
+ * language as `locale` (`import { es } from "@signalcore/ui/locale"`).
6
+ */
7
+ import type { ChatMessages } from "./AgentChat";
8
+ import type { SpaceMessages } from "./AgentSpace";
9
+ import type { TaskMessages } from "./AgentTasks";
10
+ import type { AutomationMessages, DayRef } from "./automation/messages";
11
+ import type { BrowserMessages } from "./BrowserView";
12
+ import type { KitMessages } from "./kit/messages";
13
+ import type { VoiceCallMessages } from "./VoiceCall";
14
+
15
+ /** The article before a time: "la 1:00", "las 8:00". */
16
+ const at = (time: string): string => `a ${time.startsWith("1:") ? "la" : "las"} ${time}`;
17
+
18
+ const list = (items: readonly string[]): string => new Intl.ListFormat("es").format(items);
19
+
20
+ /** A weekday as the plural says it: "los lunes", "los sábados". */
21
+ const days = (name: string): string => (name.endsWith("s") ? name : `${name}s`);
22
+
23
+ const capital = (text: string): string => text.charAt(0).toUpperCase() + text.slice(1);
24
+
25
+ /** A day said after "próxima": "hoy", "mañana", "el lunes", "el 3 nov". */
26
+ function nextDay(day: DayRef): string {
27
+ switch (day.kind) {
28
+ case "today":
29
+ return "hoy";
30
+ case "tomorrow":
31
+ return "mañana";
32
+ case "yesterday":
33
+ return "";
34
+ default:
35
+ return `el ${day.name}`;
36
+ }
37
+ }
38
+
39
+ /** A message sent on a channel, by the channel's kind: "un WhatsApp", "un SMS". */
40
+ const SENT: Readonly<Record<string, string>> = {
41
+ whatsapp: "un WhatsApp",
42
+ instagram: "un mensaje de Instagram",
43
+ sms: "un SMS",
44
+ };
45
+
46
+ /** What an automation's tool call did, by what the tool's name says, done or (a test) not. */
47
+ const TOOL = {
48
+ search: [(app: string) => `Buscó en ${app}`, (app: string) => `Buscó en ${app}`],
49
+ send: [(app: string) => `Envió por ${app}`, (app: string) => `Habría enviado por ${app}`],
50
+ create: [(app: string) => `Creó en ${app}`, (app: string) => `Habría creado en ${app}`],
51
+ update: [(app: string) => `Cambió en ${app}`, (app: string) => `Habría cambiado en ${app}`],
52
+ remove: [(app: string) => `Borró en ${app}`, (app: string) => `Habría borrado en ${app}`],
53
+ use: [(app: string) => `Usó ${app}`, (app: string) => `Habría usado ${app}`],
54
+ } as const;
55
+
56
+ export const AUTOMATION_MESSAGES_ES: AutomationMessages = {
57
+ daily: "Cada día",
58
+ weekdays: "Cada día laborable",
59
+ weekends: "Los fines de semana",
60
+ weekly: (names) =>
61
+ names.length === 1 ? `Cada ${names[0] ?? ""}` : `Los ${list(names.map(days))}`,
62
+ monthly: (numbers) =>
63
+ numbers.length === 1
64
+ ? `El día ${numbers[0] ?? ""} de cada mes`
65
+ : `Los días ${list(numbers.map(String))} de cada mes`,
66
+ at: (times) => list(times.map(at)),
67
+ every: (count, unit) =>
68
+ unit === "minute"
69
+ ? count === 1
70
+ ? "Cada minuto"
71
+ : `Cada ${count} minutos`
72
+ : count === 1
73
+ ? "Cada hora"
74
+ : `Cada ${count} horas`,
75
+ between: (from, to) => `de ${from} a ${to}`,
76
+ on: (often, when) => `${often}, ${when.charAt(0).toLowerCase()}${when.slice(1)}`,
77
+ custom: "Con un horario propio",
78
+ webhook: "Cuando otro sistema la llama",
79
+ event: (app, event) =>
80
+ event
81
+ ? `Cuando pasa «${event}» en ${app ?? "una app"}`
82
+ : `Cuando pasa algo en ${app ?? "una app"}`,
83
+ next: (day, time) =>
84
+ ["próxima", nextDay(day), time === null ? "" : at(time)].filter(Boolean).join(" "),
85
+ states: { active: "Activa", paused: "En pausa", failing: "Falló la última" },
86
+ switchLabel: "Activa",
87
+ steps: "Pasos",
88
+ runs: "Ejecuciones",
89
+ noRuns: "Aún no se ha ejecutado.",
90
+ uses: {
91
+ ai: "IA",
92
+ agent: "Agente",
93
+ notify: "Aviso",
94
+ send: "Mensaje",
95
+ data: "Tabla",
96
+ http: "Web",
97
+ },
98
+ more: (count) => `+${count}`,
99
+ gone: "Esta automatización ya no existe.",
100
+ moment: (day, time) => {
101
+ switch (day.kind) {
102
+ case "today":
103
+ return `Hoy ${time}`;
104
+ case "yesterday":
105
+ return `Ayer ${time}`;
106
+ case "tomorrow":
107
+ return `Mañana ${time}`;
108
+ default:
109
+ return `${capital(day.name)} ${time}`;
110
+ }
111
+ },
112
+ by: (by, app) =>
113
+ ({
114
+ schedule: "horario",
115
+ webhook: "webhook",
116
+ event: app ? `evento de ${app}` : "evento",
117
+ agent: "se lo pidieron en el chat",
118
+ test: "prueba",
119
+ })[by],
120
+ statuses: {
121
+ running: "En curso",
122
+ waiting: "Esperando",
123
+ done: "Hecha",
124
+ failed: "Falló",
125
+ skipped: "Omitida",
126
+ },
127
+ dry: (summary) => `Prueba: ${summary}`,
128
+ took: (ms) => {
129
+ if (ms < 1000) return "menos de 1 s";
130
+ const seconds = Math.round(ms / 1000);
131
+ return seconds < 60 ? `${seconds} s` : `${Math.floor(seconds / 60)} min ${seconds % 60} s`;
132
+ },
133
+ opened: "Conversaciones que abrió",
134
+ conversation: (index) => `Conversación ${index}`,
135
+ askedIn: "La conversación donde se lo pidieron",
136
+ noCalls: "No llegó a hacer nada.",
137
+ outside: "Fuera de los pasos",
138
+ times: (count) => `×${count}`,
139
+ calls: {
140
+ tool: (verb, app, would) => TOOL[verb][would ? 1 : 0](app),
141
+ ai: "Usó la IA",
142
+ notify: (would) => (would ? "Habría avisado en la bandeja" : "Avisó en la bandeja"),
143
+ send: (channel, to, would) => {
144
+ const sent = `${SENT[channel ?? ""] ?? "un mensaje"} a ${to || "un contacto"}`;
145
+ return would ? `Habría enviado ${sent}` : `Envió ${sent}`;
146
+ },
147
+ start: (would) => (would ? "Habría abierto una conversación" : "Abrió una conversación"),
148
+ find: (table) => `Consultó ${table}`,
149
+ add: (table, would) =>
150
+ would ? `Habría añadido una fila a ${table}` : `Añadió una fila a ${table}`,
151
+ change: (table, would) =>
152
+ would ? `Habría cambiado una fila de ${table}` : `Cambió una fila de ${table}`,
153
+ http: (host, would) => (would ? `Habría llamado a ${host}` : `Llamó a ${host}`),
154
+ files: "Buscó en los archivos",
155
+ read: (file) => `Leyó ${file}`,
156
+ wrote: (file, would) => (would ? `Habría guardado ${file}` : `Guardó ${file}`),
157
+ listed: "Miró sus archivos",
158
+ remember: (would) => (would ? "Habría guardado un recuerdo" : "Guardó un recuerdo"),
159
+ recall: "Buscó en lo aprendido",
160
+ },
161
+ };
162
+
163
+ const FAMILIES: Readonly<Record<string, string>> = {
164
+ image: "imágenes",
165
+ video: "vídeos",
166
+ audio: "audios",
167
+ text: "textos",
168
+ };
169
+
170
+ export const KIT_MESSAGES_ES: KitMessages = {
171
+ required: "Este campo es obligatorio",
172
+ chooseDate: "Elige un día",
173
+ chooseTime: "Elige una hora",
174
+ chooseMoment: "Elige día y hora",
175
+ chooseOption: "Elige una opción",
176
+ other: "Otra respuesta",
177
+ otherPlaceholder: "Escribe tu respuesta",
178
+ chooseRating: "Elige una puntuación",
179
+ check: "Marca la casilla para seguir",
180
+ invalidEmail: "Correo no válido",
181
+ invalidPhone: "Teléfono no válido",
182
+ invalidUrl: "Dirección no válida",
183
+ invalidNumber: "Escribe un número",
184
+ invalidTime: "Escribe la hora así: 9:30",
185
+ atLeast: (min) => `Como mínimo ${min}`,
186
+ atMost: (max) => `Como máximo ${max}`,
187
+ unavailableDate: "Ese día no está disponible",
188
+ unavailableTime: "Esa hora no está disponible",
189
+ optional: "Opcional",
190
+ pick: "Elige…",
191
+ search: "Buscar…",
192
+ noResults: "Sin resultados",
193
+ show: "Mostrar",
194
+ hide: "Ocultar",
195
+ increase: "Sumar",
196
+ decrease: "Restar",
197
+ remove: (label) => `Quitar ${label}`,
198
+ yes: "Sí",
199
+ no: "No",
200
+ rated: (value, max) => `${value} de ${max}`,
201
+ stars: (count) => (count === 1 ? "1 estrella" : `${count} estrellas`),
202
+ send: "Enviar",
203
+ sent: "Enviado",
204
+ chooseFile: "Falta el archivo",
205
+ upload: (multiple) => (multiple ? "Sube archivos" : "Sube un archivo"),
206
+ drop: "Suelta aquí o elige",
207
+ limits: (kinds, size) => (kinds ? `${kinds}, hasta ${size}` : `Hasta ${size}`),
208
+ anyOf: (family) => FAMILIES[family] ?? family,
209
+ uploading: "Subiendo",
210
+ tooBig: (size) => `Pasa de ${size}`,
211
+ wrongType: "Aquí no vale este tipo de archivo",
212
+ tooMany: (max) => `Como máximo ${max} archivos`,
213
+ uploadFailed: "No se ha podido subir",
214
+ retry: "Reintentar",
215
+ stillUploading: "Espera a que termine de subir",
216
+ fixFiles: "Quita o reintenta los archivos con error",
217
+ open: (name) => `Abrir ${name}`,
218
+ file: "Archivo",
219
+ play: "Reproducir",
220
+ pause: "Pausar",
221
+ position: "Posición",
222
+ automation: AUTOMATION_MESSAGES_ES,
223
+ };
224
+
225
+ export const BROWSER_MESSAGES_ES: BrowserMessages = {
226
+ agent: (name) => `Lo controla ${name}`,
227
+ agentMine: (name) => `${name}, en tu Chrome`,
228
+ person: "Lo controlas tú",
229
+ take: "Tomar el control",
230
+ giveBack: "Devolver",
231
+ handedOver: (name) => `${name} te pasa el navegador`,
232
+ done: "Listo, sigue",
233
+ closed: "El navegador se cerró mientras te esperaba.",
234
+ close: "Cerrar el navegador",
235
+ expand: "Ampliar",
236
+ shrink: "Reducir",
237
+ blank: "Página en blanco",
238
+ screen: (where) => `Navegador: ${where}`,
239
+ };
240
+
241
+ export const CHAT_MESSAGES_ES: ChatMessages = {
242
+ placeholder: (name) => `Escribe a ${name}…`,
243
+ connecting: "Conectando…",
244
+ awaiting: "Responde arriba para seguir…",
245
+ thinking: (name) => `${name} está pensando`,
246
+ typing: "Escribiendo",
247
+ working: "Trabajando",
248
+ writing: "Escribiendo",
249
+ elapsed: (seconds) => `${seconds} s`,
250
+ escape: "esc para detener",
251
+ done: (seconds) =>
252
+ `Listo en ${seconds < 60 ? `${seconds} s` : `${Math.floor(seconds / 60)} min ${seconds % 60} s`}`,
253
+ empty: (name) => `Habla con ${name}`,
254
+ intro: () => "",
255
+ send: "Enviar",
256
+ attach: "Adjuntar archivos",
257
+ drop: "Suelta para adjuntar",
258
+ dictate: "Dictar",
259
+ dictateStop: "Parar y escribirlo",
260
+ dictation: {
261
+ listening: "Escuchando…",
262
+ writing: "Escribiéndolo…",
263
+ failed: "No te he oído: permite el micrófono e inténtalo otra vez",
264
+ },
265
+ stop: "Detener",
266
+ log: "Conversación",
267
+ steps: {
268
+ show: "Muestra",
269
+ ask_person: "Pregunta",
270
+ search_files: "Busca en archivos",
271
+ read_file: "Lee un archivo",
272
+ keep_file: "Guarda un archivo",
273
+ remember: "Recuerda",
274
+ recall: "Busca en lo aprendido",
275
+ escalate: "Pasa a una persona",
276
+ notify: "Avisa",
277
+ data_find: "Consulta una tabla",
278
+ data_add: "Añade una fila",
279
+ data_update: "Cambia una fila",
280
+ browser_open: "Abre una página",
281
+ browser_read: "Lee la página",
282
+ browser_click: "Hace clic",
283
+ browser_fill: "Rellena un campo",
284
+ browser_scroll: "Desplaza la página",
285
+ browser_back: "Vuelve atrás",
286
+ browser_submit: "Envía en la web",
287
+ browser_hand_over: "Te pasa el navegador",
288
+ browser_attach: "Sube un archivo a la web",
289
+ browser_download: "Guarda un archivo de la web",
290
+ browser_screenshot: "Hace una captura de la web",
291
+ browser_record: "Graba la web en vídeo",
292
+ browser_fill_key: "Escribe una clave en la web",
293
+ ask_builder: "Se lo pide al builder",
294
+ send_message: "Envía un mensaje",
295
+ voice_note: "Manda una nota de voz",
296
+ ai: "Usa la IA",
297
+ call: "Llama",
298
+ },
299
+ failed: "falló",
300
+ approval: "Necesita tu aprobación",
301
+ request: (name, action) => `${name} quiere hacer «${action}»`,
302
+ inputs: {},
303
+ allow: "Aprobar",
304
+ decline: "Rechazar",
305
+ confirming: "Esperando la confirmación del negocio",
306
+ handedOff: "Pasada a una persona",
307
+ handover: (holder, by, name) => {
308
+ const automation = by.kind === "automation" ? ` por «${by.title}»` : "";
309
+ switch (holder) {
310
+ case "agent":
311
+ if (by.kind === "owner") return `Devolviste la conversación a ${name}`;
312
+ return `Se devolvió a ${name}${automation}`;
313
+ case "person":
314
+ if (by.kind === "owner") return `Pausaste a ${name}`;
315
+ if (by.kind === "agent") return `${name} la pasó a una persona`;
316
+ return `Pasó a una persona${automation}`;
317
+ case "nobody":
318
+ return `Ignorada${automation}`;
319
+ }
320
+ },
321
+ skipped: "No respondió",
322
+ cut: (heard) =>
323
+ heard === "" ? "Interrumpida antes de que se oyera nada" : `Interrumpida tras «${heard}»`,
324
+ write: "Responde como el negocio…",
325
+ business: "Tú",
326
+ voiceNote: "Nota de voz",
327
+ delivery: {
328
+ queued: "Esperando para salir",
329
+ sent: "Enviado",
330
+ delivered: "Entregado",
331
+ read: "Leído",
332
+ failed: "No entregado",
333
+ },
334
+ undelivered: (error) => (error ? `No entregado: ${error}` : "No entregado"),
335
+ noTool: "Esta página no puede hacer eso",
336
+ kit: KIT_MESSAGES_ES,
337
+ browser: BROWSER_MESSAGES_ES,
338
+ };
339
+
340
+ export const VOICE_CALL_MESSAGES_ES: VoiceCallMessages = {
341
+ call: (name) => `Llamada con ${name}`,
342
+ states: {
343
+ connecting: "Conectando…",
344
+ listening: "Escuchando",
345
+ thinking: "Pensando",
346
+ speaking: "Hablando",
347
+ reconnecting: "Reconectando…",
348
+ ended: "Llamada terminada",
349
+ },
350
+ calling: (name) => `Llamando a ${name}`,
351
+ ended: {
352
+ person: () => "Has colgado",
353
+ agent: (name) => `${name} ha colgado`,
354
+ limit: () => "Se alcanzó la duración máxima",
355
+ dropped: () => "Se cortó la llamada",
356
+ },
357
+ problems: {
358
+ denied: {
359
+ title: () => "Sin permiso para el micrófono",
360
+ help: "Permite el micrófono a esta página (en el icono junto a la dirección) y vuelve a llamar.",
361
+ },
362
+ nomic: {
363
+ title: () => "No hay ningún micrófono",
364
+ help: "Conecta uno, o elige otro en los ajustes de sonido del sistema, y vuelve a llamar.",
365
+ },
366
+ inuse: {
367
+ title: () => "El micrófono está ocupado",
368
+ help: "Otra aplicación lo está usando. Ciérrala y vuelve a llamar.",
369
+ },
370
+ unsupported: {
371
+ title: () => "Este navegador no puede llamar",
372
+ help: "Abre la página por https en un Chrome, Edge, Safari o Firefox actual.",
373
+ },
374
+ off: {
375
+ title: () => "Las llamadas no están activadas",
376
+ help: "Este servicio aún no atiende llamadas. Escríbele mientras tanto.",
377
+ },
378
+ builder: {
379
+ title: (name) => `${name} no atiende llamadas`,
380
+ help: "Escríbele en el chat.",
381
+ },
382
+ refused: {
383
+ title: (name) => `${name} no puede atender la llamada`,
384
+ help: "Inténtalo de nuevo en un momento.",
385
+ },
386
+ failed: {
387
+ title: (name) => `No se ha podido llamar a ${name}`,
388
+ help: "Comprueba tu conexión y vuelve a intentarlo.",
389
+ },
390
+ unanswered: {
391
+ title: (name) => `${name} no contesta`,
392
+ help: "Ahora mismo no atiende llamadas. Inténtalo de nuevo en un momento.",
393
+ },
394
+ },
395
+ mute: "Silenciar",
396
+ hangUp: "Colgar",
397
+ keys: "Espacio silencia y activa el micrófono",
398
+ muted: "Tu micrófono está silenciado",
399
+ hear: (name) => `Oír a ${name}`,
400
+ };
401
+
402
+ export const TASK_MESSAGES_ES: TaskMessages = {
403
+ open: (count) =>
404
+ count === 1 ? "Tienes 1 tarea programada" : `Tienes ${count} tareas programadas`,
405
+ title: "Tus tareas",
406
+ back: "Volver a la conversación",
407
+ remove: "Quitar",
408
+ empty: "No hay nada programado. Pídele que te recuerde algo, o que te escriba más adelante.",
409
+ failed: "No se ha podido cambiar. Inténtalo de nuevo.",
410
+ };
411
+
412
+ export const SPACE_MESSAGES_ES: SpaceMessages = {
413
+ modes: { label: "Modo", text: "Texto", voice: "Voz" },
414
+ again: "Volver a llamar",
415
+ close: "Cerrar",
416
+ agent: "Agente",
417
+ opening: "Abriendo la conversación…",
418
+ failed: "No se ha podido abrir la conversación.",
419
+ retry: "Reintentar",
420
+ chat: CHAT_MESSAGES_ES,
421
+ voice: VOICE_CALL_MESSAGES_ES,
422
+ tasks: TASK_MESSAGES_ES,
423
+ };
package/src/files.ts ADDED
@@ -0,0 +1,238 @@
1
+ /**
2
+ * How a file is shown before it is saved, read from its name first (the owner named it, and a
3
+ * browser often gives no type) and from its type when the name says nothing.
4
+ */
5
+
6
+ /**
7
+ * Words with headings (Markdown), plain words, a source read in the mono face (JSON, YAML, a
8
+ * page's HTML: shown as written, never run), rows of cells (CSV), a PDF, a picture, or nothing.
9
+ */
10
+ export type Preview = "markdown" | "text" | "code" | "table" | "pdf" | "image" | "none";
11
+
12
+ const BY_EXTENSION: Readonly<Record<string, Preview>> = {
13
+ md: "markdown",
14
+ markdown: "markdown",
15
+ txt: "text",
16
+ log: "text",
17
+ json: "code",
18
+ yaml: "code",
19
+ yml: "code",
20
+ xml: "code",
21
+ html: "code",
22
+ htm: "code",
23
+ css: "code",
24
+ js: "code",
25
+ ts: "code",
26
+ py: "code",
27
+ sql: "code",
28
+ toml: "code",
29
+ ini: "code",
30
+ csv: "table",
31
+ tsv: "table",
32
+ pdf: "pdf",
33
+ png: "image",
34
+ jpg: "image",
35
+ jpeg: "image",
36
+ gif: "image",
37
+ webp: "image",
38
+ avif: "image",
39
+ bmp: "image",
40
+ svg: "image",
41
+ };
42
+
43
+ /** The type a browser needs to draw a PDF or a picture, by extension. */
44
+ const MEDIA: Readonly<Record<string, string>> = {
45
+ pdf: "application/pdf",
46
+ png: "image/png",
47
+ jpg: "image/jpeg",
48
+ jpeg: "image/jpeg",
49
+ gif: "image/gif",
50
+ webp: "image/webp",
51
+ avif: "image/avif",
52
+ bmp: "image/bmp",
53
+ svg: "image/svg+xml",
54
+ };
55
+
56
+ /** A name's extension, lowercase; "" for one without (`README`, `.env`). */
57
+ export function extensionOf(name: string): string {
58
+ const base = baseName(name);
59
+ const dot = base.lastIndexOf(".");
60
+ return dot <= 0 ? "" : base.slice(dot + 1).toLowerCase();
61
+ }
62
+
63
+ /** The last name of a path: what a file is saved as. */
64
+ export const baseName = (path: string): string => path.slice(path.lastIndexOf("/") + 1);
65
+
66
+ function byType(type: string): Preview {
67
+ const media = type.split(";")[0]?.trim().toLowerCase() ?? "";
68
+ if (media === "text/markdown") return "markdown";
69
+ if (media === "text/csv" || media === "text/tab-separated-values") return "table";
70
+ if (media === "text/html" || /^application\/(json|xml|x-yaml|yaml)$/.test(media)) return "code";
71
+ if (media.startsWith("text/")) return "text";
72
+ if (media === "application/pdf") return "pdf";
73
+ if (Object.values(MEDIA).includes(media)) return "image";
74
+ return "none";
75
+ }
76
+
77
+ /** How a file of this name and type is shown. */
78
+ export function previewOf(name: string, type: string): Preview {
79
+ return BY_EXTENSION[extensionOf(name)] ?? byType(type);
80
+ }
81
+
82
+ /**
83
+ * The bytes typed as a browser must have them to draw them (a PDF, a picture), whatever type
84
+ * they came with: one uploaded without a type is kept as plain bytes.
85
+ */
86
+ export function typedFor(blob: Blob, name: string): Blob {
87
+ const type = MEDIA[extensionOf(name)];
88
+ return type === undefined || blob.type === type ? blob : new Blob([blob], { type });
89
+ }
90
+
91
+ /** JSON laid out two spaces deep; anything that is not JSON as it was. */
92
+ export function pretty(text: string): string {
93
+ try {
94
+ return JSON.stringify(JSON.parse(text), null, 2);
95
+ } catch {
96
+ return text;
97
+ }
98
+ }
99
+
100
+ const SEPARATORS = [",", ";", "\t"] as const;
101
+
102
+ /**
103
+ * A CSV (or TSV) as rows of cells, when it is simple enough to draw as a table: one separator,
104
+ * the commonest of comma, semicolon and tab on the first line; quoted cells kept whole (quotes
105
+ * doubled inside, line breaks too); every row as wide as the first, and that at least two. Null
106
+ * otherwise, and it is shown as written.
107
+ */
108
+ export function tableOf(text: string): string[][] | null {
109
+ const body = text.replace(/^/, "").replace(/\r\n?/g, "\n").replace(/\n+$/, "");
110
+ const first = body.split("\n", 1)[0] ?? "";
111
+ const separator = SEPARATORS.reduce((best, each) =>
112
+ first.split(each).length > first.split(best).length ? each : best,
113
+ );
114
+ if (!first.includes(separator)) return null;
115
+ const rows = cellsOf(body, separator);
116
+ const width = rows[0]?.length ?? 0;
117
+ return width >= 2 && rows.every((row) => row.length === width) ? rows : null;
118
+ }
119
+
120
+ function cellsOf(text: string, separator: string): string[][] {
121
+ const rows: string[][] = [];
122
+ let row: string[] = [];
123
+ let cell = "";
124
+ let quoted = false;
125
+ for (let at = 0; at < text.length; at += 1) {
126
+ const char = text.charAt(at);
127
+ if (quoted) {
128
+ if (char !== '"') cell += char;
129
+ else if (text.charAt(at + 1) === '"') {
130
+ cell += '"';
131
+ at += 1;
132
+ } else quoted = false;
133
+ } else if (char === '"' && cell === "") {
134
+ quoted = true;
135
+ } else if (char === separator || char === "\n") {
136
+ row.push(cell);
137
+ cell = "";
138
+ if (char === "\n") {
139
+ rows.push(row);
140
+ row = [];
141
+ }
142
+ } else {
143
+ cell += char;
144
+ }
145
+ }
146
+ row.push(cell);
147
+ rows.push(row);
148
+ return rows;
149
+ }
150
+
151
+ /** The tags a Word file's HTML keeps, as the API keeps them (`preview.TAGS`). */
152
+ const DOCUMENT_TAGS: ReadonlySet<string> = new Set([
153
+ "h1",
154
+ "h2",
155
+ "h3",
156
+ "h4",
157
+ "h5",
158
+ "h6",
159
+ "p",
160
+ "br",
161
+ "hr",
162
+ "blockquote",
163
+ "pre",
164
+ "code",
165
+ "ul",
166
+ "ol",
167
+ "li",
168
+ "table",
169
+ "thead",
170
+ "tbody",
171
+ "tr",
172
+ "th",
173
+ "td",
174
+ "strong",
175
+ "b",
176
+ "em",
177
+ "i",
178
+ "u",
179
+ "s",
180
+ "sub",
181
+ "sup",
182
+ "img",
183
+ ]);
184
+
185
+ /** What goes with everything it holds; any other tag not kept goes and leaves its words. */
186
+ const DROPPED: ReadonlySet<string> = new Set([
187
+ "script",
188
+ "style",
189
+ "template",
190
+ "iframe",
191
+ "object",
192
+ "embed",
193
+ "noscript",
194
+ "svg",
195
+ "math",
196
+ "link",
197
+ "meta",
198
+ "title",
199
+ ]);
200
+
201
+ /** A picture inline, as the only address a document may hold. */
202
+ const PICTURE = /^data:image\/(?:png|jpe?g|gif|webp|bmp);base64,/i;
203
+
204
+ /** Whether an element keeps an attribute: a picture its data address and words, a cell its span. */
205
+ function keeps(tag: string, name: string, value: string): boolean {
206
+ if (tag === "img") return name === "alt" || (name === "src" && PICTURE.test(value));
207
+ return (tag === "td" || tag === "th") && (name === "colspan" || name === "rowspan");
208
+ }
209
+
210
+ /**
211
+ * A Word file's HTML (a `document` preview) kept again, here, to what a viewer draws: the API
212
+ * cleans it, and what the page puts in itself it checks itself. Its tags and attributes the
213
+ * API's allow-list, scripts and styles gone with what they hold, any other tag gone and its words
214
+ * kept, a picture only by a data address.
215
+ */
216
+ export function cleanDocument(html: string): string {
217
+ const body = new DOMParser().parseFromString(html, "text/html").body;
218
+ const clean = (parent: Element) => {
219
+ for (const child of [...parent.children]) {
220
+ const tag = child.tagName.toLowerCase();
221
+ if (DROPPED.has(tag)) {
222
+ child.remove();
223
+ continue;
224
+ }
225
+ clean(child);
226
+ if (!DOCUMENT_TAGS.has(tag)) {
227
+ child.replaceWith(...child.childNodes);
228
+ continue;
229
+ }
230
+ for (const { name, value } of [...child.attributes]) {
231
+ if (!keeps(tag, name.toLowerCase(), value)) child.removeAttribute(name);
232
+ }
233
+ if (tag === "img" && !child.hasAttribute("src")) child.remove();
234
+ }
235
+ };
236
+ clean(body);
237
+ return body.innerHTML;
238
+ }