@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,88 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLAttributes } from 'svelte/elements';
5
+ import { attrs, type Sx } from '../../internal/sx.js';
6
+ import { colors, font } from '../../tokens.stylex.js';
7
+
8
+ export type TextSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
9
+ export type TextTone = 'default' | 'muted' | 'subtle' | 'accent' | 'danger' | 'success';
10
+ export type TextWeight = 'regular' | 'medium' | 'semibold';
11
+
12
+ export type TextProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
13
+ /** Element to render. */
14
+ as?: 'p' | 'span' | 'div' | 'label' | 'strong' | 'em' | 'small';
15
+ size?: TextSize;
16
+ tone?: TextTone;
17
+ weight?: TextWeight;
18
+ /** Cuts the text off with an ellipsis on one line. */
19
+ truncate?: boolean;
20
+ sx?: Sx;
21
+ children?: Snippet;
22
+ };
23
+
24
+ const styles = stylex.create({
25
+ base: {
26
+ margin: 0,
27
+ fontFamily: font.body,
28
+ fontStyle: 'normal',
29
+ lineHeight: font.leadingNormal,
30
+ textWrap: 'pretty'
31
+ },
32
+ truncate: {
33
+ display: 'block',
34
+ minWidth: 0,
35
+ overflow: 'hidden',
36
+ textOverflow: 'ellipsis',
37
+ whiteSpace: 'nowrap'
38
+ }
39
+ });
40
+
41
+ const sizes = stylex.create({
42
+ xs: { fontSize: font.sizeXs },
43
+ sm: { fontSize: font.sizeSm },
44
+ md: { fontSize: font.sizeMd },
45
+ lg: { fontSize: font.sizeLg },
46
+ xl: { fontSize: font.sizeXl }
47
+ });
48
+
49
+ const tones = stylex.create({
50
+ default: { color: colors.text },
51
+ muted: { color: colors.textMuted },
52
+ subtle: { color: colors.textSubtle },
53
+ accent: { color: colors.ithil },
54
+ danger: { color: colors.danger },
55
+ success: { color: colors.success }
56
+ });
57
+
58
+ const weights = stylex.create({
59
+ regular: { fontWeight: font.weightRegular },
60
+ medium: { fontWeight: font.weightMedium },
61
+ semibold: { fontWeight: font.weightSemibold }
62
+ });
63
+ </script>
64
+
65
+ <script lang="ts">
66
+ let {
67
+ as = 'p',
68
+ size = 'md',
69
+ tone = 'default',
70
+ weight = 'regular',
71
+ truncate = false,
72
+ sx,
73
+ class: className,
74
+ children,
75
+ ...rest
76
+ }: TextProps = $props();
77
+ </script>
78
+
79
+ <svelte:element
80
+ this={as}
81
+ {...rest}
82
+ {...attrs(
83
+ [styles.base, sizes[size], tones[tone], weights[weight], truncate && styles.truncate, sx],
84
+ className
85
+ )}
86
+ >
87
+ {@render children?.()}
88
+ </svelte:element>
@@ -0,0 +1,20 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type TextSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
5
+ export type TextTone = 'default' | 'muted' | 'subtle' | 'accent' | 'danger' | 'success';
6
+ export type TextWeight = 'regular' | 'medium' | 'semibold';
7
+ export type TextProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
8
+ /** Element to render. */
9
+ as?: 'p' | 'span' | 'div' | 'label' | 'strong' | 'em' | 'small';
10
+ size?: TextSize;
11
+ tone?: TextTone;
12
+ weight?: TextWeight;
13
+ /** Cuts the text off with an ellipsis on one line. */
14
+ truncate?: boolean;
15
+ sx?: Sx;
16
+ children?: Snippet;
17
+ };
18
+ declare const Text: import("svelte").Component<TextProps, {}, "">;
19
+ type Text = ReturnType<typeof Text>;
20
+ export default Text;
@@ -0,0 +1,64 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { HTMLTextareaAttributes } from 'svelte/elements';
4
+ import { control } from '../../internal/control.js';
5
+ import { attrs, type Sx } from '../../internal/sx.js';
6
+ import { getFieldContext } from '../field/context.js';
7
+
8
+ export type TextareaProps = HTMLTextareaAttributes & {
9
+ /** Marks the textarea as invalid. Inherited from a surrounding Field with an `error`. */
10
+ invalid?: boolean;
11
+ /** Grows with its content instead of scrolling, in browsers that support `field-sizing`. */
12
+ autosize?: boolean;
13
+ sx?: Sx;
14
+ ref?: HTMLTextAreaElement | null;
15
+ };
16
+
17
+ const styles = stylex.create({
18
+ base: {
19
+ minHeight: '5rem',
20
+ paddingBlock: '0.5rem',
21
+ paddingInline: '0.625rem',
22
+ resize: 'vertical'
23
+ },
24
+ autosize: {
25
+ fieldSizing: 'content',
26
+ resize: 'none'
27
+ }
28
+ });
29
+ </script>
30
+
31
+ <script lang="ts">
32
+ let {
33
+ value = $bindable(),
34
+ invalid,
35
+ autosize = false,
36
+ disabled,
37
+ required,
38
+ id,
39
+ rows = 3,
40
+ 'aria-describedby': describedBy,
41
+ sx,
42
+ class: className,
43
+ ref = $bindable(null),
44
+ ...rest
45
+ }: TextareaProps = $props();
46
+
47
+ const field = getFieldContext();
48
+ const isInvalid = $derived(invalid ?? field?.invalid ?? false);
49
+ </script>
50
+
51
+ <textarea
52
+ bind:this={ref}
53
+ bind:value
54
+ {rows}
55
+ id={id ?? field?.id}
56
+ disabled={disabled ?? field?.disabled}
57
+ required={required ?? field?.required}
58
+ aria-invalid={isInvalid ? true : undefined}
59
+ aria-describedby={describedBy ?? field?.describedBy}
60
+ {...rest}
61
+ {...attrs(
62
+ [control.base, styles.base, autosize && styles.autosize, isInvalid && control.invalid, sx],
63
+ className
64
+ )}></textarea>
@@ -0,0 +1,13 @@
1
+ import type { HTMLTextareaAttributes } from 'svelte/elements';
2
+ import { type Sx } from '../../internal/sx.js';
3
+ export type TextareaProps = HTMLTextareaAttributes & {
4
+ /** Marks the textarea as invalid. Inherited from a surrounding Field with an `error`. */
5
+ invalid?: boolean;
6
+ /** Grows with its content instead of scrolling, in browsers that support `field-sizing`. */
7
+ autosize?: boolean;
8
+ sx?: Sx;
9
+ ref?: HTMLTextAreaElement | null;
10
+ };
11
+ declare const Textarea: import("svelte").Component<TextareaProps, {}, "value" | "ref">;
12
+ type Textarea = ReturnType<typeof Textarea>;
13
+ export default Textarea;
@@ -0,0 +1,49 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLAttributes } from 'svelte/elements';
5
+ import { attrs, type Sx } from '../../internal/sx.js';
6
+ import { colors } from '../../tokens.stylex.js';
7
+
8
+ export type ThemeScheme = 'light' | 'dark' | 'system';
9
+
10
+ /** The result of `stylex.createTheme`, for any token group. */
11
+ export type ThemeOverrides = Readonly<{ theme: string }>;
12
+
13
+ export type ThemeProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
14
+ /**
15
+ * Colour scheme for everything inside. `system` follows the user's OS setting.
16
+ * Leave it out to keep whatever scheme the surrounding page uses.
17
+ */
18
+ scheme?: ThemeScheme;
19
+ /**
20
+ * One or more themes from `stylex.createTheme`. Their token overrides apply
21
+ * to everything inside.
22
+ */
23
+ theme?: ThemeOverrides | ReadonlyArray<ThemeOverrides>;
24
+ sx?: Sx;
25
+ children?: Snippet;
26
+ };
27
+
28
+ const styles = stylex.create({
29
+ // `display: contents` keeps the wrapper out of layout, while the inherited
30
+ // `color-scheme` and `color` still reach its children.
31
+ base: {
32
+ display: 'contents',
33
+ color: colors.text
34
+ },
35
+ light: { colorScheme: 'light' },
36
+ dark: { colorScheme: 'dark' },
37
+ system: { colorScheme: 'light dark' }
38
+ });
39
+ </script>
40
+
41
+ <script lang="ts">
42
+ let { scheme, theme, sx, class: className, children, ...rest }: ThemeProps = $props();
43
+
44
+ const themes = $derived(theme === undefined ? [] : Array.isArray(theme) ? theme : [theme]);
45
+ </script>
46
+
47
+ <div {...rest} {...attrs([styles.base, scheme && styles[scheme], ...themes, sx], className)}>
48
+ {@render children?.()}
49
+ </div>
@@ -0,0 +1,25 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type ThemeScheme = 'light' | 'dark' | 'system';
5
+ /** The result of `stylex.createTheme`, for any token group. */
6
+ export type ThemeOverrides = Readonly<{
7
+ theme: string;
8
+ }>;
9
+ export type ThemeProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
10
+ /**
11
+ * Colour scheme for everything inside. `system` follows the user's OS setting.
12
+ * Leave it out to keep whatever scheme the surrounding page uses.
13
+ */
14
+ scheme?: ThemeScheme;
15
+ /**
16
+ * One or more themes from `stylex.createTheme`. Their token overrides apply
17
+ * to everything inside.
18
+ */
19
+ theme?: ThemeOverrides | ReadonlyArray<ThemeOverrides>;
20
+ sx?: Sx;
21
+ children?: Snippet;
22
+ };
23
+ declare const Theme: import("svelte").Component<ThemeProps, {}, "">;
24
+ type Theme = ReturnType<typeof Theme>;
25
+ export default Theme;
@@ -0,0 +1,223 @@
1
+ <!--
2
+ Where toasts appear. Place one near the root of the app.
3
+
4
+ It sits in the top layer, so toasts stay above dialogs and can still be
5
+ clicked while one is open. Each toast waits while the pointer or focus is on
6
+ the stack, and while the window is hidden, so none goes unread.
7
+ -->
8
+ <script lang="ts" module>
9
+ import * as stylex from '@stylexjs/stylex';
10
+ import { colors, font, motion, radius, space } from '../../tokens.stylex.js';
11
+ import Glyph from '../../internal/Glyph.svelte';
12
+ import Button from '../button/Button.svelte';
13
+ import Spinner from '../spinner/Spinner.svelte';
14
+ import { toast, toasts, type ToastEntry } from './toasts.svelte.js';
15
+
16
+ export type ToasterProps = {
17
+ /** Distance from the top of the window, to clear an app's own header. */
18
+ offset?: string;
19
+ /** Accessible name of the region. */
20
+ label?: string;
21
+ };
22
+
23
+ const MOTION = '@media (prefers-reduced-motion: no-preference)';
24
+
25
+ const styles = stylex.create({
26
+ // The top layer brings the browser's popover styles; these undo them
27
+ region: {
28
+ position: 'fixed',
29
+ inset: 'auto',
30
+ top: 'var(--narvi-toaster-offset)',
31
+ insetInlineEnd: space.x4,
32
+ display: 'flex',
33
+ flexDirection: 'column',
34
+ gap: space.x2,
35
+ width: 'min(22rem, calc(100vw - 2rem))',
36
+ height: 'auto',
37
+ margin: 0,
38
+ padding: 0,
39
+ overflow: 'visible',
40
+ borderWidth: 0,
41
+ backgroundColor: 'transparent',
42
+ pointerEvents: 'none'
43
+ },
44
+ toast: {
45
+ display: 'grid',
46
+ gridTemplateColumns: 'auto minmax(0, 1fr) auto',
47
+ alignItems: 'start',
48
+ gap: '0.625rem',
49
+ paddingBlock: '0.75rem',
50
+ paddingInlineStart: '0.875rem',
51
+ paddingInlineEnd: '0.5rem',
52
+ borderRadius: radius.xl,
53
+ backgroundColor: colors.bgRaised,
54
+ boxShadow: `inset 0 0 0 1px ${colors.lineStrong}, inset 0 1px 0 ${colors.highlight}, 0 2px 4px ${colors.shade}, 0 16px 40px -12px ${colors.shade}`,
55
+ color: colors.text,
56
+ fontFamily: font.body,
57
+ fontSize: font.sizeMd,
58
+ lineHeight: font.leadingSnug,
59
+ pointerEvents: 'auto',
60
+ opacity: { default: 1, '@starting-style': 0 },
61
+ translate: { default: null, [MOTION]: { default: '0 0', '@starting-style': '0 -0.5rem' } },
62
+ transitionProperty: { default: 'opacity', [MOTION]: 'opacity, translate' },
63
+ transitionDuration: motion.slow,
64
+ transitionTimingFunction: motion.easeOut
65
+ },
66
+ leaving: {
67
+ opacity: 0,
68
+ translate: { default: null, [MOTION]: '0.5rem 0' },
69
+ transitionDuration: motion.fast
70
+ },
71
+ icon: { display: 'grid', placeItems: 'center', width: '1rem', height: '1.25rem' },
72
+ dot: {
73
+ width: '0.375rem',
74
+ height: '0.375rem',
75
+ borderRadius: '9999px',
76
+ backgroundColor: colors.ithil
77
+ },
78
+ success: { color: colors.success },
79
+ error: { color: colors.danger },
80
+ muted: { color: colors.textMuted },
81
+ text: {
82
+ display: 'flex',
83
+ flexDirection: 'column',
84
+ gap: '0.125rem',
85
+ minWidth: 0,
86
+ paddingTop: '1px'
87
+ },
88
+ title: { fontWeight: font.weightMedium },
89
+ // What went wrong can be selected and copied
90
+ description: {
91
+ color: colors.textMuted,
92
+ fontSize: font.sizeSm,
93
+ userSelect: 'text',
94
+ overflowWrap: 'anywhere'
95
+ },
96
+ actions: { display: 'flex', alignItems: 'center', gap: '0.25rem', marginTop: '-0.25rem' }
97
+ });
98
+ </script>
99
+
100
+ <script lang="ts">
101
+ let { offset = '1rem', label = 'Notifications' }: ToasterProps = $props();
102
+
103
+ let region = $state<HTMLElement | null>(null);
104
+ let held = $state(false);
105
+ let hidden = $state(false);
106
+ // Toasts on their way out, kept a moment so they can fade
107
+ let leaving = $state<number[]>([]);
108
+
109
+ $effect(() => {
110
+ region?.showPopover?.();
111
+ const visibility = () => (hidden = document.hidden);
112
+ document.addEventListener('visibilitychange', visibility);
113
+ return () => document.removeEventListener('visibilitychange', visibility);
114
+ });
115
+
116
+ function close(entry: ToastEntry) {
117
+ if (leaving.includes(entry.id)) return;
118
+ leaving = [...leaving, entry.id];
119
+ setTimeout(() => {
120
+ toast.dismiss(entry.id);
121
+ leaving = leaving.filter((id) => id !== entry.id);
122
+ }, 140);
123
+ }
124
+
125
+ // Each toast's own timer, which runs only while nothing holds the stack
126
+ function timed(element: HTMLElement, entry: ToastEntry) {
127
+ let remaining = entry.duration ?? Infinity;
128
+ let started = 0;
129
+ let timer: ReturnType<typeof setTimeout> | undefined;
130
+ const run = () => {
131
+ if (!Number.isFinite(remaining)) return;
132
+ started = performance.now();
133
+ timer = setTimeout(() => close(entry), remaining);
134
+ };
135
+ const pause = () => {
136
+ if (timer === undefined) return;
137
+ clearTimeout(timer);
138
+ timer = undefined;
139
+ remaining -= performance.now() - started;
140
+ };
141
+ return { run, pause, stop: () => clearTimeout(timer), element };
142
+ }
143
+ </script>
144
+
145
+ <section
146
+ bind:this={region}
147
+ popover="manual"
148
+ aria-label={label}
149
+ data-slot="toaster"
150
+ style:--narvi-toaster-offset={offset}
151
+ {...stylex.attrs(styles.region)}
152
+ onpointerenter={() => (held = true)}
153
+ onpointerleave={() => (held = false)}
154
+ onfocusin={() => (held = true)}
155
+ onfocusout={(event) => {
156
+ if (!region?.contains(event.relatedTarget as Node | null)) held = false;
157
+ }}
158
+ >
159
+ {#each toasts.list as entry (entry.id)}
160
+ {@const clock = timed(region!, entry)}
161
+ <div
162
+ role={entry.tone === 'error' ? 'alert' : 'status'}
163
+ data-tone={entry.tone}
164
+ {...stylex.attrs(styles.toast, leaving.includes(entry.id) && styles.leaving)}
165
+ {@attach () => {
166
+ // Restarts when the toast changes, as a loading toast turns into a result
167
+ void entry.duration;
168
+ if (!held && !hidden) clock.run();
169
+ return () => clock.pause();
170
+ }}
171
+ >
172
+ <span
173
+ {...stylex.attrs(
174
+ styles.icon,
175
+ entry.tone === 'success' && styles.success,
176
+ entry.tone === 'error' && styles.error,
177
+ (entry.tone === 'default' || entry.tone === 'loading') && styles.muted
178
+ )}
179
+ >
180
+ {#if entry.tone === 'loading'}
181
+ <Spinner size={14} label={null} />
182
+ {:else if entry.tone === 'success'}
183
+ <Glyph name="check" stroke={1.75} />
184
+ {:else if entry.tone === 'error'}
185
+ <Glyph name="alert" />
186
+ {:else}
187
+ <span {...stylex.attrs(styles.dot)}></span>
188
+ {/if}
189
+ </span>
190
+ <span {...stylex.attrs(styles.text)}>
191
+ <span {...stylex.attrs(styles.title)}>{entry.title}</span>
192
+ {#if entry.description}
193
+ <span {...stylex.attrs(styles.description)}>{entry.description}</span>
194
+ {/if}
195
+ </span>
196
+ <span {...stylex.attrs(styles.actions)}>
197
+ {#if entry.action}
198
+ <Button
199
+ size="sm"
200
+ variant="secondary"
201
+ onclick={() => {
202
+ entry.action?.onclick();
203
+ close(entry);
204
+ }}
205
+ >
206
+ {entry.action.label}
207
+ </Button>
208
+ {/if}
209
+ {#if entry.tone !== 'loading'}
210
+ <Button
211
+ size="sm"
212
+ variant="ghost"
213
+ iconOnly
214
+ aria-label="Dismiss"
215
+ onclick={() => close(entry)}
216
+ >
217
+ <Glyph name="close" size={14} />
218
+ </Button>
219
+ {/if}
220
+ </span>
221
+ </div>
222
+ {/each}
223
+ </section>
@@ -0,0 +1,9 @@
1
+ export type ToasterProps = {
2
+ /** Distance from the top of the window, to clear an app's own header. */
3
+ offset?: string;
4
+ /** Accessible name of the region. */
5
+ label?: string;
6
+ };
7
+ declare const Toaster: import("svelte").Component<ToasterProps, {}, "">;
8
+ type Toaster = ReturnType<typeof Toaster>;
9
+ export default Toaster;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Toasts: short notes about something that happened away from where the person
3
+ * is looking. Call `toast()` from anywhere; one <Toaster /> shows them.
4
+ */
5
+ export type ToastTone = 'default' | 'success' | 'error' | 'loading';
6
+ export type ToastAction = {
7
+ label: string;
8
+ onclick: () => void;
9
+ };
10
+ export type ToastOptions = {
11
+ description?: string;
12
+ tone?: ToastTone;
13
+ /** A button in the toast, such as Undo or Retry. */
14
+ action?: ToastAction;
15
+ /** Milliseconds before it goes. `null` keeps it until dismissed. */
16
+ duration?: number | null;
17
+ };
18
+ export type ToastEntry = Required<Pick<ToastOptions, 'tone'>> & Omit<ToastOptions, 'tone'> & {
19
+ id: number;
20
+ title: string;
21
+ duration: number | null;
22
+ };
23
+ declare class Toasts {
24
+ list: ToastEntry[];
25
+ }
26
+ export declare const toasts: Toasts;
27
+ declare function show(title: string, options?: ToastOptions): number;
28
+ declare function update(id: number, patch: ToastOptions & {
29
+ title?: string;
30
+ }): void;
31
+ declare function dismiss(id?: number): void;
32
+ type Message<T> = string | ((value: T) => string);
33
+ /**
34
+ * Shows a toast and returns its id.
35
+ *
36
+ * ```ts
37
+ * toast('Copied');
38
+ * toast.error("Couldn't push the branch", { description: reason, action: { label: 'Retry', onclick: push } });
39
+ * toast.promise(save(), { loading: 'Saving…', success: 'Saved', error: (e) => `Couldn't save: ${e}` });
40
+ * ```
41
+ */
42
+ export declare const toast: typeof show & {
43
+ success: (title: string, options?: Omit<ToastOptions, "tone">) => number;
44
+ error: (title: string, options?: Omit<ToastOptions, "tone">) => number;
45
+ loading: (title: string, options?: Omit<ToastOptions, "tone">) => number;
46
+ /** One toast that says the work is under way, then how it went. */
47
+ promise<T>(promise: Promise<T>, messages: {
48
+ loading: string;
49
+ success: Message<T>;
50
+ error: Message<unknown>;
51
+ }): Promise<T>;
52
+ update: typeof update;
53
+ dismiss: typeof dismiss;
54
+ };
55
+ export {};
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Toasts: short notes about something that happened away from where the person
3
+ * is looking. Call `toast()` from anywhere; one <Toaster /> shows them.
4
+ */
5
+ const DURATION = 5000;
6
+ let next = 1;
7
+ class Toasts {
8
+ list = $state([]);
9
+ }
10
+ export const toasts = new Toasts();
11
+ function show(title, options = {}) {
12
+ const tone = options.tone ?? 'default';
13
+ const entry = {
14
+ id: next++,
15
+ title,
16
+ ...options,
17
+ tone,
18
+ // Errors and work in progress stay until they are dealt with
19
+ duration: options.duration !== undefined
20
+ ? options.duration
21
+ : tone === 'error' || tone === 'loading'
22
+ ? null
23
+ : DURATION
24
+ };
25
+ toasts.list = [...toasts.list, entry];
26
+ return entry.id;
27
+ }
28
+ function update(id, patch) {
29
+ toasts.list = toasts.list.map((entry) => {
30
+ if (entry.id !== id)
31
+ return entry;
32
+ const tone = patch.tone ?? entry.tone;
33
+ const duration = patch.duration !== undefined
34
+ ? patch.duration
35
+ : tone === 'error' || tone === 'loading'
36
+ ? null
37
+ : DURATION;
38
+ return { ...entry, ...patch, tone, duration };
39
+ });
40
+ }
41
+ function dismiss(id) {
42
+ toasts.list = id === undefined ? [] : toasts.list.filter((entry) => entry.id !== id);
43
+ }
44
+ /**
45
+ * Shows a toast and returns its id.
46
+ *
47
+ * ```ts
48
+ * toast('Copied');
49
+ * toast.error("Couldn't push the branch", { description: reason, action: { label: 'Retry', onclick: push } });
50
+ * toast.promise(save(), { loading: 'Saving…', success: 'Saved', error: (e) => `Couldn't save: ${e}` });
51
+ * ```
52
+ */
53
+ export const toast = Object.assign(show, {
54
+ success: (title, options) => show(title, { ...options, tone: 'success' }),
55
+ error: (title, options) => show(title, { ...options, tone: 'error' }),
56
+ loading: (title, options) => show(title, { ...options, tone: 'loading' }),
57
+ /** One toast that says the work is under way, then how it went. */
58
+ promise(promise, messages) {
59
+ const id = show(messages.loading, { tone: 'loading' });
60
+ const say = (message, value) => typeof message === 'function' ? message(value) : message;
61
+ promise.then((value) => update(id, { title: say(messages.success, value), tone: 'success' }), (error) => update(id, { title: say(messages.error, error), tone: 'error' }));
62
+ return promise;
63
+ },
64
+ update,
65
+ dismiss
66
+ });
@@ -0,0 +1,51 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLAttributes } from 'svelte/elements';
5
+ import Collapse from '../../internal/Collapse.svelte';
6
+ import type { Sx } from '../../internal/sx.js';
7
+ import { colors } from '../../tokens.stylex.js';
8
+ import { getToolContext } from './context.js';
9
+
10
+ export type ToolContentProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
11
+ sx?: Sx;
12
+ /** A Tool.Input and a Tool.Output, or anything else the tool produced. */
13
+ children?: Snippet;
14
+ };
15
+
16
+ const styles = stylex.create({
17
+ // Input and output hang from a rail under the tile, in line with the title
18
+ body: {
19
+ display: 'flex',
20
+ flexDirection: 'column',
21
+ gap: '0.75rem',
22
+ marginTop: '0.5rem',
23
+ marginBottom: '0.25rem',
24
+ marginInlineStart: 'calc(0.75rem - 0.5px)',
25
+ paddingInlineStart: 'calc(1.375rem - 0.5px)',
26
+ paddingBlock: '0.125rem',
27
+ borderInlineStartWidth: '1px',
28
+ borderInlineStartStyle: 'solid',
29
+ borderInlineStartColor: colors.line
30
+ }
31
+ });
32
+ </script>
33
+
34
+ <script lang="ts">
35
+ let { sx, class: className, children, ...rest }: ToolContentProps = $props();
36
+
37
+ const tool = getToolContext('Content');
38
+ </script>
39
+
40
+ <Collapse
41
+ open={tool.open}
42
+ id={tool.contentId}
43
+ role="region"
44
+ aria-labelledby={tool.triggerId}
45
+ data-slot="tool-content"
46
+ class={className}
47
+ innerSx={[styles.body, sx]}
48
+ {...rest}
49
+ >
50
+ {@render children?.()}
51
+ </Collapse>
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import type { Sx } from '../../internal/sx.js';
4
+ export type ToolContentProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
5
+ sx?: Sx;
6
+ /** A Tool.Input and a Tool.Output, or anything else the tool produced. */
7
+ children?: Snippet;
8
+ };
9
+ declare const ToolContent: import("svelte").Component<ToolContentProps, {}, "">;
10
+ type ToolContent = ReturnType<typeof ToolContent>;
11
+ export default ToolContent;