@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
package/dist/preset.js ADDED
@@ -0,0 +1,334 @@
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
+ /** Hue and chroma in OKLCH. Ithil reproduces Narvi's own silver-blue. */
10
+ export const accents = [
11
+ { id: 'ithil', label: 'Ithil', hue: 256, chroma: 0.09 },
12
+ { id: 'ember', label: 'Ember', hue: 48, chroma: 0.13 },
13
+ { id: 'moss', label: 'Moss', hue: 150, chroma: 0.09 },
14
+ { id: 'amethyst', label: 'Amethyst', hue: 300, chroma: 0.11 },
15
+ { id: 'rose', label: 'Rose', hue: 8, chroma: 0.12 },
16
+ { id: 'gold', label: 'Gold', hue: 82, chroma: 0.11 }
17
+ ];
18
+ /** Paper is Narvi's own: warm paper by day, near-black stone by night. */
19
+ export const stones = [
20
+ { id: 'paper', label: 'Paper', description: 'Warm by day, deep blue-black by night' },
21
+ {
22
+ id: 'slate',
23
+ label: 'Slate',
24
+ description: 'Cool grey-blue throughout',
25
+ tokens: {
26
+ bg: ['#f1f4f8', '#070a10'],
27
+ bgRaised: ['#fafbfd', '#0d111a'],
28
+ text: ['#111723', '#e6ecf5'],
29
+ textMuted: ['#4f5b6d', '#94a0b3'],
30
+ textSubtle: ['#5d6879', '#7e8a9d'],
31
+ edge: ['#838d9c', '#5b6678'],
32
+ edgeHover: ['#68717f', '#768296']
33
+ }
34
+ },
35
+ {
36
+ id: 'ash',
37
+ label: 'Ash',
38
+ description: 'Pure grey, no tint at all',
39
+ tokens: {
40
+ bg: ['#f4f4f4', '#0a0a0a'],
41
+ bgRaised: ['#fbfbfb', '#111111'],
42
+ text: ['#171717', '#ececec'],
43
+ textMuted: ['#595959', '#a0a0a0'],
44
+ textSubtle: ['#666666', '#888888'],
45
+ edge: ['#8a8a8a', '#626262'],
46
+ edgeHover: ['#6e6e6e', '#7c7c7c']
47
+ }
48
+ }
49
+ ];
50
+ /** A frame is always its inner radius plus its padding: `frame` = `xl` + 5. */
51
+ export const radii = [
52
+ { id: 'sharp', label: 'Sharp', scale: { xs: 2, sm: 3, md: 4, lg: 5, xl: 6 } },
53
+ { id: 'default', label: 'Soft' },
54
+ { id: 'round', label: 'Round', scale: { xs: 7, sm: 8, md: 10, lg: 12, xl: 16 } }
55
+ ];
56
+ const SYSTEM = 'ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif';
57
+ export const bodies = [
58
+ {
59
+ id: 'geist',
60
+ label: 'Geist',
61
+ stack: `"Geist Variable", ${SYSTEM}`,
62
+ package: '@fontsource-variable/geist',
63
+ imports: ['@fontsource-variable/geist']
64
+ },
65
+ {
66
+ id: 'inter',
67
+ label: 'Inter',
68
+ stack: `"Inter Variable", ${SYSTEM}`,
69
+ package: '@fontsource-variable/inter',
70
+ imports: ['@fontsource-variable/inter']
71
+ },
72
+ {
73
+ id: 'plex',
74
+ label: 'IBM Plex Sans',
75
+ stack: `"IBM Plex Sans", ${SYSTEM}`,
76
+ package: '@fontsource/ibm-plex-sans',
77
+ imports: [
78
+ '@fontsource/ibm-plex-sans/400.css',
79
+ '@fontsource/ibm-plex-sans/500.css',
80
+ '@fontsource/ibm-plex-sans/600.css'
81
+ ]
82
+ },
83
+ { id: 'system', label: 'System', stack: SYSTEM }
84
+ ];
85
+ export const displays = [
86
+ {
87
+ id: 'cormorant',
88
+ label: 'Cormorant',
89
+ stack: '"Cormorant Garamond", "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif',
90
+ package: '@fontsource/cormorant-garamond',
91
+ imports: ['@fontsource/cormorant-garamond/500.css']
92
+ },
93
+ {
94
+ id: 'fraunces',
95
+ label: 'Fraunces',
96
+ stack: '"Fraunces Variable", Georgia, serif',
97
+ package: '@fontsource-variable/fraunces',
98
+ imports: ['@fontsource-variable/fraunces']
99
+ },
100
+ {
101
+ id: 'instrument',
102
+ label: 'Instrument Serif',
103
+ stack: '"Instrument Serif", Georgia, serif',
104
+ package: '@fontsource/instrument-serif',
105
+ imports: ['@fontsource/instrument-serif']
106
+ },
107
+ // Headings in the body face, for a plainer page
108
+ { id: 'sans', label: 'Same as body', stack: 'inherit' }
109
+ ];
110
+ export const monos = [
111
+ {
112
+ id: 'geist-mono',
113
+ label: 'Geist Mono',
114
+ stack: '"Geist Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace',
115
+ package: '@fontsource/geist-mono',
116
+ imports: ['@fontsource/geist-mono/400.css']
117
+ },
118
+ {
119
+ id: 'jetbrains',
120
+ label: 'JetBrains',
121
+ stack: '"JetBrains Mono Variable", ui-monospace, Menlo, Consolas, monospace',
122
+ package: '@fontsource-variable/jetbrains-mono',
123
+ imports: ['@fontsource-variable/jetbrains-mono']
124
+ },
125
+ {
126
+ id: 'plex-mono',
127
+ label: 'Plex Mono',
128
+ stack: '"IBM Plex Mono", ui-monospace, Menlo, Consolas, monospace',
129
+ package: '@fontsource/ibm-plex-mono',
130
+ imports: ['@fontsource/ibm-plex-mono/400.css']
131
+ }
132
+ ];
133
+ export const motions = [
134
+ { id: 'brisk', label: 'Brisk', durations: { fast: 90, base: 120, slow: 200 } },
135
+ { id: 'standard', label: 'Standard' },
136
+ { id: 'calm', label: 'Calm', durations: { fast: 160, base: 200, slow: 340 } }
137
+ ];
138
+ export const schemes = [
139
+ { id: 'dark', label: 'Dark' },
140
+ { id: 'light', label: 'Light' },
141
+ { id: 'system', label: 'System' }
142
+ ];
143
+ export const defaultPreset = {
144
+ accent: 'ithil',
145
+ stone: 'paper',
146
+ radius: 'default',
147
+ body: 'geist',
148
+ display: 'cormorant',
149
+ mono: 'geist-mono',
150
+ motion: 'standard',
151
+ scheme: 'dark'
152
+ };
153
+ // The order of the fields in a code. New fields only ever go on the end.
154
+ const fields = [
155
+ ['accent', accents],
156
+ ['stone', stones],
157
+ ['radius', radii],
158
+ ['body', bodies],
159
+ ['display', displays],
160
+ ['mono', monos],
161
+ ['motion', motions],
162
+ ['scheme', schemes]
163
+ ];
164
+ const VERSION = '1';
165
+ const DIGITS = 'abcdefghijklmnopqrstuvwxyz';
166
+ /** A preset as a short code: a version digit, then one letter per choice. */
167
+ export function encode(preset) {
168
+ return (VERSION +
169
+ fields
170
+ .map(([key, options]) => {
171
+ const index = options.findIndex((option) => option.id === preset[key]);
172
+ return DIGITS[Math.max(index, 0)];
173
+ })
174
+ .join(''));
175
+ }
176
+ /**
177
+ * Reads a code back into a preset. Unknown or missing letters fall back to the
178
+ * defaults, so a code from a newer version still opens; `undefined` means it is
179
+ * not a preset code at all.
180
+ */
181
+ export function decode(code) {
182
+ const clean = code.trim().toLowerCase();
183
+ if (!clean.startsWith(VERSION) || !/^[0-9][a-z]*$/.test(clean))
184
+ return undefined;
185
+ const preset = { ...defaultPreset };
186
+ fields.forEach(([key, options], index) => {
187
+ const letter = clean[index + 1];
188
+ const option = letter
189
+ ? options[DIGITS.indexOf(letter)]
190
+ : undefined;
191
+ if (option)
192
+ preset[key] = option.id;
193
+ });
194
+ return preset;
195
+ }
196
+ // ─── What a preset changes ───────────────────────────────────────────────────
197
+ const pair = ([light, dark]) => `light-dark(${light}, ${dark})`;
198
+ // Three decimals is finer than any screen can show, and keeps the values readable
199
+ const round = (n) => Number(n.toFixed(3));
200
+ const oklch = (l, c, h, alpha) => `oklch(${round(l)} ${round(c)} ${round(h)}${alpha === undefined ? '' : ` / ${alpha}`})`;
201
+ export function overrides(preset) {
202
+ const result = {};
203
+ const colors = {};
204
+ const accent = accents.find((option) => option.id === preset.accent);
205
+ if (accent && accent.id !== 'ithil') {
206
+ const { hue: h, chroma: c } = accent;
207
+ colors.ithil = pair([oklch(0.47, c, h), oklch(0.86, c * 0.62, h)]);
208
+ colors.ithilStrong = pair([oklch(0.55, c * 1.1, h), oklch(0.77, c * 0.95, h)]);
209
+ colors.onIthil = pair(['#ffffff', oklch(0.18, c * 0.35, h)]);
210
+ colors.ithilSoft = pair([oklch(0.47, c, h, 0.1), oklch(0.82, c * 0.9, h, 0.1)]);
211
+ colors.focusRing = colors.ithil;
212
+ colors.focusHalo = pair([oklch(0.47, c, h, 0.18), oklch(0.82, c * 0.9, h, 0.18)]);
213
+ colors.glow = pair([oklch(0.47, c, h, 0), oklch(0.8, c, h, 0.2)]);
214
+ }
215
+ const stone = stones.find((option) => option.id === preset.stone);
216
+ if (stone?.tokens) {
217
+ for (const [token, value] of Object.entries(stone.tokens))
218
+ colors[token] = pair(value);
219
+ }
220
+ if (Object.keys(colors).length)
221
+ result.colors = colors;
222
+ const scale = radii.find((option) => option.id === preset.radius)?.scale;
223
+ if (scale) {
224
+ const rem = (px) => `${px / 16}rem`;
225
+ result.radius = {
226
+ ...Object.fromEntries(Object.entries(scale).map(([key, px]) => [key, rem(px)])),
227
+ frame: rem(scale.xl + 5)
228
+ };
229
+ }
230
+ const font = {};
231
+ if (preset.display !== defaultPreset.display)
232
+ font.display = displays.find((option) => option.id === preset.display).stack;
233
+ if (preset.mono !== defaultPreset.mono)
234
+ font.mono = monos.find((option) => option.id === preset.mono).stack;
235
+ if (Object.keys(font).length)
236
+ result.font = font;
237
+ const durations = motions.find((option) => option.id === preset.motion)?.durations;
238
+ if (durations) {
239
+ result.motion = Object.fromEntries(Object.entries(durations).map(([key, ms]) => [key, `${ms}ms`]));
240
+ }
241
+ return result;
242
+ }
243
+ /** The font packages a preset needs, beyond Narvi itself. */
244
+ export function fontPackages(preset) {
245
+ const faces = [
246
+ bodies.find((face) => face.id === preset.body),
247
+ displays.find((face) => face.id === preset.display),
248
+ monos.find((face) => face.id === preset.mono)
249
+ ];
250
+ return [...new Set(faces.flatMap((face) => (face?.package ? [face.package] : [])))];
251
+ }
252
+ /** The files that put a preset into a SvelteKit app. */
253
+ export function presetFiles(preset) {
254
+ const theme = overrides(preset);
255
+ const groups = Object.keys(theme);
256
+ const body = bodies.find((face) => face.id === preset.body);
257
+ const faces = [
258
+ body,
259
+ displays.find((face) => face.id === preset.display),
260
+ monos.find((face) => face.id === preset.mono)
261
+ ];
262
+ const imports = [...new Set(faces.flatMap((face) => face.imports ?? []))];
263
+ const code = encode(preset);
264
+ const files = [];
265
+ files.push({
266
+ path: 'Terminal',
267
+ language: 'sh',
268
+ // One command, a package to a line, so it reads at any width and pastes as one
269
+ code: ['pnpm add @diegopluna/narvi', ...fontPackages(preset).map((name) => ` ${name}`)].join(' \\\n')
270
+ });
271
+ if (groups.length) {
272
+ const quote = (value) => `'${value.replaceAll("'", "\\'")}'`;
273
+ const blocks = groups.map((group) => {
274
+ const entries = Object.entries(theme[group])
275
+ .map(([token, value]) => `\t${token}: ${quote(value)}`)
276
+ .join(',\n');
277
+ return `export const ${group}Theme = stylex.createTheme(${group}, {\n${entries}\n});`;
278
+ });
279
+ files.push({
280
+ path: 'src/lib/theme.stylex.ts',
281
+ language: 'ts',
282
+ code: `// Narvi preset ${code}
283
+ import * as stylex from '@stylexjs/stylex';
284
+ import { ${groups.join(', ')} } from '@diegopluna/narvi/tokens.stylex.js';
285
+
286
+ ${blocks.join('\n\n')}
287
+
288
+ /** Pass to <Theme theme={preset}> around your app. */
289
+ export const preset = [${groups.map((group) => `${group}Theme`).join(', ')}];
290
+ `
291
+ });
292
+ }
293
+ const scheme = { dark: 'dark', light: 'light', system: 'light dark' }[preset.scheme];
294
+ files.push({
295
+ path: 'src/app.css',
296
+ language: 'css',
297
+ code: `${imports.map((name) => `@import '${name}';`).join('\n')}${imports.length ? '\n\n' : ''}:root {
298
+ color-scheme: ${scheme};
299
+ font-family: ${body.stack};
300
+ }
301
+ `
302
+ });
303
+ files.push({
304
+ path: 'src/routes/+layout.svelte',
305
+ language: 'svelte',
306
+ code: groups.length
307
+ ? `<script lang="ts">
308
+ import '../app.css';
309
+ import { DevStyles, Theme } from '@diegopluna/narvi';
310
+ import { preset } from './theme.stylex.js';
311
+
312
+ let { children } = $props();
313
+ </script>
314
+
315
+ <DevStyles />
316
+
317
+ <Theme theme={preset}>
318
+ {@render children()}
319
+ </Theme>
320
+ `
321
+ : `<script lang="ts">
322
+ import '../app.css';
323
+ import { DevStyles } from '@diegopluna/narvi';
324
+
325
+ let { children } = $props();
326
+ </script>
327
+
328
+ <DevStyles />
329
+
330
+ {@render children()}
331
+ `
332
+ });
333
+ return files;
334
+ }
@@ -0,0 +1,104 @@
1
+ import * as stylex from '@stylexjs/stylex';
2
+ /**
3
+ * Colours are written once with `light-dark()`, so they follow the nearest
4
+ * `color-scheme`. Set `color-scheme: light dark` on `:root` to follow the
5
+ * system, or force a scheme on any subtree with the `Theme` component.
6
+ *
7
+ * The palette is stone and moonlight: near-black and warm paper for surfaces,
8
+ * and one silver-blue ("ithildin") that is used only for state.
9
+ */
10
+ export declare const colors: stylex.VarGroup<Readonly<{
11
+ bg: string;
12
+ bgRaised: string;
13
+ surface: string;
14
+ surfaceRaised: string;
15
+ hover: string;
16
+ well: string;
17
+ line: string;
18
+ lineStrong: string;
19
+ edge: string;
20
+ edgeHover: string;
21
+ highlight: string;
22
+ shade: string;
23
+ text: string;
24
+ textMuted: string;
25
+ textSubtle: string;
26
+ ithil: string;
27
+ ithilStrong: string;
28
+ onIthil: string;
29
+ ithilSoft: string;
30
+ focusRing: string;
31
+ focusHalo: string;
32
+ glow: string;
33
+ mithrilTop: string;
34
+ mithrilBottom: string;
35
+ onMithril: string;
36
+ mithrilEdge: string;
37
+ mithrilDrop: string;
38
+ success: string;
39
+ warning: string;
40
+ danger: string;
41
+ successSoft: string;
42
+ warningSoft: string;
43
+ dangerSoft: string;
44
+ successInk: string;
45
+ warningInk: string;
46
+ dangerInk: string;
47
+ codeKey: string;
48
+ codeString: string;
49
+ codeNumber: string;
50
+ codeLiteral: string;
51
+ codePunct: string;
52
+ }>, symbol>;
53
+ /**
54
+ * 4px spacing scale, in rem. Narvi is sized in rem throughout, so an app that
55
+ * sets the root font size (13px for a dense window, 18px for a roomy one) scales
56
+ * every part with it. Hairlines, outlines and shadows stay in px, to stay crisp.
57
+ */
58
+ export declare const space: stylex.VarGroup<Readonly<{
59
+ x1: string;
60
+ x2: string;
61
+ x3: string;
62
+ x4: string;
63
+ x5: string;
64
+ x6: string;
65
+ x8: string;
66
+ x10: string;
67
+ x12: string;
68
+ x16: string;
69
+ }>, symbol>;
70
+ /** A frame is always its inner radius plus its padding: `frame` = `xl` + 5px (0.3125rem). */
71
+ export declare const radius: stylex.VarGroup<Readonly<{
72
+ xs: string;
73
+ sm: string;
74
+ md: string;
75
+ lg: string;
76
+ xl: string;
77
+ frame: string;
78
+ full: string;
79
+ }>, symbol>;
80
+ export declare const font: stylex.VarGroup<Readonly<{
81
+ body: string;
82
+ display: string;
83
+ mono: string;
84
+ sizeXs: string;
85
+ sizeSm: string;
86
+ sizeMd: string;
87
+ sizeLg: string;
88
+ sizeXl: string;
89
+ weightRegular: string;
90
+ weightMedium: string;
91
+ weightSemibold: string;
92
+ weightDisplay: string;
93
+ trackingDisplay: string;
94
+ leadingTight: string;
95
+ leadingSnug: string;
96
+ leadingNormal: string;
97
+ }>, symbol>;
98
+ export declare const motion: stylex.VarGroup<Readonly<{
99
+ fast: string;
100
+ base: string;
101
+ slow: string;
102
+ easeOut: string;
103
+ easeInOut: string;
104
+ }>, symbol>;
@@ -0,0 +1,125 @@
1
+ import * as stylex from '@stylexjs/stylex';
2
+ /**
3
+ * Colours are written once with `light-dark()`, so they follow the nearest
4
+ * `color-scheme`. Set `color-scheme: light dark` on `:root` to follow the
5
+ * system, or force a scheme on any subtree with the `Theme` component.
6
+ *
7
+ * The palette is stone and moonlight: near-black and warm paper for surfaces,
8
+ * and one silver-blue ("ithildin") that is used only for state.
9
+ */
10
+ export const colors = stylex.defineVars({
11
+ // Surfaces, from the page upwards
12
+ bg: 'light-dark(#f4f3ef, #06080c)',
13
+ bgRaised: 'light-dark(#fbfaf8, #0b0e14)',
14
+ surface: 'light-dark(rgb(255 255 255 / 0.62), rgb(255 255 255 / 0.028))',
15
+ surfaceRaised: 'light-dark(#ffffff, rgb(255 255 255 / 0.055))',
16
+ hover: 'light-dark(rgb(20 23 28 / 0.05), rgb(255 255 255 / 0.07))',
17
+ // A recess: inputs, tracks, code
18
+ well: 'light-dark(rgb(20 23 28 / 0.035), rgb(0 0 0 / 0.34))',
19
+ // Lines. `edge` is the boundary of a control and holds 3:1 against its surface.
20
+ line: 'light-dark(rgb(20 23 28 / 0.1), rgb(255 255 255 / 0.075))',
21
+ lineStrong: 'light-dark(rgb(20 23 28 / 0.2), rgb(255 255 255 / 0.15))',
22
+ edge: 'light-dark(#868c97, #5f6775)',
23
+ edgeHover: 'light-dark(#6b717c, #7a8392)',
24
+ // Light catching a top edge, and the shade under and inside things
25
+ highlight: 'light-dark(rgb(255 255 255 / 0.95), rgb(255 255 255 / 0.07))',
26
+ shade: 'light-dark(rgb(20 23 28 / 0.08), rgb(0 0 0 / 0.5))',
27
+ // Text
28
+ text: 'light-dark(#14171c, #e9edf3)',
29
+ textMuted: 'light-dark(#555b66, #98a1b0)',
30
+ textSubtle: 'light-dark(#626873, #818a99)',
31
+ // Ithildin: focus, selection, progress. Nothing else.
32
+ ithil: 'light-dark(#34598c, #bfd6f4)',
33
+ ithilStrong: 'light-dark(#4a73ab, #8fb6ea)',
34
+ onIthil: 'light-dark(#ffffff, #07101d)',
35
+ ithilSoft: 'light-dark(rgb(52 89 140 / 0.1), rgb(160 200 255 / 0.1))',
36
+ focusRing: 'light-dark(#34598c, #bfd6f4)',
37
+ focusHalo: 'light-dark(rgb(52 89 140 / 0.18), rgb(150 195 255 / 0.18))',
38
+ // A faint glow around lit state. Dark scheme only; it is transparent in light.
39
+ glow: 'light-dark(rgb(52 89 140 / 0), rgb(140 190 255 / 0.2))',
40
+ // Mithril: the solid button, a small piece of bright metal
41
+ mithrilTop: 'light-dark(#30353e, #fafbfc)',
42
+ mithrilBottom: 'light-dark(#16191e, #c9d2dd)',
43
+ onMithril: 'light-dark(#f4f6f9, #0a0d12)',
44
+ mithrilEdge: 'light-dark(rgb(255 255 255 / 0.16), rgb(255 255 255 / 0.9))',
45
+ mithrilDrop: 'light-dark(rgb(20 23 28 / 0.28), rgb(150 190 255 / 0.22))',
46
+ // Status
47
+ success: 'light-dark(#2f7d55, #6fd3a0)',
48
+ warning: 'light-dark(#a56a14, #e8b765)',
49
+ danger: 'light-dark(#b3372e, #f08a80)',
50
+ // Behind a status: a wash of its colour, stronger at night so it still reads
51
+ successSoft: 'light-dark(rgb(47 125 85 / 0.12), rgb(111 211 160 / 0.16))',
52
+ warningSoft: 'light-dark(rgb(165 106 20 / 0.12), rgb(232 183 101 / 0.16))',
53
+ dangerSoft: 'light-dark(rgb(179 55 46 / 0.12), rgb(240 138 128 / 0.16))',
54
+ // Small text in a status colour: mixed toward the text colour, so a 12px label
55
+ // on its soft wash still holds 4.5:1
56
+ successInk: 'light-dark(#24543e, #a0ddc1)',
57
+ warningInk: 'light-dark(#6b4917, #e8ce9a)',
58
+ dangerInk: 'light-dark(#732a27, #edb2ad)',
59
+ // Code, as the stone shows it: keys in slate, strings in moss, numbers in copper,
60
+ // literals in heather. Each holds 4.5:1 on a well in both schemes.
61
+ codeKey: 'light-dark(#4a5794, #aebcf0)',
62
+ codeString: 'light-dark(#3b6e4c, #9fd2ac)',
63
+ codeNumber: 'light-dark(#985616, #ecb47c)',
64
+ codeLiteral: 'light-dark(#87397a, #e2a6d3)',
65
+ codePunct: 'light-dark(#7a808a, #6d7686)'
66
+ });
67
+ /**
68
+ * 4px spacing scale, in rem. Narvi is sized in rem throughout, so an app that
69
+ * sets the root font size (13px for a dense window, 18px for a roomy one) scales
70
+ * every part with it. Hairlines, outlines and shadows stay in px, to stay crisp.
71
+ */
72
+ export const space = stylex.defineVars({
73
+ x1: '0.25rem',
74
+ x2: '0.5rem',
75
+ x3: '0.75rem',
76
+ x4: '1rem',
77
+ x5: '1.25rem',
78
+ x6: '1.5rem',
79
+ x8: '2rem',
80
+ x10: '2.5rem',
81
+ x12: '3rem',
82
+ x16: '4rem'
83
+ });
84
+ /** A frame is always its inner radius plus its padding: `frame` = `xl` + 5px (0.3125rem). */
85
+ export const radius = stylex.defineVars({
86
+ xs: '0.3125rem',
87
+ sm: '0.375rem',
88
+ md: '0.5rem',
89
+ lg: '0.625rem',
90
+ xl: '0.75rem',
91
+ frame: '1.0625rem',
92
+ full: '9999px'
93
+ });
94
+ export const font = stylex.defineVars({
95
+ // Interface text takes the font of the page it is placed on.
96
+ body: 'inherit',
97
+ // Large headings are set in a serif. It falls back to system serifs when Cormorant is not loaded.
98
+ display: '"Cormorant Garamond", "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif',
99
+ mono: '"Geist Mono", ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace',
100
+ sizeXs: '0.75rem',
101
+ sizeSm: '0.8125rem',
102
+ sizeMd: '0.875rem',
103
+ sizeLg: '1rem',
104
+ sizeXl: '1.0625rem',
105
+ weightRegular: '400',
106
+ weightMedium: '500',
107
+ weightSemibold: '600',
108
+ // Weight and tracking for the display serif
109
+ weightDisplay: '500',
110
+ trackingDisplay: '-0.015em',
111
+ leadingTight: '1.1',
112
+ leadingSnug: '1.4',
113
+ leadingNormal: '1.55'
114
+ });
115
+ export const motion = stylex.defineVars({
116
+ fast: '120ms',
117
+ base: '150ms',
118
+ // Popups opened from a control take `fast`, dialogs `base`, panels `slow`.
119
+ // Nothing in the interface takes longer than 200ms.
120
+ slow: '200ms',
121
+ // Starts fast, then settles: press feedback, and anything entering or leaving
122
+ easeOut: 'cubic-bezier(0.23, 1, 0.32, 1)',
123
+ // For something that travels across the screen, such as a sliding thumb
124
+ easeInOut: 'cubic-bezier(0.77, 0, 0.175, 1)'
125
+ });
package/dist/vite.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import stylex from '@stylexjs/unplugin';
2
+ import type { Plugin } from 'vite';
3
+ type StylexOptions = NonNullable<Parameters<typeof stylex.vite>[0]>;
4
+ export type NarviOptions = StylexOptions;
5
+ /**
6
+ * Vite plugin that compiles Narvi's styles (and any StyleX you write yourself).
7
+ *
8
+ * It is a thin preset over `@stylexjs/unplugin`:
9
+ * - runs after the Svelte compiler, so `.svelte` files are handled
10
+ * - emits cascade layers, so your own unlayered CSS always wins over Narvi's
11
+ * - leaves `light-dark()` and `:dir()` alone, which the tokens and components rely on
12
+ *
13
+ * Add it after `sveltekit()` (or `svelte()`) in `vite.config.ts`.
14
+ */
15
+ export declare function narvi(options?: NarviOptions): Plugin;
16
+ export default narvi;
package/dist/vite.js ADDED
@@ -0,0 +1,58 @@
1
+ import stylex from '@stylexjs/unplugin';
2
+ import { Features } from 'lightningcss';
3
+ /**
4
+ * Vite plugin that compiles Narvi's styles (and any StyleX you write yourself).
5
+ *
6
+ * It is a thin preset over `@stylexjs/unplugin`:
7
+ * - runs after the Svelte compiler, so `.svelte` files are handled
8
+ * - emits cascade layers, so your own unlayered CSS always wins over Narvi's
9
+ * - leaves `light-dark()` and `:dir()` alone, which the tokens and components rely on
10
+ *
11
+ * Add it after `sveltekit()` (or `svelte()`) in `vite.config.ts`.
12
+ */
13
+ export function narvi(options = {}) {
14
+ const plugin = stylex.vite({
15
+ useCSSLayers: true,
16
+ ...options,
17
+ lightningcssOptions: {
18
+ minify: true,
19
+ ...options.lightningcssOptions,
20
+ // Both are supported by every browser Narvi targets. Lowering them breaks
21
+ // things: `light-dark()` loses its scheme, and `:dir()` becomes a list of
22
+ // languages that ignores the `dir` attribute.
23
+ exclude: (options.lightningcssOptions?.exclude ?? 0) | Features.LightDark | Features.DirSelector
24
+ }
25
+ });
26
+ const configureServer = plugin.configureServer;
27
+ return {
28
+ ...plugin,
29
+ // The StyleX plugin defaults to `enforce: 'pre'`, which would hand it raw
30
+ // `.svelte` source. Dropping `enforce` lets the Svelte compiler go first.
31
+ enforce: undefined,
32
+ // SvelteKit has no index.html and warns about this hook. The `DevStyles`
33
+ // component loads the dev stylesheet instead.
34
+ transformIndexHtml: undefined,
35
+ // The StyleX plugin starts a polling timer that is only cleared when an
36
+ // HTTP server closes. Servers without one (Vitest, middleware mode) would
37
+ // be kept alive by it, so timers started here are detached from the
38
+ // process lifetime.
39
+ configureServer(server) {
40
+ const started = [];
41
+ const original = globalThis.setInterval;
42
+ globalThis.setInterval = ((...args) => {
43
+ const timer = original(...args);
44
+ started.push(timer);
45
+ return timer;
46
+ });
47
+ try {
48
+ configureServer?.call(this, server);
49
+ }
50
+ finally {
51
+ globalThis.setInterval = original;
52
+ }
53
+ for (const timer of started)
54
+ timer.unref?.();
55
+ }
56
+ };
57
+ }
58
+ export default narvi;