@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,136 @@
1
+ import * as stylex from '@stylexjs/stylex';
2
+ import { colors, font, motion, radius, space } from '../../tokens.stylex.js';
3
+ const MOTION = '@media (prefers-reduced-motion: no-preference)';
4
+ const FORCED = '@media (forced-colors: active)';
5
+ const CLOSED = ':is([data-state="closed"])';
6
+ export const dialog = stylex.create({
7
+ overlay: {
8
+ position: 'fixed',
9
+ inset: 0,
10
+ zIndex: 50,
11
+ backgroundColor: 'light-dark(rgb(20 23 28 / 0.32), rgb(0 0 0 / 0.56))',
12
+ backdropFilter: 'blur(2px)',
13
+ opacity: { default: 1, '@starting-style': 0, [CLOSED]: 0 },
14
+ transitionProperty: 'opacity',
15
+ transitionDuration: { default: motion.base, [CLOSED]: motion.fast },
16
+ transitionTimingFunction: motion.easeOut
17
+ },
18
+ // Centred, and never past the window: 2rem of margin, the body scrolls inside
19
+ content: {
20
+ position: 'fixed',
21
+ insetInline: 0,
22
+ top: '50%',
23
+ zIndex: 51,
24
+ boxSizing: 'border-box',
25
+ display: 'flex',
26
+ flexDirection: 'column',
27
+ width: 'calc(100vw - 2rem)',
28
+ maxHeight: 'calc(100dvh - 4rem)',
29
+ marginInline: 'auto',
30
+ translate: '0 -50%',
31
+ borderRadius: radius.frame,
32
+ backgroundColor: colors.bgRaised,
33
+ boxShadow: `inset 0 0 0 1px ${colors.lineStrong}, inset 0 1px 0 ${colors.highlight}, 0 24px 64px -16px rgb(0 0 0 / 0.5)`,
34
+ color: colors.text,
35
+ fontFamily: font.body,
36
+ fontSize: font.sizeMd,
37
+ lineHeight: font.leadingNormal,
38
+ outlineStyle: 'solid',
39
+ outlineWidth: { default: 0, [FORCED]: '1px' },
40
+ outlineColor: 'CanvasText',
41
+ // A modal is not tied to a trigger, so it grows from its own centre
42
+ opacity: { default: 1, '@starting-style': 0, [CLOSED]: 0 },
43
+ scale: { default: null, [MOTION]: { default: 1, '@starting-style': 0.96, [CLOSED]: 0.98 } },
44
+ transitionProperty: { default: 'opacity', [MOTION]: 'opacity, scale' },
45
+ transitionDuration: { default: motion.base, [CLOSED]: motion.fast },
46
+ transitionTimingFunction: motion.easeOut
47
+ },
48
+ sm: { maxWidth: '24rem' },
49
+ md: { maxWidth: '32rem' },
50
+ lg: { maxWidth: '44rem' },
51
+ // A sheet: the full height of the window, along one edge
52
+ sheet: {
53
+ top: 0,
54
+ bottom: 0,
55
+ width: 'min(26rem, calc(100vw - 2rem))',
56
+ maxHeight: 'none',
57
+ marginInline: 0,
58
+ translate: 'none',
59
+ borderRadius: 0,
60
+ scale: null,
61
+ transitionProperty: { default: 'opacity', [MOTION]: 'opacity, translate' },
62
+ transitionDuration: { default: motion.slow, [CLOSED]: motion.base },
63
+ transitionTimingFunction: 'cubic-bezier(0.32, 0.72, 0, 1)'
64
+ },
65
+ end: {
66
+ insetInlineStart: 'auto',
67
+ insetInlineEnd: 0,
68
+ translate: {
69
+ default: null,
70
+ [MOTION]: {
71
+ default: '0 0',
72
+ '@starting-style': '100% 0',
73
+ [CLOSED]: '100% 0'
74
+ }
75
+ }
76
+ },
77
+ start: {
78
+ insetInlineStart: 0,
79
+ insetInlineEnd: 'auto',
80
+ translate: {
81
+ default: null,
82
+ [MOTION]: {
83
+ default: '0 0',
84
+ '@starting-style': '-100% 0',
85
+ [CLOSED]: '-100% 0'
86
+ }
87
+ }
88
+ },
89
+ header: {
90
+ display: 'flex',
91
+ flexDirection: 'column',
92
+ gap: '0.375rem',
93
+ flexShrink: 0,
94
+ paddingTop: space.x6,
95
+ paddingInline: space.x6,
96
+ // Room for the close button in the corner
97
+ paddingInlineEnd: '3.5rem'
98
+ },
99
+ title: {
100
+ margin: 0,
101
+ color: colors.text,
102
+ fontSize: font.sizeXl,
103
+ fontWeight: font.weightSemibold,
104
+ lineHeight: font.leadingSnug
105
+ },
106
+ description: {
107
+ margin: 0,
108
+ color: colors.textMuted,
109
+ fontSize: font.sizeMd,
110
+ lineHeight: font.leadingNormal
111
+ },
112
+ body: {
113
+ flexGrow: 1,
114
+ minHeight: 0,
115
+ overflowY: 'auto',
116
+ overscrollBehavior: 'contain',
117
+ paddingBlock: space.x4,
118
+ paddingInline: space.x6,
119
+ scrollbarWidth: 'thin'
120
+ },
121
+ footer: {
122
+ display: 'flex',
123
+ flexWrap: 'wrap',
124
+ justifyContent: 'flex-end',
125
+ gap: space.x2,
126
+ flexShrink: 0,
127
+ paddingTop: space.x2,
128
+ paddingBottom: space.x6,
129
+ paddingInline: space.x6
130
+ },
131
+ close: {
132
+ position: 'absolute',
133
+ top: '0.875rem',
134
+ insetInlineEnd: '0.875rem'
135
+ }
136
+ });
@@ -0,0 +1,42 @@
1
+ <!-- A labelled break in a timeline: a new day, or "Context compacted". -->
2
+ <script lang="ts" module>
3
+ import * as stylex from '@stylexjs/stylex';
4
+ import type { Snippet } from 'svelte';
5
+ import { attrs, type Sx } from '../../internal/sx.js';
6
+ import { colors, font } from '../../tokens.stylex.js';
7
+
8
+ export type DividerProps = {
9
+ label: string;
10
+ icon?: Snippet;
11
+ sx?: Sx;
12
+ class?: string;
13
+ };
14
+
15
+ const styles = stylex.create({
16
+ divider: {
17
+ display: 'flex',
18
+ alignItems: 'center',
19
+ gap: '0.75rem',
20
+ color: colors.textSubtle,
21
+ fontSize: font.sizeXs,
22
+ fontWeight: font.weightMedium,
23
+ whiteSpace: 'nowrap',
24
+ '::before': { content: '""', flexGrow: 1, height: '1px', backgroundColor: colors.line },
25
+ '::after': { content: '""', flexGrow: 1, height: '1px', backgroundColor: colors.line }
26
+ },
27
+ label: { display: 'inline-flex', alignItems: 'center', gap: '0.375rem' }
28
+ });
29
+ </script>
30
+
31
+ <script lang="ts">
32
+ let { label, icon, sx, class: className }: DividerProps = $props();
33
+ </script>
34
+
35
+ <div
36
+ role="separator"
37
+ aria-label={label}
38
+ data-slot="divider"
39
+ {...attrs([styles.divider, sx], className)}
40
+ >
41
+ <span aria-hidden="true" {...stylex.attrs(styles.label)}>{@render icon?.()}{label}</span>
42
+ </div>
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from 'svelte';
2
+ import { type Sx } from '../../internal/sx.js';
3
+ export type DividerProps = {
4
+ label: string;
5
+ icon?: Snippet;
6
+ sx?: Sx;
7
+ class?: string;
8
+ };
9
+ declare const Divider: import("svelte").Component<DividerProps, {}, "">;
10
+ type Divider = ReturnType<typeof Divider>;
11
+ export default Divider;
@@ -0,0 +1,82 @@
1
+ <!-- Nothing here yet: what this place is for, and how to fill it. -->
2
+ <script lang="ts" module>
3
+ import * as stylex from '@stylexjs/stylex';
4
+ import type { Snippet } from 'svelte';
5
+ import type { HTMLAttributes } from 'svelte/elements';
6
+ import { attrs, type Sx } from '../../internal/sx.js';
7
+ import { colors, font, radius, space } from '../../tokens.stylex.js';
8
+
9
+ export type EmptyStateProps = Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'title'> & {
10
+ title: string;
11
+ description?: string;
12
+ /** An icon or picture above the title. */
13
+ media?: Snippet;
14
+ /** What to do: a button or two. */
15
+ actions?: Snippet;
16
+ sx?: Sx;
17
+ };
18
+
19
+ const styles = stylex.create({
20
+ empty: {
21
+ display: 'flex',
22
+ flexDirection: 'column',
23
+ alignItems: 'center',
24
+ justifyContent: 'center',
25
+ gap: space.x2,
26
+ paddingBlock: space.x10,
27
+ paddingInline: space.x6,
28
+ textAlign: 'center',
29
+ textWrap: 'balance'
30
+ },
31
+ media: {
32
+ display: 'grid',
33
+ placeItems: 'center',
34
+ width: '2.75rem',
35
+ height: '2.75rem',
36
+ marginBottom: space.x2,
37
+ borderRadius: radius.xl,
38
+ backgroundColor: colors.well,
39
+ boxShadow: `inset 0 0 0 1px ${colors.line}`,
40
+ color: colors.textMuted
41
+ },
42
+ title: {
43
+ margin: 0,
44
+ color: colors.text,
45
+ fontSize: font.sizeLg,
46
+ fontWeight: font.weightSemibold
47
+ },
48
+ description: {
49
+ maxWidth: '26rem',
50
+ margin: 0,
51
+ color: colors.textMuted,
52
+ fontSize: font.sizeMd,
53
+ lineHeight: font.leadingNormal
54
+ },
55
+ actions: {
56
+ display: 'flex',
57
+ flexWrap: 'wrap',
58
+ justifyContent: 'center',
59
+ gap: space.x2,
60
+ marginTop: space.x3
61
+ }
62
+ });
63
+ </script>
64
+
65
+ <script lang="ts">
66
+ let {
67
+ title,
68
+ description,
69
+ media,
70
+ actions,
71
+ sx,
72
+ class: className,
73
+ ...rest
74
+ }: EmptyStateProps = $props();
75
+ </script>
76
+
77
+ <div data-slot="empty-state" {...rest} {...attrs([styles.empty, sx], className)}>
78
+ {#if media}<div {...stylex.attrs(styles.media)}>{@render media()}</div>{/if}
79
+ <p {...stylex.attrs(styles.title)}>{title}</p>
80
+ {#if description}<p {...stylex.attrs(styles.description)}>{description}</p>{/if}
81
+ {#if actions}<div {...stylex.attrs(styles.actions)}>{@render actions()}</div>{/if}
82
+ </div>
@@ -0,0 +1,15 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type EmptyStateProps = Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'title'> & {
5
+ title: string;
6
+ description?: string;
7
+ /** An icon or picture above the title. */
8
+ media?: Snippet;
9
+ /** What to do: a button or two. */
10
+ actions?: Snippet;
11
+ sx?: Sx;
12
+ };
13
+ declare const EmptyState: import("svelte").Component<EmptyStateProps, {}, "">;
14
+ type EmptyState = ReturnType<typeof EmptyState>;
15
+ export default EmptyState;
@@ -0,0 +1,132 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLAttributes } from 'svelte/elements';
5
+ import { attrs, type Sx } from '../../internal/sx.js';
6
+ import { colors, font } from '../../tokens.stylex.js';
7
+ import { setFieldContext } from './context.js';
8
+
9
+ export type FieldProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
10
+ /** Visible label, linked to the control inside. */
11
+ label: string;
12
+ /** Help text shown under the control. */
13
+ description?: string;
14
+ /** Error message. When set, the control is marked invalid. */
15
+ error?: string | null;
16
+ required?: boolean;
17
+ /** Marks the field as optional beside the label. */
18
+ optional?: boolean;
19
+ disabled?: boolean;
20
+ /** `id` for the control. Generated when omitted. */
21
+ id?: string;
22
+ sx?: Sx;
23
+ /** The control: an Input, Textarea, or any element that reads the field context. */
24
+ children: Snippet;
25
+ };
26
+
27
+ const styles = stylex.create({
28
+ root: {
29
+ display: 'flex',
30
+ flexDirection: 'column',
31
+ gap: '0.375rem',
32
+ minWidth: 0,
33
+ fontFamily: font.body
34
+ },
35
+ labelRow: {
36
+ display: 'flex',
37
+ alignItems: 'baseline',
38
+ justifyContent: 'space-between',
39
+ gap: '0.75rem'
40
+ },
41
+ label: {
42
+ color: colors.text,
43
+ fontSize: font.sizeSm,
44
+ fontWeight: font.weightMedium,
45
+ lineHeight: font.leadingSnug
46
+ },
47
+ labelDisabled: {
48
+ color: colors.textSubtle
49
+ },
50
+ required: {
51
+ marginInlineStart: '0.1875rem',
52
+ color: colors.danger
53
+ },
54
+ optional: {
55
+ color: colors.textSubtle,
56
+ fontSize: font.sizeSm,
57
+ lineHeight: font.leadingSnug
58
+ },
59
+ description: {
60
+ margin: 0,
61
+ color: colors.textSubtle,
62
+ fontSize: font.sizeXs,
63
+ lineHeight: font.leadingSnug,
64
+ textWrap: 'pretty'
65
+ },
66
+ error: {
67
+ margin: 0,
68
+ color: colors.danger,
69
+ fontSize: font.sizeXs,
70
+ lineHeight: font.leadingSnug,
71
+ textWrap: 'pretty'
72
+ }
73
+ });
74
+ </script>
75
+
76
+ <script lang="ts">
77
+ let {
78
+ label,
79
+ description,
80
+ error,
81
+ required = false,
82
+ optional = false,
83
+ disabled = false,
84
+ id,
85
+ sx,
86
+ class: className,
87
+ children,
88
+ ...rest
89
+ }: FieldProps = $props();
90
+
91
+ const uid = $props.id();
92
+ const controlId = $derived(id ?? `${uid}-control`);
93
+ const descriptionId = `${uid}-description`;
94
+ const errorId = `${uid}-error`;
95
+
96
+ setFieldContext({
97
+ get id() {
98
+ return controlId;
99
+ },
100
+ get describedBy() {
101
+ const ids = [description ? descriptionId : null, error ? errorId : null].filter(Boolean);
102
+ return ids.length ? ids.join(' ') : undefined;
103
+ },
104
+ get invalid() {
105
+ return Boolean(error);
106
+ },
107
+ get disabled() {
108
+ return disabled;
109
+ },
110
+ get required() {
111
+ return required;
112
+ }
113
+ });
114
+ </script>
115
+
116
+ <div {...rest} {...attrs([styles.root, sx], className)}>
117
+ <div {...stylex.attrs(styles.labelRow)}>
118
+ <label for={controlId} {...stylex.attrs(styles.label, disabled && styles.labelDisabled)}>
119
+ {label}{#if required}<span aria-hidden="true" {...stylex.attrs(styles.required)}>*</span>{/if}
120
+ </label>
121
+ {#if optional}
122
+ <span {...stylex.attrs(styles.optional)}>Optional</span>
123
+ {/if}
124
+ </div>
125
+ {@render children()}
126
+ {#if description}
127
+ <p id={descriptionId} {...stylex.attrs(styles.description)}>{description}</p>
128
+ {/if}
129
+ {#if error}
130
+ <p id={errorId} {...stylex.attrs(styles.error)}>{error}</p>
131
+ {/if}
132
+ </div>
@@ -0,0 +1,23 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type FieldProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
5
+ /** Visible label, linked to the control inside. */
6
+ label: string;
7
+ /** Help text shown under the control. */
8
+ description?: string;
9
+ /** Error message. When set, the control is marked invalid. */
10
+ error?: string | null;
11
+ required?: boolean;
12
+ /** Marks the field as optional beside the label. */
13
+ optional?: boolean;
14
+ disabled?: boolean;
15
+ /** `id` for the control. Generated when omitted. */
16
+ id?: string;
17
+ sx?: Sx;
18
+ /** The control: an Input, Textarea, or any element that reads the field context. */
19
+ children: Snippet;
20
+ };
21
+ declare const Field: import("svelte").Component<FieldProps, {}, "">;
22
+ type Field = ReturnType<typeof Field>;
23
+ export default Field;
@@ -0,0 +1,12 @@
1
+ export type FieldContext = {
2
+ /** `id` for the control, matching the label's `for`. */
3
+ readonly id: string;
4
+ /** Space-separated ids of the description and error, when present. */
5
+ readonly describedBy: string | undefined;
6
+ readonly invalid: boolean;
7
+ readonly disabled: boolean;
8
+ readonly required: boolean;
9
+ };
10
+ export declare function setFieldContext(context: FieldContext): void;
11
+ /** Returns the surrounding Field, if the control is inside one. */
12
+ export declare function getFieldContext(): FieldContext | undefined;
@@ -0,0 +1,9 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ const KEY = Symbol('narvi.field');
3
+ export function setFieldContext(context) {
4
+ setContext(KEY, context);
5
+ }
6
+ /** Returns the surrounding Field, if the control is inside one. */
7
+ export function getFieldContext() {
8
+ return getContext(KEY);
9
+ }
@@ -0,0 +1,88 @@
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 { shared } from '../../internal/shared.js';
6
+ import { attrs, type Sx } from '../../internal/sx.js';
7
+ import { colors, font, radius } from '../../tokens.stylex.js';
8
+
9
+ export type FrameProps = Omit<HTMLAttributes<HTMLElement>, 'children' | 'title'> & {
10
+ /** Element to render. */
11
+ as?: 'div' | 'section' | 'article';
12
+ /** Heading shown above the content. */
13
+ title?: string;
14
+ /** A short note at the far end of the header, set in monospace. */
15
+ tag?: string;
16
+ /** Heading level for the title. */
17
+ level?: 2 | 3 | 4 | 5 | 6;
18
+ sx?: Sx;
19
+ /** What the frame holds: usually one Card. */
20
+ children?: Snippet;
21
+ };
22
+
23
+ const styles = stylex.create({
24
+ // A tray around an inset panel. Its radius is the Card's radius plus this padding.
25
+ root: {
26
+ display: 'flex',
27
+ flexDirection: 'column',
28
+ boxSizing: 'border-box',
29
+ minWidth: 0,
30
+ padding: '0.3125rem',
31
+ borderRadius: radius.frame,
32
+ backgroundColor: colors.surface,
33
+ boxShadow: `inset 0 0 0 1px ${colors.line}, inset 0 1px 0 ${colors.highlight}`,
34
+ color: colors.text,
35
+ fontFamily: font.body
36
+ },
37
+ header: {
38
+ display: 'flex',
39
+ alignItems: 'center',
40
+ gap: '0.625rem',
41
+ paddingTop: '0.6875rem',
42
+ paddingBottom: '0.75rem',
43
+ paddingInline: '0.75rem'
44
+ },
45
+ title: {
46
+ flexGrow: 1,
47
+ minWidth: 0,
48
+ margin: 0,
49
+ fontSize: font.sizeMd,
50
+ fontWeight: font.weightMedium,
51
+ lineHeight: font.leadingSnug
52
+ },
53
+ tag: {
54
+ flexShrink: 0,
55
+ color: colors.textSubtle,
56
+ fontFamily: font.mono,
57
+ fontSize: font.sizeXs,
58
+ lineHeight: 1
59
+ }
60
+ });
61
+ </script>
62
+
63
+ <script lang="ts">
64
+ let {
65
+ as = 'div',
66
+ title,
67
+ tag,
68
+ level = 3,
69
+ sx,
70
+ class: className,
71
+ children,
72
+ ...rest
73
+ }: FrameProps = $props();
74
+ </script>
75
+
76
+ <svelte:element this={as} {...rest} {...attrs([styles.root, shared.edged, sx], className)}>
77
+ {#if title || tag}
78
+ <div {...stylex.attrs(styles.header)}>
79
+ {#if title}
80
+ <svelte:element this={`h${level}`} {...stylex.attrs(styles.title)}>{title}</svelte:element>
81
+ {/if}
82
+ {#if tag}
83
+ <span {...stylex.attrs(styles.tag)}>{tag}</span>
84
+ {/if}
85
+ </div>
86
+ {/if}
87
+ {@render children?.()}
88
+ </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
+ export type FrameProps = Omit<HTMLAttributes<HTMLElement>, 'children' | 'title'> & {
5
+ /** Element to render. */
6
+ as?: 'div' | 'section' | 'article';
7
+ /** Heading shown above the content. */
8
+ title?: string;
9
+ /** A short note at the far end of the header, set in monospace. */
10
+ tag?: string;
11
+ /** Heading level for the title. */
12
+ level?: 2 | 3 | 4 | 5 | 6;
13
+ sx?: Sx;
14
+ /** What the frame holds: usually one Card. */
15
+ children?: Snippet;
16
+ };
17
+ declare const Frame: import("svelte").Component<FrameProps, {}, "">;
18
+ type Frame = ReturnType<typeof Frame>;
19
+ export default Frame;
@@ -0,0 +1,82 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLAttributes } from 'svelte/elements';
5
+ import { attrs, type Sx } from '../../internal/sx.js';
6
+ import { colors, font } from '../../tokens.stylex.js';
7
+
8
+ export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
9
+ export type HeadingSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';
10
+
11
+ export type HeadingProps = Omit<HTMLAttributes<HTMLHeadingElement>, 'children'> & {
12
+ /** Semantic level: renders `h1` to `h6`. Pick it for the document outline, not the look. */
13
+ level?: HeadingLevel;
14
+ /** Visual size. `xl` and up are set in the display serif; smaller ones in the interface font. */
15
+ size?: HeadingSize;
16
+ sx?: Sx;
17
+ children?: Snippet;
18
+ };
19
+
20
+ const styles = stylex.create({
21
+ base: {
22
+ margin: 0,
23
+ color: colors.text,
24
+ textWrap: 'balance'
25
+ },
26
+ // Titles inside the interface: cards, sections, dialogs
27
+ interface: {
28
+ fontFamily: font.body,
29
+ fontWeight: font.weightSemibold,
30
+ lineHeight: font.leadingSnug
31
+ },
32
+ // Page-level headings, in the serif
33
+ display: {
34
+ fontFamily: font.display,
35
+ fontWeight: font.weightDisplay,
36
+ letterSpacing: font.trackingDisplay,
37
+ lineHeight: font.leadingTight
38
+ }
39
+ });
40
+
41
+ const sizes = stylex.create({
42
+ sm: { fontSize: font.sizeMd },
43
+ md: { fontSize: font.sizeLg },
44
+ lg: { fontSize: '1.125rem', letterSpacing: '-0.01em' },
45
+ xl: { fontSize: '1.625rem' },
46
+ '2xl': { fontSize: '2.125rem' },
47
+ '3xl': { fontSize: '2.75rem' },
48
+ '4xl': {
49
+ fontSize: 'clamp(3.25rem, 6.4vw, 5.25rem)',
50
+ lineHeight: 0.98,
51
+ letterSpacing: '-0.022em'
52
+ }
53
+ });
54
+
55
+ const defaultSize: Record<HeadingLevel, HeadingSize> = {
56
+ 1: '3xl',
57
+ 2: '2xl',
58
+ 3: 'lg',
59
+ 4: 'md',
60
+ 5: 'sm',
61
+ 6: 'sm'
62
+ };
63
+
64
+ const isDisplay = (size: HeadingSize) => size.endsWith('xl');
65
+ </script>
66
+
67
+ <script lang="ts">
68
+ let { level = 2, size, sx, class: className, children, ...rest }: HeadingProps = $props();
69
+
70
+ const resolved = $derived(size ?? defaultSize[level]);
71
+ </script>
72
+
73
+ <svelte:element
74
+ this={`h${level}`}
75
+ {...rest}
76
+ {...attrs(
77
+ [styles.base, isDisplay(resolved) ? styles.display : styles.interface, sizes[resolved], sx],
78
+ className
79
+ )}
80
+ >
81
+ {@render children?.()}
82
+ </svelte:element>
@@ -0,0 +1,16 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
5
+ export type HeadingSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';
6
+ export type HeadingProps = Omit<HTMLAttributes<HTMLHeadingElement>, 'children'> & {
7
+ /** Semantic level: renders `h1` to `h6`. Pick it for the document outline, not the look. */
8
+ level?: HeadingLevel;
9
+ /** Visual size. `xl` and up are set in the display serif; smaller ones in the interface font. */
10
+ size?: HeadingSize;
11
+ sx?: Sx;
12
+ children?: Snippet;
13
+ };
14
+ declare const Heading: import("svelte").Component<HeadingProps, {}, "">;
15
+ type Heading = ReturnType<typeof Heading>;
16
+ export default Heading;