@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,21 @@
1
+ <script lang="ts" module>
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ import type { Sx } from '../../internal/sx.js';
5
+ import ToolSection from './ToolSection.svelte';
6
+
7
+ export type ToolInputProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
8
+ /** The arguments the model passed. Shown as indented JSON unless already a string. */
9
+ value?: unknown;
10
+ label?: string;
11
+ sx?: Sx;
12
+ /** Your own rendering of the arguments, in place of the JSON. */
13
+ children?: Snippet;
14
+ };
15
+ </script>
16
+
17
+ <script lang="ts">
18
+ let { label = 'Input', ...rest }: ToolInputProps = $props();
19
+ </script>
20
+
21
+ <ToolSection {label} layout="list" data-slot="tool-input" {...rest} />
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import type { Sx } from '../../internal/sx.js';
4
+ export type ToolInputProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
5
+ /** The arguments the model passed. Shown as indented JSON unless already a string. */
6
+ value?: unknown;
7
+ label?: string;
8
+ sx?: Sx;
9
+ /** Your own rendering of the arguments, in place of the JSON. */
10
+ children?: Snippet;
11
+ };
12
+ declare const ToolInput: import("svelte").Component<ToolInputProps, {}, "">;
13
+ type ToolInput = ReturnType<typeof ToolInput>;
14
+ export default ToolInput;
@@ -0,0 +1,33 @@
1
+ <script lang="ts" module>
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ import type { Sx } from '../../internal/sx.js';
5
+ import { getToolContext } from './context.js';
6
+ import ToolSection from './ToolSection.svelte';
7
+
8
+ export type ToolOutputProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
9
+ /** What the tool returned. Shown as indented JSON unless already a string. */
10
+ value?: unknown;
11
+ /** Why the tool failed. Shown in place of the value, in red. */
12
+ error?: string;
13
+ label?: string;
14
+ sx?: Sx;
15
+ /** Your own rendering of the result, in place of the JSON. */
16
+ children?: Snippet;
17
+ };
18
+ </script>
19
+
20
+ <script lang="ts">
21
+ let { value, error, label, ...rest }: ToolOutputProps = $props();
22
+
23
+ const tool = getToolContext('Output');
24
+ const failed = $derived(error !== undefined || tool.state === 'error');
25
+ </script>
26
+
27
+ <ToolSection
28
+ label={label ?? (failed ? 'Error' : 'Output')}
29
+ value={error ?? value}
30
+ tone={failed ? 'danger' : 'default'}
31
+ data-slot="tool-output"
32
+ {...rest}
33
+ />
@@ -0,0 +1,16 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import type { Sx } from '../../internal/sx.js';
4
+ export type ToolOutputProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
5
+ /** What the tool returned. Shown as indented JSON unless already a string. */
6
+ value?: unknown;
7
+ /** Why the tool failed. Shown in place of the value, in red. */
8
+ error?: string;
9
+ label?: string;
10
+ sx?: Sx;
11
+ /** Your own rendering of the result, in place of the JSON. */
12
+ children?: Snippet;
13
+ };
14
+ declare const ToolOutput: import("svelte").Component<ToolOutputProps, {}, "">;
15
+ type ToolOutput = ReturnType<typeof ToolOutput>;
16
+ export default ToolOutput;
@@ -0,0 +1,94 @@
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 type { ActionKind } from '../../internal/kinds.js';
6
+ import { attrs, type Sx } from '../../internal/sx.js';
7
+ import { colors, font } from '../../tokens.stylex.js';
8
+ import { setToolContext, type ToolState } from './context.js';
9
+
10
+ export type ToolRootProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
11
+ /** The tool's name, such as `search_docs`. Shown in the trigger unless it has children. */
12
+ name: string;
13
+ /** What sort of tool it is, which picks its icon. */
14
+ kind?: ActionKind;
15
+ state?: ToolState;
16
+ /** Whether the input and output are showing. Bindable. */
17
+ open?: boolean;
18
+ /** Read out after the name, for each state. */
19
+ stateLabels?: Partial<Record<ToolState, string>>;
20
+ sx?: Sx;
21
+ ref?: HTMLDivElement | null;
22
+ /** A Tool.Trigger and a Tool.Content. */
23
+ children?: Snippet;
24
+ };
25
+
26
+ const LABELS: Record<ToolState, string> = {
27
+ pending: 'Preparing',
28
+ running: 'Running',
29
+ complete: 'Done',
30
+ error: 'Failed'
31
+ };
32
+
33
+ const styles = stylex.create({
34
+ root: {
35
+ boxSizing: 'border-box',
36
+ display: 'flex',
37
+ flexDirection: 'column',
38
+ minWidth: 0,
39
+ color: colors.text,
40
+ fontFamily: font.body
41
+ }
42
+ });
43
+ </script>
44
+
45
+ <script lang="ts">
46
+ let {
47
+ name,
48
+ kind = 'tool',
49
+ state = 'running',
50
+ open = $bindable(false),
51
+ stateLabels,
52
+ sx,
53
+ class: className,
54
+ ref = $bindable(null),
55
+ children,
56
+ ...rest
57
+ }: ToolRootProps = $props();
58
+
59
+ const uid = $props.id();
60
+
61
+ setToolContext({
62
+ get name() {
63
+ return name;
64
+ },
65
+ get kind() {
66
+ return kind;
67
+ },
68
+ get state() {
69
+ return state;
70
+ },
71
+ get stateLabel() {
72
+ return stateLabels?.[state] ?? LABELS[state];
73
+ },
74
+ get open() {
75
+ return open;
76
+ },
77
+ toggle() {
78
+ open = !open;
79
+ },
80
+ triggerId: `${uid}-trigger`,
81
+ contentId: `${uid}-content`
82
+ });
83
+ </script>
84
+
85
+ <div
86
+ bind:this={ref}
87
+ data-slot="tool"
88
+ data-state={state}
89
+ data-open={open || undefined}
90
+ {...rest}
91
+ {...attrs([styles.root, sx], className)}
92
+ >
93
+ {@render children?.()}
94
+ </div>
@@ -0,0 +1,23 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import type { ActionKind } from '../../internal/kinds.js';
4
+ import { type Sx } from '../../internal/sx.js';
5
+ import { type ToolState } from './context.js';
6
+ export type ToolRootProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
7
+ /** The tool's name, such as `search_docs`. Shown in the trigger unless it has children. */
8
+ name: string;
9
+ /** What sort of tool it is, which picks its icon. */
10
+ kind?: ActionKind;
11
+ state?: ToolState;
12
+ /** Whether the input and output are showing. Bindable. */
13
+ open?: boolean;
14
+ /** Read out after the name, for each state. */
15
+ stateLabels?: Partial<Record<ToolState, string>>;
16
+ sx?: Sx;
17
+ ref?: HTMLDivElement | null;
18
+ /** A Tool.Trigger and a Tool.Content. */
19
+ children?: Snippet;
20
+ };
21
+ declare const ToolRoot: import("svelte").Component<ToolRootProps, {}, "ref" | "open">;
22
+ type ToolRoot = ReturnType<typeof ToolRoot>;
23
+ export default ToolRoot;
@@ -0,0 +1,102 @@
1
+ <!--
2
+ Shared by Tool.Input and Tool.Output: a small label over the value. Flat
3
+ arguments read as a list of names and values; anything else as coloured JSON.
4
+ -->
5
+ <script lang="ts" module>
6
+ import * as stylex from '@stylexjs/stylex';
7
+ import type { Snippet } from 'svelte';
8
+ import type { HTMLAttributes } from 'svelte/elements';
9
+ import Code from '../../internal/Code.svelte';
10
+ import { flatEntries } from '../../internal/json.js';
11
+ import { shared } from '../../internal/shared.js';
12
+ import { attrs, type Sx } from '../../internal/sx.js';
13
+ import { colors, font, radius } from '../../tokens.stylex.js';
14
+
15
+ export type ToolSectionProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
16
+ label: string;
17
+ /** Shown as code. Strings as they are; anything else as indented JSON. */
18
+ value?: unknown;
19
+ /** `list` shows a flat object as names and values, when it is one. */
20
+ layout?: 'code' | 'list';
21
+ tone?: 'default' | 'danger';
22
+ sx?: Sx;
23
+ children?: Snippet;
24
+ };
25
+
26
+ const styles = stylex.create({
27
+ section: {
28
+ display: 'flex',
29
+ flexDirection: 'column',
30
+ gap: '0.4375rem',
31
+ minWidth: 0
32
+ },
33
+ dangerLabel: { color: colors.danger },
34
+ // Names on the left, values on the right, on one shared column line
35
+ list: {
36
+ display: 'grid',
37
+ gridTemplateColumns: 'max-content minmax(0, 1fr)',
38
+ columnGap: '1rem',
39
+ rowGap: '0.3125rem',
40
+ margin: 0,
41
+ paddingBlock: '0.5625rem',
42
+ paddingInline: '0.75rem',
43
+ borderRadius: radius.md,
44
+ backgroundColor: colors.well,
45
+ boxShadow: `inset 0 0 0 1px ${colors.line}`,
46
+ fontFamily: font.mono,
47
+ fontSize: font.sizeXs,
48
+ lineHeight: font.leadingSnug
49
+ },
50
+ key: { margin: 0, color: colors.textSubtle },
51
+ value: { margin: 0, minWidth: 0, color: colors.text, overflowWrap: 'anywhere' },
52
+ text: {},
53
+ number: { color: colors.codeNumber, fontVariantNumeric: 'tabular-nums' },
54
+ literal: { color: colors.codeLiteral },
55
+ custom: {
56
+ minWidth: 0,
57
+ fontSize: font.sizeSm,
58
+ lineHeight: font.leadingNormal
59
+ }
60
+ });
61
+ </script>
62
+
63
+ <script lang="ts">
64
+ let {
65
+ label,
66
+ value,
67
+ layout = 'code',
68
+ tone = 'default',
69
+ sx,
70
+ class: className,
71
+ children,
72
+ ...rest
73
+ }: ToolSectionProps = $props();
74
+
75
+ const entries = $derived(
76
+ (layout === 'list' ? flatEntries(value) : undefined)?.map(([key, item]) => ({
77
+ key,
78
+ text: String(item),
79
+ kind: (typeof item === 'number'
80
+ ? 'number'
81
+ : typeof item === 'string'
82
+ ? 'text'
83
+ : 'literal') as 'number' | 'text' | 'literal'
84
+ }))
85
+ );
86
+ </script>
87
+
88
+ <div {...rest} {...attrs([styles.section, sx], className)}>
89
+ <p {...stylex.attrs(shared.eyebrow, tone === 'danger' && styles.dangerLabel)}>{label}</p>
90
+ {#if children}
91
+ <div {...stylex.attrs(styles.custom)}>{@render children()}</div>
92
+ {:else if entries}
93
+ <dl {...stylex.attrs(styles.list)}>
94
+ {#each entries as entry (entry.key)}
95
+ <dt {...stylex.attrs(styles.key)}>{entry.key}</dt>
96
+ <dd {...stylex.attrs(styles.value, styles[entry.kind])}>{entry.text}</dd>
97
+ {/each}
98
+ </dl>
99
+ {:else if value !== undefined}
100
+ <Code {value} {tone} />
101
+ {/if}
102
+ </div>
@@ -0,0 +1,16 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type ToolSectionProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
5
+ label: string;
6
+ /** Shown as code. Strings as they are; anything else as indented JSON. */
7
+ value?: unknown;
8
+ /** `list` shows a flat object as names and values, when it is one. */
9
+ layout?: 'code' | 'list';
10
+ tone?: 'default' | 'danger';
11
+ sx?: Sx;
12
+ children?: Snippet;
13
+ };
14
+ declare const ToolSection: import("svelte").Component<ToolSectionProps, {}, "">;
15
+ type ToolSection = ReturnType<typeof ToolSection>;
16
+ export default ToolSection;
@@ -0,0 +1,191 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLButtonAttributes } from 'svelte/elements';
5
+ import Chevron from '../../internal/Chevron.svelte';
6
+ import Glyph from '../../internal/Glyph.svelte';
7
+ import { KIND_GLYPHS } from '../../internal/kinds.js';
8
+ import { attrs, type Sx } from '../../internal/sx.js';
9
+ import Tile, { type TileTone } from '../../internal/Tile.svelte';
10
+ import { colors, font, motion, radius } from '../../tokens.stylex.js';
11
+ import Shimmer from '../shimmer/Shimmer.svelte';
12
+ import { getToolContext, type ToolState } from './context.js';
13
+
14
+ export type ToolTriggerProps = Omit<HTMLButtonAttributes, 'children'> & {
15
+ /** Your own icon, in place of the one for the tool's kind. */
16
+ icon?: Snippet;
17
+ sx?: Sx;
18
+ ref?: HTMLButtonElement | null;
19
+ /** A friendlier title, such as "Searched the docs". The tool's name then follows it, as code. */
20
+ children?: Snippet;
21
+ };
22
+
23
+ const HOVER = '@media (hover: hover) and (pointer: fine)';
24
+ const MOTION = '@media (prefers-reduced-motion: no-preference)';
25
+
26
+ const TONES: Record<ToolState, TileTone> = {
27
+ pending: 'live',
28
+ running: 'live',
29
+ complete: 'neutral',
30
+ error: 'danger'
31
+ };
32
+
33
+ const styles = stylex.create({
34
+ // A row on the turn's rail, like thinking and activity: a tile, then the words
35
+ trigger: {
36
+ display: 'flex',
37
+ alignItems: 'center',
38
+ alignSelf: 'flex-start',
39
+ gap: '0.625rem',
40
+ maxWidth: '100%',
41
+ minHeight: '1.75rem',
42
+ margin: 0,
43
+ padding: 0,
44
+ borderWidth: 0,
45
+ borderRadius: radius.xs,
46
+ backgroundColor: 'transparent',
47
+ color: { default: colors.textMuted, ':hover': { default: null, [HOVER]: colors.text } },
48
+ fontFamily: 'inherit',
49
+ fontSize: font.sizeMd,
50
+ lineHeight: font.leadingSnug,
51
+ textAlign: 'start',
52
+ cursor: 'pointer',
53
+ WebkitTapHighlightColor: 'transparent',
54
+ outlineStyle: 'solid',
55
+ outlineWidth: { default: 0, ':focus-visible': '2px' },
56
+ outlineColor: colors.focusRing,
57
+ outlineOffset: '2px',
58
+ transitionProperty: 'color',
59
+ transitionDuration: motion.fast,
60
+ transitionTimingFunction: 'ease'
61
+ },
62
+ heading: {
63
+ display: 'flex',
64
+ alignItems: 'baseline',
65
+ gap: '0.5rem',
66
+ minWidth: 0
67
+ },
68
+ // The title keeps its width, up to the whole row; the name takes what is left
69
+ title: {
70
+ flexShrink: 0,
71
+ maxWidth: '100%',
72
+ minWidth: 0,
73
+ overflow: 'hidden',
74
+ textOverflow: 'ellipsis',
75
+ whiteSpace: 'nowrap'
76
+ },
77
+ // The tool's own name is code, so it is set as code
78
+ // When the row is short of room, the name gives way before the title
79
+ name: {
80
+ flexShrink: 100,
81
+ minWidth: 0,
82
+ overflow: 'hidden',
83
+ textOverflow: 'ellipsis',
84
+ whiteSpace: 'nowrap',
85
+ color: colors.textSubtle,
86
+ fontFamily: font.mono,
87
+ fontSize: '0.75rem'
88
+ },
89
+ // A new state settles into place, so the change from spinner to tick is seen
90
+ status: {
91
+ display: 'inline-flex',
92
+ alignItems: 'center',
93
+ gap: '0.25rem',
94
+ flexShrink: 0,
95
+ fontSize: font.sizeXs,
96
+ fontWeight: font.weightMedium,
97
+ opacity: { default: 1, '@starting-style': 0 },
98
+ scale: { default: null, [MOTION]: { default: 1, '@starting-style': 0.6 } },
99
+ transitionProperty: { default: 'opacity', [MOTION]: 'opacity, scale' },
100
+ transitionDuration: motion.slow,
101
+ transitionTimingFunction: motion.easeOut
102
+ },
103
+ nameAsTitle: { color: 'inherit' },
104
+ running: { color: colors.ithil },
105
+ complete: { color: colors.success },
106
+ error: {
107
+ paddingBlock: '0.125rem',
108
+ paddingInline: '0.4375rem',
109
+ borderRadius: radius.lg,
110
+ backgroundColor: colors.dangerSoft,
111
+ color: colors.dangerInk
112
+ },
113
+ chevron: {
114
+ display: 'grid',
115
+ color: colors.textSubtle
116
+ },
117
+ hidden: {
118
+ position: 'absolute',
119
+ width: '1px',
120
+ height: '1px',
121
+ overflow: 'hidden',
122
+ clipPath: 'inset(50%)',
123
+ whiteSpace: 'nowrap'
124
+ }
125
+ });
126
+ </script>
127
+
128
+ <script lang="ts">
129
+ let {
130
+ icon,
131
+ sx,
132
+ class: className,
133
+ ref = $bindable(null),
134
+ children,
135
+ onclick,
136
+ ...rest
137
+ }: ToolTriggerProps = $props();
138
+
139
+ const tool = getToolContext('Trigger');
140
+ const working = $derived(tool.state === 'pending' || tool.state === 'running');
141
+ </script>
142
+
143
+ <button
144
+ bind:this={ref}
145
+ type="button"
146
+ id={tool.triggerId}
147
+ aria-expanded={tool.open}
148
+ aria-controls={tool.contentId}
149
+ data-slot="tool-trigger"
150
+ {...rest}
151
+ {...attrs([styles.trigger, sx], className)}
152
+ onclick={(event) => {
153
+ onclick?.(event);
154
+ if (!event.defaultPrevented) tool.toggle();
155
+ }}
156
+ >
157
+ <Tile tone={TONES[tool.state]} glyph={icon ? undefined : KIND_GLYPHS[tool.kind]}>
158
+ {#if icon}{@render icon()}{/if}
159
+ </Tile>
160
+ <span {...stylex.attrs(styles.heading)}>
161
+ {#if children}
162
+ <span {...stylex.attrs(styles.title)}
163
+ ><Shimmer active={working}>{@render children()}</Shimmer></span
164
+ >
165
+ <code {...stylex.attrs(styles.name)}>{tool.name}</code>
166
+ {:else}
167
+ <code {...stylex.attrs(styles.title, styles.name, styles.nameAsTitle)}
168
+ ><Shimmer active={working}>{tool.name}</Shimmer></code
169
+ >
170
+ {/if}
171
+ <span {...stylex.attrs(styles.hidden)}>{` (${tool.stateLabel})`}</span>
172
+ </span>
173
+ {#key tool.state}
174
+ <span
175
+ aria-hidden="true"
176
+ {...stylex.attrs(
177
+ styles.status,
178
+ tool.state === 'running' && styles.running,
179
+ tool.state === 'complete' && styles.complete,
180
+ tool.state === 'error' && styles.error
181
+ )}
182
+ >
183
+ {#if tool.state === 'complete'}
184
+ <Glyph name="check" size={13} stroke={2} />
185
+ {:else if tool.state === 'error'}
186
+ {tool.stateLabel}
187
+ {/if}
188
+ </span>
189
+ {/key}
190
+ <span {...stylex.attrs(styles.chevron)}><Chevron open={tool.open} size={12} /></span>
191
+ </button>
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLButtonAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type ToolTriggerProps = Omit<HTMLButtonAttributes, 'children'> & {
5
+ /** Your own icon, in place of the one for the tool's kind. */
6
+ icon?: Snippet;
7
+ sx?: Sx;
8
+ ref?: HTMLButtonElement | null;
9
+ /** A friendlier title, such as "Searched the docs". The tool's name then follows it, as code. */
10
+ children?: Snippet;
11
+ };
12
+ declare const ToolTrigger: import("svelte").Component<ToolTriggerProps, {}, "ref">;
13
+ type ToolTrigger = ReturnType<typeof ToolTrigger>;
14
+ export default ToolTrigger;
@@ -0,0 +1,18 @@
1
+ import type { DisclosureContext } from '../../internal/disclosure.js';
2
+ import type { ActionKind } from '../../internal/kinds.js';
3
+ /**
4
+ * Where a tool call stands. In the AI SDK's terms:
5
+ * - `pending`: `input-streaming`, the arguments are still being written
6
+ * - `running`: `input-available`, the tool is at work
7
+ * - `complete`: `output-available`
8
+ * - `error`: `output-error`
9
+ */
10
+ export type ToolState = 'pending' | 'running' | 'complete' | 'error';
11
+ export type ToolContext = DisclosureContext & {
12
+ readonly name: string;
13
+ readonly kind: ActionKind;
14
+ readonly state: ToolState;
15
+ readonly stateLabel: string;
16
+ };
17
+ export declare function setToolContext(context: ToolContext): void;
18
+ export declare function getToolContext(part: string): ToolContext;
@@ -0,0 +1,11 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ const KEY = Symbol('narvi.tool');
3
+ export function setToolContext(context) {
4
+ setContext(KEY, context);
5
+ }
6
+ export function getToolContext(part) {
7
+ const context = getContext(KEY);
8
+ if (!context)
9
+ throw new Error(`<Tool.${part}> must be placed inside <Tool.Root>.`);
10
+ return context;
11
+ }
@@ -0,0 +1,12 @@
1
+ import Content from './ToolContent.svelte';
2
+ import Input from './ToolInput.svelte';
3
+ import Output from './ToolOutput.svelte';
4
+ import Root from './ToolRoot.svelte';
5
+ import Trigger from './ToolTrigger.svelte';
6
+ export { Root, Trigger, Content, Input, Output, Root as ToolRoot, Trigger as ToolTrigger, Content as ToolContent, Input as ToolInput, Output as ToolOutput };
7
+ export type { ToolState } from './context.js';
8
+ export type { ToolContentProps } from './ToolContent.svelte';
9
+ export type { ToolInputProps } from './ToolInput.svelte';
10
+ export type { ToolOutputProps } from './ToolOutput.svelte';
11
+ export type { ToolRootProps } from './ToolRoot.svelte';
12
+ export type { ToolTriggerProps } from './ToolTrigger.svelte';
@@ -0,0 +1,8 @@
1
+ import Content from './ToolContent.svelte';
2
+ import Input from './ToolInput.svelte';
3
+ import Output from './ToolOutput.svelte';
4
+ import Root from './ToolRoot.svelte';
5
+ import Trigger from './ToolTrigger.svelte';
6
+ export { Root, Trigger, Content, Input, Output,
7
+ //
8
+ Root as ToolRoot, Trigger as ToolTrigger, Content as ToolContent, Input as ToolInput, Output as ToolOutput };
@@ -0,0 +1,76 @@
1
+ <script lang="ts" module>
2
+ import { Tooltip } from 'bits-ui';
3
+ import * as stylex from '@stylexjs/stylex';
4
+ import type { Snippet } from 'svelte';
5
+ import { attrs, type Sx } from '../../internal/sx.js';
6
+ import { colors, font, motion, radius } from '../../tokens.stylex.js';
7
+ import Kbd from '../kbd/Kbd.svelte';
8
+
9
+ export type TooltipContentProps = Omit<Tooltip.ContentProps, 'children' | 'child'> & {
10
+ /** The keys that do the same, shown after the label: `['⌘', 'K']`. */
11
+ shortcut?: string[];
12
+ sx?: Sx;
13
+ children?: Snippet;
14
+ };
15
+
16
+ const MOTION = '@media (prefers-reduced-motion: no-preference)';
17
+ const CLOSED = ':is([data-state="closed"])';
18
+ const INSTANT = ':is([data-state="instant-open"])';
19
+
20
+ const styles = stylex.create({
21
+ content: {
22
+ zIndex: 60,
23
+ display: 'flex',
24
+ alignItems: 'center',
25
+ gap: '0.5rem',
26
+ maxWidth: '18rem',
27
+ paddingBlock: '0.3125rem',
28
+ paddingInline: '0.5rem',
29
+ borderRadius: radius.md,
30
+ backgroundColor: colors.bgRaised,
31
+ boxShadow: `inset 0 0 0 1px ${colors.lineStrong}, 0 4px 12px -4px ${colors.shade}`,
32
+ color: colors.text,
33
+ fontFamily: font.body,
34
+ fontSize: font.sizeXs,
35
+ lineHeight: font.leadingSnug,
36
+ transformOrigin: 'var(--bits-floating-transform-origin)',
37
+ opacity: { default: 1, '@starting-style': 0, [CLOSED]: 0 },
38
+ scale: { default: null, [MOTION]: { default: 1, '@starting-style': 0.97, [CLOSED]: 0.97 } },
39
+ transitionProperty: { default: 'opacity', [MOTION]: 'opacity, scale' },
40
+ transitionTimingFunction: motion.easeOut,
41
+ // Once one tooltip is open, the next opens at once: moving along a
42
+ // toolbar should feel quick, not like each button is thinking
43
+ transitionDuration: { default: '120ms', [CLOSED]: '80ms', [INSTANT]: '0ms' }
44
+ },
45
+ keys: { display: 'inline-flex', gap: '0.125rem' }
46
+ });
47
+ </script>
48
+
49
+ <script lang="ts">
50
+ let {
51
+ sideOffset = 6,
52
+ collisionPadding = 8,
53
+ shortcut,
54
+ sx,
55
+ class: className,
56
+ children,
57
+ ...rest
58
+ }: TooltipContentProps = $props();
59
+ </script>
60
+
61
+ <Tooltip.Portal>
62
+ <Tooltip.Content
63
+ {sideOffset}
64
+ {collisionPadding}
65
+ data-slot="tooltip"
66
+ {...rest}
67
+ {...attrs([styles.content, sx], className)}
68
+ >
69
+ {@render children?.()}
70
+ {#if shortcut?.length}
71
+ <span {...stylex.attrs(styles.keys)}>
72
+ {#each shortcut as key, index (index)}<Kbd>{key}</Kbd>{/each}
73
+ </span>
74
+ {/if}
75
+ </Tooltip.Content>
76
+ </Tooltip.Portal>
@@ -0,0 +1,12 @@
1
+ import { Tooltip } from 'bits-ui';
2
+ import type { Snippet } from 'svelte';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type TooltipContentProps = Omit<Tooltip.ContentProps, 'children' | 'child'> & {
5
+ /** The keys that do the same, shown after the label: `['⌘', 'K']`. */
6
+ shortcut?: string[];
7
+ sx?: Sx;
8
+ children?: Snippet;
9
+ };
10
+ declare const TooltipContent: import("svelte").Component<TooltipContentProps, {}, "">;
11
+ type TooltipContent = ReturnType<typeof TooltipContent>;
12
+ export default TooltipContent;