@diegopluna/narvi 0.0.0-stage → 0.0.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 (351) hide show
  1. package/README.md +82 -2
  2. package/dist/components/activity/ActivityContent.svelte +55 -0
  3. package/dist/components/activity/ActivityContent.svelte.d.ts +11 -0
  4. package/dist/components/activity/ActivityRoot.svelte +66 -0
  5. package/dist/components/activity/ActivityRoot.svelte.d.ts +17 -0
  6. package/dist/components/activity/ActivityStep.svelte +157 -0
  7. package/dist/components/activity/ActivityStep.svelte.d.ts +26 -0
  8. package/dist/components/activity/ActivityThought.svelte +60 -0
  9. package/dist/components/activity/ActivityThought.svelte.d.ts +10 -0
  10. package/dist/components/activity/ActivityTrigger.svelte +103 -0
  11. package/dist/components/activity/ActivityTrigger.svelte.d.ts +20 -0
  12. package/dist/components/activity/context.d.ts +7 -0
  13. package/dist/components/activity/context.js +11 -0
  14. package/dist/components/activity/index.d.ts +11 -0
  15. package/dist/components/activity/index.js +6 -0
  16. package/dist/components/announcer/Announcer.svelte +84 -0
  17. package/dist/components/announcer/Announcer.svelte.d.ts +13 -0
  18. package/dist/components/app-shell/AppShellHeader.svelte +54 -0
  19. package/dist/components/app-shell/AppShellHeader.svelte.d.ts +15 -0
  20. package/dist/components/app-shell/AppShellMain.svelte +49 -0
  21. package/dist/components/app-shell/AppShellMain.svelte.d.ts +11 -0
  22. package/dist/components/app-shell/AppShellPanel.svelte +107 -0
  23. package/dist/components/app-shell/AppShellPanel.svelte.d.ts +18 -0
  24. package/dist/components/app-shell/AppShellRoot.svelte +136 -0
  25. package/dist/components/app-shell/AppShellRoot.svelte.d.ts +28 -0
  26. package/dist/components/app-shell/AppShellSidebar.svelte +192 -0
  27. package/dist/components/app-shell/AppShellSidebar.svelte.d.ts +17 -0
  28. package/dist/components/app-shell/AppShellToggle.svelte +50 -0
  29. package/dist/components/app-shell/AppShellToggle.svelte.d.ts +10 -0
  30. package/dist/components/app-shell/context.d.ts +15 -0
  31. package/dist/components/app-shell/context.js +15 -0
  32. package/dist/components/app-shell/index.d.ts +15 -0
  33. package/dist/components/app-shell/index.js +8 -0
  34. package/dist/components/approval/Approval.svelte +213 -0
  35. package/dist/components/approval/Approval.svelte.d.ts +38 -0
  36. package/dist/components/avatar/AvatarFallback.svelte +73 -0
  37. package/dist/components/avatar/AvatarFallback.svelte.d.ts +11 -0
  38. package/dist/components/avatar/AvatarImage.svelte +75 -0
  39. package/dist/components/avatar/AvatarImage.svelte.d.ts +11 -0
  40. package/dist/components/avatar/AvatarRoot.svelte +108 -0
  41. package/dist/components/avatar/AvatarRoot.svelte.d.ts +19 -0
  42. package/dist/components/avatar/context.d.ts +11 -0
  43. package/dist/components/avatar/context.js +11 -0
  44. package/dist/components/avatar/index.d.ts +7 -0
  45. package/dist/components/avatar/index.js +6 -0
  46. package/dist/components/badge/Badge.svelte +78 -0
  47. package/dist/components/badge/Badge.svelte.d.ts +15 -0
  48. package/dist/components/button/Button.svelte +270 -0
  49. package/dist/components/button/Button.svelte.d.ts +22 -0
  50. package/dist/components/card/Card.svelte +65 -0
  51. package/dist/components/card/Card.svelte.d.ts +15 -0
  52. package/dist/components/change-stats/ChangeStats.svelte +52 -0
  53. package/dist/components/change-stats/ChangeStats.svelte.d.ts +14 -0
  54. package/dist/components/changes-summary/ChangesSummary.svelte +152 -0
  55. package/dist/components/changes-summary/ChangesSummary.svelte.d.ts +20 -0
  56. package/dist/components/checkbox/Checkbox.svelte +178 -0
  57. package/dist/components/checkbox/Checkbox.svelte.d.ts +19 -0
  58. package/dist/components/code/Code.svelte +33 -0
  59. package/dist/components/code/Code.svelte.d.ts +10 -0
  60. package/dist/components/command/CommandDialog.svelte +37 -0
  61. package/dist/components/command/CommandDialog.svelte.d.ts +12 -0
  62. package/dist/components/command/CommandEmpty.svelte +20 -0
  63. package/dist/components/command/CommandEmpty.svelte.d.ts +11 -0
  64. package/dist/components/command/CommandFooter.svelte +25 -0
  65. package/dist/components/command/CommandFooter.svelte.d.ts +11 -0
  66. package/dist/components/command/CommandGroup.svelte +25 -0
  67. package/dist/components/command/CommandGroup.svelte.d.ts +12 -0
  68. package/dist/components/command/CommandInput.svelte +33 -0
  69. package/dist/components/command/CommandInput.svelte.d.ts +8 -0
  70. package/dist/components/command/CommandItem.svelte +49 -0
  71. package/dist/components/command/CommandItem.svelte.d.ts +16 -0
  72. package/dist/components/command/CommandList.svelte +21 -0
  73. package/dist/components/command/CommandList.svelte.d.ts +10 -0
  74. package/dist/components/command/CommandRoot.svelte +20 -0
  75. package/dist/components/command/CommandRoot.svelte.d.ts +11 -0
  76. package/dist/components/command/index.d.ts +20 -0
  77. package/dist/components/command/index.js +12 -0
  78. package/dist/components/command/styles.d.ts +117 -0
  79. package/dist/components/command/styles.js +121 -0
  80. package/dist/components/composer/ComposerAttachButton.svelte +55 -0
  81. package/dist/components/composer/ComposerAttachButton.svelte.d.ts +14 -0
  82. package/dist/components/composer/ComposerAttachment.svelte +173 -0
  83. package/dist/components/composer/ComposerAttachment.svelte.d.ts +13 -0
  84. package/dist/components/composer/ComposerAttachments.svelte +63 -0
  85. package/dist/components/composer/ComposerAttachments.svelte.d.ts +13 -0
  86. package/dist/components/composer/ComposerModelPicker.svelte +475 -0
  87. package/dist/components/composer/ComposerModelPicker.svelte.d.ts +27 -0
  88. package/dist/components/composer/ComposerRoot.svelte +315 -0
  89. package/dist/components/composer/ComposerRoot.svelte.d.ts +42 -0
  90. package/dist/components/composer/ComposerSubmit.svelte +131 -0
  91. package/dist/components/composer/ComposerSubmit.svelte.d.ts +13 -0
  92. package/dist/components/composer/ComposerTextarea.svelte +109 -0
  93. package/dist/components/composer/ComposerTextarea.svelte.d.ts +9 -0
  94. package/dist/components/composer/ComposerToggle.svelte +106 -0
  95. package/dist/components/composer/ComposerToggle.svelte.d.ts +14 -0
  96. package/dist/components/composer/ComposerToolbar.svelte +29 -0
  97. package/dist/components/composer/ComposerToolbar.svelte.d.ts +11 -0
  98. package/dist/components/composer/context.d.ts +53 -0
  99. package/dist/components/composer/context.js +32 -0
  100. package/dist/components/composer/index.d.ts +21 -0
  101. package/dist/components/composer/index.js +13 -0
  102. package/dist/components/conversation/ConversationContent.svelte +94 -0
  103. package/dist/components/conversation/ConversationContent.svelte.d.ts +15 -0
  104. package/dist/components/conversation/ConversationEmpty.svelte +89 -0
  105. package/dist/components/conversation/ConversationEmpty.svelte.d.ts +16 -0
  106. package/dist/components/conversation/ConversationRoot.svelte +237 -0
  107. package/dist/components/conversation/ConversationRoot.svelte.d.ts +20 -0
  108. package/dist/components/conversation/ConversationScrollButton.svelte +114 -0
  109. package/dist/components/conversation/ConversationScrollButton.svelte.d.ts +14 -0
  110. package/dist/components/conversation/context.d.ts +28 -0
  111. package/dist/components/conversation/context.js +15 -0
  112. package/dist/components/conversation/index.d.ts +11 -0
  113. package/dist/components/conversation/index.js +8 -0
  114. package/dist/components/conversation/scrolling.d.ts +25 -0
  115. package/dist/components/conversation/scrolling.js +60 -0
  116. package/dist/components/dev-styles/DevStyles.svelte +21 -0
  117. package/dist/components/dev-styles/DevStyles.svelte.d.ts +3 -0
  118. package/dist/components/dialog/ConfirmDialog.svelte +157 -0
  119. package/dist/components/dialog/ConfirmDialog.svelte.d.ts +31 -0
  120. package/dist/components/dialog/DialogBody.svelte +19 -0
  121. package/dist/components/dialog/DialogBody.svelte.d.ts +10 -0
  122. package/dist/components/dialog/DialogContent.svelte +55 -0
  123. package/dist/components/dialog/DialogContent.svelte.d.ts +17 -0
  124. package/dist/components/dialog/DialogDescription.svelte +23 -0
  125. package/dist/components/dialog/DialogDescription.svelte.d.ts +10 -0
  126. package/dist/components/dialog/DialogFooter.svelte +19 -0
  127. package/dist/components/dialog/DialogFooter.svelte.d.ts +10 -0
  128. package/dist/components/dialog/DialogHeader.svelte +19 -0
  129. package/dist/components/dialog/DialogHeader.svelte.d.ts +10 -0
  130. package/dist/components/dialog/DialogTitle.svelte +20 -0
  131. package/dist/components/dialog/DialogTitle.svelte.d.ts +10 -0
  132. package/dist/components/dialog/index.d.ts +17 -0
  133. package/dist/components/dialog/index.js +12 -0
  134. package/dist/components/dialog/styles.d.ts +120 -0
  135. package/dist/components/dialog/styles.js +136 -0
  136. package/dist/components/divider/Divider.svelte +42 -0
  137. package/dist/components/divider/Divider.svelte.d.ts +11 -0
  138. package/dist/components/empty-state/EmptyState.svelte +82 -0
  139. package/dist/components/empty-state/EmptyState.svelte.d.ts +15 -0
  140. package/dist/components/field/Field.svelte +132 -0
  141. package/dist/components/field/Field.svelte.d.ts +23 -0
  142. package/dist/components/field/context.d.ts +12 -0
  143. package/dist/components/field/context.js +9 -0
  144. package/dist/components/frame/Frame.svelte +88 -0
  145. package/dist/components/frame/Frame.svelte.d.ts +19 -0
  146. package/dist/components/heading/Heading.svelte +82 -0
  147. package/dist/components/heading/Heading.svelte.d.ts +16 -0
  148. package/dist/components/input/Input.svelte +47 -0
  149. package/dist/components/input/Input.svelte.d.ts +14 -0
  150. package/dist/components/kbd/Kbd.svelte +40 -0
  151. package/dist/components/kbd/Kbd.svelte.d.ts +11 -0
  152. package/dist/components/link/Link.svelte +68 -0
  153. package/dist/components/link/Link.svelte.d.ts +16 -0
  154. package/dist/components/menu/ContextMenuContent.svelte +33 -0
  155. package/dist/components/menu/ContextMenuContent.svelte.d.ts +11 -0
  156. package/dist/components/menu/ContextMenuTrigger.svelte +44 -0
  157. package/dist/components/menu/ContextMenuTrigger.svelte.d.ts +11 -0
  158. package/dist/components/menu/MenuCheckboxItem.svelte +43 -0
  159. package/dist/components/menu/MenuCheckboxItem.svelte.d.ts +11 -0
  160. package/dist/components/menu/MenuContent.svelte +36 -0
  161. package/dist/components/menu/MenuContent.svelte.d.ts +10 -0
  162. package/dist/components/menu/MenuItem.svelte +41 -0
  163. package/dist/components/menu/MenuItem.svelte.d.ts +16 -0
  164. package/dist/components/menu/MenuLabel.svelte +24 -0
  165. package/dist/components/menu/MenuLabel.svelte.d.ts +10 -0
  166. package/dist/components/menu/MenuRadioItem.svelte +54 -0
  167. package/dist/components/menu/MenuRadioItem.svelte.d.ts +12 -0
  168. package/dist/components/menu/MenuSeparator.svelte +19 -0
  169. package/dist/components/menu/MenuSeparator.svelte.d.ts +8 -0
  170. package/dist/components/menu/MenuSubContent.svelte +34 -0
  171. package/dist/components/menu/MenuSubContent.svelte.d.ts +10 -0
  172. package/dist/components/menu/MenuSubTrigger.svelte +35 -0
  173. package/dist/components/menu/MenuSubTrigger.svelte.d.ts +11 -0
  174. package/dist/components/menu/context-menu.d.ts +11 -0
  175. package/dist/components/menu/context-menu.js +10 -0
  176. package/dist/components/menu/index.js +16 -0
  177. package/dist/components/message/MessageAction.svelte +62 -0
  178. package/dist/components/message/MessageAction.svelte.d.ts +16 -0
  179. package/dist/components/message/MessageActions.svelte +77 -0
  180. package/dist/components/message/MessageActions.svelte.d.ts +19 -0
  181. package/dist/components/message/MessageContent.svelte +68 -0
  182. package/dist/components/message/MessageContent.svelte.d.ts +12 -0
  183. package/dist/components/message/MessageCopy.svelte +106 -0
  184. package/dist/components/message/MessageCopy.svelte.d.ts +16 -0
  185. package/dist/components/message/MessageHeader.svelte +74 -0
  186. package/dist/components/message/MessageHeader.svelte.d.ts +15 -0
  187. package/dist/components/message/MessagePending.svelte +44 -0
  188. package/dist/components/message/MessagePending.svelte.d.ts +10 -0
  189. package/dist/components/message/MessageRoot.svelte +79 -0
  190. package/dist/components/message/MessageRoot.svelte.d.ts +20 -0
  191. package/dist/components/message/MessageTime.svelte +58 -0
  192. package/dist/components/message/MessageTime.svelte.d.ts +12 -0
  193. package/dist/components/message/context.d.ts +7 -0
  194. package/dist/components/message/context.js +11 -0
  195. package/dist/components/message/index.d.ts +18 -0
  196. package/dist/components/message/index.js +11 -0
  197. package/dist/components/notice/Notice.svelte +111 -0
  198. package/dist/components/notice/Notice.svelte.d.ts +26 -0
  199. package/dist/components/plan/Plan.svelte +198 -0
  200. package/dist/components/plan/Plan.svelte.d.ts +18 -0
  201. package/dist/components/popover/PopoverContent.svelte +42 -0
  202. package/dist/components/popover/PopoverContent.svelte.d.ts +10 -0
  203. package/dist/components/popover/index.d.ts +7 -0
  204. package/dist/components/popover/index.js +7 -0
  205. package/dist/components/progress/Progress.svelte +113 -0
  206. package/dist/components/progress/Progress.svelte.d.ts +11 -0
  207. package/dist/components/questionnaire/Questionnaire.svelte +315 -0
  208. package/dist/components/questionnaire/Questionnaire.svelte.d.ts +33 -0
  209. package/dist/components/queued-message/QueuedMessage.svelte +133 -0
  210. package/dist/components/queued-message/QueuedMessage.svelte.d.ts +23 -0
  211. package/dist/components/rail/RailItem.svelte +170 -0
  212. package/dist/components/rail/RailItem.svelte.d.ts +21 -0
  213. package/dist/components/rail/RailRoot.svelte +46 -0
  214. package/dist/components/rail/RailRoot.svelte.d.ts +13 -0
  215. package/dist/components/rail/RailSpacer.svelte +2 -0
  216. package/dist/components/rail/RailSpacer.svelte.d.ts +26 -0
  217. package/dist/components/rail/index.d.ts +6 -0
  218. package/dist/components/rail/index.js +4 -0
  219. package/dist/components/reasoning/ReasoningContent.svelte +56 -0
  220. package/dist/components/reasoning/ReasoningContent.svelte.d.ts +12 -0
  221. package/dist/components/reasoning/ReasoningRoot.svelte +102 -0
  222. package/dist/components/reasoning/ReasoningRoot.svelte.d.ts +25 -0
  223. package/dist/components/reasoning/ReasoningTrigger.svelte +106 -0
  224. package/dist/components/reasoning/ReasoningTrigger.svelte.d.ts +18 -0
  225. package/dist/components/reasoning/context.d.ts +8 -0
  226. package/dist/components/reasoning/context.js +11 -0
  227. package/dist/components/reasoning/index.d.ts +7 -0
  228. package/dist/components/reasoning/index.js +6 -0
  229. package/dist/components/resize-handle/ResizeHandle.svelte +177 -0
  230. package/dist/components/resize-handle/ResizeHandle.svelte.d.ts +29 -0
  231. package/dist/components/rolling-text/RollingText.svelte +51 -0
  232. package/dist/components/rolling-text/RollingText.svelte.d.ts +11 -0
  233. package/dist/components/segmented/SegmentedControl.svelte +171 -0
  234. package/dist/components/segmented/SegmentedControl.svelte.d.ts +20 -0
  235. package/dist/components/select/Select.svelte +146 -0
  236. package/dist/components/select/Select.svelte.d.ts +31 -0
  237. package/dist/components/separator/Separator.svelte +48 -0
  238. package/dist/components/separator/Separator.svelte.d.ts +11 -0
  239. package/dist/components/settings-row/SettingsRow.svelte +97 -0
  240. package/dist/components/settings-row/SettingsRow.svelte.d.ts +21 -0
  241. package/dist/components/shimmer/Shimmer.svelte +66 -0
  242. package/dist/components/shimmer/Shimmer.svelte.d.ts +12 -0
  243. package/dist/components/sidebar/SidebarContent.svelte +70 -0
  244. package/dist/components/sidebar/SidebarContent.svelte.d.ts +13 -0
  245. package/dist/components/sidebar/SidebarFooter.svelte +33 -0
  246. package/dist/components/sidebar/SidebarFooter.svelte.d.ts +10 -0
  247. package/dist/components/sidebar/SidebarGroup.svelte +123 -0
  248. package/dist/components/sidebar/SidebarGroup.svelte.d.ts +19 -0
  249. package/dist/components/sidebar/SidebarHeader.svelte +39 -0
  250. package/dist/components/sidebar/SidebarHeader.svelte.d.ts +12 -0
  251. package/dist/components/sidebar/SidebarItem.svelte +236 -0
  252. package/dist/components/sidebar/SidebarItem.svelte.d.ts +27 -0
  253. package/dist/components/sidebar/index.d.ts +11 -0
  254. package/dist/components/sidebar/index.js +6 -0
  255. package/dist/components/skeleton/Skeleton.svelte +61 -0
  256. package/dist/components/skeleton/Skeleton.svelte.d.ts +13 -0
  257. package/dist/components/spinner/Spinner.svelte +57 -0
  258. package/dist/components/spinner/Spinner.svelte.d.ts +12 -0
  259. package/dist/components/stack/Stack.svelte +99 -0
  260. package/dist/components/stack/Stack.svelte.d.ts +19 -0
  261. package/dist/components/status-indicator/StatusIndicator.svelte +97 -0
  262. package/dist/components/status-indicator/StatusIndicator.svelte.d.ts +14 -0
  263. package/dist/components/suggestions/SuggestionsItem.svelte +104 -0
  264. package/dist/components/suggestions/SuggestionsItem.svelte.d.ts +14 -0
  265. package/dist/components/suggestions/SuggestionsRoot.svelte +80 -0
  266. package/dist/components/suggestions/SuggestionsRoot.svelte.d.ts +20 -0
  267. package/dist/components/suggestions/context.d.ts +7 -0
  268. package/dist/components/suggestions/context.js +8 -0
  269. package/dist/components/suggestions/index.d.ts +5 -0
  270. package/dist/components/suggestions/index.js +5 -0
  271. package/dist/components/switch/Switch.svelte +175 -0
  272. package/dist/components/switch/Switch.svelte.d.ts +17 -0
  273. package/dist/components/tabs/Tabs.svelte +170 -0
  274. package/dist/components/tabs/Tabs.svelte.d.ts +22 -0
  275. package/dist/components/text/Text.svelte +88 -0
  276. package/dist/components/text/Text.svelte.d.ts +20 -0
  277. package/dist/components/textarea/Textarea.svelte +64 -0
  278. package/dist/components/textarea/Textarea.svelte.d.ts +13 -0
  279. package/dist/components/theme/Theme.svelte +49 -0
  280. package/dist/components/theme/Theme.svelte.d.ts +25 -0
  281. package/dist/components/toast/Toaster.svelte +223 -0
  282. package/dist/components/toast/Toaster.svelte.d.ts +9 -0
  283. package/dist/components/toast/toasts.svelte.d.ts +55 -0
  284. package/dist/components/toast/toasts.svelte.js +66 -0
  285. package/dist/components/tool/ToolContent.svelte +51 -0
  286. package/dist/components/tool/ToolContent.svelte.d.ts +11 -0
  287. package/dist/components/tool/ToolInput.svelte +21 -0
  288. package/dist/components/tool/ToolInput.svelte.d.ts +14 -0
  289. package/dist/components/tool/ToolOutput.svelte +33 -0
  290. package/dist/components/tool/ToolOutput.svelte.d.ts +16 -0
  291. package/dist/components/tool/ToolRoot.svelte +94 -0
  292. package/dist/components/tool/ToolRoot.svelte.d.ts +23 -0
  293. package/dist/components/tool/ToolSection.svelte +102 -0
  294. package/dist/components/tool/ToolSection.svelte.d.ts +16 -0
  295. package/dist/components/tool/ToolTrigger.svelte +191 -0
  296. package/dist/components/tool/ToolTrigger.svelte.d.ts +14 -0
  297. package/dist/components/tool/context.d.ts +18 -0
  298. package/dist/components/tool/context.js +11 -0
  299. package/dist/components/tool/index.d.ts +12 -0
  300. package/dist/components/tool/index.js +8 -0
  301. package/dist/components/tooltip/TooltipContent.svelte +76 -0
  302. package/dist/components/tooltip/TooltipContent.svelte.d.ts +12 -0
  303. package/dist/components/tooltip/TooltipRoot.svelte +37 -0
  304. package/dist/components/tooltip/TooltipRoot.svelte.d.ts +10 -0
  305. package/dist/components/tooltip/TooltipTrigger.svelte +25 -0
  306. package/dist/components/tooltip/TooltipTrigger.svelte.d.ts +5 -0
  307. package/dist/components/tooltip/index.d.ts +13 -0
  308. package/dist/components/tooltip/index.js +10 -0
  309. package/dist/components/tooltip/intent.d.ts +2 -0
  310. package/dist/components/tooltip/intent.js +29 -0
  311. package/dist/components/work-fold/WorkFold.svelte +100 -0
  312. package/dist/components/work-fold/WorkFold.svelte.d.ts +15 -0
  313. package/dist/index.d.ts +127 -0
  314. package/dist/index.js +93 -0
  315. package/dist/internal/Chevron.svelte +28 -0
  316. package/dist/internal/Chevron.svelte.d.ts +7 -0
  317. package/dist/internal/Code.svelte +70 -0
  318. package/dist/internal/Code.svelte.d.ts +10 -0
  319. package/dist/internal/Collapse.svelte +57 -0
  320. package/dist/internal/Collapse.svelte.d.ts +12 -0
  321. package/dist/internal/Glyph.svelte +89 -0
  322. package/dist/internal/Glyph.svelte.d.ts +37 -0
  323. package/dist/internal/Tile.svelte +86 -0
  324. package/dist/internal/Tile.svelte.d.ts +15 -0
  325. package/dist/internal/control.d.ts +58 -0
  326. package/dist/internal/control.js +74 -0
  327. package/dist/internal/disclosure.d.ts +7 -0
  328. package/dist/internal/disclosure.js +1 -0
  329. package/dist/internal/json.d.ts +13 -0
  330. package/dist/internal/json.js +51 -0
  331. package/dist/internal/kinds.d.ts +9 -0
  332. package/dist/internal/kinds.js +25 -0
  333. package/dist/internal/layer.d.ts +103 -0
  334. package/dist/internal/layer.js +129 -0
  335. package/dist/internal/loop.d.ts +35 -0
  336. package/dist/internal/loop.js +72 -0
  337. package/dist/internal/markers.stylex.d.ts +14 -0
  338. package/dist/internal/markers.stylex.js +10 -0
  339. package/dist/internal/roving.d.ts +17 -0
  340. package/dist/internal/roving.js +68 -0
  341. package/dist/internal/shared.d.ts +36 -0
  342. package/dist/internal/shared.js +44 -0
  343. package/dist/internal/sx.d.ts +14 -0
  344. package/dist/internal/sx.js +11 -0
  345. package/dist/preset.d.ts +102 -0
  346. package/dist/preset.js +334 -0
  347. package/dist/tokens.stylex.d.ts +104 -0
  348. package/dist/tokens.stylex.js +125 -0
  349. package/dist/vite.d.ts +16 -0
  350. package/dist/vite.js +58 -0
  351. package/package.json +123 -5
