@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,104 @@
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 { shared } from '../../internal/shared.js';
6
+ import { attrs, type Sx } from '../../internal/sx.js';
7
+ import { colors, font, motion, radius } from '../../tokens.stylex.js';
8
+ import { getSuggestionsContext } from './context.js';
9
+
10
+ export type SuggestionsItemProps = Omit<HTMLButtonAttributes, 'children' | 'value'> & {
11
+ /** The prompt this stands for. Shown as the label too, unless there are `children`. */
12
+ value: string;
13
+ sx?: Sx;
14
+ ref?: HTMLButtonElement | null;
15
+ /** A shorter label, or an icon and a label. */
16
+ children?: Snippet;
17
+ };
18
+
19
+ const HOVER = '@media (hover: hover) and (pointer: fine)';
20
+ const MOTION = '@media (prefers-reduced-motion: no-preference)';
21
+
22
+ // They rise into place one after another, the first time they are shown
23
+ const arrive = stylex.keyframes({
24
+ from: { opacity: 0, translate: '0 6px' },
25
+ to: { opacity: 1, translate: '0 0' }
26
+ });
27
+ const fade = stylex.keyframes({
28
+ from: { opacity: 0 },
29
+ to: { opacity: 1 }
30
+ });
31
+
32
+ const styles = stylex.create({
33
+ item: {
34
+ display: 'inline-flex',
35
+ alignItems: 'center',
36
+ flexShrink: 0,
37
+ gap: '0.375rem',
38
+ minHeight: '2rem',
39
+ margin: 0,
40
+ paddingInline: '0.75rem',
41
+ borderWidth: 0,
42
+ borderRadius: `calc(${radius.xl} * 4 / 3)`,
43
+ backgroundColor: {
44
+ default: colors.surface,
45
+ ':hover': { default: null, [HOVER]: colors.hover }
46
+ },
47
+ boxShadow: `inset 0 0 0 1px ${colors.line}`,
48
+ color: {
49
+ default: colors.textMuted,
50
+ ':hover': { default: null, [HOVER]: colors.text }
51
+ },
52
+ fontFamily: 'inherit',
53
+ fontSize: font.sizeSm,
54
+ fontWeight: font.weightMedium,
55
+ lineHeight: 1,
56
+ whiteSpace: 'nowrap',
57
+ cursor: 'pointer',
58
+ WebkitTapHighlightColor: 'transparent',
59
+ animationName: { default: fade, [MOTION]: arrive },
60
+ animationDuration: motion.slow,
61
+ animationTimingFunction: motion.easeOut,
62
+ animationFillMode: 'backwards',
63
+ // Capped, so a long list does not keep the last ones waiting
64
+ animationDelay: 'calc(min(var(--narvi-suggestion-index, 0), 6) * 40ms)',
65
+ scale: { default: null, ':active': { default: null, [MOTION]: 0.97 } },
66
+ transitionProperty: {
67
+ default: 'background-color, color',
68
+ [MOTION]: 'scale, background-color, color'
69
+ },
70
+ transitionDuration: motion.base,
71
+ transitionTimingFunction: { default: 'ease', [MOTION]: `${motion.easeOut}, ease, ease` }
72
+ }
73
+ });
74
+ </script>
75
+
76
+ <script lang="ts">
77
+ let {
78
+ value,
79
+ sx,
80
+ class: className,
81
+ ref = $bindable(null),
82
+ children,
83
+ onclick,
84
+ ...rest
85
+ }: SuggestionsItemProps = $props();
86
+
87
+ const suggestions = getSuggestionsContext();
88
+ const index = suggestions?.next() ?? 0;
89
+ </script>
90
+
91
+ <button
92
+ bind:this={ref}
93
+ type="button"
94
+ data-slot="suggestion"
95
+ {...rest}
96
+ {...attrs([styles.item, shared.focusable, sx], className)}
97
+ style:--narvi-suggestion-index={index}
98
+ onclick={(event) => {
99
+ onclick?.(event);
100
+ if (!event.defaultPrevented) suggestions?.select(value);
101
+ }}
102
+ >
103
+ {#if children}{@render children()}{:else}{value}{/if}
104
+ </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 SuggestionsItemProps = Omit<HTMLButtonAttributes, 'children' | 'value'> & {
5
+ /** The prompt this stands for. Shown as the label too, unless there are `children`. */
6
+ value: string;
7
+ sx?: Sx;
8
+ ref?: HTMLButtonElement | null;
9
+ /** A shorter label, or an icon and a label. */
10
+ children?: Snippet;
11
+ };
12
+ declare const SuggestionsItem: import("svelte").Component<SuggestionsItemProps, {}, "ref">;
13
+ type SuggestionsItem = ReturnType<typeof SuggestionsItem>;
14
+ export default SuggestionsItem;
@@ -0,0 +1,80 @@
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 { setSuggestionsContext } from './context.js';
7
+
8
+ export type SuggestionsRootProps = Omit<
9
+ HTMLAttributes<HTMLDivElement>,
10
+ 'children' | 'onselect'
11
+ > & {
12
+ /** Called with an item's `value` when the person picks it. */
13
+ onselect?: (value: string) => void;
14
+ /**
15
+ * `wrap` lets the items run onto more lines. `scroll` keeps them on one
16
+ * line that scrolls sideways, which suits a narrow screen above the input.
17
+ */
18
+ layout?: 'wrap' | 'scroll';
19
+ /** Accessible name for the group. */
20
+ label?: string;
21
+ sx?: Sx;
22
+ /** Suggestions.Item buttons. */
23
+ children?: Snippet;
24
+ };
25
+
26
+ const styles = stylex.create({
27
+ root: {
28
+ display: 'flex',
29
+ // Pills keep their own height, however tall the space they are placed in
30
+ alignItems: 'flex-start',
31
+ alignContent: 'flex-start',
32
+ gap: '0.5rem',
33
+ minWidth: 0
34
+ },
35
+ wrap: {
36
+ flexWrap: 'wrap',
37
+ justifyContent: 'center'
38
+ },
39
+ // The row fades out at its edges, a sign there is more to scroll to
40
+ scroll: {
41
+ flexWrap: 'nowrap',
42
+ overflowX: 'auto',
43
+ // Room for the focus ring, which the scroller would otherwise clip
44
+ padding: '0.25rem',
45
+ margin: '-4px',
46
+ scrollbarWidth: 'none',
47
+ maskImage:
48
+ 'linear-gradient(90deg, transparent, #000 16px, #000 calc(100% - 16px), transparent)'
49
+ }
50
+ });
51
+ </script>
52
+
53
+ <script lang="ts">
54
+ let {
55
+ onselect,
56
+ layout = 'wrap',
57
+ label = 'Suggestions',
58
+ sx,
59
+ class: className,
60
+ children,
61
+ ...rest
62
+ }: SuggestionsRootProps = $props();
63
+
64
+ let count = 0;
65
+
66
+ setSuggestionsContext({
67
+ select: (value) => onselect?.(value),
68
+ next: () => count++
69
+ });
70
+ </script>
71
+
72
+ <div
73
+ role="group"
74
+ aria-label={label}
75
+ data-slot="suggestions"
76
+ {...rest}
77
+ {...attrs([styles.root, styles[layout], sx], className)}
78
+ >
79
+ {@render children?.()}
80
+ </div>
@@ -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 SuggestionsRootProps = Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'onselect'> & {
5
+ /** Called with an item's `value` when the person picks it. */
6
+ onselect?: (value: string) => void;
7
+ /**
8
+ * `wrap` lets the items run onto more lines. `scroll` keeps them on one
9
+ * line that scrolls sideways, which suits a narrow screen above the input.
10
+ */
11
+ layout?: 'wrap' | 'scroll';
12
+ /** Accessible name for the group. */
13
+ label?: string;
14
+ sx?: Sx;
15
+ /** Suggestions.Item buttons. */
16
+ children?: Snippet;
17
+ };
18
+ declare const SuggestionsRoot: import("svelte").Component<SuggestionsRootProps, {}, "">;
19
+ type SuggestionsRoot = ReturnType<typeof SuggestionsRoot>;
20
+ export default SuggestionsRoot;
@@ -0,0 +1,7 @@
1
+ export type SuggestionsContext = {
2
+ select(value: string): void;
3
+ /** Each item takes the next place in line, so they can arrive one after another. */
4
+ next(): number;
5
+ };
6
+ export declare function setSuggestionsContext(context: SuggestionsContext): void;
7
+ export declare function getSuggestionsContext(): SuggestionsContext | undefined;
@@ -0,0 +1,8 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ const KEY = Symbol('narvi.suggestions');
3
+ export function setSuggestionsContext(context) {
4
+ setContext(KEY, context);
5
+ }
6
+ export function getSuggestionsContext() {
7
+ return getContext(KEY);
8
+ }
@@ -0,0 +1,5 @@
1
+ import Item from './SuggestionsItem.svelte';
2
+ import Root from './SuggestionsRoot.svelte';
3
+ export { Root, Item, Root as SuggestionsRoot, Item as SuggestionsItem };
4
+ export type { SuggestionsItemProps } from './SuggestionsItem.svelte';
5
+ export type { SuggestionsRootProps } from './SuggestionsRoot.svelte';
@@ -0,0 +1,5 @@
1
+ import Item from './SuggestionsItem.svelte';
2
+ import Root from './SuggestionsRoot.svelte';
3
+ export { Root, Item,
4
+ //
5
+ Root as SuggestionsRoot, Item as SuggestionsItem };
@@ -0,0 +1,175 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLInputAttributes } from 'svelte/elements';
5
+ import { attrs, type Sx } from '../../internal/sx.js';
6
+ import { colors, font, motion, radius } from '../../tokens.stylex.js';
7
+
8
+ export type SwitchProps = Omit<HTMLInputAttributes, 'type' | 'role' | 'children'> & {
9
+ checked?: boolean;
10
+ disabled?: boolean;
11
+ /** A second, quieter line under the label. */
12
+ description?: string;
13
+ /** Applied to the outermost element: the label when there is one, else the input. */
14
+ sx?: Sx;
15
+ ref?: HTMLInputElement | null;
16
+ /** Label content. Without it, give the switch an `aria-label`. */
17
+ children?: Snippet;
18
+ };
19
+
20
+ // StyleX needs these in the same file to evaluate them at build time
21
+ const HOVER = '@media (hover: hover) and (pointer: fine)';
22
+ const MOTION = '@media (prefers-reduced-motion: no-preference)';
23
+ const FORCED = '@media (forced-colors: active)';
24
+
25
+ const styles = stylex.create({
26
+ root: {
27
+ display: 'inline-flex',
28
+ alignItems: 'flex-start',
29
+ gap: '0.625rem',
30
+ color: colors.text,
31
+ fontFamily: font.body,
32
+ fontSize: font.sizeMd,
33
+ lineHeight: '1.25rem',
34
+ cursor: 'pointer',
35
+ WebkitTapHighlightColor: 'transparent'
36
+ },
37
+ rootDisabled: {
38
+ color: colors.textSubtle,
39
+ cursor: 'not-allowed'
40
+ },
41
+ description: {
42
+ display: 'block',
43
+ color: colors.textSubtle,
44
+ fontSize: font.sizeXs,
45
+ lineHeight: font.leadingSnug
46
+ },
47
+ input: {
48
+ position: 'relative',
49
+ flexShrink: 0,
50
+ boxSizing: 'border-box',
51
+ width: '2rem',
52
+ height: '1.125rem',
53
+ margin: 0,
54
+ marginBlock: '1px',
55
+ borderWidth: 0,
56
+ borderRadius: radius.full,
57
+ backgroundColor: {
58
+ default: colors.edge,
59
+ ':hover': { default: null, [HOVER]: colors.edgeHover },
60
+ [FORCED]: { default: 'Canvas', ':checked': 'Highlight' }
61
+ },
62
+ backgroundImage: {
63
+ default: 'none',
64
+ ':checked': `linear-gradient(180deg, ${colors.ithil}, ${colors.ithilStrong})`,
65
+ [FORCED]: 'none'
66
+ },
67
+ boxShadow: {
68
+ default: `inset 0 1px 2px ${colors.shade}`,
69
+ ':checked': `inset 0 1px 0 rgb(255 255 255 / 0.4), 0 0 8px ${colors.glow}`
70
+ },
71
+ forcedColorAdjust: 'none',
72
+ appearance: 'none',
73
+ cursor: { default: 'pointer', ':disabled': 'not-allowed' },
74
+ opacity: { default: 1, ':disabled': 0.5 },
75
+ outlineStyle: 'solid',
76
+ outlineWidth: { default: '1px', ':focus-visible': '2px' },
77
+ outlineColor: {
78
+ default: 'transparent',
79
+ ':focus-visible': colors.focusRing,
80
+ [FORCED]: { default: 'ButtonText', ':focus-visible': 'Highlight' }
81
+ },
82
+ outlineOffset: { default: '-1px', ':focus-visible': '2px' },
83
+ transitionProperty: 'background-color',
84
+ transitionDuration: motion.base,
85
+ transitionTimingFunction: 'ease',
86
+ // Thumb. It travels and stretches with transforms, so nothing is laid out
87
+ // again while it moves. The direction and the stretch both mirror in RTL.
88
+ '::before': {
89
+ content: '""',
90
+ position: 'absolute',
91
+ top: '2px',
92
+ insetInlineStart: '2px',
93
+ width: '0.875rem',
94
+ height: '0.875rem',
95
+ translate: {
96
+ default: '0 0',
97
+ ':checked': { default: '14px 0', ':dir(rtl)': '-14px 0' }
98
+ },
99
+ // While pressed, the thumb stretches towards where it is about to go
100
+ scale: { default: null, ':active': { default: null, [MOTION]: '1.2 1' } },
101
+ transformOrigin: {
102
+ default: 'left center',
103
+ ':dir(rtl)': 'right center',
104
+ ':checked': { default: 'right center', ':dir(rtl)': 'left center' }
105
+ },
106
+ borderRadius: radius.full,
107
+ backgroundColor: {
108
+ default: '#fff',
109
+ ':checked': colors.onIthil,
110
+ [FORCED]: { default: 'ButtonText', ':checked': 'HighlightText' }
111
+ },
112
+ boxShadow: '0 1px 2px rgb(0 0 0 / 0.4)',
113
+ transitionProperty: {
114
+ default: 'background-color',
115
+ [MOTION]: 'translate, scale, transform-origin, background-color'
116
+ },
117
+ transitionDuration: '200ms',
118
+ transitionTimingFunction: motion.easeOut
119
+ }
120
+ },
121
+ // Without a label, extend the hit area to 40px tall
122
+ standalone: {
123
+ marginBlock: 0,
124
+ '::after': {
125
+ content: '""',
126
+ position: 'absolute',
127
+ insetInline: '-4px',
128
+ insetBlock: '-11px'
129
+ }
130
+ }
131
+ });
132
+ </script>
133
+
134
+ <script lang="ts">
135
+ let {
136
+ checked = $bindable(false),
137
+ disabled = false,
138
+ description,
139
+ sx,
140
+ class: className,
141
+ ref = $bindable(null),
142
+ children,
143
+ ...rest
144
+ }: SwitchProps = $props();
145
+ </script>
146
+
147
+ {#if children}
148
+ <label {...attrs([styles.root, disabled && styles.rootDisabled, sx], className)}>
149
+ <input
150
+ bind:this={ref}
151
+ bind:checked
152
+ type="checkbox"
153
+ role="switch"
154
+ {disabled}
155
+ {...rest}
156
+ {...stylex.attrs(styles.input)}
157
+ />
158
+ <span>
159
+ {@render children()}
160
+ {#if description}
161
+ <span {...stylex.attrs(styles.description)}>{description}</span>
162
+ {/if}
163
+ </span>
164
+ </label>
165
+ {:else}
166
+ <input
167
+ bind:this={ref}
168
+ bind:checked
169
+ type="checkbox"
170
+ role="switch"
171
+ {disabled}
172
+ {...rest}
173
+ {...attrs([styles.input, styles.standalone, sx], className)}
174
+ />
175
+ {/if}
@@ -0,0 +1,17 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLInputAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type SwitchProps = Omit<HTMLInputAttributes, 'type' | 'role' | 'children'> & {
5
+ checked?: boolean;
6
+ disabled?: boolean;
7
+ /** A second, quieter line under the label. */
8
+ description?: string;
9
+ /** Applied to the outermost element: the label when there is one, else the input. */
10
+ sx?: Sx;
11
+ ref?: HTMLInputElement | null;
12
+ /** Label content. Without it, give the switch an `aria-label`. */
13
+ children?: Snippet;
14
+ };
15
+ declare const Switch: import("svelte").Component<SwitchProps, {}, "ref" | "checked">;
16
+ type Switch = ReturnType<typeof Switch>;
17
+ export default Switch;
@@ -0,0 +1,170 @@
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, motion, radius } from '../../tokens.stylex.js';
7
+
8
+ export type TabItem = { value: string; label: string; count?: number; disabled?: boolean };
9
+
10
+ export type TabsProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
11
+ tabs: TabItem[];
12
+ /** The selected tab's value. Bindable. Defaults to the first tab. */
13
+ value?: string;
14
+ /** Accessible name for the row of tabs. */
15
+ label: string;
16
+ sx?: Sx;
17
+ /** The panel for the selected tab. It receives the selected value. */
18
+ children?: Snippet<[string]>;
19
+ };
20
+
21
+ // StyleX needs these in the same file to evaluate them at build time
22
+ const HOVER = '@media (hover: hover) and (pointer: fine)';
23
+ const FORCED = '@media (forced-colors: active)';
24
+
25
+ const styles = stylex.create({
26
+ root: {
27
+ minWidth: 0,
28
+ fontFamily: font.body
29
+ },
30
+ list: {
31
+ WebkitAppRegion: 'no-drag',
32
+ display: 'flex',
33
+ gap: '1.25rem',
34
+ borderBottomWidth: '1px',
35
+ borderBottomStyle: 'solid',
36
+ borderBottomColor: colors.line
37
+ },
38
+ tab: {
39
+ position: 'relative',
40
+ flexShrink: 0,
41
+ minHeight: '2.125rem',
42
+ margin: 0,
43
+ padding: 0,
44
+ borderWidth: 0,
45
+ borderRadius: radius.xs,
46
+ backgroundColor: 'transparent',
47
+ color: {
48
+ default: colors.textMuted,
49
+ ':hover': { default: null, [HOVER]: colors.text }
50
+ },
51
+ fontFamily: 'inherit',
52
+ fontSize: font.sizeMd,
53
+ fontWeight: font.weightMedium,
54
+ lineHeight: 1,
55
+ whiteSpace: 'nowrap',
56
+ cursor: { default: 'pointer', ':disabled': 'not-allowed' },
57
+ opacity: { default: 1, ':disabled': 0.5 },
58
+ WebkitTapHighlightColor: 'transparent',
59
+ outlineStyle: 'solid',
60
+ outlineWidth: { default: 0, ':focus-visible': '2px' },
61
+ outlineColor: colors.focusRing,
62
+ outlineOffset: '2px',
63
+ transitionProperty: 'color',
64
+ transitionDuration: motion.base,
65
+ transitionTimingFunction: 'ease'
66
+ },
67
+ // The selected tab is marked by a lit line sitting on the list's rule
68
+ selected: {
69
+ color: colors.text,
70
+ '::after': {
71
+ content: '""',
72
+ position: 'absolute',
73
+ insetInline: 0,
74
+ bottom: '-1px',
75
+ height: '2px',
76
+ borderRadius: '2px',
77
+ backgroundColor: { default: colors.ithil, [FORCED]: 'Highlight' },
78
+ boxShadow: `0 0 8px ${colors.glow}`,
79
+ forcedColorAdjust: 'none'
80
+ }
81
+ },
82
+ count: {
83
+ marginInlineStart: '0.375rem',
84
+ color: colors.textSubtle,
85
+ fontFamily: font.mono,
86
+ fontSize: font.sizeXs,
87
+ fontVariantNumeric: 'tabular-nums'
88
+ },
89
+ panel: {
90
+ paddingTop: '0.875rem',
91
+ outlineStyle: 'solid',
92
+ outlineWidth: { default: 0, ':focus-visible': '2px' },
93
+ outlineColor: colors.focusRing,
94
+ outlineOffset: '2px'
95
+ }
96
+ });
97
+ </script>
98
+
99
+ <script lang="ts">
100
+ let {
101
+ tabs,
102
+ value = $bindable(),
103
+ label,
104
+ sx,
105
+ class: className,
106
+ children,
107
+ ...rest
108
+ }: TabsProps = $props();
109
+
110
+ const uid = $props.id();
111
+ const selected = $derived(value ?? tabs[0]?.value);
112
+ let list = $state<HTMLDivElement | null>(null);
113
+
114
+ // Arrow keys move through the tabs and select as they go; Home and End jump to the ends.
115
+ function onkeydown(event: KeyboardEvent) {
116
+ const enabled = tabs.filter((tab) => !tab.disabled);
117
+ const current = enabled.findIndex((tab) => tab.value === selected);
118
+ const rtl = list ? getComputedStyle(list).direction === 'rtl' : false;
119
+ const step = { ArrowRight: rtl ? -1 : 1, ArrowLeft: rtl ? 1 : -1 }[event.key];
120
+ let next: number;
121
+ if (step) next = (current + step + enabled.length) % enabled.length;
122
+ else if (event.key === 'Home') next = 0;
123
+ else if (event.key === 'End') next = enabled.length - 1;
124
+ else return;
125
+ event.preventDefault();
126
+ value = enabled[next].value;
127
+ list?.querySelector<HTMLElement>(`[data-value="${CSS.escape(enabled[next].value)}"]`)?.focus();
128
+ }
129
+ </script>
130
+
131
+ <div {...rest} {...attrs([styles.root, sx], className)}>
132
+ <div
133
+ bind:this={list}
134
+ role="tablist"
135
+ aria-label={label}
136
+ {onkeydown}
137
+ {...stylex.attrs(styles.list)}
138
+ >
139
+ {#each tabs as tab (tab.value)}
140
+ {@const active = tab.value === selected}
141
+ <button
142
+ type="button"
143
+ role="tab"
144
+ id="{uid}-tab-{tab.value}"
145
+ data-value={tab.value}
146
+ aria-selected={active}
147
+ aria-controls={children ? `${uid}-panel` : undefined}
148
+ tabindex={active ? 0 : -1}
149
+ disabled={tab.disabled}
150
+ onclick={() => (value = tab.value)}
151
+ {...stylex.attrs(styles.tab, active && styles.selected)}
152
+ >
153
+ {tab.label}{#if tab.count !== undefined}<span {...stylex.attrs(styles.count)}
154
+ >{tab.count}</span
155
+ >{/if}
156
+ </button>
157
+ {/each}
158
+ </div>
159
+ {#if children && selected !== undefined}
160
+ <div
161
+ role="tabpanel"
162
+ id="{uid}-panel"
163
+ aria-labelledby="{uid}-tab-{selected}"
164
+ tabindex="0"
165
+ {...stylex.attrs(styles.panel)}
166
+ >
167
+ {@render children(selected)}
168
+ </div>
169
+ {/if}
170
+ </div>
@@ -0,0 +1,22 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type TabItem = {
5
+ value: string;
6
+ label: string;
7
+ count?: number;
8
+ disabled?: boolean;
9
+ };
10
+ export type TabsProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
11
+ tabs: TabItem[];
12
+ /** The selected tab's value. Bindable. Defaults to the first tab. */
13
+ value?: string;
14
+ /** Accessible name for the row of tabs. */
15
+ label: string;
16
+ sx?: Sx;
17
+ /** The panel for the selected tab. It receives the selected value. */
18
+ children?: Snippet<[string]>;
19
+ };
20
+ declare const Tabs: import("svelte").Component<TabsProps, {}, "value">;
21
+ type Tabs = ReturnType<typeof Tabs>;
22
+ export default Tabs;