@signalcore/ui 0.1.0 → 1.0.0-beta.0

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 +1119 -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 +534 -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 +1795 -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 +270 -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 +6961 -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 +596 -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
@@ -0,0 +1,36 @@
1
+ import { Automation, Trigger } from "./types.js";
2
+ import { AutomationMessages, DayRef } from "./messages.js";
3
+ //#region src/automation/when.d.ts
4
+ /** A time of day as the locale writes it ("9:00", "9:00 AM"), from a cron line's hour and minute. */
5
+ export declare function clockOf(hour: number, minute: number, code: string): string;
6
+ /** A trigger in words, and whether it names the one time of day it runs (so the next needs none). */
7
+ export interface When {
8
+ text: string;
9
+ timed: boolean;
10
+ }
11
+ /** A trigger in words: its schedule as a sentence, a webhook's call, an app's event. */
12
+ export declare function whenOf(trigger: Trigger, words: AutomationMessages, code: string): When;
13
+ /** A cron line as a sentence: its days, then its times or how often. */
14
+ export declare function scheduleOf(line: string, words: AutomationMessages, code: string): When;
15
+ /**
16
+ * A moment's day beside `now`, where the person is: today, yesterday, tomorrow, a weekday within
17
+ * the week, else its date (with its year when not this one).
18
+ */
19
+ export declare function dayRefOf(moment: Date, now: Date, code: string, weekday?: "short" | "long"): DayRef;
20
+ /** A moment's time of day where the person is: "9:00". */
21
+ export declare const timeOf: (moment: Date, code: string) => string;
22
+ /** When a run started: "Hoy 9:00", "Ayer 16:12", "Lun 9:00", "3 oct 9:00". */
23
+ export declare function momentOf(at: Date, now: Date, words: AutomationMessages, code: string): string;
24
+ /**
25
+ * The line under an automation's title: when it runs and, while it is on and has a next run,
26
+ * when that is ("Cada día laborable a las 9:00, próxima mañana"). The next run's time is said
27
+ * when the sentence doesn't already say it, and always when it is today.
28
+ */
29
+ export declare function lineOf(automation: Pick<Automation, "trigger" | "on" | "next_run_at">, now: Date, words: AutomationMessages, code: string): string;
30
+ /** How long a run took, once it ended. */
31
+ export declare function tookOf(run: {
32
+ started_at: string;
33
+ ended_at: string | null;
34
+ }, words: AutomationMessages): string | null;
35
+ //#endregion
36
+ //# sourceMappingURL=when.d.ts.map
@@ -0,0 +1,168 @@
1
+ import { parseCron } from "./cron.js";
2
+ //#region src/automation/when.ts
3
+ /**
4
+ * When an automation runs, and when one ran, as a person says it: its trigger in a sentence
5
+ * ("Cada día laborable a las 9:00"), its next run ("próxima mañana"), the moment a run started
6
+ * ("Ayer 16:12"), how long it took. The words are the host's (`AutomationMessages`); the locale's
7
+ * code writes the times, the days and the lists. Pure, so it is tested without a page.
8
+ */
9
+ /** A time of day as the locale writes it ("9:00", "9:00 AM"), from a cron line's hour and minute. */
10
+ function clockOf(hour, minute, code) {
11
+ return new Intl.DateTimeFormat(code, {
12
+ hour: "numeric",
13
+ minute: "2-digit",
14
+ timeZone: "UTC"
15
+ }).format(new Date(Date.UTC(2026, 0, 1, hour, minute)));
16
+ }
17
+ /** A trigger in words: its schedule as a sentence, a webhook's call, an app's event. */
18
+ function whenOf(trigger, words, code) {
19
+ switch (trigger.kind) {
20
+ case "schedule": return trigger.schedule === null ? {
21
+ text: words.custom,
22
+ timed: false
23
+ } : scheduleOf(trigger.schedule, words, code);
24
+ case "webhook": return {
25
+ text: words.webhook,
26
+ timed: false
27
+ };
28
+ case "event": return {
29
+ text: words.event(trigger.app_title ?? trigger.app, trigger.event_title),
30
+ timed: false
31
+ };
32
+ }
33
+ }
34
+ const sorted = (values) => [...values].sort((a, b) => a - b);
35
+ /** Whether the values are every `step`-th one from `from` up to `to`: 0, 15, 30, 45. */
36
+ function stepOf(values) {
37
+ if (values.length < 2) return null;
38
+ const step = (values[1] ?? 0) - (values[0] ?? 0);
39
+ return values.every((value, at) => value === (values[0] ?? 0) + at * step) ? step : null;
40
+ }
41
+ /** Monday first, as a week is read; Sunday is 0 in cron. */
42
+ const weekOrder = (day) => (day + 6) % 7;
43
+ function weekdayName(day, code) {
44
+ return new Intl.DateTimeFormat(code, {
45
+ weekday: "long",
46
+ timeZone: "UTC"
47
+ }).format(new Date(Date.UTC(2026, 0, 4 + day)));
48
+ }
49
+ /** The days a line runs on, in words; null for what a sentence can't say. */
50
+ function daysOf(cron, words, code) {
51
+ if (cron.months.size !== 12) return null;
52
+ if (cron.anyDay && cron.anyWeekday) return words.daily;
53
+ if (cron.anyDay) {
54
+ const days = [...cron.weekdays].sort((a, b) => weekOrder(a) - weekOrder(b));
55
+ const key = days.join(",");
56
+ if (days.length === 7) return words.daily;
57
+ if (key === "1,2,3,4,5") return words.weekdays;
58
+ if (key === "6,0") return words.weekends;
59
+ return words.weekly(days.map((day) => weekdayName(day, code)));
60
+ }
61
+ if (cron.anyWeekday) return words.monthly(sorted(cron.days));
62
+ return null;
63
+ }
64
+ /** At most this many times are listed one by one; more read as a frequency. */
65
+ const LISTED = 4;
66
+ /** The times a line runs at in a day: listed ("a las 9:00"), or how often ("cada hora"). */
67
+ function timesOf(cron, words, code) {
68
+ const hours = sorted(cron.hours);
69
+ const minutes = sorted(cron.minutes);
70
+ const first = hours[0] ?? 0;
71
+ const last = hours[hours.length - 1] ?? 0;
72
+ if (hours.length * minutes.length <= LISTED) {
73
+ const times = hours.flatMap((hour) => minutes.map((minute) => clockOf(hour, minute, code)));
74
+ return {
75
+ text: words.at(times),
76
+ listed: times.length
77
+ };
78
+ }
79
+ const minuteStep = minutes.length === 60 ? 1 : stepOf(minutes);
80
+ const hourStep = hours.length === 24 || hours.length === 1 ? 1 : stepOf(hours);
81
+ let often;
82
+ if (minutes.length === 1 && hourStep !== null) often = words.every(hourStep, "hour");
83
+ else if (minuteStep !== null && minutes[0] === 0 && 60 % minuteStep === 0 && hourStep === 1) often = words.every(minuteStep, "minute");
84
+ else return null;
85
+ if (hourStep !== null && hours.length * hourStep === 24 && first < hourStep) return {
86
+ text: often,
87
+ listed: 0
88
+ };
89
+ const from = clockOf(first, minutes[0] ?? 0, code);
90
+ const to = clockOf(last, minutes[minutes.length - 1] ?? 0, code);
91
+ return {
92
+ text: `${often} ${words.between(from, to)}`,
93
+ listed: 0
94
+ };
95
+ }
96
+ /** A cron line as a sentence: its days, then its times or how often. */
97
+ function scheduleOf(line, words, code) {
98
+ const cron = parseCron(line);
99
+ const days = cron && daysOf(cron, words, code);
100
+ const times = cron && timesOf(cron, words, code);
101
+ if (!days || !times) return {
102
+ text: words.custom,
103
+ timed: false
104
+ };
105
+ if (times.listed > 0) return {
106
+ text: `${days} ${times.text}`,
107
+ timed: times.listed === 1
108
+ };
109
+ return {
110
+ text: days === words.daily ? times.text : words.on(times.text, days),
111
+ timed: false
112
+ };
113
+ }
114
+ /** A calendar day where the person is, as a count of days from the epoch's. */
115
+ const dayNumber = (moment) => Math.round((new Date(moment.getFullYear(), moment.getMonth(), moment.getDate()).getTime() - new Date(1970, 0, 1).getTime()) / 864e5);
116
+ /**
117
+ * A moment's day beside `now`, where the person is: today, yesterday, tomorrow, a weekday within
118
+ * the week, else its date (with its year when not this one).
119
+ */
120
+ function dayRefOf(moment, now, code, weekday = "short") {
121
+ const days = dayNumber(moment) - dayNumber(now);
122
+ if (days === 0) return { kind: "today" };
123
+ if (days === -1) return { kind: "yesterday" };
124
+ if (days === 1) return { kind: "tomorrow" };
125
+ if (Math.abs(days) < 7) return {
126
+ kind: "weekday",
127
+ name: new Intl.DateTimeFormat(code, { weekday }).format(moment)
128
+ };
129
+ return {
130
+ kind: "date",
131
+ name: new Intl.DateTimeFormat(code, {
132
+ day: "numeric",
133
+ month: "short",
134
+ ...moment.getFullYear() === now.getFullYear() ? {} : { year: "numeric" }
135
+ }).format(moment)
136
+ };
137
+ }
138
+ /** A moment's time of day where the person is: "9:00". */
139
+ const timeOf = (moment, code) => new Intl.DateTimeFormat(code, {
140
+ hour: "numeric",
141
+ minute: "2-digit"
142
+ }).format(moment);
143
+ /** When a run started: "Hoy 9:00", "Ayer 16:12", "Lun 9:00", "3 oct 9:00". */
144
+ function momentOf(at, now, words, code) {
145
+ return words.moment(dayRefOf(at, now, code), timeOf(at, code));
146
+ }
147
+ /**
148
+ * The line under an automation's title: when it runs and, while it is on and has a next run,
149
+ * when that is ("Cada día laborable a las 9:00, próxima mañana"). The next run's time is said
150
+ * when the sentence doesn't already say it, and always when it is today.
151
+ */
152
+ function lineOf(automation, now, words, code) {
153
+ const when = whenOf(automation.trigger, words, code);
154
+ if (!automation.on || automation.next_run_at === null) return when.text;
155
+ const next = new Date(automation.next_run_at);
156
+ const day = dayRefOf(next, now, code, "long");
157
+ const time = when.timed && day.kind !== "today" ? null : timeOf(next, code);
158
+ return `${when.text}, ${words.next(day, time)}`;
159
+ }
160
+ /** How long a run took, once it ended. */
161
+ function tookOf(run, words) {
162
+ if (run.ended_at === null) return null;
163
+ return words.took(Math.max(0, Date.parse(run.ended_at) - Date.parse(run.started_at)));
164
+ }
165
+ //#endregion
166
+ export { clockOf, dayRefOf, lineOf, momentOf, scheduleOf, timeOf, tookOf, whenOf };
167
+
168
+ //# sourceMappingURL=when.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"when.js","names":[],"sources":["../../src/automation/when.ts"],"sourcesContent":["/**\n * When an automation runs, and when one ran, as a person says it: its trigger in a sentence\n * (\"Cada día laborable a las 9:00\"), its next run (\"próxima mañana\"), the moment a run started\n * (\"Ayer 16:12\"), how long it took. The words are the host's (`AutomationMessages`); the locale's\n * code writes the times, the days and the lists. Pure, so it is tested without a page.\n */\n\nimport { parseCron, type Cron } from \"./cron\";\nimport type { AutomationMessages, DayRef } from \"./messages\";\nimport type { Automation, Trigger } from \"./types\";\n\n/** A time of day as the locale writes it (\"9:00\", \"9:00 AM\"), from a cron line's hour and minute. */\nexport function clockOf(hour: number, minute: number, code: string): string {\n return new Intl.DateTimeFormat(code, {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZone: \"UTC\",\n }).format(new Date(Date.UTC(2026, 0, 1, hour, minute)));\n}\n\n/** A trigger in words, and whether it names the one time of day it runs (so the next needs none). */\nexport interface When {\n text: string;\n timed: boolean;\n}\n\n/** A trigger in words: its schedule as a sentence, a webhook's call, an app's event. */\nexport function whenOf(trigger: Trigger, words: AutomationMessages, code: string): When {\n switch (trigger.kind) {\n case \"schedule\":\n return trigger.schedule === null\n ? { text: words.custom, timed: false }\n : scheduleOf(trigger.schedule, words, code);\n case \"webhook\":\n return { text: words.webhook, timed: false };\n case \"event\":\n return {\n text: words.event(trigger.app_title ?? trigger.app, trigger.event_title),\n timed: false,\n };\n }\n}\n\nconst sorted = (values: ReadonlySet<number>): number[] => [...values].sort((a, b) => a - b);\n\n/** Whether the values are every `step`-th one from `from` up to `to`: 0, 15, 30, 45. */\nfunction stepOf(values: number[]): number | null {\n if (values.length < 2) return null;\n const step = (values[1] ?? 0) - (values[0] ?? 0);\n return values.every((value, at) => value === (values[0] ?? 0) + at * step) ? step : null;\n}\n\n/** Monday first, as a week is read; Sunday is 0 in cron. */\nconst weekOrder = (day: number) => (day + 6) % 7;\n\nfunction weekdayName(day: number, code: string): string {\n // 4 January 2026 is a Sunday.\n return new Intl.DateTimeFormat(code, { weekday: \"long\", timeZone: \"UTC\" }).format(\n new Date(Date.UTC(2026, 0, 4 + day)),\n );\n}\n\n/** The days a line runs on, in words; null for what a sentence can't say. */\nfunction daysOf(cron: Cron, words: AutomationMessages, code: string): string | null {\n if (cron.months.size !== 12) return null;\n if (cron.anyDay && cron.anyWeekday) return words.daily;\n if (cron.anyDay) {\n const days = [...cron.weekdays].sort((a, b) => weekOrder(a) - weekOrder(b));\n const key = days.join(\",\");\n if (days.length === 7) return words.daily;\n if (key === \"1,2,3,4,5\") return words.weekdays;\n if (key === \"6,0\") return words.weekends;\n return words.weekly(days.map((day) => weekdayName(day, code)));\n }\n if (cron.anyWeekday) return words.monthly(sorted(cron.days));\n return null;\n}\n\n/** At most this many times are listed one by one; more read as a frequency. */\nconst LISTED = 4;\n\n/** The times a line runs at in a day: listed (\"a las 9:00\"), or how often (\"cada hora\"). */\nfunction timesOf(\n cron: Cron,\n words: AutomationMessages,\n code: string,\n): { text: string; listed: number } | null {\n const hours = sorted(cron.hours);\n const minutes = sorted(cron.minutes);\n const first = hours[0] ?? 0;\n const last = hours[hours.length - 1] ?? 0;\n if (hours.length * minutes.length <= LISTED) {\n const times = hours.flatMap((hour) => minutes.map((minute) => clockOf(hour, minute, code)));\n return { text: words.at(times), listed: times.length };\n }\n // Once in each of its hours, every few hours; or every few minutes through its hours.\n const minuteStep = minutes.length === 60 ? 1 : stepOf(minutes);\n const hourStep = hours.length === 24 || hours.length === 1 ? 1 : stepOf(hours);\n let often: string;\n if (minutes.length === 1 && hourStep !== null) {\n often = words.every(hourStep, \"hour\");\n } else if (minuteStep !== null && minutes[0] === 0 && 60 % minuteStep === 0 && hourStep === 1) {\n often = words.every(minuteStep, \"minute\");\n } else {\n return null;\n }\n // The whole day (\"cada 2 horas\"), or a part of it (\"cada hora de 8:00 a 18:00\").\n const whole = hourStep !== null && hours.length * hourStep === 24 && first < hourStep;\n if (whole) return { text: often, listed: 0 };\n const from = clockOf(first, minutes[0] ?? 0, code);\n const to = clockOf(last, minutes[minutes.length - 1] ?? 0, code);\n return { text: `${often} ${words.between(from, to)}`, listed: 0 };\n}\n\n/** A cron line as a sentence: its days, then its times or how often. */\nexport function scheduleOf(line: string, words: AutomationMessages, code: string): When {\n const cron = parseCron(line);\n const days = cron && daysOf(cron, words, code);\n const times = cron && timesOf(cron, words, code);\n if (!days || !times) return { text: words.custom, timed: false };\n if (times.listed > 0) return { text: `${days} ${times.text}`, timed: times.listed === 1 };\n return { text: days === words.daily ? times.text : words.on(times.text, days), timed: false };\n}\n\n/** A calendar day where the person is, as a count of days from the epoch's. */\nconst dayNumber = (moment: Date): number =>\n Math.round(\n (new Date(moment.getFullYear(), moment.getMonth(), moment.getDate()).getTime() -\n new Date(1970, 0, 1).getTime()) /\n 86_400_000,\n );\n\n/**\n * A moment's day beside `now`, where the person is: today, yesterday, tomorrow, a weekday within\n * the week, else its date (with its year when not this one).\n */\nexport function dayRefOf(\n moment: Date,\n now: Date,\n code: string,\n weekday: \"short\" | \"long\" = \"short\",\n): DayRef {\n const days = dayNumber(moment) - dayNumber(now);\n if (days === 0) return { kind: \"today\" };\n if (days === -1) return { kind: \"yesterday\" };\n if (days === 1) return { kind: \"tomorrow\" };\n if (Math.abs(days) < 7) {\n return { kind: \"weekday\", name: new Intl.DateTimeFormat(code, { weekday }).format(moment) };\n }\n return {\n kind: \"date\",\n name: new Intl.DateTimeFormat(code, {\n day: \"numeric\",\n month: \"short\",\n ...(moment.getFullYear() === now.getFullYear() ? {} : { year: \"numeric\" }),\n }).format(moment),\n };\n}\n\n/** A moment's time of day where the person is: \"9:00\". */\nexport const timeOf = (moment: Date, code: string): string =>\n new Intl.DateTimeFormat(code, { hour: \"numeric\", minute: \"2-digit\" }).format(moment);\n\n/** When a run started: \"Hoy 9:00\", \"Ayer 16:12\", \"Lun 9:00\", \"3 oct 9:00\". */\nexport function momentOf(at: Date, now: Date, words: AutomationMessages, code: string): string {\n return words.moment(dayRefOf(at, now, code), timeOf(at, code));\n}\n\n/**\n * The line under an automation's title: when it runs and, while it is on and has a next run,\n * when that is (\"Cada día laborable a las 9:00, próxima mañana\"). The next run's time is said\n * when the sentence doesn't already say it, and always when it is today.\n */\nexport function lineOf(\n automation: Pick<Automation, \"trigger\" | \"on\" | \"next_run_at\">,\n now: Date,\n words: AutomationMessages,\n code: string,\n): string {\n const when = whenOf(automation.trigger, words, code);\n if (!automation.on || automation.next_run_at === null) return when.text;\n const next = new Date(automation.next_run_at);\n const day = dayRefOf(next, now, code, \"long\");\n const time = when.timed && day.kind !== \"today\" ? null : timeOf(next, code);\n return `${when.text}, ${words.next(day, time)}`;\n}\n\n/** How long a run took, once it ended. */\nexport function tookOf(\n run: { started_at: string; ended_at: string | null },\n words: AutomationMessages,\n): string | null {\n if (run.ended_at === null) return null;\n return words.took(Math.max(0, Date.parse(run.ended_at) - Date.parse(run.started_at)));\n}\n"],"mappings":"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"}
@@ -0,0 +1,185 @@
1
+ import { AutomationView } from "./automation/types.js";
2
+ import { FileBlock } from "./types.js";
3
+ //#region src/blocks.d.ts
4
+ export type Tone = "info" | "success" | "warning" | "danger";
5
+ /** Words, as Markdown. */
6
+ export interface TextBlock {
7
+ type: "text";
8
+ text: string;
9
+ }
10
+ /** Label and value pairs: a summary a person reads at a glance. */
11
+ export interface FieldsBlock {
12
+ type: "fields";
13
+ items: {
14
+ label: string;
15
+ value: string;
16
+ }[];
17
+ }
18
+ /** Rows under named columns; a row's cells come in the columns' order. */
19
+ export interface TableBlock {
20
+ type: "table";
21
+ columns: string[];
22
+ rows: string[][];
23
+ }
24
+ export interface Entry {
25
+ id: string;
26
+ title: string;
27
+ subtitle?: string;
28
+ /** At its right: a price, a time, a status. */
29
+ meta?: string;
30
+ /** A small picture at its left (https). */
31
+ image?: string;
32
+ }
33
+ /** Things in a column; with `action`, picking one sends it with `{item: id}`. */
34
+ export interface ListBlock {
35
+ type: "list";
36
+ items: Entry[];
37
+ action?: string;
38
+ }
39
+ /** One number that matters, under its label, with a line of context in its tone. */
40
+ export interface StatBlock {
41
+ type: "stat";
42
+ label: string;
43
+ value: string;
44
+ hint?: string;
45
+ tone?: Tone;
46
+ }
47
+ export interface ChartPoint {
48
+ label: string;
49
+ value: number;
50
+ }
51
+ /**
52
+ * Figures over a few labels: bars to compare them (by state, by who), a line to follow them in
53
+ * time (by day, by week), the labels in their order.
54
+ */
55
+ export interface ChartBlock {
56
+ type: "chart";
57
+ kind: "bar" | "line";
58
+ points: ChartPoint[];
59
+ }
60
+ /** A line that stands out: what the person should notice. */
61
+ export interface NoteBlock {
62
+ type: "note";
63
+ tone: Tone;
64
+ text: string;
65
+ }
66
+ export interface ImageBlock {
67
+ type: "image";
68
+ /** https only. */
69
+ url: string;
70
+ alt: string;
71
+ caption?: string;
72
+ }
73
+ /**
74
+ * One of an agent's automations, as its page shows it, read only: the agent names it (`agent`,
75
+ * its name or id, and `name`), and the API fills in `view` before the surface is shown or kept,
76
+ * with its newest 5 runs; null when there is no such automation.
77
+ */
78
+ export interface AutomationBlock {
79
+ type: "automation";
80
+ agent: string;
81
+ name: string;
82
+ view: AutomationView | null;
83
+ }
84
+ /** One thing the person can do: pressing it sends `action`, or, with `url`, opens that page. */
85
+ export interface ButtonBlock {
86
+ type: "button";
87
+ label: string;
88
+ action?: string;
89
+ url?: string;
90
+ tone: "primary" | "neutral" | "danger";
91
+ }
92
+ export interface Option {
93
+ id: string;
94
+ label: string;
95
+ hint?: string;
96
+ }
97
+ /**
98
+ * Pick one of a few, at once; picking sends `action` with `{option: id}`. With `other`, a last
99
+ * row takes an answer in the person's own words instead: `{text}`.
100
+ */
101
+ export interface ChoiceBlock {
102
+ type: "choice";
103
+ options: Option[];
104
+ action: string;
105
+ other?: boolean;
106
+ }
107
+ export type FieldKind = "text" | "textarea" | "email" | "phone" | "url" | "number" | "date" | "time" | "datetime" | "select" | "multiselect" | "checkbox" | "range" | "rating" |
108
+ /** Files the person uploads to the conversation as they pick them; the value is their ids. */
109
+ "file" |
110
+ /** A value typed once and never stored by the conversation (`ask_person` only). */
111
+ "secret";
112
+ /** What a field holds: words, a number, yes or no, option ids; dates and times as ISO text. */
113
+ export type FieldValue = string | number | boolean | string[] | null;
114
+ /**
115
+ * One thing to fill. Its `kind` picks the control; the rest narrows it: `options` for a select or
116
+ * multiselect; `min`, `max`, `step` and `unit` for a number, range or rating (stars up to `max`,
117
+ * 5 by default); `dates` (the only days to pick, "YYYY-MM-DD"), `earliest` and `latest` for a
118
+ * date or datetime; `times` (the only slots, "HH:MM") for a time or datetime; `accept`,
119
+ * `multiple` and `max_mb` for a file.
120
+ */
121
+ export interface FormField {
122
+ name: string;
123
+ /** None: the field stands alone, its question above it. */
124
+ label?: string;
125
+ kind: FieldKind;
126
+ required: boolean;
127
+ placeholder?: string;
128
+ /** A quiet line under it. */
129
+ help?: string;
130
+ options?: Option[];
131
+ min?: number;
132
+ max?: number;
133
+ step?: number;
134
+ unit?: string;
135
+ dates?: string[];
136
+ earliest?: string;
137
+ latest?: string;
138
+ times?: string[];
139
+ /** The kinds of file it takes: types, families ("image/*"), extensions (".xlsx"); none: any. */
140
+ accept?: string[];
141
+ /** More than one file. */
142
+ multiple?: boolean;
143
+ /** The most a file may weigh, in MB (50, the ceiling, by default). */
144
+ max_mb?: number;
145
+ /** What it starts with. */
146
+ value?: FieldValue;
147
+ }
148
+ /**
149
+ * Fields to fill; sending them sends `action` with the values by field name: words, a number,
150
+ * true or false, a date "YYYY-MM-DD", a time "HH:MM", a moment "YYYY-MM-DDTHH:MM", a
151
+ * multiselect's option ids, a file field's file ids.
152
+ */
153
+ export interface FormBlock {
154
+ type: "form";
155
+ fields: FormField[];
156
+ /** None: the host's own word for sending (`KitMessages.send`). */
157
+ submit?: string;
158
+ action: string;
159
+ }
160
+ export interface DividerBlock {
161
+ type: "divider";
162
+ }
163
+ /** Blocks under a title: one thing, set apart. */
164
+ export interface CardBlock {
165
+ type: "card";
166
+ title?: string;
167
+ subtitle?: string;
168
+ /** At its head's start: an app's logo, a product's picture (https). */
169
+ image?: string;
170
+ children: Block[];
171
+ }
172
+ /** Blocks laid out together: down, or across (wrapping on a narrow screen). */
173
+ export interface StackBlock {
174
+ type: "stack";
175
+ direction: "column" | "row";
176
+ children: Block[];
177
+ }
178
+ export type Block = CardBlock | StackBlock | DividerBlock | TextBlock | FieldsBlock | TableBlock | ListBlock | StatBlock | ChartBlock | NoteBlock | ImageBlock | AutomationBlock | FileBlock | ButtonBlock | ChoiceBlock | FormBlock;
179
+ /** What the agent shows: blocks, and the words a channel without a screen gets instead. */
180
+ export interface Surface {
181
+ blocks: Block[];
182
+ text: string;
183
+ }
184
+ //#endregion
185
+ //# sourceMappingURL=blocks.d.ts.map