@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,177 @@
1
+ <!--
2
+ The edge between two areas, which the person can drag to resize one of them.
3
+
4
+ While dragging, the size is written straight onto the target as a custom
5
+ property, so nothing re-renders on every pointer move; the bound value
6
+ changes once, when the drag ends. The keyboard moves it in steps, Home and
7
+ End go to the limits, and a double-click puts it back. (Eregion's ResizableEdge.)
8
+ -->
9
+ <script lang="ts" module>
10
+ import * as stylex from '@stylexjs/stylex';
11
+ import type { HTMLAttributes } from 'svelte/elements';
12
+ import { attrs, type Sx } from '../../internal/sx.js';
13
+ import { colors, motion } from '../../tokens.stylex.js';
14
+
15
+ export type ResizeHandleProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
16
+ /** The size, in pixels. Bindable. */
17
+ value?: number;
18
+ min?: number;
19
+ /** The largest size, or a function that works it out when a drag starts. */
20
+ max?: number | (() => number);
21
+ /** Where a double-click puts it back. */
22
+ defaultValue?: number;
23
+ /** How far an arrow key moves it, in pixels. */
24
+ step?: number;
25
+ /**
26
+ * Which edge of the target this handle sits on. `start` grows the target
27
+ * as it moves toward the start: a panel on the end side of the window.
28
+ */
29
+ edge?: 'start' | 'end';
30
+ /** `vertical` resizes widths; `horizontal` resizes heights, as for a drawer below. */
31
+ orientation?: 'vertical' | 'horizontal';
32
+ /** The element being resized, and the custom property its size is read from. */
33
+ target?: HTMLElement | null;
34
+ property?: string;
35
+ /** Names the handle, for assistive technology: "Resize the panel". */
36
+ label: string;
37
+ sx?: Sx;
38
+ };
39
+
40
+ const HOVER = '@media (hover: hover) and (pointer: fine)';
41
+ const FORCED = '@media (forced-colors: active)';
42
+
43
+ const styles = stylex.create({
44
+ // An 8px target with a 1px line in the middle, lit when it is reached
45
+ handle: {
46
+ position: 'relative',
47
+ flexShrink: 0,
48
+ zIndex: 2,
49
+ touchAction: 'none',
50
+ WebkitAppRegion: 'no-drag',
51
+ outlineStyle: 'none',
52
+ '::after': {
53
+ content: '""',
54
+ position: 'absolute',
55
+ backgroundColor: {
56
+ default: 'transparent',
57
+ ':hover': { default: null, [HOVER]: colors.ithil },
58
+ ':focus-visible': colors.focusRing,
59
+ [FORCED]: 'CanvasText'
60
+ },
61
+ boxShadow: { default: null, ':hover': `0 0 8px ${colors.glow}` },
62
+ transitionProperty: 'background-color',
63
+ transitionDuration: motion.base,
64
+ transitionTimingFunction: 'ease',
65
+ transitionDelay: { default: '0ms', ':hover': '150ms' }
66
+ }
67
+ },
68
+ vertical: {
69
+ width: '0.5rem',
70
+ marginInline: '-0.25rem',
71
+ cursor: 'col-resize',
72
+ '::after': { insetBlock: 0, insetInlineStart: 'calc(50% - 1px)', width: '2px' }
73
+ },
74
+ horizontal: {
75
+ height: '0.5rem',
76
+ marginBlock: '-0.25rem',
77
+ cursor: 'row-resize',
78
+ '::after': { insetInline: 0, top: 'calc(50% - 1px)', height: '2px' }
79
+ },
80
+ dragging: {
81
+ '::after': { backgroundColor: colors.ithil, transitionDelay: '0ms' }
82
+ }
83
+ });
84
+ </script>
85
+
86
+ <script lang="ts">
87
+ let {
88
+ value = $bindable(320),
89
+ min = 160,
90
+ max = Infinity,
91
+ defaultValue,
92
+ step = 32,
93
+ edge = 'start',
94
+ orientation = 'vertical',
95
+ target,
96
+ property = '--narvi-size',
97
+ label,
98
+ sx,
99
+ class: className,
100
+ ...rest
101
+ }: ResizeHandleProps = $props();
102
+
103
+ let dragging = $state(false);
104
+ const limit = () => (typeof max === 'function' ? max() : max);
105
+ const clamp = (size: number, upper = limit()) =>
106
+ Math.round(Math.min(Math.max(size, min), Math.max(min, upper)));
107
+
108
+ function onpointerdown(event: PointerEvent & { currentTarget: HTMLDivElement }) {
109
+ if (event.button !== 0) return;
110
+ event.preventDefault();
111
+ const handle = event.currentTarget;
112
+ handle.setPointerCapture(event.pointerId);
113
+ dragging = true;
114
+ const start = orientation === 'vertical' ? event.clientX : event.clientY;
115
+ const from = value;
116
+ const upper = limit();
117
+ const rtl = getComputedStyle(handle).direction === 'rtl';
118
+ // Moving toward the start grows a target whose start edge this is
119
+ let sign = edge === 'start' ? -1 : 1;
120
+ if (orientation === 'vertical' && rtl) sign = -sign;
121
+ let size = from;
122
+
123
+ const move = (moving: PointerEvent) => {
124
+ const now = orientation === 'vertical' ? moving.clientX : moving.clientY;
125
+ size = clamp(from + (now - start) * sign, upper);
126
+ target?.style.setProperty(property, `${size}px`);
127
+ };
128
+ const up = () => {
129
+ dragging = false;
130
+ handle.removeEventListener('pointermove', move);
131
+ handle.removeEventListener('pointerup', up);
132
+ handle.removeEventListener('pointercancel', up);
133
+ value = size;
134
+ };
135
+ handle.addEventListener('pointermove', move);
136
+ handle.addEventListener('pointerup', up);
137
+ handle.addEventListener('pointercancel', up);
138
+ }
139
+
140
+ function onkeydown(event: KeyboardEvent & { currentTarget: HTMLDivElement }) {
141
+ const rtl = getComputedStyle(event.currentTarget).direction === 'rtl';
142
+ const grow = edge === 'start' ? -1 : 1;
143
+ let delta = 0;
144
+ if (orientation === 'vertical') {
145
+ if (event.key === 'ArrowLeft') delta = -step * grow * (rtl ? -1 : 1);
146
+ else if (event.key === 'ArrowRight') delta = step * grow * (rtl ? -1 : 1);
147
+ } else if (event.key === 'ArrowUp') delta = -step * grow;
148
+ else if (event.key === 'ArrowDown') delta = step * grow;
149
+ if (event.key === 'Home') value = min;
150
+ else if (event.key === 'End') value = clamp(Infinity);
151
+ else if (event.key === 'Enter' && defaultValue !== undefined) value = clamp(defaultValue);
152
+ else if (delta) value = clamp(value + delta);
153
+ else return;
154
+ event.preventDefault();
155
+ }
156
+ </script>
157
+
158
+ <!-- A separator that can take focus is a widget in ARIA: the keyboard moves it -->
159
+ <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
160
+ <div
161
+ role="separator"
162
+ tabindex="0"
163
+ aria-label={label}
164
+ aria-orientation={orientation}
165
+ aria-valuenow={value}
166
+ aria-valuemin={min}
167
+ aria-valuemax={Number.isFinite(limit()) ? limit() : undefined}
168
+ data-slot="resize-handle"
169
+ data-dragging={dragging || undefined}
170
+ {...rest}
171
+ {...attrs([styles.handle, styles[orientation], dragging && styles.dragging, sx], className)}
172
+ {onpointerdown}
173
+ {onkeydown}
174
+ ondblclick={() => {
175
+ if (defaultValue !== undefined) value = clamp(defaultValue);
176
+ }}
177
+ ></div>
@@ -0,0 +1,29 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ import { type Sx } from '../../internal/sx.js';
3
+ export type ResizeHandleProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
4
+ /** The size, in pixels. Bindable. */
5
+ value?: number;
6
+ min?: number;
7
+ /** The largest size, or a function that works it out when a drag starts. */
8
+ max?: number | (() => number);
9
+ /** Where a double-click puts it back. */
10
+ defaultValue?: number;
11
+ /** How far an arrow key moves it, in pixels. */
12
+ step?: number;
13
+ /**
14
+ * Which edge of the target this handle sits on. `start` grows the target
15
+ * as it moves toward the start: a panel on the end side of the window.
16
+ */
17
+ edge?: 'start' | 'end';
18
+ /** `vertical` resizes widths; `horizontal` resizes heights, as for a drawer below. */
19
+ orientation?: 'vertical' | 'horizontal';
20
+ /** The element being resized, and the custom property its size is read from. */
21
+ target?: HTMLElement | null;
22
+ property?: string;
23
+ /** Names the handle, for assistive technology: "Resize the panel". */
24
+ label: string;
25
+ sx?: Sx;
26
+ };
27
+ declare const ResizeHandle: import("svelte").Component<ResizeHandleProps, {}, "value">;
28
+ type ResizeHandle = ReturnType<typeof ResizeHandle>;
29
+ export default ResizeHandle;
@@ -0,0 +1,51 @@
1
+ <!--
2
+ Text that rolls to its next value: the old line lifts away as the new one
3
+ rises in. For a phrase that follows an agent from action to action,
4
+ "Reading agent-run.tsx", then "Running pnpm check".
5
+ -->
6
+ <script lang="ts" module>
7
+ import * as stylex from '@stylexjs/stylex';
8
+ import { cubicOut } from 'svelte/easing';
9
+ import { fly } from 'svelte/transition';
10
+ import { attrs, type Sx } from '../../internal/sx.js';
11
+ import Shimmer from '../shimmer/Shimmer.svelte';
12
+
13
+ export type RollingTextProps = {
14
+ text: string;
15
+ /** Lights the text with the moving glint, while the work goes on. */
16
+ shimmer?: boolean;
17
+ sx?: Sx;
18
+ class?: string;
19
+ };
20
+
21
+ const styles = stylex.create({
22
+ // Both lines share one cell while they pass each other
23
+ root: { display: 'inline-grid', minWidth: 0, overflow: 'hidden', verticalAlign: 'bottom' },
24
+ line: {
25
+ gridArea: '1 / 1',
26
+ minWidth: 0,
27
+ overflow: 'hidden',
28
+ textOverflow: 'ellipsis',
29
+ whiteSpace: 'nowrap'
30
+ }
31
+ });
32
+
33
+ const calm = () =>
34
+ typeof matchMedia !== 'undefined' && matchMedia('(prefers-reduced-motion: reduce)').matches;
35
+ </script>
36
+
37
+ <script lang="ts">
38
+ let { text, shimmer = false, sx, class: className }: RollingTextProps = $props();
39
+ </script>
40
+
41
+ <span data-slot="rolling-text" {...attrs([styles.root, sx], className)}>
42
+ {#key text}
43
+ <span
44
+ {...stylex.attrs(styles.line)}
45
+ in:fly={{ y: '0.6em', duration: calm() ? 0 : 220, easing: cubicOut, opacity: 0 }}
46
+ out:fly={{ y: '-0.6em', duration: calm() ? 0 : 160, easing: cubicOut, opacity: 0 }}
47
+ >
48
+ <Shimmer active={shimmer}>{text}</Shimmer>
49
+ </span>
50
+ {/key}
51
+ </span>
@@ -0,0 +1,11 @@
1
+ import { type Sx } from '../../internal/sx.js';
2
+ export type RollingTextProps = {
3
+ text: string;
4
+ /** Lights the text with the moving glint, while the work goes on. */
5
+ shimmer?: boolean;
6
+ sx?: Sx;
7
+ class?: string;
8
+ };
9
+ declare const RollingText: import("svelte").Component<RollingTextProps, {}, "">;
10
+ type RollingText = ReturnType<typeof RollingText>;
11
+ export default RollingText;
@@ -0,0 +1,171 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ import { attrs, type Sx } from '../../internal/sx.js';
5
+ import { colors, font, motion, radius } from '../../tokens.stylex.js';
6
+
7
+ export type SegmentedOption = { value: string; label: string; disabled?: boolean };
8
+
9
+ export type SegmentedControlProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
10
+ /** The choices, in order. Two to five read best. */
11
+ options: SegmentedOption[];
12
+ /** The selected option's value. Bindable. */
13
+ value?: string;
14
+ /** Form field name. Generated when omitted. */
15
+ name?: string;
16
+ disabled?: boolean;
17
+ sx?: Sx;
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
+ WebkitAppRegion: 'no-drag',
28
+ position: 'relative',
29
+ display: 'inline-grid',
30
+ gridAutoFlow: 'column',
31
+ gridAutoColumns: '1fr',
32
+ boxSizing: 'border-box',
33
+ padding: '0.1875rem',
34
+ borderRadius: `calc(${radius.sm} + 0.1875rem)`,
35
+ backgroundColor: colors.well,
36
+ boxShadow: `inset 0 0 0 1px ${colors.line}, inset 0 1px 2px ${colors.shade}`,
37
+ fontFamily: font.body,
38
+ outlineStyle: 'solid',
39
+ outlineWidth: '1px',
40
+ outlineColor: 'transparent',
41
+ outlineOffset: '-1px'
42
+ },
43
+ // The thumb slides under the labels. Its position is logical, so it mirrors in RTL.
44
+ thumb: {
45
+ position: 'absolute',
46
+ top: '0.1875rem',
47
+ bottom: '0.1875rem',
48
+ insetInlineStart: '0.1875rem',
49
+ width: 'calc((100% - 6px) / var(--narvi-seg-count))',
50
+ // Moved with a transform. A percentage is of the thumb's own width, so one
51
+ // step is exactly 100%, whatever the labels measure.
52
+ translate: {
53
+ default: 'calc(var(--narvi-seg-index) * 100%) 0',
54
+ ':dir(rtl)': 'calc(var(--narvi-seg-index) * -100%) 0'
55
+ },
56
+ borderRadius: radius.sm,
57
+ backgroundColor: { default: colors.surfaceRaised, [FORCED]: 'Canvas' },
58
+ boxShadow: `inset 0 0 0 1px ${colors.lineStrong}, inset 0 1px 0 ${colors.highlight}, 0 1px 3px ${colors.shade}`,
59
+ outlineStyle: 'solid',
60
+ outlineWidth: '2px',
61
+ outlineOffset: '-2px',
62
+ outlineColor: { default: 'transparent', [FORCED]: 'Highlight' },
63
+ forcedColorAdjust: 'none'
64
+ },
65
+ thumbSlides: {
66
+ transitionProperty: { default: 'none', [MOTION]: 'translate' },
67
+ transitionDuration: motion.slow,
68
+ transitionTimingFunction: motion.easeInOut
69
+ },
70
+ thumbHidden: { opacity: 0 },
71
+ option: {
72
+ position: 'relative',
73
+ zIndex: 1,
74
+ display: 'grid',
75
+ cursor: 'pointer',
76
+ WebkitTapHighlightColor: 'transparent'
77
+ },
78
+ optionDisabled: { cursor: 'not-allowed', opacity: 0.5 },
79
+ // The radio itself is invisible and covers its option, so it takes the click and the focus
80
+ input: {
81
+ position: 'absolute',
82
+ inset: 0,
83
+ width: '100%',
84
+ height: '100%',
85
+ margin: 0,
86
+ opacity: 0,
87
+ appearance: 'none',
88
+ cursor: 'inherit'
89
+ },
90
+ text: {
91
+ display: 'grid',
92
+ placeItems: 'center',
93
+ minHeight: '1.75rem',
94
+ paddingInline: '0.75rem',
95
+ borderRadius: radius.sm,
96
+ color: {
97
+ default: colors.textMuted,
98
+ ':hover': { default: null, [HOVER]: colors.text },
99
+ [stylex.when.siblingBefore(':checked')]: colors.text
100
+ },
101
+ fontSize: font.sizeMd,
102
+ fontWeight: {
103
+ default: font.weightMedium,
104
+ [stylex.when.siblingBefore(':checked')]: font.weightSemibold
105
+ },
106
+ lineHeight: 1,
107
+ whiteSpace: 'nowrap',
108
+ outlineStyle: 'solid',
109
+ outlineWidth: '2px',
110
+ outlineOffset: '1px',
111
+ outlineColor: {
112
+ default: 'transparent',
113
+ [stylex.when.siblingBefore(':focus-visible')]: colors.focusRing
114
+ },
115
+ transitionProperty: 'color',
116
+ transitionDuration: motion.base,
117
+ transitionTimingFunction: 'ease'
118
+ }
119
+ });
120
+ </script>
121
+
122
+ <script lang="ts">
123
+ let {
124
+ options,
125
+ value = $bindable(),
126
+ name,
127
+ disabled = false,
128
+ sx,
129
+ class: className,
130
+ ...rest
131
+ }: SegmentedControlProps = $props();
132
+
133
+ const uid = $props.id();
134
+ const index = $derived(options.findIndex((option) => option.value === value));
135
+
136
+ // The thumb slides only for a choice made with a pointer. Arrow keys move the
137
+ // selection as fast as they repeat, and a thumb trailing behind the focus ring
138
+ // makes the control feel slow. It also stays put when there was nothing
139
+ // selected to slide from.
140
+ let slides = $state(false);
141
+ </script>
142
+
143
+ <div
144
+ role="radiogroup"
145
+ {...rest}
146
+ {...attrs([styles.root, sx], className)}
147
+ style:--narvi-seg-count={options.length}
148
+ onpointerdowncapture={() => (slides = index >= 0)}
149
+ onkeydowncapture={() => (slides = false)}
150
+ >
151
+ <!-- The index is set on the thumb itself, so a change restyles one element, not the group -->
152
+ <span
153
+ aria-hidden="true"
154
+ {...stylex.attrs(styles.thumb, slides && styles.thumbSlides, index < 0 && styles.thumbHidden)}
155
+ style:--narvi-seg-index={Math.max(index, 0)}
156
+ ></span>
157
+ {#each options as option (option.value)}
158
+ {@const off = disabled || option.disabled}
159
+ <label {...stylex.attrs(styles.option, off && styles.optionDisabled)}>
160
+ <input
161
+ type="radio"
162
+ name={name ?? uid}
163
+ value={option.value}
164
+ bind:group={value}
165
+ disabled={off}
166
+ {...stylex.attrs(styles.input, stylex.defaultMarker())}
167
+ />
168
+ <span {...stylex.attrs(styles.text)}>{option.label}</span>
169
+ </label>
170
+ {/each}
171
+ </div>
@@ -0,0 +1,20 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ import { type Sx } from '../../internal/sx.js';
3
+ export type SegmentedOption = {
4
+ value: string;
5
+ label: string;
6
+ disabled?: boolean;
7
+ };
8
+ export type SegmentedControlProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
9
+ /** The choices, in order. Two to five read best. */
10
+ options: SegmentedOption[];
11
+ /** The selected option's value. Bindable. */
12
+ value?: string;
13
+ /** Form field name. Generated when omitted. */
14
+ name?: string;
15
+ disabled?: boolean;
16
+ sx?: Sx;
17
+ };
18
+ declare const SegmentedControl: import("svelte").Component<SegmentedControlProps, {}, "value">;
19
+ type SegmentedControl = ReturnType<typeof SegmentedControl>;
20
+ export default SegmentedControl;
@@ -0,0 +1,146 @@
1
+ <!--
2
+ One choice from a short list. For a list long enough to search, or choices
3
+ with more to them, use a Popover with your own content.
4
+ -->
5
+ <script lang="ts" module>
6
+ import { Select } from 'bits-ui';
7
+ import * as stylex from '@stylexjs/stylex';
8
+ import Glyph from '../../internal/Glyph.svelte';
9
+ import { control, type ControlSize } from '../../internal/control.js';
10
+ import { layer } from '../../internal/layer.js';
11
+ import { attrs, type Sx } from '../../internal/sx.js';
12
+ import { colors } from '../../tokens.stylex.js';
13
+ import { getFieldContext } from '../field/context.js';
14
+
15
+ export type SelectOption = {
16
+ value: string;
17
+ label: string;
18
+ /** Options with the same group are listed together under its name. */
19
+ group?: string;
20
+ disabled?: boolean;
21
+ };
22
+
23
+ export type SelectProps = {
24
+ options: SelectOption[];
25
+ /** The chosen value. Bindable. */
26
+ value?: string;
27
+ /** Shown while nothing is chosen. */
28
+ placeholder?: string;
29
+ size?: ControlSize;
30
+ disabled?: boolean;
31
+ /** For a form: the name the value is sent under. */
32
+ name?: string;
33
+ /** Called when the person picks an option. */
34
+ onchange?: (value: string) => void;
35
+ 'aria-label'?: string;
36
+ 'aria-describedby'?: string;
37
+ id?: string;
38
+ sx?: Sx;
39
+ class?: string;
40
+ };
41
+
42
+ const styles = stylex.create({
43
+ trigger: {
44
+ display: 'flex',
45
+ alignItems: 'center',
46
+ gap: '0.5rem',
47
+ textAlign: 'start',
48
+ cursor: { default: 'pointer', ':disabled': 'not-allowed' }
49
+ },
50
+ value: {
51
+ flexGrow: 1,
52
+ minWidth: 0,
53
+ overflow: 'hidden',
54
+ textOverflow: 'ellipsis',
55
+ whiteSpace: 'nowrap'
56
+ },
57
+ placeholder: { color: colors.textSubtle },
58
+ selector: { display: 'grid', flexShrink: 0, color: colors.textSubtle },
59
+ check: { display: 'grid', marginInlineStart: 'auto', color: colors.ithil }
60
+ });
61
+
62
+ type Group = { name: string | undefined; options: SelectOption[] };
63
+ function grouped(options: SelectOption[]): Group[] {
64
+ const groups: Group[] = [];
65
+ for (const option of options) {
66
+ const last = groups.at(-1);
67
+ if (last && last.name === option.group) last.options.push(option);
68
+ else groups.push({ name: option.group, options: [option] });
69
+ }
70
+ return groups;
71
+ }
72
+ </script>
73
+
74
+ <script lang="ts">
75
+ let {
76
+ options,
77
+ value = $bindable(),
78
+ placeholder = 'Choose…',
79
+ size = 'md',
80
+ disabled,
81
+ name,
82
+ onchange,
83
+ 'aria-label': label,
84
+ 'aria-describedby': describedBy,
85
+ id,
86
+ sx,
87
+ class: className
88
+ }: SelectProps = $props();
89
+
90
+ const field = getFieldContext();
91
+ const selected = $derived(options.find((option) => option.value === value));
92
+ const groups = $derived(grouped(options));
93
+ </script>
94
+
95
+ <Select.Root
96
+ type="single"
97
+ bind:value={() => value ?? '', (next) => (value = next || undefined)}
98
+ onValueChange={(next) => onchange?.(next)}
99
+ items={options}
100
+ {name}
101
+ disabled={disabled ?? field?.disabled}
102
+ >
103
+ <Select.Trigger
104
+ id={id ?? field?.id}
105
+ aria-label={label}
106
+ aria-describedby={describedBy ?? field?.describedBy}
107
+ data-slot="select"
108
+ {...attrs([control.base, control[size], styles.trigger, sx], className)}
109
+ >
110
+ <span {...stylex.attrs(styles.value, !selected && styles.placeholder)}>
111
+ {selected?.label ?? placeholder}
112
+ </span>
113
+ <span {...stylex.attrs(styles.selector)}><Glyph name="selector" size={14} /></span>
114
+ </Select.Trigger>
115
+ <Select.Portal>
116
+ <Select.Content sideOffset={6} collisionPadding={8} {...stylex.attrs(layer.surface)}>
117
+ <Select.Viewport>
118
+ {#each groups as group, index (index)}
119
+ <Select.Group>
120
+ {#if group.name}
121
+ <Select.GroupHeading {...stylex.attrs(layer.heading)}
122
+ >{group.name}</Select.GroupHeading
123
+ >
124
+ {/if}
125
+ {#each group.options as option (option.value)}
126
+ <Select.Item
127
+ value={option.value}
128
+ label={option.label}
129
+ disabled={option.disabled}
130
+ {...stylex.attrs(layer.item)}
131
+ >
132
+ {#snippet children({ selected })}
133
+ <span {...stylex.attrs(layer.label)}>{option.label}</span>
134
+ {#if selected}
135
+ <span {...stylex.attrs(styles.check)}><Glyph name="check" stroke={1.75} /></span
136
+ >
137
+ {/if}
138
+ {/snippet}
139
+ </Select.Item>
140
+ {/each}
141
+ </Select.Group>
142
+ {/each}
143
+ </Select.Viewport>
144
+ </Select.Content>
145
+ </Select.Portal>
146
+ </Select.Root>
@@ -0,0 +1,31 @@
1
+ import { Select } from 'bits-ui';
2
+ import { type ControlSize } from '../../internal/control.js';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type SelectOption = {
5
+ value: string;
6
+ label: string;
7
+ /** Options with the same group are listed together under its name. */
8
+ group?: string;
9
+ disabled?: boolean;
10
+ };
11
+ export type SelectProps = {
12
+ options: SelectOption[];
13
+ /** The chosen value. Bindable. */
14
+ value?: string;
15
+ /** Shown while nothing is chosen. */
16
+ placeholder?: string;
17
+ size?: ControlSize;
18
+ disabled?: boolean;
19
+ /** For a form: the name the value is sent under. */
20
+ name?: string;
21
+ /** Called when the person picks an option. */
22
+ onchange?: (value: string) => void;
23
+ 'aria-label'?: string;
24
+ 'aria-describedby'?: string;
25
+ id?: string;
26
+ sx?: Sx;
27
+ class?: string;
28
+ };
29
+ declare const Select: import("svelte").Component<SelectProps, {}, "value">;
30
+ type Select = ReturnType<typeof Select>;
31
+ export default Select;
@@ -0,0 +1,48 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ import { attrs, type Sx } from '../../internal/sx.js';
5
+ import { colors } from '../../tokens.stylex.js';
6
+
7
+ export type SeparatorProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
8
+ orientation?: 'horizontal' | 'vertical';
9
+ /** Hides the separator from assistive technology when it is purely visual. */
10
+ decorative?: boolean;
11
+ sx?: Sx;
12
+ };
13
+
14
+ const styles = stylex.create({
15
+ base: {
16
+ flexShrink: 0,
17
+ margin: 0,
18
+ borderWidth: 0,
19
+ backgroundColor: colors.line
20
+ },
21
+ horizontal: {
22
+ width: '100%',
23
+ height: '1px'
24
+ },
25
+ vertical: {
26
+ alignSelf: 'stretch',
27
+ width: '1px',
28
+ minHeight: '1em'
29
+ }
30
+ });
31
+ </script>
32
+
33
+ <script lang="ts">
34
+ let {
35
+ orientation = 'horizontal',
36
+ decorative = false,
37
+ sx,
38
+ class: className,
39
+ ...rest
40
+ }: SeparatorProps = $props();
41
+ </script>
42
+
43
+ <div
44
+ role={decorative ? 'none' : 'separator'}
45
+ aria-orientation={decorative || orientation === 'horizontal' ? undefined : 'vertical'}
46
+ {...rest}
47
+ {...attrs([styles.base, styles[orientation], sx], className)}
48
+ ></div>