@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
@@ -0,0 +1,187 @@
1
+ import { joined, useKit, useParts } from "../kit/context.js";
2
+ import { Tag } from "../kit/Tag.js";
3
+ import { appOf, groupsOf, namingOf } from "./record.js";
4
+ import { ByMark, callMark } from "./marks.js";
5
+ import { momentOf, tookOf } from "./when.js";
6
+ import { Button } from "../kit/Button.js";
7
+ import { Note } from "../kit/Note.js";
8
+ import { useId } from "react";
9
+ import { ChatCircleIcon, ChatsCircleIcon } from "@phosphor-icons/react";
10
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
11
+ //#region src/automation/RunView.tsx
12
+ const STATUS_TONES = {
13
+ running: "info",
14
+ waiting: "warning",
15
+ done: "success",
16
+ failed: "danger",
17
+ skipped: void 0
18
+ };
19
+ /**
20
+ * One run, as its owner reads it: a head with what started it, when, how long it took and how it
21
+ * stands; the line it returned (a test's, as what it would have done); why it failed, in words;
22
+ * then what it did, step by step in the code's order, each call in words ("Buscó en Gmail",
23
+ * "Añadió una fila a Citas"; a test's writes as "Habría…"), the same call in a row once with how
24
+ * many; and the conversations it opened, each opening through the host.
25
+ */
26
+ function RunView({ run, automation = null, onOpenConversation, apps, now = /* @__PURE__ */ new Date(), className }) {
27
+ const part = useParts();
28
+ const { messages, code } = useKit();
29
+ const words = messages.automation;
30
+ const title = useId();
31
+ const names = namingOf(automation);
32
+ const groups = groupsOf(run.steps, words.calls, names);
33
+ const order = (automation?.steps ?? []).map((step) => step.name);
34
+ const app = automation?.trigger.app_title ?? automation?.trigger.app ?? null;
35
+ const by = words.by(run.by, app);
36
+ const took = tookOf(run, words);
37
+ return /* @__PURE__ */ jsxs("article", {
38
+ "aria-labelledby": title,
39
+ className: joined(part("sc-run"), className),
40
+ children: [
41
+ /* @__PURE__ */ jsxs("header", {
42
+ className: part("sc-run__head"),
43
+ children: [
44
+ /* @__PURE__ */ jsx("span", {
45
+ role: "img",
46
+ "aria-label": by,
47
+ title: by,
48
+ className: part("sc-run__by"),
49
+ children: /* @__PURE__ */ jsx(ByMark, {
50
+ by: run.by,
51
+ trigger: automation?.trigger ?? null,
52
+ size: 40,
53
+ apps
54
+ })
55
+ }),
56
+ /* @__PURE__ */ jsxs("div", {
57
+ className: part("sc-run__heading"),
58
+ children: [/* @__PURE__ */ jsx("h3", {
59
+ id: title,
60
+ className: part("sc-run__title"),
61
+ children: run.title
62
+ }), /* @__PURE__ */ jsx("p", {
63
+ className: part("sc-run__meta"),
64
+ children: momentOf(new Date(run.started_at), now, words, code)
65
+ })]
66
+ }),
67
+ /* @__PURE__ */ jsxs("div", {
68
+ className: part("sc-run__end"),
69
+ children: [/* @__PURE__ */ jsxs(Tag, {
70
+ tone: STATUS_TONES[run.status],
71
+ children: [run.status === "running" && /* @__PURE__ */ jsx("i", {
72
+ "aria-hidden": true,
73
+ className: part("sc-run__live")
74
+ }), words.statuses[run.status]]
75
+ }), took !== null && /* @__PURE__ */ jsx("span", {
76
+ className: part("sc-run__took"),
77
+ children: took
78
+ })]
79
+ })
80
+ ]
81
+ }),
82
+ run.summary !== null && /* @__PURE__ */ jsx("p", {
83
+ className: part("sc-run__summary"),
84
+ children: run.dry ? words.dry(run.summary) : run.summary
85
+ }),
86
+ run.status === "failed" && run.error !== null && /* @__PURE__ */ jsx(Note, {
87
+ tone: "danger",
88
+ children: run.error
89
+ }),
90
+ groups.length === 0 ? run.status !== "running" && /* @__PURE__ */ jsx("p", {
91
+ className: part("sc-run__empty"),
92
+ children: words.noCalls
93
+ }) : /* @__PURE__ */ jsx("ol", {
94
+ className: part("sc-run__steps"),
95
+ children: groups.map((group, index) => /* @__PURE__ */ jsx(Group, {
96
+ group,
97
+ number: group.step === null ? null : order.indexOf(group.step) + 1 || index + 1,
98
+ names,
99
+ words,
100
+ apps
101
+ }, `${index}:${group.step ?? ""}`))
102
+ }),
103
+ run.status === "running" && /* @__PURE__ */ jsxs("p", {
104
+ className: part("sc-run__empty"),
105
+ children: [/* @__PURE__ */ jsx("i", {
106
+ "aria-hidden": true,
107
+ className: part("sc-run__live")
108
+ }), words.statuses.running]
109
+ }),
110
+ onOpenConversation !== void 0 && (run.opened.length > 0 || run.conversation_id !== null) && /* @__PURE__ */ jsx(Links, {
111
+ run,
112
+ words,
113
+ onOpen: onOpenConversation
114
+ })
115
+ ]
116
+ });
117
+ }
118
+ /** One step of the run: its number and name, then its calls in words. */
119
+ function Group({ group, number, names, words, apps }) {
120
+ const part = useParts();
121
+ return /* @__PURE__ */ jsxs("li", {
122
+ className: part("sc-run__step"),
123
+ children: [/* @__PURE__ */ jsxs("p", {
124
+ className: part("sc-run__name"),
125
+ children: [/* @__PURE__ */ jsx("span", {
126
+ "aria-hidden": true,
127
+ className: part("sc-run__number"),
128
+ children: number ?? "·"
129
+ }), group.step ?? words.outside]
130
+ }), /* @__PURE__ */ jsx("ul", {
131
+ className: part("sc-run__calls"),
132
+ children: group.lines.map((line) => {
133
+ const first = line.calls[0];
134
+ const alias = first ? appOf(first.call) : null;
135
+ return /* @__PURE__ */ jsxs("li", {
136
+ className: part("sc-run__call", ...line.would ? ["sc-run__call--would"] : [], ...line.error !== null ? ["sc-run__call--failed"] : []),
137
+ children: [first && callMark(first, alias === null ? null : {
138
+ name: names.app(alias),
139
+ icon: names.icon(alias)
140
+ }, apps, 20), /* @__PURE__ */ jsxs("span", { children: [
141
+ line.text,
142
+ line.count > 1 && /* @__PURE__ */ jsxs("span", {
143
+ className: part("sc-run__count"),
144
+ children: [" ", words.times(line.count)]
145
+ }),
146
+ line.error !== null && /* @__PURE__ */ jsx("span", {
147
+ className: part("sc-run__error"),
148
+ children: line.error
149
+ })
150
+ ] })]
151
+ }, line.seq);
152
+ })
153
+ })]
154
+ });
155
+ }
156
+ /** The conversation it was asked in, then the ones it opened: each a button the host opens. */
157
+ function Links({ run, words, onOpen }) {
158
+ const part = useParts();
159
+ const asked = run.conversation_id;
160
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [asked !== null && /* @__PURE__ */ jsx("div", {
161
+ className: part("sc-run__links"),
162
+ children: /* @__PURE__ */ jsx(Button, {
163
+ size: "sm",
164
+ icon: ChatCircleIcon,
165
+ onClick: () => onOpen(asked),
166
+ children: words.askedIn
167
+ })
168
+ }), run.opened.length > 0 && /* @__PURE__ */ jsxs("section", {
169
+ className: part("sc-run__section"),
170
+ children: [/* @__PURE__ */ jsx("h4", {
171
+ className: part("sc-run__label"),
172
+ children: words.opened
173
+ }), /* @__PURE__ */ jsx("div", {
174
+ className: part("sc-run__links"),
175
+ children: run.opened.map((id, index) => /* @__PURE__ */ jsx(Button, {
176
+ size: "sm",
177
+ icon: ChatsCircleIcon,
178
+ onClick: () => onOpen(id),
179
+ children: words.conversation(index + 1)
180
+ }, id))
181
+ })]
182
+ })] });
183
+ }
184
+ //#endregion
185
+ export { RunView };
186
+
187
+ //# sourceMappingURL=RunView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunView.js","names":[],"sources":["../../src/automation/RunView.tsx"],"sourcesContent":["import { ChatCircleIcon, ChatsCircleIcon } from \"@phosphor-icons/react\";\nimport { useId } from \"react\";\n\nimport type { AppDirectory } from \"../AgentAbout\";\nimport { Button } from \"../kit/Button\";\nimport { joined, useKit, useParts } from \"../kit/context\";\nimport { Note } from \"../kit/Note\";\nimport { Tag } from \"../kit/Tag\";\nimport { ByMark, callMark } from \"./marks\";\nimport type { AutomationMessages } from \"./messages\";\nimport { appOf, groupsOf, namingOf, type Names, type StepGroup } from \"./record\";\nimport type { Automation, RunRecord, RunStatus } from \"./types\";\nimport { momentOf, tookOf } from \"./when\";\n\nexport interface RunViewProps {\n run: RunRecord;\n /** The automation it is a run of: its steps' order, its apps' names and logos, its table. */\n automation?: Automation | null | undefined;\n /** Opening a conversation the run opened, or the one it was asked in; without it, none opens. */\n onOpenConversation?: ((id: string) => void) | undefined;\n /** The host's logos for apps; without them an app shows the logo the API gives. */\n apps?: AppDirectory | undefined;\n /** What time it is, for the words that say when; now by default. */\n now?: Date | undefined;\n className?: string | undefined;\n}\n\nconst STATUS_TONES: Readonly<\n Record<RunStatus, \"success\" | \"danger\" | \"info\" | \"warning\" | undefined>\n> = {\n running: \"info\",\n waiting: \"warning\",\n done: \"success\",\n failed: \"danger\",\n skipped: undefined,\n};\n\n/**\n * One run, as its owner reads it: a head with what started it, when, how long it took and how it\n * stands; the line it returned (a test's, as what it would have done); why it failed, in words;\n * then what it did, step by step in the code's order, each call in words (\"Buscó en Gmail\",\n * \"Añadió una fila a Citas\"; a test's writes as \"Habría…\"), the same call in a row once with how\n * many; and the conversations it opened, each opening through the host.\n */\nexport function RunView({\n run,\n automation = null,\n onOpenConversation,\n apps,\n now = new Date(),\n className,\n}: RunViewProps) {\n const part = useParts();\n const { messages, code } = useKit();\n const words = messages.automation;\n const title = useId();\n const names = namingOf(automation);\n const groups = groupsOf(run.steps, words.calls, names);\n const order = (automation?.steps ?? []).map((step) => step.name);\n const app = automation?.trigger.app_title ?? automation?.trigger.app ?? null;\n // What started it is its mark's to show; its words are the mark's name, and its hint.\n const by = words.by(run.by, app);\n const took = tookOf(run, words);\n return (\n <article aria-labelledby={title} className={joined(part(\"sc-run\"), className)}>\n <header className={part(\"sc-run__head\")}>\n <span role=\"img\" aria-label={by} title={by} className={part(\"sc-run__by\")}>\n <ByMark by={run.by} trigger={automation?.trigger ?? null} size={40} apps={apps} />\n </span>\n <div className={part(\"sc-run__heading\")}>\n <h3 id={title} className={part(\"sc-run__title\")}>\n {run.title}\n </h3>\n <p className={part(\"sc-run__meta\")}>\n {momentOf(new Date(run.started_at), now, words, code)}\n </p>\n </div>\n <div className={part(\"sc-run__end\")}>\n <Tag tone={STATUS_TONES[run.status]}>\n {run.status === \"running\" && <i aria-hidden className={part(\"sc-run__live\")} />}\n {words.statuses[run.status]}\n </Tag>\n {took !== null && <span className={part(\"sc-run__took\")}>{took}</span>}\n </div>\n </header>\n {run.summary !== null && (\n <p className={part(\"sc-run__summary\")}>{run.dry ? words.dry(run.summary) : run.summary}</p>\n )}\n {run.status === \"failed\" && run.error !== null && <Note tone=\"danger\">{run.error}</Note>}\n {groups.length === 0 ? (\n run.status !== \"running\" && <p className={part(\"sc-run__empty\")}>{words.noCalls}</p>\n ) : (\n <ol className={part(\"sc-run__steps\")}>\n {groups.map((group, index) => (\n <Group\n key={`${index}:${group.step ?? \"\"}`}\n group={group}\n number={group.step === null ? null : order.indexOf(group.step) + 1 || index + 1}\n names={names}\n words={words}\n apps={apps}\n />\n ))}\n </ol>\n )}\n {run.status === \"running\" && (\n <p className={part(\"sc-run__empty\")}>\n <i aria-hidden className={part(\"sc-run__live\")} />\n {words.statuses.running}\n </p>\n )}\n {onOpenConversation !== undefined &&\n (run.opened.length > 0 || run.conversation_id !== null) && (\n <Links run={run} words={words} onOpen={onOpenConversation} />\n )}\n </article>\n );\n}\n\n/** One step of the run: its number and name, then its calls in words. */\nfunction Group({\n group,\n number,\n names,\n words,\n apps,\n}: {\n group: StepGroup;\n number: number | null;\n names: Names;\n words: AutomationMessages;\n apps: AppDirectory | undefined;\n}) {\n const part = useParts();\n return (\n <li className={part(\"sc-run__step\")}>\n <p className={part(\"sc-run__name\")}>\n <span aria-hidden className={part(\"sc-run__number\")}>\n {number ?? \"·\"}\n </span>\n {group.step ?? words.outside}\n </p>\n <ul className={part(\"sc-run__calls\")}>\n {group.lines.map((line) => {\n const first = line.calls[0];\n const alias = first ? appOf(first.call) : null;\n return (\n <li\n key={line.seq}\n className={part(\n \"sc-run__call\",\n ...(line.would ? ([\"sc-run__call--would\"] as const) : []),\n ...(line.error !== null ? ([\"sc-run__call--failed\"] as const) : []),\n )}\n >\n {first &&\n callMark(\n first,\n alias === null ? null : { name: names.app(alias), icon: names.icon(alias) },\n apps,\n 20,\n )}\n <span>\n {line.text}\n {line.count > 1 && (\n <span className={part(\"sc-run__count\")}> {words.times(line.count)}</span>\n )}\n {line.error !== null && <span className={part(\"sc-run__error\")}>{line.error}</span>}\n </span>\n </li>\n );\n })}\n </ul>\n </li>\n );\n}\n\n/** The conversation it was asked in, then the ones it opened: each a button the host opens. */\nfunction Links({\n run,\n words,\n onOpen,\n}: {\n run: RunRecord;\n words: AutomationMessages;\n onOpen: (id: string) => void;\n}) {\n const part = useParts();\n const asked = run.conversation_id;\n return (\n <>\n {asked !== null && (\n <div className={part(\"sc-run__links\")}>\n <Button size=\"sm\" icon={ChatCircleIcon} onClick={() => onOpen(asked)}>\n {words.askedIn}\n </Button>\n </div>\n )}\n {run.opened.length > 0 && (\n <section className={part(\"sc-run__section\")}>\n <h4 className={part(\"sc-run__label\")}>{words.opened}</h4>\n <div className={part(\"sc-run__links\")}>\n {run.opened.map((id, index) => (\n <Button key={id} size=\"sm\" icon={ChatsCircleIcon} onClick={() => onOpen(id)}>\n {words.conversation(index + 1)}\n </Button>\n ))}\n </div>\n </section>\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;AA2BA,MAAM,eAEF;CACF,SAAS;CACT,SAAS;CACT,MAAM;CACN,QAAQ;CACR,SAAS,KAAA;AACX;;;;;;;;AASA,SAAgB,QAAQ,EACtB,KACA,aAAa,MACb,oBACA,MACA,sBAAM,IAAI,KAAK,GACf,aACe;CACf,MAAM,OAAO,SAAS;CACtB,MAAM,EAAE,UAAU,SAAS,OAAO;CAClC,MAAM,QAAQ,SAAS;CACvB,MAAM,QAAQ,MAAM;CACpB,MAAM,QAAQ,SAAS,UAAU;CACjC,MAAM,SAAS,SAAS,IAAI,OAAO,MAAM,OAAO,KAAK;CACrD,MAAM,SAAS,YAAY,SAAS,CAAC,EAAA,CAAG,KAAK,SAAS,KAAK,IAAI;CAC/D,MAAM,MAAM,YAAY,QAAQ,aAAa,YAAY,QAAQ,OAAO;CAExE,MAAM,KAAK,MAAM,GAAG,IAAI,IAAI,GAAG;CAC/B,MAAM,OAAO,OAAO,KAAK,KAAK;CAC9B,OACE,qBAAC,WAAD;EAAS,mBAAiB;EAAO,WAAW,OAAO,KAAK,QAAQ,GAAG,SAAS;EAA5E,UAAA;GACE,qBAAC,UAAD;IAAQ,WAAW,KAAK,cAAc;IAAtC,UAAA;KACE,oBAAC,QAAD;MAAM,MAAK;MAAM,cAAY;MAAI,OAAO;MAAI,WAAW,KAAK,YAAY;MACtE,UAAA,oBAAC,QAAD;OAAQ,IAAI,IAAI;OAAI,SAAS,YAAY,WAAW;OAAM,MAAM;OAAU;MAAO,CAAA;KAC7E,CAAA;KACN,qBAAC,OAAD;MAAK,WAAW,KAAK,iBAAiB;MAAtC,UAAA,CACE,oBAAC,MAAD;OAAI,IAAI;OAAO,WAAW,KAAK,eAAe;OAC3C,UAAA,IAAI;MACH,CAAA,GACJ,oBAAC,KAAD;OAAG,WAAW,KAAK,cAAc;OAC9B,UAAA,SAAS,IAAI,KAAK,IAAI,UAAU,GAAG,KAAK,OAAO,IAAI;MACnD,CAAA,CACA;;KACL,qBAAC,OAAD;MAAK,WAAW,KAAK,aAAa;MAAlC,UAAA,CACE,qBAAC,KAAD;OAAK,MAAM,aAAa,IAAI;OAA5B,UAAA,CACG,IAAI,WAAW,aAAa,oBAAC,KAAD;QAAG,eAAA;QAAY,WAAW,KAAK,cAAc;OAAI,CAAA,GAC7E,MAAM,SAAS,IAAI,OACjB;MACJ,CAAA,GAAA,SAAS,QAAQ,oBAAC,QAAD;OAAM,WAAW,KAAK,cAAc;OAAI,UAAA;MAAW,CAAA,CAClE;;IACC;;GACP,IAAI,YAAY,QACf,oBAAC,KAAD;IAAG,WAAW,KAAK,iBAAiB;IAAI,UAAA,IAAI,MAAM,MAAM,IAAI,IAAI,OAAO,IAAI,IAAI;GAAW,CAAA;GAE3F,IAAI,WAAW,YAAY,IAAI,UAAU,QAAQ,oBAAC,MAAD;IAAM,MAAK;IAAU,UAAA,IAAI;GAAY,CAAA;GACtF,OAAO,WAAW,IACjB,IAAI,WAAW,aAAa,oBAAC,KAAD;IAAG,WAAW,KAAK,eAAe;IAAI,UAAA,MAAM;GAAW,CAAA,IAEnF,oBAAC,MAAD;IAAI,WAAW,KAAK,eAAe;IAChC,UAAA,OAAO,KAAK,OAAO,UAClB,oBAAC,OAAD;KAES;KACP,QAAQ,MAAM,SAAS,OAAO,OAAO,MAAM,QAAQ,MAAM,IAAI,IAAI,KAAK,QAAQ;KACvE;KACA;KACD;IACP,GANM,GAAG,MAAM,GAAG,MAAM,QAAQ,IAMhC,CACF;GACC,CAAA;GAEL,IAAI,WAAW,aACd,qBAAC,KAAD;IAAG,WAAW,KAAK,eAAe;IAAlC,UAAA,CACE,oBAAC,KAAD;KAAG,eAAA;KAAY,WAAW,KAAK,cAAc;IAAI,CAAA,GAChD,MAAM,SAAS,OACf;;GAEJ,uBAAuB,KAAA,MACrB,IAAI,OAAO,SAAS,KAAK,IAAI,oBAAoB,SAChD,oBAAC,OAAD;IAAY;IAAY;IAAO,QAAQ;GAAqB,CAAA;EAEzD;;AAEb;;AAGA,SAAS,MAAM,EACb,OACA,QACA,OACA,OACA,QAOC;CACD,MAAM,OAAO,SAAS;CACtB,OACE,qBAAC,MAAD;EAAI,WAAW,KAAK,cAAc;EAAlC,UAAA,CACE,qBAAC,KAAD;GAAG,WAAW,KAAK,cAAc;GAAjC,UAAA,CACE,oBAAC,QAAD;IAAM,eAAA;IAAY,WAAW,KAAK,gBAAgB;IAC/C,UAAA,UAAU;GACP,CAAA,GACL,MAAM,QAAQ,MAAM,OACpB;EACH,CAAA,GAAA,oBAAC,MAAD;GAAI,WAAW,KAAK,eAAe;GAChC,UAAA,MAAM,MAAM,KAAK,SAAS;IACzB,MAAM,QAAQ,KAAK,MAAM;IACzB,MAAM,QAAQ,QAAQ,MAAM,MAAM,IAAI,IAAI;IAC1C,OACE,qBAAC,MAAD;KAEE,WAAW,KACT,gBACA,GAAI,KAAK,QAAS,CAAC,qBAAqB,IAAc,CAAC,GACvD,GAAI,KAAK,UAAU,OAAQ,CAAC,sBAAsB,IAAc,CAAC,CACnE;KANF,UAAA,CAQG,SACC,SACE,OACA,UAAU,OAAO,OAAO;MAAE,MAAM,MAAM,IAAI,KAAK;MAAG,MAAM,MAAM,KAAK,KAAK;KAAE,GAC1E,MACA,EACF,GACF,qBAAC,QAAD,EAAA,UAAA;MACG,KAAK;MACL,KAAK,QAAQ,KACZ,qBAAC,QAAD;OAAM,WAAW,KAAK,eAAe;OAArC,UAAA,CAAwC,KAAE,MAAM,MAAM,KAAK,KAAK,CAAQ;;MAEzE,KAAK,UAAU,QAAQ,oBAAC,QAAD;OAAM,WAAW,KAAK,eAAe;OAAI,UAAA,KAAK;MAAY,CAAA;KAC9E,EAAA,CAAA,CACJ;IArBG,GAAA,KAAK,GAqBR;GAER,CAAC;EACC,CAAA,CACF;;AAER;;AAGA,SAAS,MAAM,EACb,KACA,OACA,UAKC;CACD,MAAM,OAAO,SAAS;CACtB,MAAM,QAAQ,IAAI;CAClB,OACE,qBAAA,YAAA,EAAA,UAAA,CACG,UAAU,QACT,oBAAC,OAAD;EAAK,WAAW,KAAK,eAAe;EAClC,UAAA,oBAAC,QAAD;GAAQ,MAAK;GAAK,MAAM;GAAgB,eAAe,OAAO,KAAK;GAChE,UAAA,MAAM;EACD,CAAA;CACL,CAAA,GAEN,IAAI,OAAO,SAAS,KACnB,qBAAC,WAAD;EAAS,WAAW,KAAK,iBAAiB;EAA1C,UAAA,CACE,oBAAC,MAAD;GAAI,WAAW,KAAK,eAAe;GAAI,UAAA,MAAM;EAAW,CAAA,GACxD,oBAAC,OAAD;GAAK,WAAW,KAAK,eAAe;GACjC,UAAA,IAAI,OAAO,KAAK,IAAI,UACnB,oBAAC,QAAD;IAAiB,MAAK;IAAK,MAAM;IAAiB,eAAe,OAAO,EAAE;IACvE,UAAA,MAAM,aAAa,QAAQ,CAAC;GACvB,GAFK,EAEL,CACT;EACE,CAAA,CACE;CAEX,CAAA,CAAA,EAAA,CAAA;AAEN"}
@@ -0,0 +1,41 @@
1
+ //#region src/automation/cron.d.ts
2
+ /**
3
+ * A schedule's cron line, read into what it fires at: the moments of a day (a squad's day, an
4
+ * automation's next runs) and the sentence that says it (`whenOf`). Five fields (minute, hour,
5
+ * day of the month, month, day of the week) with `*`, lists, ranges, steps and English names, as
6
+ * the API's croniter reads them; anything past that is not read (null).
7
+ */
8
+ export interface Cron {
9
+ minutes: ReadonlySet<number>;
10
+ hours: ReadonlySet<number>;
11
+ /** Day of the month, 1–31. */
12
+ days: ReadonlySet<number>;
13
+ /** 1–12. */
14
+ months: ReadonlySet<number>;
15
+ /** 0–6, Sunday 0. */
16
+ weekdays: ReadonlySet<number>;
17
+ /** Left open (`*`): cron's rule for days reads which of the two narrows them. */
18
+ anyDay: boolean;
19
+ anyWeekday: boolean;
20
+ }
21
+ /** A cron line of five fields, or null when it is anything else. */
22
+ export declare function parseCron(line: string): Cron | null;
23
+ /** A moment as a zone's clock reads it. */
24
+ export interface Wall {
25
+ minute: number;
26
+ hour: number;
27
+ day: number;
28
+ month: number;
29
+ weekday: number;
30
+ }
31
+ /**
32
+ * Whether the line fires at that minute. Days follow cron's rule: when both the day of the month
33
+ * and the day of the week are narrowed, either one is enough.
34
+ */
35
+ export declare function fires(cron: Cron, at: Wall): boolean;
36
+ /** How far the zone's clock is ahead of UTC at a moment, in milliseconds. */
37
+ export declare function offsetOf(zone: string, at: Date): number;
38
+ /** Every moment in [from, to) the line fires at, read on the clock of `zone`. */
39
+ export declare function occurrences(cron: Cron, zone: string, from: Date, to: Date): Date[];
40
+ //#endregion
41
+ //# sourceMappingURL=cron.d.ts.map
@@ -0,0 +1,169 @@
1
+ //#region src/automation/cron.ts
2
+ const FIELDS = [
3
+ {
4
+ min: 0,
5
+ max: 59
6
+ },
7
+ {
8
+ min: 0,
9
+ max: 23
10
+ },
11
+ {
12
+ min: 1,
13
+ max: 31
14
+ },
15
+ {
16
+ min: 1,
17
+ max: 12,
18
+ names: [
19
+ "jan",
20
+ "feb",
21
+ "mar",
22
+ "apr",
23
+ "may",
24
+ "jun",
25
+ "jul",
26
+ "aug",
27
+ "sep",
28
+ "oct",
29
+ "nov",
30
+ "dec"
31
+ ]
32
+ },
33
+ {
34
+ min: 0,
35
+ max: 7,
36
+ names: [
37
+ "sun",
38
+ "mon",
39
+ "tue",
40
+ "wed",
41
+ "thu",
42
+ "fri",
43
+ "sat"
44
+ ]
45
+ }
46
+ ];
47
+ /** One value of a field: a number in its bounds, or one of its names (`mon`, `jan`). */
48
+ function valueOf(text, field) {
49
+ const named = field.names?.indexOf(text.toLowerCase()) ?? -1;
50
+ if (named >= 0) return named + field.min;
51
+ if (!/^\d+$/.test(text)) return null;
52
+ const value = Number(text);
53
+ return value >= field.min && value <= field.max ? value : null;
54
+ }
55
+ /** A field's values: `*`, `5`, `1-5`, `*` every 15, `8-18` every 2, `mon-fri`, and lists of them. */
56
+ function parseField(text, field) {
57
+ const values = /* @__PURE__ */ new Set();
58
+ for (const part of text.split(",")) {
59
+ const [range = "", stepText] = part.split("/");
60
+ const step = stepText === void 0 ? 1 : Number(stepText);
61
+ if (!Number.isInteger(step) || step < 1) return null;
62
+ let from;
63
+ let to;
64
+ if (range === "*") [from, to] = [field.min, field.max];
65
+ else {
66
+ const [first = "", last] = range.split("-");
67
+ from = valueOf(first, field);
68
+ to = last !== void 0 ? valueOf(last, field) : stepText !== void 0 ? field.max : from;
69
+ }
70
+ if (from === null || to === null || from > to) return null;
71
+ for (let value = from; value <= to; value += step) values.add(value);
72
+ }
73
+ return [...values];
74
+ }
75
+ /** A cron line of five fields, or null when it is anything else. */
76
+ function parseCron(line) {
77
+ const texts = line.trim().split(/\s+/);
78
+ if (texts.length !== 5) return null;
79
+ const [minutes, hours, days, months, weekdays] = texts.map((text, at) => {
80
+ const field = FIELDS[at];
81
+ return field ? parseField(text, field) : null;
82
+ });
83
+ if (!minutes || !hours || !days || !months || !weekdays) return null;
84
+ return {
85
+ minutes: new Set(minutes),
86
+ hours: new Set(hours),
87
+ days: new Set(days),
88
+ months: new Set(months),
89
+ weekdays: new Set(weekdays.map((day) => day % 7)),
90
+ anyDay: texts[2]?.startsWith("*") ?? false,
91
+ anyWeekday: texts[4]?.startsWith("*") ?? false
92
+ };
93
+ }
94
+ /**
95
+ * Whether the line fires at that minute. Days follow cron's rule: when both the day of the month
96
+ * and the day of the week are narrowed, either one is enough.
97
+ */
98
+ function fires(cron, at) {
99
+ if (!cron.minutes.has(at.minute) || !cron.hours.has(at.hour) || !cron.months.has(at.month)) return false;
100
+ const day = cron.days.has(at.day);
101
+ const weekday = cron.weekdays.has(at.weekday);
102
+ if (cron.anyDay && cron.anyWeekday) return true;
103
+ if (cron.anyDay) return weekday;
104
+ if (cron.anyWeekday) return day;
105
+ return day || weekday;
106
+ }
107
+ const MINUTE = 6e4;
108
+ /** How often the zone's offset is read again: a quarter of an hour meets every zone's changes. */
109
+ const QUARTER = 15 * MINUTE;
110
+ const clocks = /* @__PURE__ */ new Map();
111
+ /** The zone's clock, kept; an unknown zone reads as UTC, the API's default. */
112
+ function clockOf(zone) {
113
+ let clock = clocks.get(zone);
114
+ if (!clock) {
115
+ const options = {
116
+ hourCycle: "h23",
117
+ year: "numeric",
118
+ month: "numeric",
119
+ day: "numeric",
120
+ hour: "numeric",
121
+ minute: "numeric",
122
+ second: "numeric"
123
+ };
124
+ try {
125
+ clock = new Intl.DateTimeFormat("en-US", {
126
+ ...options,
127
+ timeZone: zone
128
+ });
129
+ } catch {
130
+ clock = new Intl.DateTimeFormat("en-US", {
131
+ ...options,
132
+ timeZone: "UTC"
133
+ });
134
+ }
135
+ clocks.set(zone, clock);
136
+ }
137
+ return clock;
138
+ }
139
+ /** How far the zone's clock is ahead of UTC at a moment, in milliseconds. */
140
+ function offsetOf(zone, at) {
141
+ const parts = clockOf(zone).formatToParts(at);
142
+ const part = (type) => Number(parts.find((each) => each.type === type)?.value ?? 0);
143
+ return Date.UTC(part("year"), part("month") - 1, part("day"), part("hour") % 24, part("minute"), part("second")) - Math.floor(at.getTime() / 1e3) * 1e3;
144
+ }
145
+ /** Every moment in [from, to) the line fires at, read on the clock of `zone`. */
146
+ function occurrences(cron, zone, from, to) {
147
+ const out = [];
148
+ let quarter = NaN;
149
+ let offset = 0;
150
+ for (let at = Math.ceil(from.getTime() / MINUTE) * MINUTE; at < to.getTime(); at += MINUTE) {
151
+ if (Math.floor(at / QUARTER) !== quarter) {
152
+ quarter = Math.floor(at / QUARTER);
153
+ offset = offsetOf(zone, new Date(at));
154
+ }
155
+ const wall = new Date(at + offset);
156
+ if (fires(cron, {
157
+ minute: wall.getUTCMinutes(),
158
+ hour: wall.getUTCHours(),
159
+ day: wall.getUTCDate(),
160
+ month: wall.getUTCMonth() + 1,
161
+ weekday: wall.getUTCDay()
162
+ })) out.push(new Date(at));
163
+ }
164
+ return out;
165
+ }
166
+ //#endregion
167
+ export { fires, occurrences, offsetOf, parseCron };
168
+
169
+ //# sourceMappingURL=cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.js","names":[],"sources":["../../src/automation/cron.ts"],"sourcesContent":["/**\n * A schedule's cron line, read into what it fires at: the moments of a day (a squad's day, an\n * automation's next runs) and the sentence that says it (`whenOf`). Five fields (minute, hour,\n * day of the month, month, day of the week) with `*`, lists, ranges, steps and English names, as\n * the API's croniter reads them; anything past that is not read (null).\n */\n\nexport interface Cron {\n minutes: ReadonlySet<number>;\n hours: ReadonlySet<number>;\n /** Day of the month, 1–31. */\n days: ReadonlySet<number>;\n /** 1–12. */\n months: ReadonlySet<number>;\n /** 0–6, Sunday 0. */\n weekdays: ReadonlySet<number>;\n /** Left open (`*`): cron's rule for days reads which of the two narrows them. */\n anyDay: boolean;\n anyWeekday: boolean;\n}\n\ninterface Field {\n min: number;\n max: number;\n names?: readonly string[];\n}\n\nconst MONTH_NAMES = [\n \"jan\",\n \"feb\",\n \"mar\",\n \"apr\",\n \"may\",\n \"jun\",\n \"jul\",\n \"aug\",\n \"sep\",\n \"oct\",\n \"nov\",\n \"dec\",\n] as const;\nconst WEEKDAY_NAMES = [\"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\"] as const;\n\nconst FIELDS: readonly Field[] = [\n { min: 0, max: 59 },\n { min: 0, max: 23 },\n { min: 1, max: 31 },\n { min: 1, max: 12, names: MONTH_NAMES },\n { min: 0, max: 7, names: WEEKDAY_NAMES },\n];\n\n/** One value of a field: a number in its bounds, or one of its names (`mon`, `jan`). */\nfunction valueOf(text: string, field: Field): number | null {\n const named = field.names?.indexOf(text.toLowerCase()) ?? -1;\n if (named >= 0) return named + field.min;\n if (!/^\\d+$/.test(text)) return null;\n const value = Number(text);\n return value >= field.min && value <= field.max ? value : null;\n}\n\n/** A field's values: `*`, `5`, `1-5`, `*` every 15, `8-18` every 2, `mon-fri`, and lists of them. */\nfunction parseField(text: string, field: Field): number[] | null {\n const values = new Set<number>();\n for (const part of text.split(\",\")) {\n const [range = \"\", stepText] = part.split(\"/\");\n const step = stepText === undefined ? 1 : Number(stepText);\n if (!Number.isInteger(step) || step < 1) return null;\n let from: number | null;\n let to: number | null;\n if (range === \"*\") {\n [from, to] = [field.min, field.max];\n } else {\n const [first = \"\", last] = range.split(\"-\");\n from = valueOf(first, field);\n // \"8/2\" runs from 8 to the end of the field, as cron reads it.\n to = last !== undefined ? valueOf(last, field) : stepText !== undefined ? field.max : from;\n }\n if (from === null || to === null || from > to) return null;\n for (let value = from; value <= to; value += step) values.add(value);\n }\n return [...values];\n}\n\n/** A cron line of five fields, or null when it is anything else. */\nexport function parseCron(line: string): Cron | null {\n const texts = line.trim().split(/\\s+/);\n if (texts.length !== 5) return null;\n const [minutes, hours, days, months, weekdays] = texts.map((text, at) => {\n const field = FIELDS[at];\n return field ? parseField(text, field) : null;\n });\n if (!minutes || !hours || !days || !months || !weekdays) return null;\n return {\n minutes: new Set(minutes),\n hours: new Set(hours),\n days: new Set(days),\n months: new Set(months),\n // 7 is Sunday too.\n weekdays: new Set(weekdays.map((day) => day % 7)),\n anyDay: texts[2]?.startsWith(\"*\") ?? false,\n anyWeekday: texts[4]?.startsWith(\"*\") ?? false,\n };\n}\n\n/** A moment as a zone's clock reads it. */\nexport interface Wall {\n minute: number;\n hour: number;\n day: number;\n month: number;\n weekday: number;\n}\n\n/**\n * Whether the line fires at that minute. Days follow cron's rule: when both the day of the month\n * and the day of the week are narrowed, either one is enough.\n */\nexport function fires(cron: Cron, at: Wall): boolean {\n if (!cron.minutes.has(at.minute) || !cron.hours.has(at.hour) || !cron.months.has(at.month)) {\n return false;\n }\n const day = cron.days.has(at.day);\n const weekday = cron.weekdays.has(at.weekday);\n if (cron.anyDay && cron.anyWeekday) return true;\n if (cron.anyDay) return weekday;\n if (cron.anyWeekday) return day;\n return day || weekday;\n}\n\nconst MINUTE = 60_000;\n/** How often the zone's offset is read again: a quarter of an hour meets every zone's changes. */\nconst QUARTER = 15 * MINUTE;\n\nconst clocks = new Map<string, Intl.DateTimeFormat>();\n\n/** The zone's clock, kept; an unknown zone reads as UTC, the API's default. */\nfunction clockOf(zone: string): Intl.DateTimeFormat {\n let clock = clocks.get(zone);\n if (!clock) {\n const options: Intl.DateTimeFormatOptions = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n };\n try {\n clock = new Intl.DateTimeFormat(\"en-US\", { ...options, timeZone: zone });\n } catch {\n clock = new Intl.DateTimeFormat(\"en-US\", { ...options, timeZone: \"UTC\" });\n }\n clocks.set(zone, clock);\n }\n return clock;\n}\n\n/** How far the zone's clock is ahead of UTC at a moment, in milliseconds. */\nexport function offsetOf(zone: string, at: Date): number {\n const parts = clockOf(zone).formatToParts(at);\n const part = (type: Intl.DateTimeFormatPartTypes) =>\n Number(parts.find((each) => each.type === type)?.value ?? 0);\n const wall = Date.UTC(\n part(\"year\"),\n part(\"month\") - 1,\n part(\"day\"),\n part(\"hour\") % 24,\n part(\"minute\"),\n part(\"second\"),\n );\n return wall - Math.floor(at.getTime() / 1000) * 1000;\n}\n\n/** Every moment in [from, to) the line fires at, read on the clock of `zone`. */\nexport function occurrences(cron: Cron, zone: string, from: Date, to: Date): Date[] {\n const out: Date[] = [];\n let quarter = Number.NaN;\n let offset = 0;\n for (let at = Math.ceil(from.getTime() / MINUTE) * MINUTE; at < to.getTime(); at += MINUTE) {\n if (Math.floor(at / QUARTER) !== quarter) {\n quarter = Math.floor(at / QUARTER);\n offset = offsetOf(zone, new Date(at));\n }\n const wall = new Date(at + offset);\n const fired = fires(cron, {\n minute: wall.getUTCMinutes(),\n hour: wall.getUTCHours(),\n day: wall.getUTCDate(),\n month: wall.getUTCMonth() + 1,\n weekday: wall.getUTCDay(),\n });\n if (fired) out.push(new Date(at));\n }\n return out;\n}\n"],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import { Mark } from "../kit/Mark.js";
2
+ import { sentOn } from "./record.js";
3
+ import { BellIcon, BrainIcon, ChatCircleIcon, ChatTextIcon, ChatsCircleIcon, ClockIcon, FileTextIcon, FlaskIcon, GlobeIcon, LightningIcon, SparkleIcon, TableIcon, WebhooksLogoIcon } from "@phosphor-icons/react";
4
+ import { Fragment, jsx } from "react/jsx-runtime";
5
+ //#region src/automation/marks.tsx
6
+ /** Only an https logo is loaded: never a script, never a local file. */
7
+ const https = (url) => url !== null && /^https:\/\//i.test(url);
8
+ /**
9
+ * An app's mark: the host's logo when it draws apps (`apps`), else the logo the API gives, else
10
+ * the app's initial; each bare, as `Mark` draws it.
11
+ */
12
+ function AppMark({ name, icon, size, apps }) {
13
+ if (apps !== void 0) return /* @__PURE__ */ jsx(Fragment, { children: apps.logo({
14
+ provider: "",
15
+ name,
16
+ icon,
17
+ size
18
+ }) });
19
+ if (https(icon)) return /* @__PURE__ */ jsx(Mark, {
20
+ src: icon,
21
+ size
22
+ });
23
+ return /* @__PURE__ */ jsx(Mark, {
24
+ size,
25
+ children: /* @__PURE__ */ jsx("span", { children: name.trim().charAt(0).toUpperCase() || "?" })
26
+ });
27
+ }
28
+ const KINDS = {
29
+ schedule: ClockIcon,
30
+ webhook: WebhooksLogoIcon
31
+ };
32
+ /** What starts an automation, as a mark: a clock, a webhook, the app whose event it waits for. */
33
+ function TriggerMark({ trigger, size, apps }) {
34
+ if (trigger.kind !== "event") return /* @__PURE__ */ jsx(Mark, {
35
+ icon: KINDS[trigger.kind],
36
+ size
37
+ });
38
+ const name = trigger.app_title ?? trigger.app;
39
+ if (name === null) return /* @__PURE__ */ jsx(Mark, {
40
+ icon: LightningIcon,
41
+ size
42
+ });
43
+ return /* @__PURE__ */ jsx(AppMark, {
44
+ name,
45
+ icon: trigger.icon,
46
+ size,
47
+ apps
48
+ });
49
+ }
50
+ /** What started a run: its time, a call, its app's event, a chat with the agent, a test. */
51
+ const BY = {
52
+ schedule: ClockIcon,
53
+ webhook: WebhooksLogoIcon,
54
+ agent: ChatCircleIcon,
55
+ test: FlaskIcon
56
+ };
57
+ function ByMark({ by, trigger, size, apps }) {
58
+ if (by !== "event") return /* @__PURE__ */ jsx(Mark, {
59
+ icon: BY[by],
60
+ size
61
+ });
62
+ return trigger === null ? /* @__PURE__ */ jsx(Mark, {
63
+ icon: LightningIcon,
64
+ size
65
+ }) : /* @__PURE__ */ jsx(TriggerMark, {
66
+ trigger,
67
+ size,
68
+ apps
69
+ });
70
+ }
71
+ /**
72
+ * What a step uses, other than an app: the model, the agent, the inbox, a message on a channel, a
73
+ * table, the web.
74
+ */
75
+ const USES = {
76
+ ai: SparkleIcon,
77
+ agent: ChatsCircleIcon,
78
+ notify: BellIcon,
79
+ send: ChatTextIcon,
80
+ data: TableIcon,
81
+ http: GlobeIcon
82
+ };
83
+ /** A call of a run's record, by what it reached; an app's tool by the app's mark. */
84
+ const CALLS = {
85
+ ai: SparkleIcon,
86
+ notify: BellIcon,
87
+ send: ChatTextIcon,
88
+ "agent.start": ChatsCircleIcon,
89
+ "data.find": TableIcon,
90
+ "data.add": TableIcon,
91
+ "data.update": TableIcon,
92
+ http: GlobeIcon,
93
+ "files.search": FileTextIcon,
94
+ "files.read": FileTextIcon,
95
+ "files.write": FileTextIcon,
96
+ "files.list": FileTextIcon,
97
+ "memory.remember": BrainIcon,
98
+ "memory.recall": BrainIcon
99
+ };
100
+ function callMark(step, app, apps, size) {
101
+ if (app !== null) return /* @__PURE__ */ jsx(AppMark, {
102
+ name: app.name,
103
+ icon: app.icon,
104
+ size,
105
+ apps
106
+ });
107
+ const channel = step.call === "send" ? sentOn(step) : null;
108
+ if (channel !== null && apps !== void 0) return apps.logo({
109
+ provider: channel,
110
+ name: channel,
111
+ size
112
+ });
113
+ return /* @__PURE__ */ jsx(Mark, {
114
+ icon: CALLS[step.call] ?? LightningIcon,
115
+ size
116
+ });
117
+ }
118
+ //#endregion
119
+ export { AppMark, ByMark, TriggerMark, USES, callMark };
120
+
121
+ //# sourceMappingURL=marks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marks.js","names":[],"sources":["../../src/automation/marks.tsx"],"sourcesContent":["import {\n BellIcon,\n BrainIcon,\n ChatCircleIcon,\n ChatTextIcon,\n ChatsCircleIcon,\n ClockIcon,\n FileTextIcon,\n FlaskIcon,\n GlobeIcon,\n LightningIcon,\n SparkleIcon,\n TableIcon,\n WebhooksLogoIcon,\n type Icon,\n} from \"@phosphor-icons/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { AppDirectory } from \"../AgentAbout\";\nimport { Mark } from \"../kit/Mark\";\nimport { sentOn } from \"./record\";\nimport type { RunBy, RunStep, Trigger, Use } from \"./types\";\n\n/** Only an https logo is loaded: never a script, never a local file. */\nconst https = (url: string | null): url is string => url !== null && /^https:\\/\\//i.test(url);\n\n/**\n * An app's mark: the host's logo when it draws apps (`apps`), else the logo the API gives, else\n * the app's initial; each bare, as `Mark` draws it.\n */\nexport function AppMark({\n name,\n icon,\n size,\n apps,\n}: {\n name: string;\n icon: string | null;\n size: number;\n apps: AppDirectory | undefined;\n}) {\n if (apps !== undefined) return <>{apps.logo({ provider: \"\", name, icon, size })}</>;\n if (https(icon)) return <Mark src={icon} size={size} />;\n return (\n <Mark size={size}>\n <span>{name.trim().charAt(0).toUpperCase() || \"?\"}</span>\n </Mark>\n );\n}\n\nconst KINDS: Readonly<Record<Exclude<Trigger[\"kind\"], \"event\">, Icon>> = {\n schedule: ClockIcon,\n webhook: WebhooksLogoIcon,\n};\n\n/** What starts an automation, as a mark: a clock, a webhook, the app whose event it waits for. */\nexport function TriggerMark({\n trigger,\n size,\n apps,\n}: {\n trigger: Trigger;\n size: number;\n apps: AppDirectory | undefined;\n}) {\n if (trigger.kind !== \"event\") return <Mark icon={KINDS[trigger.kind]} size={size} />;\n const name = trigger.app_title ?? trigger.app;\n if (name === null) return <Mark icon={LightningIcon} size={size} />;\n return <AppMark name={name} icon={trigger.icon} size={size} apps={apps} />;\n}\n\n/** What started a run: its time, a call, its app's event, a chat with the agent, a test. */\nconst BY: Readonly<Record<Exclude<RunBy, \"event\">, Icon>> = {\n schedule: ClockIcon,\n webhook: WebhooksLogoIcon,\n agent: ChatCircleIcon,\n test: FlaskIcon,\n};\n\nexport function ByMark({\n by,\n trigger,\n size,\n apps,\n}: {\n by: RunBy;\n /** The automation's, for an event's app; none, a plain mark. */\n trigger: Trigger | null;\n size: number;\n apps: AppDirectory | undefined;\n}) {\n if (by !== \"event\") return <Mark icon={BY[by]} size={size} />;\n return trigger === null ? (\n <Mark icon={LightningIcon} size={size} />\n ) : (\n <TriggerMark trigger={trigger} size={size} apps={apps} />\n );\n}\n\n/**\n * What a step uses, other than an app: the model, the agent, the inbox, a message on a channel, a\n * table, the web.\n */\nexport const USES: Readonly<Record<Exclude<Use[\"kind\"], \"app\">, Icon>> = {\n ai: SparkleIcon,\n agent: ChatsCircleIcon,\n notify: BellIcon,\n send: ChatTextIcon,\n data: TableIcon,\n http: GlobeIcon,\n};\n\n/** A call of a run's record, by what it reached; an app's tool by the app's mark. */\nconst CALLS: Readonly<Record<string, Icon>> = {\n ai: SparkleIcon,\n notify: BellIcon,\n send: ChatTextIcon,\n \"agent.start\": ChatsCircleIcon,\n \"data.find\": TableIcon,\n \"data.add\": TableIcon,\n \"data.update\": TableIcon,\n http: GlobeIcon,\n \"files.search\": FileTextIcon,\n \"files.read\": FileTextIcon,\n \"files.write\": FileTextIcon,\n \"files.list\": FileTextIcon,\n \"memory.remember\": BrainIcon,\n \"memory.recall\": BrainIcon,\n};\n\nexport function callMark(\n step: RunStep,\n app: { name: string; icon: string | null } | null,\n apps: AppDirectory | undefined,\n size: number,\n): ReactNode {\n if (app !== null) return <AppMark name={app.name} icon={app.icon} size={size} apps={apps} />;\n // A message sent on a channel: the channel's brand, when the host draws brands and it is known.\n const channel = step.call === \"send\" ? sentOn(step) : null;\n if (channel !== null && apps !== undefined) {\n return apps.logo({ provider: channel, name: channel, size });\n }\n return <Mark icon={CALLS[step.call] ?? LightningIcon} size={size} />;\n}\n"],"mappings":";;;;;;AAwBA,MAAM,SAAS,QAAsC,QAAQ,QAAQ,eAAe,KAAK,GAAG;;;;;AAM5F,SAAgB,QAAQ,EACtB,MACA,MACA,MACA,QAMC;CACD,IAAI,SAAS,KAAA,GAAW,OAAO,oBAAA,UAAA,EAAA,UAAG,KAAK,KAAK;EAAE,UAAU;EAAI;EAAM;EAAM;CAAK,CAAC,EAAI,CAAA;CAClF,IAAI,MAAM,IAAI,GAAG,OAAO,oBAAC,MAAD;EAAM,KAAK;EAAY;CAAO,CAAA;CACtD,OACE,oBAAC,MAAD;EAAY;EACV,UAAA,oBAAC,QAAD,EAAA,UAAO,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,KAAK,IAAU,CAAA;CACpD,CAAA;AAEV;AAEA,MAAM,QAAmE;CACvE,UAAU;CACV,SAAS;AACX;;AAGA,SAAgB,YAAY,EAC1B,SACA,MACA,QAKC;CACD,IAAI,QAAQ,SAAS,SAAS,OAAO,oBAAC,MAAD;EAAM,MAAM,MAAM,QAAQ;EAAa;CAAO,CAAA;CACnF,MAAM,OAAO,QAAQ,aAAa,QAAQ;CAC1C,IAAI,SAAS,MAAM,OAAO,oBAAC,MAAD;EAAM,MAAM;EAAqB;CAAO,CAAA;CAClE,OAAO,oBAAC,SAAD;EAAe;EAAM,MAAM,QAAQ;EAAY;EAAY;CAAO,CAAA;AAC3E;;AAGA,MAAM,KAAsD;CAC1D,UAAU;CACV,SAAS;CACT,OAAO;CACP,MAAM;AACR;AAEA,SAAgB,OAAO,EACrB,IACA,SACA,MACA,QAOC;CACD,IAAI,OAAO,SAAS,OAAO,oBAAC,MAAD;EAAM,MAAM,GAAG;EAAW;CAAO,CAAA;CAC5D,OAAO,YAAY,OACjB,oBAAC,MAAD;EAAM,MAAM;EAAqB;CAAO,CAAA,IAExC,oBAAC,aAAD;EAAsB;EAAe;EAAY;CAAO,CAAA;AAE5D;;;;;AAMA,MAAa,OAA4D;CACvE,IAAI;CACJ,OAAO;CACP,QAAQ;CACR,MAAM;CACN,MAAM;CACN,MAAM;AACR;;AAGA,MAAM,QAAwC;CAC5C,IAAI;CACJ,QAAQ;CACR,MAAM;CACN,eAAe;CACf,aAAa;CACb,YAAY;CACZ,eAAe;CACf,MAAM;CACN,gBAAgB;CAChB,cAAc;CACd,eAAe;CACf,cAAc;CACd,mBAAmB;CACnB,iBAAiB;AACnB;AAEA,SAAgB,SACd,MACA,KACA,MACA,MACW;CACX,IAAI,QAAQ,MAAM,OAAO,oBAAC,SAAD;EAAS,MAAM,IAAI;EAAM,MAAM,IAAI;EAAY;EAAY;CAAO,CAAA;CAE3F,MAAM,UAAU,KAAK,SAAS,SAAS,OAAO,IAAI,IAAI;CACtD,IAAI,YAAY,QAAQ,SAAS,KAAA,GAC/B,OAAO,KAAK,KAAK;EAAE,UAAU;EAAS,MAAM;EAAS;CAAK,CAAC;CAE7D,OAAO,oBAAC,MAAD;EAAM,MAAM,MAAM,KAAK,SAAS;EAAqB;CAAO,CAAA;AACrE"}