@@ -0,0 +1,113 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ import { loop } from '../../internal/loop.js';
5
+ import { attrs, type Sx } from '../../internal/sx.js';
6
+ import { colors, motion, radius } from '../../tokens.stylex.js';
7
+
8
+ export type ProgressProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
9
+ /** How far along, from 0 to `max`. Leave out while the amount is unknown. */
10
+ value?: number | null;
11
+ max?: number;
12
+ sx?: Sx;
13
+ };
14
+
15
+ const MOTION = '@media (prefers-reduced-motion: no-preference)';
16
+ const FORCED = '@media (forced-colors: active)';
17
+
18
+ // The bar of an unknown amount sweeps across on Narvi's shared clock, easing in
19
+ // and out. With reduced motion it breathes in place instead.
20
+ const ease = (t: number) => (t < 0.5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2);
21
+ const sweep = loop(
22
+ (reduced) => (reduced ? 2000 : 1400),
23
+ (element, { progress, reduced, rtl }) => {
24
+ if (reduced) {
25
+ element.style.translate = '';
26
+ element.style.opacity = String(
27
+ 0.35 + 0.65 * (0.5 - 0.5 * Math.cos(progress * 2 * Math.PI))
28
+ );
29
+ return;
30
+ }
31
+ const at = -100 + 350 * ease(progress);
32
+ element.style.opacity = '';
33
+ element.style.translate = `${rtl ? -at : at}% 0`;
34
+ },
35
+ (element) => {
36
+ element.style.translate = '';
37
+ element.style.opacity = '';
38
+ }
39
+ );
40
+
41
+ const styles = stylex.create({
42
+ track: {
43
+ position: 'relative',
44
+ boxSizing: 'border-box',
45
+ width: '100%',
46
+ height: '0.25rem',
47
+ borderRadius: radius.full,
48
+ backgroundColor: colors.well,
49
+ boxShadow: `inset 0 0 0 1px ${colors.line}`,
50
+ outlineStyle: 'solid',
51
+ outlineWidth: '1px',
52
+ outlineColor: 'transparent'
53
+ },
54
+ // Clips the fill to the track's rounded shape. The glow is a filter on this
55
+ // layer, so it follows what is visible and is not cut off with it.
56
+ clip: {
57
+ position: 'absolute',
58
+ inset: 0,
59
+ overflow: 'hidden',
60
+ borderRadius: radius.full,
61
+ filter: `drop-shadow(0 0 4px ${colors.glow})`
62
+ },
63
+ fill: {
64
+ display: 'block',
65
+ width: '100%',
66
+ height: '100%',
67
+ borderRadius: radius.full,
68
+ backgroundImage: {
69
+ default: `linear-gradient(90deg, ${colors.ithilStrong}, ${colors.ithil})`,
70
+ [FORCED]: 'linear-gradient(Highlight, Highlight)'
71
+ },
72
+ forcedColorAdjust: 'none'
73
+ },
74
+ // The fill is always full width and is slid into view, so a change of value
75
+ // moves it without laying anything out again.
76
+ known: {
77
+ translate: {
78
+ default: 'calc(var(--narvi-progress) - 100%) 0',
79
+ ':dir(rtl)': 'calc(100% - var(--narvi-progress)) 0'
80
+ },
81
+ transitionProperty: { default: 'none', [MOTION]: 'translate' },
82
+ transitionDuration: motion.slow,
83
+ transitionTimingFunction: motion.easeOut
84
+ },
85
+ unknown: {
86
+ width: { default: '100%', [MOTION]: '40%' }
87
+ }
88
+ });
89
+ </script>
90
+
91
+ <script lang="ts">
92
+ let { value = null, max = 100, sx, class: className, ...rest }: ProgressProps = $props();
93
+
94
+ const known = $derived(typeof value === 'number');
95
+ const percent = $derived(known ? Math.min(100, Math.max(0, ((value ?? 0) / max) * 100)) : 0);
96
+ </script>
97
+
98
+ <div
99
+ role="progressbar"
100
+ aria-valuemin={0}
101
+ aria-valuemax={max}
102
+ aria-valuenow={known ? value : undefined}
103
+ {...rest}
104
+ {...attrs([styles.track, sx], className)}
105
+ >
106
+ <span {...stylex.attrs(styles.clip)}>
107
+ <span
108
+ {...stylex.attrs(styles.fill, known ? styles.known : styles.unknown)}
109
+ style:--narvi-progress={known ? `${percent}%` : undefined}
110
+ {@attach !known && sweep}
111
+ ></span>
112
+ </span>
113
+ </div>
@@ -0,0 +1,11 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ import { type Sx } from '../../internal/sx.js';
3
+ export type ProgressProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
4
+ /** How far along, from 0 to `max`. Leave out while the amount is unknown. */
5
+ value?: number | null;
6
+ max?: number;
7
+ sx?: Sx;
8
+ };
9
+ declare const Progress: import("svelte").Component<ProgressProps, {}, "">;
10
+ type Progress = ReturnType<typeof Progress>;
11
+ export default Progress;
@@ -0,0 +1,315 @@
1
+ <!--
2
+ The agent asks the person questions, one at a time. Keys 1 to 9 pick an
3
+ answer, Enter goes on, ⌘Enter sends them all. Each question's prompt takes
4
+ focus as it arrives, so it is read out. Once answered, it folds into what
5
+ was said.
6
+ -->
7
+ <script lang="ts" module>
8
+ import * as stylex from '@stylexjs/stylex';
9
+ import { tick } from 'svelte';
10
+ import { shared } from '../../internal/shared.js';
11
+ import { attrs, type Sx } from '../../internal/sx.js';
12
+ import { colors, font, radius, space } from '../../tokens.stylex.js';
13
+ import Button from '../button/Button.svelte';
14
+ import Kbd from '../kbd/Kbd.svelte';
15
+ import Progress from '../progress/Progress.svelte';
16
+ import Textarea from '../textarea/Textarea.svelte';
17
+
18
+ export type Question = {
19
+ id: string;
20
+ prompt: string;
21
+ choices?: { label: string; description?: string }[];
22
+ /** Lets several choices be picked. */
23
+ multiple?: boolean;
24
+ /** Offers a free answer as well; a string is its placeholder. */
25
+ other?: boolean | string;
26
+ };
27
+
28
+ export type QuestionAnswer = { choices: string[]; other?: string; skipped?: boolean };
29
+ export type QuestionnaireAnswers = Record<string, QuestionAnswer>;
30
+
31
+ export type QuestionnaireProps = {
32
+ questions: Question[];
33
+ onsubmit: (answers: QuestionnaireAnswers) => void;
34
+ /** Declines to answer at all. */
35
+ ondecline?: () => void;
36
+ /** Once the answers are given, it folds into them. */
37
+ answered?: QuestionnaireAnswers;
38
+ labels?: Partial<
39
+ Record<'next' | 'back' | 'skip' | 'send' | 'decline' | 'required' | 'skipped', string>
40
+ >;
41
+ sx?: Sx;
42
+ class?: string;
43
+ };
44
+
45
+ const LABELS = {
46
+ next: 'Next',
47
+ back: 'Back',
48
+ skip: 'Skip',
49
+ send: 'Send answers',
50
+ decline: 'Decline',
51
+ required: 'Choose an answer, write one, or skip this question.',
52
+ skipped: 'Skipped'
53
+ };
54
+
55
+ const styles = stylex.create({
56
+ card: {
57
+ display: 'flex',
58
+ flexDirection: 'column',
59
+ gap: space.x3,
60
+ padding: '0.875rem',
61
+ borderRadius: radius.lg,
62
+ backgroundColor: colors.bgRaised,
63
+ boxShadow: `inset 0 0 0 1px color-mix(in oklab, ${colors.ithil} 35%, transparent), 0 0 0 3px ${colors.ithilSoft}`
64
+ },
65
+ head: { display: 'flex', flexDirection: 'column', gap: '0.5rem' },
66
+ count: { color: colors.ithil },
67
+ prompt: {
68
+ margin: 0,
69
+ fontSize: font.sizeLg,
70
+ fontWeight: font.weightMedium,
71
+ lineHeight: font.leadingSnug,
72
+ outlineStyle: 'none'
73
+ },
74
+ choices: {
75
+ display: 'flex',
76
+ flexDirection: 'column',
77
+ gap: '0.25rem',
78
+ margin: 0,
79
+ padding: 0,
80
+ borderWidth: 0
81
+ },
82
+ choice: {
83
+ display: 'grid',
84
+ gridTemplateColumns: 'auto minmax(0, 1fr) auto',
85
+ alignItems: 'start',
86
+ columnGap: '0.625rem',
87
+ paddingBlock: '0.5rem',
88
+ paddingInline: '0.625rem',
89
+ borderRadius: radius.md,
90
+ backgroundColor: {
91
+ default: 'transparent',
92
+ ':hover': { default: null, '@media (hover: hover)': colors.hover },
93
+ ':has(:checked)': colors.ithilSoft
94
+ },
95
+ boxShadow: {
96
+ default: `inset 0 0 0 1px ${colors.line}`,
97
+ ':has(:checked)': `inset 0 0 0 1px color-mix(in oklab, ${colors.ithil} 60%, transparent)`
98
+ },
99
+ cursor: 'pointer',
100
+ transitionProperty: 'background-color, box-shadow',
101
+ transitionDuration: '120ms',
102
+ transitionTimingFunction: 'ease'
103
+ },
104
+ // Drawn by hand, so it matches the stone in both schemes: a ring, filled
105
+ // with ithildin and a dot of the card's colour once chosen
106
+ input: {
107
+ appearance: 'none',
108
+ boxSizing: 'border-box',
109
+ flexShrink: 0,
110
+ width: '1rem',
111
+ height: '1rem',
112
+ margin: 0,
113
+ marginTop: '0.1875rem',
114
+ borderRadius: radius.full,
115
+ backgroundColor: { default: colors.well, ':checked': colors.ithil },
116
+ boxShadow: {
117
+ default: `inset 0 0 0 1px ${colors.edge}`,
118
+ ':checked': `inset 0 0 0 4px ${colors.ithil}, inset 0 0 0 10px ${colors.bgRaised}`
119
+ },
120
+ cursor: 'pointer',
121
+ outlineStyle: 'solid',
122
+ outlineWidth: { default: 0, ':focus-visible': '2px' },
123
+ outlineColor: colors.focusRing,
124
+ outlineOffset: '2px',
125
+ transitionProperty: 'box-shadow, background-color',
126
+ transitionDuration: '120ms',
127
+ transitionTimingFunction: 'ease'
128
+ },
129
+ // Several may be chosen: the same, squared
130
+ box: { borderRadius: radius.xs },
131
+ text: { display: 'flex', flexDirection: 'column', gap: '0.125rem', minWidth: 0 },
132
+ description: { color: colors.textMuted, fontSize: font.sizeSm },
133
+ error: { margin: 0, color: colors.danger, fontSize: font.sizeSm },
134
+ foot: { display: 'flex', alignItems: 'center', gap: space.x2 },
135
+ spacer: { flexGrow: 1 },
136
+ summary: { display: 'flex', flexDirection: 'column', gap: '0.5rem', margin: 0, padding: 0 },
137
+ q: { color: colors.textMuted, fontSize: font.sizeSm },
138
+ a: { margin: 0, fontSize: font.sizeMd }
139
+ });
140
+ </script>
141
+
142
+ <script lang="ts">
143
+ let {
144
+ questions,
145
+ onsubmit,
146
+ ondecline,
147
+ answered,
148
+ labels,
149
+ sx,
150
+ class: className
151
+ }: QuestionnaireProps = $props();
152
+
153
+ const word = $derived({ ...LABELS, ...labels });
154
+ const uid = $props.id();
155
+ let index = $state(0);
156
+ let answers = $state<QuestionnaireAnswers>({});
157
+ let error = $state('');
158
+ let prompt = $state<HTMLElement | null>(null);
159
+
160
+ const question = $derived(questions[index]);
161
+ const answer = $derived(answers[question?.id] ?? { choices: [] });
162
+ const last = $derived(index === questions.length - 1);
163
+
164
+ function set(next: QuestionAnswer) {
165
+ answers[question.id] = next;
166
+ error = '';
167
+ }
168
+
169
+ function pick(label: string) {
170
+ if (question.multiple) {
171
+ const has = answer.choices.includes(label);
172
+ set({
173
+ ...answer,
174
+ skipped: false,
175
+ choices: has ? answer.choices.filter((c) => c !== label) : [...answer.choices, label]
176
+ });
177
+ } else set({ ...answer, skipped: false, choices: [label] });
178
+ }
179
+
180
+ const given = (a: QuestionAnswer | undefined) =>
181
+ !!a && (a.skipped || a.choices.length > 0 || !!a.other?.trim());
182
+
183
+ async function go(to: number) {
184
+ index = to;
185
+ error = '';
186
+ await tick();
187
+ prompt?.focus();
188
+ }
189
+
190
+ function next() {
191
+ if (!given(answers[question.id])) {
192
+ error = word.required;
193
+ return;
194
+ }
195
+ if (last) onsubmit($state.snapshot(answers));
196
+ else go(index + 1);
197
+ }
198
+
199
+ function skip() {
200
+ set({ choices: [], skipped: true });
201
+ if (last) onsubmit($state.snapshot(answers));
202
+ else go(index + 1);
203
+ }
204
+
205
+ function onkeydown(event: KeyboardEvent) {
206
+ if (event.isComposing) return;
207
+ const typing = event.target instanceof HTMLTextAreaElement;
208
+ if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) {
209
+ event.preventDefault();
210
+ for (const q of questions)
211
+ if (!given(answers[q.id])) answers[q.id] = { choices: [], skipped: true };
212
+ onsubmit($state.snapshot(answers));
213
+ } else if (event.key === 'Enter' && !typing && !event.shiftKey) {
214
+ event.preventDefault();
215
+ next();
216
+ } else if (
217
+ !typing &&
218
+ /^[1-9]$/.test(event.key) &&
219
+ !event.metaKey &&
220
+ !event.ctrlKey &&
221
+ !event.altKey
222
+ ) {
223
+ const choice = question.choices?.[Number(event.key) - 1];
224
+ if (choice) {
225
+ event.preventDefault();
226
+ pick(choice.label);
227
+ }
228
+ }
229
+ }
230
+
231
+ const say = (a: QuestionAnswer | undefined) =>
232
+ !a || a.skipped ? word.skipped : [...a.choices, a.other?.trim()].filter(Boolean).join(', ');
233
+ </script>
234
+
235
+ {#if answered}
236
+ <dl data-slot="questionnaire" data-answered {...attrs([styles.summary, sx], className)}>
237
+ {#each questions as q (q.id)}
238
+ <div>
239
+ <dt {...stylex.attrs(styles.q)}>{q.prompt}</dt>
240
+ <dd {...stylex.attrs(styles.a)}>{say(answered[q.id])}</dd>
241
+ </div>
242
+ {/each}
243
+ </dl>
244
+ {:else if question}
245
+ <section
246
+ role="group"
247
+ aria-labelledby="{uid}-prompt"
248
+ data-slot="questionnaire"
249
+ {...attrs([styles.card, sx], className)}
250
+ {onkeydown}
251
+ >
252
+ <div {...stylex.attrs(styles.head)}>
253
+ <span {...stylex.attrs(shared.eyebrow, styles.count)}
254
+ >Question {index + 1} of {questions.length}</span
255
+ >
256
+ {#if questions.length > 1}
257
+ <Progress
258
+ value={index + 1}
259
+ max={questions.length}
260
+ aria-label="Question {index + 1} of {questions.length}"
261
+ />
262
+ {/if}
263
+ </div>
264
+ <p bind:this={prompt} id="{uid}-prompt" tabindex="-1" {...stylex.attrs(styles.prompt)}>
265
+ {question.prompt}
266
+ </p>
267
+
268
+ {#if question.choices?.length}
269
+ <fieldset {...stylex.attrs(styles.choices)} aria-labelledby="{uid}-prompt">
270
+ {#each question.choices as choice, n (choice.label)}
271
+ <label {...stylex.attrs(styles.choice)}>
272
+ <input
273
+ type={question.multiple ? 'checkbox' : 'radio'}
274
+ name="{uid}-{question.id}"
275
+ checked={answer.choices.includes(choice.label)}
276
+ onchange={() => pick(choice.label)}
277
+ {...stylex.attrs(styles.input, question.multiple && styles.box)}
278
+ />
279
+ <span {...stylex.attrs(styles.text)}>
280
+ <span>{choice.label}</span>
281
+ {#if choice.description}<span {...stylex.attrs(styles.description)}
282
+ >{choice.description}</span
283
+ >{/if}
284
+ </span>
285
+ {#if n < 9}<Kbd aria-hidden="true">{n + 1}</Kbd>{/if}
286
+ </label>
287
+ {/each}
288
+ </fieldset>
289
+ {/if}
290
+
291
+ {#if question.other || !question.choices?.length}
292
+ <Textarea
293
+ autosize
294
+ rows={2}
295
+ aria-label={typeof question.other === 'string' ? question.other : 'Your answer'}
296
+ placeholder={typeof question.other === 'string' ? question.other : 'Your answer'}
297
+ value={answer.other ?? ''}
298
+ oninput={(event) => set({ ...answer, skipped: false, other: event.currentTarget.value })}
299
+ />
300
+ {/if}
301
+
302
+ {#if error}<p role="alert" {...stylex.attrs(styles.error)}>{error}</p>{/if}
303
+
304
+ <div {...stylex.attrs(styles.foot)}>
305
+ {#if ondecline}<Button size="sm" variant="ghost" onclick={ondecline}>{word.decline}</Button
306
+ >{/if}
307
+ <span {...stylex.attrs(styles.spacer)}></span>
308
+ <Button size="sm" variant="ghost" onclick={skip}>{word.skip}</Button>
309
+ {#if index > 0}<Button size="sm" variant="ghost" onclick={() => go(index - 1)}
310
+ >{word.back}</Button
311
+ >{/if}
312
+ <Button size="sm" variant="primary" onclick={next}>{last ? word.send : word.next}</Button>
313
+ </div>
314
+ </section>
315
+ {/if}
@@ -0,0 +1,33 @@
1
+ import { type Sx } from '../../internal/sx.js';
2
+ export type Question = {
3
+ id: string;
4
+ prompt: string;
5
+ choices?: {
6
+ label: string;
7
+ description?: string;
8
+ }[];
9
+ /** Lets several choices be picked. */
10
+ multiple?: boolean;
11
+ /** Offers a free answer as well; a string is its placeholder. */
12
+ other?: boolean | string;
13
+ };
14
+ export type QuestionAnswer = {
15
+ choices: string[];
16
+ other?: string;
17
+ skipped?: boolean;
18
+ };
19
+ export type QuestionnaireAnswers = Record<string, QuestionAnswer>;
20
+ export type QuestionnaireProps = {
21
+ questions: Question[];
22
+ onsubmit: (answers: QuestionnaireAnswers) => void;
23
+ /** Declines to answer at all. */
24
+ ondecline?: () => void;
25
+ /** Once the answers are given, it folds into them. */
26
+ answered?: QuestionnaireAnswers;
27
+ labels?: Partial<Record<'next' | 'back' | 'skip' | 'send' | 'decline' | 'required' | 'skipped', string>>;
28
+ sx?: Sx;
29
+ class?: string;
30
+ };
31
+ declare const Questionnaire: import("svelte").Component<QuestionnaireProps, {}, "">;
32
+ type Questionnaire = ReturnType<typeof Questionnaire>;
33
+ export default Questionnaire;
@@ -0,0 +1,133 @@
1
+ <!--
2
+ A message the person sent while the agent was still at work. It waits at
3
+ the foot of the conversation, quieter than a sent message, saying what will
4
+ happen to it, with ways to change that.
5
+ -->
6
+ <script lang="ts" module>
7
+ import * as stylex from '@stylexjs/stylex';
8
+ import type { Snippet } from 'svelte';
9
+ import Glyph, { type GlyphName } from '../../internal/Glyph.svelte';
10
+ import { attrs, type Sx } from '../../internal/sx.js';
11
+ import { colors, font, radius } from '../../tokens.stylex.js';
12
+ import Button from '../button/Button.svelte';
13
+ import * as Tooltip from '../tooltip/index.js';
14
+
15
+ export type QueuedMessageStatus = 'queued' | 'editing' | 'unsent';
16
+
17
+ export type QueuedMessageProps = {
18
+ status?: QueuedMessageStatus;
19
+ /** Overrides what the status line says. */
20
+ statusText?: string;
21
+ onedit?: () => void;
22
+ /** Takes the message back into the composer. */
23
+ ontakeback?: () => void;
24
+ /** Sends it into the turn under way, so the agent hears it now. */
25
+ onsteer?: () => void;
26
+ /** Stops the turn and sends it. */
27
+ onsend?: () => void;
28
+ labels?: Partial<Record<'edit' | 'takeBack' | 'steer' | 'send', string>>;
29
+ sx?: Sx;
30
+ class?: string;
31
+ /** The message. */
32
+ children?: Snippet;
33
+ };
34
+
35
+ const STATUS: Record<QueuedMessageStatus, string> = {
36
+ queued: 'Queued · sends when this turn ends',
37
+ editing: 'Queued · editing',
38
+ unsent: 'Not sent'
39
+ };
40
+
41
+ const styles = stylex.create({
42
+ root: {
43
+ display: 'flex',
44
+ flexDirection: 'column',
45
+ alignItems: 'flex-end',
46
+ gap: '0.25rem',
47
+ minWidth: 0
48
+ },
49
+ bubble: {
50
+ maxWidth: 'min(85%, 36rem)',
51
+ paddingBlock: '0.5625rem',
52
+ paddingInline: '0.875rem',
53
+ borderRadius: radius.frame,
54
+ backgroundColor: 'transparent',
55
+ boxShadow: `inset 0 0 0 1px ${colors.lineStrong}`,
56
+ color: colors.textMuted,
57
+ fontSize: font.sizeLg,
58
+ lineHeight: font.leadingNormal,
59
+ whiteSpace: 'pre-wrap',
60
+ overflowWrap: 'anywhere'
61
+ },
62
+ // Dashed while it waits: not sent yet
63
+ waiting: {
64
+ boxShadow: 'none',
65
+ outlineStyle: 'dashed',
66
+ outlineWidth: '1px',
67
+ outlineColor: colors.lineStrong,
68
+ outlineOffset: '-1px'
69
+ },
70
+ foot: { display: 'flex', alignItems: 'center', gap: '0.125rem' },
71
+ status: { paddingInlineEnd: '0.25rem', color: colors.textSubtle, fontSize: font.sizeXs },
72
+ unsent: { color: colors.danger }
73
+ });
74
+ </script>
75
+
76
+ <script lang="ts">
77
+ let {
78
+ status = 'queued',
79
+ statusText,
80
+ onedit,
81
+ ontakeback,
82
+ onsteer,
83
+ onsend,
84
+ labels,
85
+ sx,
86
+ class: className,
87
+ children
88
+ }: QueuedMessageProps = $props();
89
+
90
+ const actions = $derived(
91
+ (
92
+ [
93
+ ['edit', onedit, 'pencil', 'Edit'],
94
+ ['takeBack', ontakeback, 'undo', 'Take back'],
95
+ ['steer', onsteer, 'steer', 'Send into this turn'],
96
+ ['send', onsend, 'send', 'Stop the turn and send']
97
+ ] as const
98
+ ).filter(([, handler]) => handler)
99
+ );
100
+ </script>
101
+
102
+ <div data-slot="queued-message" data-status={status} {...attrs([styles.root, sx], className)}>
103
+ <div {...stylex.attrs(styles.bubble, status !== 'unsent' && styles.waiting)}>
104
+ {@render children?.()}
105
+ </div>
106
+ <div {...stylex.attrs(styles.foot)}>
107
+ <span {...stylex.attrs(styles.status, status === 'unsent' && styles.unsent)}
108
+ >{statusText ?? STATUS[status]}</span
109
+ >
110
+ <Tooltip.Provider delayDuration={400}>
111
+ {#each actions as [key, handler, icon, fallback] (key)}
112
+ {@const label = labels?.[key] ?? fallback}
113
+ <Tooltip.Root>
114
+ <Tooltip.Trigger>
115
+ {#snippet child({ props })}
116
+ <Button
117
+ {...props}
118
+ variant="ghost"
119
+ size="sm"
120
+ iconOnly
121
+ aria-label={label}
122
+ onclick={() => handler?.()}
123
+ >
124
+ <Glyph name={icon as GlyphName} />
125
+ </Button>
126
+ {/snippet}
127
+ </Tooltip.Trigger>
128
+ <Tooltip.Content>{label}</Tooltip.Content>
129
+ </Tooltip.Root>
130
+ {/each}
131
+ </Tooltip.Provider>
132
+ </div>
133
+ </div>
@@ -0,0 +1,23 @@
1
+ import type { Snippet } from 'svelte';
2
+ import { type Sx } from '../../internal/sx.js';
3
+ export type QueuedMessageStatus = 'queued' | 'editing' | 'unsent';
4
+ export type QueuedMessageProps = {
5
+ status?: QueuedMessageStatus;
6
+ /** Overrides what the status line says. */
7
+ statusText?: string;
8
+ onedit?: () => void;
9
+ /** Takes the message back into the composer. */
10
+ ontakeback?: () => void;
11
+ /** Sends it into the turn under way, so the agent hears it now. */
12
+ onsteer?: () => void;
13
+ /** Stops the turn and sends it. */
14
+ onsend?: () => void;
15
+ labels?: Partial<Record<'edit' | 'takeBack' | 'steer' | 'send', string>>;
16
+ sx?: Sx;
17
+ class?: string;
18
+ /** The message. */
19
+ children?: Snippet;
20
+ };
21
+ declare const QueuedMessage: import("svelte").Component<QueuedMessageProps, {}, "">;
22
+ type QueuedMessage = ReturnType<typeof QueuedMessage>;
23
+ export default QueuedMessage;