@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,129 @@
1
+ /**
2
+ * What everything that floats has in common: menus, popovers, selects and the
3
+ * palette. One raised surface, sized to the room bits-ui measures for it, and
4
+ * one motion: it grows out of what opened it, and goes a little faster than it
5
+ * came. bits-ui waits for the transition before it removes the element, so
6
+ * the exit is seen.
7
+ */
8
+ import * as stylex from '@stylexjs/stylex';
9
+ import { colors, font, motion, radius } from '../tokens.stylex.js';
10
+ const MOTION = '@media (prefers-reduced-motion: no-preference)';
11
+ const FORCED = '@media (forced-colors: active)';
12
+ const HOVER = '@media (hover: hover) and (pointer: fine)';
13
+ const CLOSED = ':is([data-state="closed"])';
14
+ const HIGHLIGHTED = ':is([data-highlighted])';
15
+ const DISABLED = ':is([data-disabled])';
16
+ export const layer = stylex.create({
17
+ surface: {
18
+ boxSizing: 'border-box',
19
+ zIndex: 50,
20
+ minWidth: 'max(12rem, var(--bits-floating-anchor-width, 0px))',
21
+ maxWidth: 'min(22rem, var(--bits-floating-available-width, 100vw))',
22
+ // Never taller than the room left in the window; it scrolls inside instead
23
+ maxHeight: 'var(--bits-floating-available-height, 80vh)',
24
+ overflowY: 'auto',
25
+ overscrollBehavior: 'contain',
26
+ padding: '0.25rem',
27
+ // Items are 8px round inside 4px of padding: 12px outside
28
+ borderRadius: radius.xl,
29
+ backgroundColor: colors.bgRaised,
30
+ boxShadow: `inset 0 0 0 1px ${colors.lineStrong}, inset 0 1px 0 ${colors.highlight}, 0 2px 4px ${colors.shade}, 0 16px 40px -12px ${colors.shade}`,
31
+ color: colors.text,
32
+ fontFamily: font.body,
33
+ fontSize: font.sizeMd,
34
+ lineHeight: font.leadingSnug,
35
+ scrollbarWidth: 'thin',
36
+ outlineStyle: 'solid',
37
+ outlineWidth: { default: 0, [FORCED]: '1px' },
38
+ outlineColor: 'CanvasText',
39
+ transformOrigin: 'var(--bits-floating-transform-origin, top)',
40
+ opacity: { default: 1, '@starting-style': 0, [CLOSED]: 0 },
41
+ scale: {
42
+ default: null,
43
+ [MOTION]: { default: 1, '@starting-style': 0.97, [CLOSED]: 0.97 }
44
+ },
45
+ transitionProperty: { default: 'opacity', [MOTION]: 'opacity, scale' },
46
+ transitionDuration: { default: motion.fast, [CLOSED]: '80ms' },
47
+ transitionTimingFunction: motion.easeOut
48
+ },
49
+ // A row in a menu, a select or the palette
50
+ item: {
51
+ position: 'relative',
52
+ boxSizing: 'border-box',
53
+ display: 'flex',
54
+ alignItems: 'center',
55
+ gap: '0.5rem',
56
+ minHeight: '2rem',
57
+ paddingBlock: '0.375rem',
58
+ paddingInline: '0.5rem',
59
+ borderRadius: radius.md,
60
+ color: { default: colors.text, [DISABLED]: colors.textSubtle },
61
+ cursor: { default: 'default', [DISABLED]: 'not-allowed' },
62
+ userSelect: 'none',
63
+ outlineStyle: 'none',
64
+ // The highlight follows the arrow keys, which are pressed many times in a
65
+ // row, so it moves at once
66
+ backgroundColor: {
67
+ default: 'transparent',
68
+ [HIGHLIGHTED]: { default: colors.hover, [FORCED]: 'Highlight' }
69
+ },
70
+ forcedColorAdjust: 'none'
71
+ },
72
+ danger: {
73
+ color: colors.danger,
74
+ backgroundColor: {
75
+ default: 'transparent',
76
+ [HIGHLIGHTED]: colors.dangerSoft
77
+ }
78
+ },
79
+ // The icon at the start of an item
80
+ icon: {
81
+ display: 'grid',
82
+ placeItems: 'center',
83
+ flexShrink: 0,
84
+ width: '1rem',
85
+ height: '1rem',
86
+ color: colors.textMuted
87
+ },
88
+ label: {
89
+ flexGrow: 1,
90
+ minWidth: 0,
91
+ overflow: 'hidden',
92
+ textOverflow: 'ellipsis',
93
+ whiteSpace: 'nowrap'
94
+ },
95
+ // A shortcut or a count, at the far end
96
+ trailing: {
97
+ display: 'inline-flex',
98
+ alignItems: 'center',
99
+ gap: '0.25rem',
100
+ flexShrink: 0,
101
+ marginInlineStart: 'auto',
102
+ paddingInlineStart: '1rem',
103
+ color: colors.textSubtle,
104
+ fontSize: font.sizeXs,
105
+ fontVariantNumeric: 'tabular-nums'
106
+ },
107
+ heading: {
108
+ paddingTop: '0.5rem',
109
+ paddingBottom: '0.25rem',
110
+ paddingInline: '0.5rem',
111
+ color: colors.textSubtle,
112
+ fontFamily: font.mono,
113
+ fontSize: '0.6875rem',
114
+ letterSpacing: '0.04em',
115
+ textTransform: 'uppercase'
116
+ },
117
+ separator: {
118
+ height: '1px',
119
+ marginBlock: '0.25rem',
120
+ marginInline: '-0.25rem',
121
+ backgroundColor: colors.line
122
+ },
123
+ hoverable: {
124
+ backgroundColor: {
125
+ default: 'transparent',
126
+ ':hover': { default: null, [HOVER]: colors.hover }
127
+ }
128
+ }
129
+ });
@@ -0,0 +1,35 @@
1
+ /**
2
+ * One clock for everything that moves for as long as it is on screen: spinners,
3
+ * shimmers, the bar of an unknown amount.
4
+ *
5
+ * A CSS animation that never ends repaints at the display's rate, 120 times a
6
+ * second on a ProMotion screen, and restyles its element every frame. In Eregion
7
+ * one shimmer held the renderer at 19% of a core and the GPU at 15%. So these
8
+ * loops share a single timer instead: 20 frames a second while the window is in
9
+ * front, 5 while another app is, and none at all while the window is hidden.
10
+ * Indicators read perfectly well at that rate.
11
+ */
12
+ import type { Attachment } from 'svelte/attachments';
13
+ type Tick = (now: number) => void;
14
+ /** Calls `tick` on the shared clock until the returned function is called. */
15
+ export declare function onLoop(tick: Tick): () => void;
16
+ export type LoopFrame = {
17
+ /** How far through the cycle, from 0 to 1. */
18
+ progress: number;
19
+ /** True when the person has asked for less motion. */
20
+ reduced: boolean;
21
+ /** True when the element reads right to left, worked out once when it starts. */
22
+ rtl: boolean;
23
+ };
24
+ /**
25
+ * An attachment that runs `frame` on the shared clock while the element is on
26
+ * the page. `period` is one cycle in milliseconds, or a function of whether the
27
+ * person has asked for less motion. `reset` undoes what `frame` set, when the
28
+ * loop stops; by default it clears the inline styles `frame` wrote.
29
+ *
30
+ * ```svelte
31
+ * <span {@attach loop(1000, (el, { progress }) => (el.style.rotate = `${progress}turn`))}></span>
32
+ * ```
33
+ */
34
+ export declare function loop(period: number | ((reduced: boolean) => number), frame: (element: HTMLElement | SVGElement, state: LoopFrame) => void, reset?: (element: HTMLElement | SVGElement) => void): Attachment<HTMLElement | SVGElement>;
35
+ export {};
@@ -0,0 +1,72 @@
1
+ const FRONT = 1000 / 20;
2
+ const BEHIND = 1000 / 5;
3
+ const ticks = new Set();
4
+ let timer;
5
+ function schedule() {
6
+ clearTimeout(timer);
7
+ timer = undefined;
8
+ if (ticks.size === 0 || document.hidden)
9
+ return;
10
+ timer = setTimeout(run, document.hasFocus() ? FRONT : BEHIND);
11
+ }
12
+ function run() {
13
+ const now = performance.now();
14
+ for (const tick of ticks)
15
+ tick(now);
16
+ schedule();
17
+ }
18
+ function watch(on) {
19
+ const method = on ? 'addEventListener' : 'removeEventListener';
20
+ document[method]('visibilitychange', schedule);
21
+ window[method]('focus', schedule);
22
+ window[method]('blur', schedule);
23
+ }
24
+ /** Calls `tick` on the shared clock until the returned function is called. */
25
+ export function onLoop(tick) {
26
+ if (ticks.size === 0)
27
+ watch(true);
28
+ ticks.add(tick);
29
+ tick(performance.now());
30
+ if (timer === undefined)
31
+ schedule();
32
+ return () => {
33
+ ticks.delete(tick);
34
+ if (ticks.size === 0) {
35
+ watch(false);
36
+ clearTimeout(timer);
37
+ timer = undefined;
38
+ }
39
+ };
40
+ }
41
+ /**
42
+ * An attachment that runs `frame` on the shared clock while the element is on
43
+ * the page. `period` is one cycle in milliseconds, or a function of whether the
44
+ * person has asked for less motion. `reset` undoes what `frame` set, when the
45
+ * loop stops; by default it clears the inline styles `frame` wrote.
46
+ *
47
+ * ```svelte
48
+ * <span {@attach loop(1000, (el, { progress }) => (el.style.rotate = `${progress}turn`))}></span>
49
+ * ```
50
+ */
51
+ export function loop(period, frame, reset) {
52
+ return (element) => {
53
+ const query = matchMedia('(prefers-reduced-motion: reduce)');
54
+ const start = performance.now();
55
+ const rtl = getComputedStyle(element).direction === 'rtl';
56
+ const before = element.getAttribute('style');
57
+ const stop = onLoop((now) => {
58
+ const reduced = query.matches;
59
+ const length = typeof period === 'function' ? period(reduced) : period;
60
+ frame(element, { progress: ((now - start) % length) / length, reduced, rtl });
61
+ });
62
+ return () => {
63
+ stop();
64
+ if (reset)
65
+ reset(element);
66
+ else if (before === null)
67
+ element.removeAttribute('style');
68
+ else
69
+ element.setAttribute('style', before);
70
+ };
71
+ };
72
+ }
@@ -0,0 +1,14 @@
1
+ import * as stylex from '@stylexjs/stylex';
2
+ /**
3
+ * Markers let a part react to the state of an ancestor it does not render,
4
+ * through `stylex.when.ancestor(':hover', marker)`. They must be defined in a
5
+ * `.stylex.ts` file so StyleX can resolve them across files.
6
+ */
7
+ /** Placed on Message.Root, so its actions can appear while the message is hovered. */
8
+ export declare const messageMarker: Readonly<{
9
+ readonly marker: stylex.StyleXClassNameFor<"marker", symbol>;
10
+ }>;
11
+ /** Placed on Sidebar.Item, so its actions appear and its trailing note steps aside on hover. */
12
+ export declare const sidebarItemMarker: Readonly<{
13
+ readonly marker: stylex.StyleXClassNameFor<"marker", symbol>;
14
+ }>;
@@ -0,0 +1,10 @@
1
+ import * as stylex from '@stylexjs/stylex';
2
+ /**
3
+ * Markers let a part react to the state of an ancestor it does not render,
4
+ * through `stylex.when.ancestor(':hover', marker)`. They must be defined in a
5
+ * `.stylex.ts` file so StyleX can resolve them across files.
6
+ */
7
+ /** Placed on Message.Root, so its actions can appear while the message is hovered. */
8
+ export const messageMarker = stylex.defineMarker();
9
+ /** Placed on Sidebar.Item, so its actions appear and its trailing note steps aside on hover. */
10
+ export const sidebarItemMarker = stylex.defineMarker();
@@ -0,0 +1,17 @@
1
+ /**
2
+ * One tab stop for a list of items, with the arrow keys moving between them.
3
+ *
4
+ * A sidebar of forty threads should not take forty presses of Tab to cross.
5
+ * The list is one stop: Tab lands on the item focused last, else the current
6
+ * one, else the first; the arrow keys, Home and End move from there. As items
7
+ * come and go the stop is settled again, so it is never lost. (From Eregion's
8
+ * rowKeys and toolbarKeys.)
9
+ */
10
+ import type { Attachment } from 'svelte/attachments';
11
+ export type RovingOptions = {
12
+ /** Which elements inside are the items. */
13
+ selector: string;
14
+ /** Which arrow keys move: up and down, or left and right. */
15
+ orientation?: 'vertical' | 'horizontal';
16
+ };
17
+ export declare function roving({ selector, orientation }: RovingOptions): Attachment<HTMLElement>;
@@ -0,0 +1,68 @@
1
+ const isTyping = (target) => target instanceof HTMLElement &&
2
+ (target.isContentEditable || target.matches('input, textarea, select'));
3
+ export function roving({ selector, orientation = 'vertical' }) {
4
+ return (container) => {
5
+ let last = null;
6
+ const items = () => [...container.querySelectorAll(selector)].filter((item) => !item.hasAttribute('disabled') && item.getClientRects().length > 0);
7
+ const settle = () => {
8
+ const all = items();
9
+ const stop = (last && all.includes(last) && last) ||
10
+ all.find((item) => item.getAttribute('aria-current') && item.getAttribute('aria-current') !== 'false') ||
11
+ all[0];
12
+ for (const item of all)
13
+ item.tabIndex = item === stop ? 0 : -1;
14
+ };
15
+ const onfocusin = (event) => {
16
+ const item = event.target.closest(selector);
17
+ if (!item || !container.contains(item))
18
+ return;
19
+ last = item;
20
+ settle();
21
+ };
22
+ const onkeydown = (event) => {
23
+ if (event.defaultPrevented ||
24
+ isTyping(event.target) ||
25
+ event.altKey ||
26
+ event.metaKey ||
27
+ event.ctrlKey)
28
+ return;
29
+ const all = items();
30
+ const current = event.target.closest(selector);
31
+ const index = current ? all.indexOf(current) : -1;
32
+ if (index === -1)
33
+ return;
34
+ const rtl = getComputedStyle(container).direction === 'rtl';
35
+ const forward = orientation === 'vertical' ? 'ArrowDown' : rtl ? 'ArrowLeft' : 'ArrowRight';
36
+ const back = orientation === 'vertical' ? 'ArrowUp' : rtl ? 'ArrowRight' : 'ArrowLeft';
37
+ let next;
38
+ if (event.key === forward)
39
+ next = all[Math.min(index + 1, all.length - 1)];
40
+ else if (event.key === back)
41
+ next = all[Math.max(index - 1, 0)];
42
+ else if (event.key === 'Home')
43
+ next = all[0];
44
+ else if (event.key === 'End')
45
+ next = all[all.length - 1];
46
+ else
47
+ return;
48
+ event.preventDefault();
49
+ next?.focus();
50
+ next?.scrollIntoView({ block: 'nearest', inline: 'nearest' });
51
+ };
52
+ const observer = new MutationObserver(settle);
53
+ observer.observe(container, {
54
+ childList: true,
55
+ subtree: true,
56
+ attributes: true,
57
+ attributeFilter: ['aria-current', 'disabled', 'hidden']
58
+ });
59
+ container.addEventListener('focusin', onfocusin);
60
+ container.addEventListener('keydown', onkeydown);
61
+ settle();
62
+ return () => {
63
+ observer.disconnect();
64
+ container.removeEventListener('focusin', onfocusin);
65
+ container.removeEventListener('keydown', onkeydown);
66
+ };
67
+ };
68
+ }
@@ -0,0 +1,36 @@
1
+ import * as stylex from '@stylexjs/stylex';
2
+ /**
3
+ * Edges in Narvi are drawn with shadows, which forced-colours mode removes.
4
+ * A transparent outline costs nothing normally and becomes the edge there.
5
+ */
6
+ export declare const shared: Readonly<{
7
+ readonly focusable: Readonly<{
8
+ readonly outlineStyle: stylex.StyleXClassNameFor<"outlineStyle", "solid">;
9
+ readonly outlineWidth: stylex.StyleXClassNameFor<"outlineWidth", "1px" | "2px">;
10
+ readonly outlineColor: stylex.StyleXClassNameFor<"outlineColor", string>;
11
+ readonly outlineOffset: stylex.StyleXClassNameFor<"outlineOffset", "2px" | "-1px">;
12
+ readonly WebkitAppRegion: stylex.StyleXClassNameFor<"WebkitAppRegion", "no-drag">;
13
+ }>;
14
+ readonly dragRegion: Readonly<{
15
+ readonly WebkitAppRegion: stylex.StyleXClassNameFor<"WebkitAppRegion", "drag">;
16
+ readonly WebkitUserSelect: stylex.StyleXClassNameFor<"WebkitUserSelect", "none">;
17
+ readonly userSelect: stylex.StyleXClassNameFor<"userSelect", "none">;
18
+ }>;
19
+ readonly noDrag: Readonly<{
20
+ readonly WebkitAppRegion: stylex.StyleXClassNameFor<"WebkitAppRegion", "no-drag">;
21
+ }>;
22
+ readonly eyebrow: Readonly<{
23
+ readonly margin: stylex.StyleXClassNameFor<"margin", 0>;
24
+ readonly color: stylex.StyleXClassNameFor<"color", string>;
25
+ readonly fontSize: stylex.StyleXClassNameFor<"fontSize", "0.75rem">;
26
+ readonly fontWeight: stylex.StyleXClassNameFor<"fontWeight", "500">;
27
+ readonly lineHeight: stylex.StyleXClassNameFor<"lineHeight", 1.2>;
28
+ readonly fontVariantNumeric: stylex.StyleXClassNameFor<"fontVariantNumeric", "tabular-nums">;
29
+ }>;
30
+ readonly edged: Readonly<{
31
+ readonly outlineStyle: stylex.StyleXClassNameFor<"outlineStyle", "solid">;
32
+ readonly outlineWidth: stylex.StyleXClassNameFor<"outlineWidth", "1px">;
33
+ readonly outlineColor: stylex.StyleXClassNameFor<"outlineColor", "transparent">;
34
+ readonly outlineOffset: stylex.StyleXClassNameFor<"outlineOffset", "-1px">;
35
+ }>;
36
+ }>;
@@ -0,0 +1,44 @@
1
+ import * as stylex from '@stylexjs/stylex';
2
+ import { colors } from '../tokens.stylex.js';
3
+ /**
4
+ * Edges in Narvi are drawn with shadows, which forced-colours mode removes.
5
+ * A transparent outline costs nothing normally and becomes the edge there.
6
+ */
7
+ export const shared = stylex.create({
8
+ // For anything that can take focus: the same outline turns into the focus ring.
9
+ focusable: {
10
+ outlineStyle: 'solid',
11
+ outlineWidth: { default: '1px', ':focus-visible': '2px' },
12
+ outlineColor: { default: 'transparent', ':focus-visible': colors.focusRing },
13
+ outlineOffset: { default: '-1px', ':focus-visible': '2px' },
14
+ // In an Electron title bar, a control must not drag the window: it would
15
+ // never receive the click. Ignored everywhere else.
16
+ WebkitAppRegion: 'no-drag'
17
+ },
18
+ // The parts of a window's title bar that drag the window, in Electron
19
+ dragRegion: {
20
+ WebkitAppRegion: 'drag',
21
+ WebkitUserSelect: 'none',
22
+ userSelect: 'none'
23
+ },
24
+ noDrag: {
25
+ WebkitAppRegion: 'no-drag'
26
+ },
27
+ // A small label over a part of a card: "Input", "Plan", "Question 1 of 3".
28
+ // Sentence case in the text's own face; it names, it does not shout.
29
+ eyebrow: {
30
+ margin: 0,
31
+ color: colors.textSubtle,
32
+ fontSize: '0.75rem',
33
+ fontWeight: '500',
34
+ lineHeight: 1.2,
35
+ fontVariantNumeric: 'tabular-nums'
36
+ },
37
+ // For static surfaces: cards, badges, key caps.
38
+ edged: {
39
+ outlineStyle: 'solid',
40
+ outlineWidth: '1px',
41
+ outlineColor: 'transparent',
42
+ outlineOffset: '-1px'
43
+ }
44
+ });
@@ -0,0 +1,14 @@
1
+ import type { StyleXStyles } from '@stylexjs/stylex';
2
+ import type { ClassValue } from 'svelte/elements';
3
+ /** Styles a consumer can pass to a component's `sx` prop. */
4
+ export type Sx = StyleXStyles;
5
+ type StyleArg = StyleXStyles | Readonly<Record<string, unknown>>;
6
+ /**
7
+ * Resolves StyleX styles to element attributes and appends a consumer `class`.
8
+ * Later styles win, so pass the consumer's `sx` last.
9
+ */
10
+ export declare function attrs(styles: ReadonlyArray<StyleArg>, className?: ClassValue | null): {
11
+ class?: ClassValue;
12
+ style?: string;
13
+ };
14
+ export {};
@@ -0,0 +1,11 @@
1
+ import * as stylex from '@stylexjs/stylex';
2
+ /**
3
+ * Resolves StyleX styles to element attributes and appends a consumer `class`.
4
+ * Later styles win, so pass the consumer's `sx` last.
5
+ */
6
+ export function attrs(styles, className) {
7
+ const resolved = stylex.attrs(...styles);
8
+ if (!className)
9
+ return resolved;
10
+ return { ...resolved, class: [resolved.class, className] };
11
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Presets: a whole Narvi look in one short code, such as `1caaba`.
3
+ *
4
+ * A preset picks an accent, a stone, a radius, three faces, a pace of motion
5
+ * and a colour scheme. From it come the token overrides for `stylex.createTheme`
6
+ * and the files to drop into an app. Nothing here depends on Svelte or StyleX, so
7
+ * the docs and a command-line tool can share it.
8
+ */
9
+ type Option<Id extends string> = {
10
+ id: Id;
11
+ label: string;
12
+ };
13
+ export type AccentId = 'ithil' | 'ember' | 'moss' | 'amethyst' | 'rose' | 'gold';
14
+ /** Hue and chroma in OKLCH. Ithil reproduces Narvi's own silver-blue. */
15
+ export declare const accents: ReadonlyArray<Option<AccentId> & {
16
+ hue: number;
17
+ chroma: number;
18
+ }>;
19
+ export type StoneId = 'paper' | 'slate' | 'ash';
20
+ type Pair = readonly [light: string, dark: string];
21
+ type StoneTokens = {
22
+ bg: Pair;
23
+ bgRaised: Pair;
24
+ text: Pair;
25
+ textMuted: Pair;
26
+ textSubtle: Pair;
27
+ edge: Pair;
28
+ edgeHover: Pair;
29
+ };
30
+ /** Paper is Narvi's own: warm paper by day, near-black stone by night. */
31
+ export declare const stones: ReadonlyArray<Option<StoneId> & {
32
+ description: string;
33
+ tokens?: StoneTokens;
34
+ }>;
35
+ export type RadiusId = 'sharp' | 'default' | 'round';
36
+ type RadiusScale = {
37
+ xs: number;
38
+ sm: number;
39
+ md: number;
40
+ lg: number;
41
+ xl: number;
42
+ };
43
+ /** A frame is always its inner radius plus its padding: `frame` = `xl` + 5. */
44
+ export declare const radii: ReadonlyArray<Option<RadiusId> & {
45
+ scale?: RadiusScale;
46
+ }>;
47
+ type Face<Id extends string> = Option<Id> & {
48
+ /** The CSS font-family stack. */
49
+ stack: string;
50
+ /** The Fontsource package that serves it, if any. */
51
+ package?: string;
52
+ /** What to import from that package. */
53
+ imports?: string[];
54
+ };
55
+ export type BodyId = 'geist' | 'inter' | 'plex' | 'system';
56
+ export type DisplayId = 'cormorant' | 'fraunces' | 'instrument' | 'sans';
57
+ export type MonoId = 'geist-mono' | 'jetbrains' | 'plex-mono';
58
+ export declare const bodies: ReadonlyArray<Face<BodyId>>;
59
+ export declare const displays: ReadonlyArray<Face<DisplayId>>;
60
+ export declare const monos: ReadonlyArray<Face<MonoId>>;
61
+ export type MotionId = 'brisk' | 'standard' | 'calm';
62
+ export declare const motions: ReadonlyArray<Option<MotionId> & {
63
+ durations?: {
64
+ fast: number;
65
+ base: number;
66
+ slow: number;
67
+ };
68
+ }>;
69
+ export type SchemeId = 'dark' | 'light' | 'system';
70
+ export declare const schemes: ReadonlyArray<Option<SchemeId>>;
71
+ export type Preset = {
72
+ accent: AccentId;
73
+ stone: StoneId;
74
+ radius: RadiusId;
75
+ body: BodyId;
76
+ display: DisplayId;
77
+ mono: MonoId;
78
+ motion: MotionId;
79
+ scheme: SchemeId;
80
+ };
81
+ export declare const defaultPreset: Preset;
82
+ /** A preset as a short code: a version digit, then one letter per choice. */
83
+ export declare function encode(preset: Preset): string;
84
+ /**
85
+ * Reads a code back into a preset. Unknown or missing letters fall back to the
86
+ * defaults, so a code from a newer version still opens; `undefined` means it is
87
+ * not a preset code at all.
88
+ */
89
+ export declare function decode(code: string): Preset | undefined;
90
+ /** Token overrides by token group, for `stylex.createTheme`. Empty groups are left out. */
91
+ export type Overrides = Partial<Record<'colors' | 'radius' | 'font' | 'motion', Record<string, string>>>;
92
+ export declare function overrides(preset: Preset): Overrides;
93
+ export type PresetFile = {
94
+ path: string;
95
+ language: 'ts' | 'css' | 'svelte' | 'sh';
96
+ code: string;
97
+ };
98
+ /** The font packages a preset needs, beyond Narvi itself. */
99
+ export declare function fontPackages(preset: Preset): string[];
100
+ /** The files that put a preset into a SvelteKit app. */
101
+ export declare function presetFiles(preset: Preset): PresetFile[];
102
+ export {};