@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,236 @@
1
+ <!--
2
+ A row in the sidebar. The title, a time or status at the end, and a second
3
+ quiet line beneath; actions appear on hover or focus, and the note at the
4
+ end steps aside for them.
5
+ -->
6
+ <script lang="ts" module>
7
+ import * as stylex from '@stylexjs/stylex';
8
+ import type { Snippet } from 'svelte';
9
+ import type { HTMLAnchorAttributes } from 'svelte/elements';
10
+ import { sidebarItemMarker } from '../../internal/markers.stylex.js';
11
+ import { attrs, type Sx } from '../../internal/sx.js';
12
+ import { colors, font, motion, radius } from '../../tokens.stylex.js';
13
+
14
+ export type SidebarItemProps = Omit<HTMLAnchorAttributes, 'children'> & {
15
+ /** A link to go to. Without it the row is a button; listen with `onclick`. */
16
+ href?: string;
17
+ /** The row that is open now. */
18
+ current?: boolean;
19
+ /** Quieter than the rest: for rows that need nothing from the person. */
20
+ muted?: boolean;
21
+ /** One line, without `meta`: for rows that are settled. */
22
+ compact?: boolean;
23
+ /** Before the title: an icon, or a StatusIndicator. */
24
+ leading?: Snippet;
25
+ /** At the end of the title's line: a time, or a status. */
26
+ trailing?: Snippet;
27
+ /** The second line: a branch, a project, a count. */
28
+ meta?: Snippet;
29
+ /** Buttons shown over the end of the row on hover or focus. */
30
+ actions?: Snippet;
31
+ sx?: Sx;
32
+ /** The title. */
33
+ children?: Snippet;
34
+ };
35
+
36
+ const HOVER = '@media (hover: hover) and (pointer: fine)';
37
+ const FORCED = '@media (forced-colors: active)';
38
+ // StyleX reads `when` only where it is written inline, in the keys below
39
+
40
+ const styles = stylex.create({
41
+ item: { position: 'relative', listStyleType: 'none' },
42
+ row: {
43
+ position: 'relative',
44
+ boxSizing: 'border-box',
45
+ display: 'grid',
46
+ gridTemplateColumns: 'auto minmax(0, 1fr) auto',
47
+ gridTemplateAreas: '"lead title trail" "lead meta meta"',
48
+ alignItems: 'center',
49
+ columnGap: '0.5rem',
50
+ rowGap: '0.125rem',
51
+ width: '100%',
52
+ margin: 0,
53
+ paddingBlock: '0.4375rem',
54
+ paddingInline: '0.625rem',
55
+ borderWidth: 0,
56
+ borderRadius: radius.lg,
57
+ backgroundColor: {
58
+ default: 'transparent',
59
+ ':hover': { default: null, [HOVER]: colors.hover }
60
+ },
61
+ color: colors.text,
62
+ fontFamily: 'inherit',
63
+ fontSize: font.sizeMd,
64
+ lineHeight: font.leadingSnug,
65
+ textAlign: 'start',
66
+ textDecoration: 'none',
67
+ cursor: 'pointer',
68
+ WebkitTapHighlightColor: 'transparent',
69
+ WebkitAppRegion: 'no-drag',
70
+ outlineStyle: 'solid',
71
+ outlineWidth: { default: 0, ':focus-visible': '2px', [FORCED]: '1px' },
72
+ outlineColor: { default: 'transparent', ':focus-visible': colors.focusRing },
73
+ outlineOffset: '-2px',
74
+ transitionProperty: 'background-color, color',
75
+ transitionDuration: motion.fast,
76
+ transitionTimingFunction: 'ease'
77
+ },
78
+ compact: { gridTemplateAreas: '"lead title trail"', paddingBlock: '0.375rem' },
79
+ muted: { color: colors.textMuted },
80
+ // The open row is lifted, with a thread of ithildin along its edge
81
+ current: {
82
+ color: colors.text,
83
+ backgroundColor: { default: colors.surfaceRaised, ':hover': colors.surfaceRaised },
84
+ boxShadow: `inset 0 0 0 1px ${colors.line}, 0 1px 2px ${colors.shade}`,
85
+ '::before': {
86
+ content: '""',
87
+ position: 'absolute',
88
+ insetInlineStart: '-0.5rem',
89
+ top: '25%',
90
+ bottom: '25%',
91
+ width: '2px',
92
+ borderRadius: '2px',
93
+ backgroundColor: { default: colors.ithil, [FORCED]: 'Highlight' },
94
+ boxShadow: `0 0 8px ${colors.glow}`,
95
+ forcedColorAdjust: 'none'
96
+ }
97
+ },
98
+ lead: {
99
+ gridArea: 'lead',
100
+ alignSelf: 'start',
101
+ display: 'grid',
102
+ placeItems: 'center',
103
+ width: '1rem',
104
+ height: '1.225em',
105
+ color: colors.textSubtle
106
+ },
107
+ title: {
108
+ gridArea: 'title',
109
+ minWidth: 0,
110
+ overflow: 'hidden',
111
+ textOverflow: 'ellipsis',
112
+ whiteSpace: 'nowrap'
113
+ },
114
+ titleCurrent: { fontWeight: font.weightMedium },
115
+ trail: {
116
+ gridArea: 'trail',
117
+ display: 'inline-flex',
118
+ alignItems: 'center',
119
+ gap: '0.25rem',
120
+ color: colors.textSubtle,
121
+ fontSize: font.sizeXs,
122
+ fontVariantNumeric: 'tabular-nums',
123
+ whiteSpace: 'nowrap',
124
+ transitionProperty: 'opacity',
125
+ transitionDuration: motion.fast,
126
+ transitionTimingFunction: 'ease'
127
+ },
128
+ // Steps aside for the actions, which sit over it
129
+ trailHides: {
130
+ opacity: {
131
+ default: 1,
132
+ [HOVER]: { default: 1, [stylex.when.ancestor(':hover', sidebarItemMarker)]: 0 },
133
+ [stylex.when.ancestor(':focus-within', sidebarItemMarker)]: 0
134
+ }
135
+ },
136
+ meta: {
137
+ gridArea: 'meta',
138
+ display: 'flex',
139
+ alignItems: 'center',
140
+ gap: '0.375rem',
141
+ minWidth: 0,
142
+ overflow: 'hidden',
143
+ color: colors.textSubtle,
144
+ fontSize: font.sizeXs,
145
+ whiteSpace: 'nowrap'
146
+ },
147
+ actions: {
148
+ position: 'absolute',
149
+ top: '0.25rem',
150
+ insetInlineEnd: '0.25rem',
151
+ zIndex: 1,
152
+ display: 'flex',
153
+ gap: '1px',
154
+ padding: '1px',
155
+ borderRadius: radius.md,
156
+ backgroundColor: colors.bgRaised,
157
+ boxShadow: `inset 0 0 0 1px ${colors.line}, 0 2px 6px -2px ${colors.shade}`,
158
+ opacity: {
159
+ default: 1,
160
+ [HOVER]: { default: 0, [stylex.when.ancestor(':hover', sidebarItemMarker)]: 1 },
161
+ [stylex.when.ancestor(':focus-within', sidebarItemMarker)]: 1
162
+ },
163
+ pointerEvents: {
164
+ default: 'auto',
165
+ [HOVER]: { default: 'none', [stylex.when.ancestor(':hover', sidebarItemMarker)]: 'auto' },
166
+ [stylex.when.ancestor(':focus-within', sidebarItemMarker)]: 'auto'
167
+ },
168
+ transitionProperty: 'opacity',
169
+ transitionDuration: motion.fast,
170
+ transitionTimingFunction: 'ease'
171
+ }
172
+ });
173
+ </script>
174
+
175
+ <script lang="ts">
176
+ let {
177
+ href,
178
+ current = false,
179
+ muted = false,
180
+ compact = false,
181
+ leading,
182
+ trailing,
183
+ meta,
184
+ actions,
185
+ sx,
186
+ class: className,
187
+ children,
188
+ ...rest
189
+ }: SidebarItemProps = $props();
190
+
191
+ const rowAttrs = $derived(
192
+ attrs(
193
+ [
194
+ styles.row,
195
+ (compact || !meta) && styles.compact,
196
+ muted && !current && styles.muted,
197
+ current && styles.current,
198
+ sx
199
+ ],
200
+ className
201
+ )
202
+ );
203
+ </script>
204
+
205
+ {#snippet inside()}
206
+ {#if leading}<span {...stylex.attrs(styles.lead)}>{@render leading()}</span>{/if}
207
+ <span {...stylex.attrs(styles.title, current && styles.titleCurrent)}>{@render children?.()}</span
208
+ >
209
+ {#if trailing}
210
+ <span {...stylex.attrs(styles.trail, actions && styles.trailHides)}>{@render trailing()}</span>
211
+ {/if}
212
+ {#if meta && !compact}<span {...stylex.attrs(styles.meta)}>{@render meta()}</span>{/if}
213
+ {/snippet}
214
+
215
+ <li data-slot="sidebar-item" {...stylex.attrs(styles.item, sidebarItemMarker)}>
216
+ {#if href !== undefined}
217
+ <a {href} data-sidebar-row aria-current={current ? 'page' : undefined} {...rest} {...rowAttrs}>
218
+ {@render inside()}
219
+ </a>
220
+ {:else}
221
+ <button
222
+ type="button"
223
+ data-sidebar-row
224
+ aria-current={current ? 'page' : undefined}
225
+ {...rest as Record<string, unknown>}
226
+ {...rowAttrs}
227
+ >
228
+ {@render inside()}
229
+ </button>
230
+ {/if}
231
+ {#if actions}
232
+ <div data-slot="sidebar-item-actions" {...stylex.attrs(styles.actions)}>
233
+ {@render actions()}
234
+ </div>
235
+ {/if}
236
+ </li>
@@ -0,0 +1,27 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAnchorAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type SidebarItemProps = Omit<HTMLAnchorAttributes, 'children'> & {
5
+ /** A link to go to. Without it the row is a button; listen with `onclick`. */
6
+ href?: string;
7
+ /** The row that is open now. */
8
+ current?: boolean;
9
+ /** Quieter than the rest: for rows that need nothing from the person. */
10
+ muted?: boolean;
11
+ /** One line, without `meta`: for rows that are settled. */
12
+ compact?: boolean;
13
+ /** Before the title: an icon, or a StatusIndicator. */
14
+ leading?: Snippet;
15
+ /** At the end of the title's line: a time, or a status. */
16
+ trailing?: Snippet;
17
+ /** The second line: a branch, a project, a count. */
18
+ meta?: Snippet;
19
+ /** Buttons shown over the end of the row on hover or focus. */
20
+ actions?: Snippet;
21
+ sx?: Sx;
22
+ /** The title. */
23
+ children?: Snippet;
24
+ };
25
+ declare const SidebarItem: import("svelte").Component<SidebarItemProps, {}, "">;
26
+ type SidebarItem = ReturnType<typeof SidebarItem>;
27
+ export default SidebarItem;
@@ -0,0 +1,11 @@
1
+ import Content from './SidebarContent.svelte';
2
+ import Footer from './SidebarFooter.svelte';
3
+ import Group from './SidebarGroup.svelte';
4
+ import Header from './SidebarHeader.svelte';
5
+ import Item from './SidebarItem.svelte';
6
+ export { Header, Content, Group, Item, Footer };
7
+ export type { SidebarContentProps } from './SidebarContent.svelte';
8
+ export type { SidebarFooterProps } from './SidebarFooter.svelte';
9
+ export type { SidebarGroupProps } from './SidebarGroup.svelte';
10
+ export type { SidebarHeaderProps } from './SidebarHeader.svelte';
11
+ export type { SidebarItemProps } from './SidebarItem.svelte';
@@ -0,0 +1,6 @@
1
+ import Content from './SidebarContent.svelte';
2
+ import Footer from './SidebarFooter.svelte';
3
+ import Group from './SidebarGroup.svelte';
4
+ import Header from './SidebarHeader.svelte';
5
+ import Item from './SidebarItem.svelte';
6
+ export { Header, Content, Group, Item, Footer };
@@ -0,0 +1,61 @@
1
+ <!--
2
+ A stand-in for content on its way. It breathes on Narvi's shared clock, not
3
+ a CSS animation, and is hidden from assistive technology: mark the region
4
+ that is loading with aria-busy instead.
5
+ -->
6
+ <script lang="ts" module>
7
+ import * as stylex from '@stylexjs/stylex';
8
+ import { loop } from '../../internal/loop.js';
9
+ import { attrs, type Sx } from '../../internal/sx.js';
10
+ import { colors, radius } from '../../tokens.stylex.js';
11
+
12
+ export type SkeletonProps = {
13
+ /** Lines of text to stand in for; the last is shorter. Leave out for one block. */
14
+ lines?: number;
15
+ width?: string;
16
+ /** The block's height; lines are as tall as the text around them. */
17
+ height?: string;
18
+ sx?: Sx;
19
+ class?: string;
20
+ };
21
+
22
+ const styles = stylex.create({
23
+ block: { display: 'block', borderRadius: radius.sm, backgroundColor: colors.hover },
24
+ lines: { display: 'flex', flexDirection: 'column', gap: '0.5em' },
25
+ line: { height: '0.8em', borderRadius: radius.xs, backgroundColor: colors.hover }
26
+ });
27
+
28
+ const breathe = loop(1600, (element, { progress }) => {
29
+ element.style.opacity = String(0.55 + 0.45 * (0.5 + 0.5 * Math.cos(progress * 2 * Math.PI)));
30
+ });
31
+ </script>
32
+
33
+ <script lang="ts">
34
+ let { lines, width = '100%', height = '1rem', sx, class: className }: SkeletonProps = $props();
35
+ </script>
36
+
37
+ {#if lines}
38
+ <span
39
+ aria-hidden="true"
40
+ data-slot="skeleton"
41
+ {...attrs([styles.lines, sx], className)}
42
+ style:width
43
+ {@attach breathe}
44
+ >
45
+ {#each { length: lines }, index (index)}
46
+ <span
47
+ {...stylex.attrs(styles.line)}
48
+ style:width={index === lines - 1 && lines > 1 ? '62%' : '100%'}
49
+ ></span>
50
+ {/each}
51
+ </span>
52
+ {:else}
53
+ <span
54
+ aria-hidden="true"
55
+ data-slot="skeleton"
56
+ {...attrs([styles.block, sx], className)}
57
+ style:width
58
+ style:height
59
+ {@attach breathe}
60
+ ></span>
61
+ {/if}
@@ -0,0 +1,13 @@
1
+ import { type Sx } from '../../internal/sx.js';
2
+ export type SkeletonProps = {
3
+ /** Lines of text to stand in for; the last is shorter. Leave out for one block. */
4
+ lines?: number;
5
+ width?: string;
6
+ /** The block's height; lines are as tall as the text around them. */
7
+ height?: string;
8
+ sx?: Sx;
9
+ class?: string;
10
+ };
11
+ declare const Skeleton: import("svelte").Component<SkeletonProps, {}, "">;
12
+ type Skeleton = ReturnType<typeof Skeleton>;
13
+ export default Skeleton;
@@ -0,0 +1,57 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { SVGAttributes } from 'svelte/elements';
4
+ import { loop } from '../../internal/loop.js';
5
+ import { attrs, type Sx } from '../../internal/sx.js';
6
+
7
+ export type SpinnerProps = Omit<SVGAttributes<SVGSVGElement>, 'children'> & {
8
+ /** Width and height in pixels, or any CSS length. Defaults to `1em`. */
9
+ size?: number | string;
10
+ /** Accessible name. Pass `null` when a nearby label already says what is loading. */
11
+ label?: string | null;
12
+ sx?: Sx;
13
+ };
14
+
15
+ // Turns on Narvi's shared clock rather than a CSS animation, which would repaint
16
+ // at the display's rate. Slower for people who have asked for less motion.
17
+ const spin = loop(
18
+ (reduced) => (reduced ? 2400 : 700),
19
+ (element, { progress }) => (element.style.rotate = `${progress}turn`),
20
+ (element) => (element.style.rotate = '')
21
+ );
22
+
23
+ const styles = stylex.create({
24
+ base: {
25
+ display: 'inline-block',
26
+ flexShrink: 0,
27
+ verticalAlign: 'middle'
28
+ }
29
+ });
30
+ </script>
31
+
32
+ <script lang="ts">
33
+ let { size = '1em', label = 'Loading', sx, class: className, ...rest }: SpinnerProps = $props();
34
+
35
+ const length = $derived(typeof size === 'number' ? `${size}px` : size);
36
+ </script>
37
+
38
+ <svg
39
+ width={length}
40
+ height={length}
41
+ viewBox="0 0 16 16"
42
+ fill="none"
43
+ role={label ? 'img' : undefined}
44
+ aria-label={label ?? undefined}
45
+ aria-hidden={label ? undefined : true}
46
+ {...rest}
47
+ {...attrs([styles.base, sx], className)}
48
+ {@attach spin}
49
+ >
50
+ <circle cx="8" cy="8" r="6.25" stroke="currentColor" stroke-width="1.5" opacity="0.25" />
51
+ <path
52
+ d="M14.25 8A6.25 6.25 0 0 0 8 1.75"
53
+ stroke="currentColor"
54
+ stroke-width="1.5"
55
+ stroke-linecap="round"
56
+ />
57
+ </svg>
@@ -0,0 +1,12 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ import { type Sx } from '../../internal/sx.js';
3
+ export type SpinnerProps = Omit<SVGAttributes<SVGSVGElement>, 'children'> & {
4
+ /** Width and height in pixels, or any CSS length. Defaults to `1em`. */
5
+ size?: number | string;
6
+ /** Accessible name. Pass `null` when a nearby label already says what is loading. */
7
+ label?: string | null;
8
+ sx?: Sx;
9
+ };
10
+ declare const Spinner: import("svelte").Component<SpinnerProps, {}, "">;
11
+ type Spinner = ReturnType<typeof Spinner>;
12
+ export default Spinner;
@@ -0,0 +1,99 @@
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 { space } from '../../tokens.stylex.js';
7
+
8
+ /** Steps on the 4px spacing scale: `4` is 16px. */
9
+ export type StackGap = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16;
10
+
11
+ export type StackProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
12
+ /** Element to render. */
13
+ as?: 'div' | 'section' | 'article' | 'nav' | 'header' | 'footer' | 'main' | 'ul' | 'ol' | 'li';
14
+ direction?: 'column' | 'row';
15
+ gap?: StackGap;
16
+ align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';
17
+ justify?: 'start' | 'center' | 'end' | 'between';
18
+ wrap?: boolean;
19
+ sx?: Sx;
20
+ children?: Snippet;
21
+ };
22
+
23
+ const styles = stylex.create({
24
+ base: {
25
+ display: 'flex',
26
+ boxSizing: 'border-box',
27
+ minWidth: 0,
28
+ margin: 0,
29
+ padding: 0,
30
+ listStyleType: 'none'
31
+ },
32
+ column: { flexDirection: 'column' },
33
+ row: { flexDirection: 'row' },
34
+ wrap: { flexWrap: 'wrap' }
35
+ });
36
+
37
+ const gaps = stylex.create({
38
+ 0: { gap: 0 },
39
+ 1: { gap: space.x1 },
40
+ 2: { gap: space.x2 },
41
+ 3: { gap: space.x3 },
42
+ 4: { gap: space.x4 },
43
+ 5: { gap: space.x5 },
44
+ 6: { gap: space.x6 },
45
+ 8: { gap: space.x8 },
46
+ 10: { gap: space.x10 },
47
+ 12: { gap: space.x12 },
48
+ 16: { gap: space.x16 }
49
+ });
50
+
51
+ const aligns = stylex.create({
52
+ start: { alignItems: 'flex-start' },
53
+ center: { alignItems: 'center' },
54
+ end: { alignItems: 'flex-end' },
55
+ stretch: { alignItems: 'stretch' },
56
+ baseline: { alignItems: 'baseline' }
57
+ });
58
+
59
+ const justifies = stylex.create({
60
+ start: { justifyContent: 'flex-start' },
61
+ center: { justifyContent: 'center' },
62
+ end: { justifyContent: 'flex-end' },
63
+ between: { justifyContent: 'space-between' }
64
+ });
65
+ </script>
66
+
67
+ <script lang="ts">
68
+ let {
69
+ as = 'div',
70
+ direction = 'column',
71
+ gap = 4,
72
+ align,
73
+ justify,
74
+ wrap = false,
75
+ sx,
76
+ class: className,
77
+ children,
78
+ ...rest
79
+ }: StackProps = $props();
80
+ </script>
81
+
82
+ <svelte:element
83
+ this={as}
84
+ {...rest}
85
+ {...attrs(
86
+ [
87
+ styles.base,
88
+ styles[direction],
89
+ gaps[gap],
90
+ align && aligns[align],
91
+ justify && justifies[justify],
92
+ wrap && styles.wrap,
93
+ sx
94
+ ],
95
+ className
96
+ )}
97
+ >
98
+ {@render children?.()}
99
+ </svelte:element>
@@ -0,0 +1,19 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ /** Steps on the 4px spacing scale: `4` is 16px. */
5
+ export type StackGap = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16;
6
+ export type StackProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
7
+ /** Element to render. */
8
+ as?: 'div' | 'section' | 'article' | 'nav' | 'header' | 'footer' | 'main' | 'ul' | 'ol' | 'li';
9
+ direction?: 'column' | 'row';
10
+ gap?: StackGap;
11
+ align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';
12
+ justify?: 'start' | 'center' | 'end' | 'between';
13
+ wrap?: boolean;
14
+ sx?: Sx;
15
+ children?: Snippet;
16
+ };
17
+ declare const Stack: import("svelte").Component<StackProps, {}, "">;
18
+ type Stack = ReturnType<typeof Stack>;
19
+ export default Stack;
@@ -0,0 +1,97 @@
1
+ <!--
2
+ Where something stands, by shape as well as colour, so it reads without
3
+ colour too: a turning arc while working, a ring with a dot while waiting
4
+ for the person, a tick when done, a diamond when it failed, a square when
5
+ stopped. (From Eregion, where colour alone failed people who could not see it.)
6
+ -->
7
+ <script lang="ts" module>
8
+ import * as stylex from '@stylexjs/stylex';
9
+ import { attrs, type Sx } from '../../internal/sx.js';
10
+ import { colors } from '../../tokens.stylex.js';
11
+ import Spinner from '../spinner/Spinner.svelte';
12
+
13
+ export type Status =
14
+ 'idle' | 'working' | 'waiting' | 'done' | 'failed' | 'stopped' | 'connecting';
15
+
16
+ export type StatusIndicatorProps = {
17
+ status: Status;
18
+ /** Names the status for assistive technology. `null` when words beside it already say it. */
19
+ label?: string | null;
20
+ /** Width and height, in pixels. */
21
+ size?: number;
22
+ sx?: Sx;
23
+ class?: string;
24
+ };
25
+
26
+ const LABELS: Record<Status, string> = {
27
+ idle: 'Idle',
28
+ working: 'Working',
29
+ waiting: 'Waiting for you',
30
+ done: 'Done',
31
+ failed: 'Failed',
32
+ stopped: 'Stopped',
33
+ connecting: 'Connecting'
34
+ };
35
+
36
+ const styles = stylex.create({
37
+ root: { display: 'inline-grid', placeItems: 'center', flexShrink: 0, verticalAlign: 'middle' },
38
+ idle: { color: colors.textSubtle },
39
+ working: { color: colors.ithil },
40
+ waiting: { color: colors.warning },
41
+ done: { color: colors.success },
42
+ failed: { color: colors.danger },
43
+ stopped: { color: colors.textSubtle },
44
+ connecting: { color: colors.textSubtle }
45
+ });
46
+ </script>
47
+
48
+ <script lang="ts">
49
+ let { status, label, size = 14, sx, class: className }: StatusIndicatorProps = $props();
50
+
51
+ const name = $derived(label === undefined ? LABELS[status] : label);
52
+ </script>
53
+
54
+ <span
55
+ role={name ? 'img' : undefined}
56
+ aria-label={name ?? undefined}
57
+ aria-hidden={name ? undefined : true}
58
+ data-slot="status-indicator"
59
+ data-status={status}
60
+ {...attrs([styles.root, styles[status], sx], className)}
61
+ style:width="{size}px"
62
+ style:height="{size}px"
63
+ >
64
+ {#if status === 'working'}
65
+ <Spinner {size} label={null} />
66
+ {:else}
67
+ <svg
68
+ width={size}
69
+ height={size}
70
+ viewBox="0 0 16 16"
71
+ fill="none"
72
+ stroke="currentColor"
73
+ stroke-width="1.5"
74
+ aria-hidden="true"
75
+ >
76
+ {#if status === 'idle'}
77
+ <circle cx="8" cy="8" r="3.5" />
78
+ {:else if status === 'waiting'}
79
+ <circle cx="8" cy="8" r="6" />
80
+ <circle cx="8" cy="8" r="2.25" fill="currentColor" stroke="none" />
81
+ {:else if status === 'done'}
82
+ <path
83
+ d="M3.25 8.5 6.5 11.75 12.75 4.75"
84
+ stroke-width="1.75"
85
+ stroke-linecap="round"
86
+ stroke-linejoin="round"
87
+ />
88
+ {:else if status === 'failed'}
89
+ <path d="M8 2.25 13.75 8 8 13.75 2.25 8Z" fill="currentColor" stroke="none" />
90
+ {:else if status === 'stopped'}
91
+ <rect x="4" y="4" width="8" height="8" rx="1.5" fill="currentColor" stroke="none" />
92
+ {:else}
93
+ <circle cx="8" cy="8" r="6" stroke-dasharray="2.4 2.6" />
94
+ {/if}
95
+ </svg>
96
+ {/if}
97
+ </span>
@@ -0,0 +1,14 @@
1
+ import { type Sx } from '../../internal/sx.js';
2
+ export type Status = 'idle' | 'working' | 'waiting' | 'done' | 'failed' | 'stopped' | 'connecting';
3
+ export type StatusIndicatorProps = {
4
+ status: Status;
5
+ /** Names the status for assistive technology. `null` when words beside it already say it. */
6
+ label?: string | null;
7
+ /** Width and height, in pixels. */
8
+ size?: number;
9
+ sx?: Sx;
10
+ class?: string;
11
+ };
12
+ declare const StatusIndicator: import("svelte").Component<StatusIndicatorProps, {}, "">;
13
+ type StatusIndicator = ReturnType<typeof StatusIndicator>;
14
+ export default StatusIndicator;