@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,192 @@
1
+ <script lang="ts" module>
2
+ import * as stylex from '@stylexjs/stylex';
3
+ import { tick, type Snippet } from 'svelte';
4
+ import type { HTMLAttributes } from 'svelte/elements';
5
+ import { attrs, type Sx } from '../../internal/sx.js';
6
+ import { colors, motion } from '../../tokens.stylex.js';
7
+ import { useAppShell } from './context.js';
8
+
9
+ export type AppShellSidebarProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
10
+ /** Names the region: "Threads", "Projects". */
11
+ label?: string;
12
+ /** A Sidebar.Header, across the full width, above the rail. */
13
+ header?: Snippet;
14
+ /** A Rail, the narrow column of icons that stays when the sidebar collapses. */
15
+ rail?: Snippet;
16
+ sx?: Sx;
17
+ /** Sidebar.Content and Sidebar.Footer. */
18
+ children?: Snippet;
19
+ };
20
+
21
+ const MOTION = '@media (prefers-reduced-motion: no-preference)';
22
+ // The drawer's curve: quick out of the edge, a long gentle settle
23
+ const DRAWER = 'cubic-bezier(0.32, 0.72, 0, 1)';
24
+
25
+ const styles = stylex.create({
26
+ sidebar: {
27
+ position: 'relative',
28
+ zIndex: 1,
29
+ display: 'flex',
30
+ flexDirection: 'column',
31
+ flexShrink: 0,
32
+ overflow: 'clip',
33
+ color: colors.text
34
+ },
35
+ wide: {
36
+ width: 'calc(var(--narvi-sidebar-width) + var(--narvi-rail-current, 0px))',
37
+ transitionProperty: { default: 'none', [MOTION]: 'width' },
38
+ transitionDuration: motion.slow,
39
+ transitionTimingFunction: motion.easeInOut
40
+ },
41
+ collapsed: { width: 0 },
42
+ collapsedToRail: { width: 'var(--narvi-rail-width)' },
43
+ // Narrow: a drawer over the page, from the start edge
44
+ drawer: {
45
+ position: 'fixed',
46
+ insetBlock: 0,
47
+ insetInlineStart: 0,
48
+ zIndex: 40,
49
+ width: 'min(calc(var(--narvi-sidebar-width) + var(--narvi-rail-current, 0px) + 1rem), 86vw)',
50
+ backgroundColor: colors.bg,
51
+ boxShadow: `0 24px 64px -12px rgb(0 0 0 / 0.5)`,
52
+ translate: { default: '-100% 0', ':dir(rtl)': '100% 0' },
53
+ // Hidden only once it has slid away; shown at once when it opens, so
54
+ // focus can move into it on the first frame
55
+ visibility: 'hidden',
56
+ transitionProperty: { default: 'visibility', [MOTION]: 'translate, visibility' },
57
+ transitionDuration: { default: '0s', [MOTION]: '320ms, 0s' },
58
+ transitionDelay: { default: '0s', [MOTION]: '0s, 320ms' },
59
+ transitionTimingFunction: DRAWER
60
+ },
61
+ drawerOpen: {
62
+ translate: '0 0',
63
+ visibility: 'visible',
64
+ transitionDelay: { default: '0s', [MOTION]: '0s, 0s' }
65
+ },
66
+ scrim: {
67
+ position: 'fixed',
68
+ inset: 0,
69
+ zIndex: 39,
70
+ backgroundColor: 'rgb(0 0 0 / 0.4)',
71
+ opacity: { default: 1, '@starting-style': 0 },
72
+ transitionProperty: 'opacity',
73
+ transitionDuration: motion.slow,
74
+ transitionTimingFunction: motion.easeOut
75
+ },
76
+ header: {
77
+ flexShrink: 0,
78
+ transitionProperty: 'opacity',
79
+ transitionDuration: motion.fast,
80
+ transitionTimingFunction: 'ease'
81
+ },
82
+ // Folded to the rail, the header has no room; it steps out rather than being cut
83
+ headerHidden: { opacity: 0, visibility: 'hidden' },
84
+ body: { display: 'flex', flexGrow: 1, minHeight: 0 },
85
+ rail: { display: 'flex', flexShrink: 0, width: 'var(--narvi-rail-width)' },
86
+ // The column keeps its width while the sidebar narrows, so its rows are
87
+ // clipped rather than squeezed and reflowed on every frame
88
+ column: {
89
+ display: 'flex',
90
+ flexDirection: 'column',
91
+ flexShrink: 0,
92
+ minHeight: 0
93
+ }
94
+ });
95
+ </script>
96
+
97
+ <script lang="ts">
98
+ let {
99
+ label = 'Sidebar',
100
+ header,
101
+ rail,
102
+ sx,
103
+ class: className,
104
+ children,
105
+ ...rest
106
+ }: AppShellSidebarProps = $props();
107
+
108
+ const shell = useAppShell('Sidebar');
109
+ let element = $state<HTMLElement | null>(null);
110
+
111
+ $effect(() => {
112
+ shell.setRail(!!rail);
113
+ return () => shell.setRail(false);
114
+ });
115
+
116
+ // A drawer takes focus when it opens and gives it back when it closes
117
+ let returnTo: HTMLElement | null = null;
118
+ $effect(() => {
119
+ if (!shell.narrow) return;
120
+ if (shell.open) {
121
+ returnTo = document.activeElement as HTMLElement | null;
122
+ // The open row first, then the list's tab stop, then whatever comes first
123
+ tick().then(() =>
124
+ requestAnimationFrame(() => {
125
+ const first = [
126
+ '[data-sidebar-row][aria-current="page"]',
127
+ '[data-sidebar-row][tabindex="0"]',
128
+ 'button, a[href]'
129
+ ]
130
+ .map((selector) => element?.querySelector<HTMLElement>(selector))
131
+ .find(Boolean);
132
+ first?.focus();
133
+ })
134
+ );
135
+ } else if (returnTo) {
136
+ returnTo.focus();
137
+ returnTo = null;
138
+ }
139
+ });
140
+
141
+ const hidden = $derived(shell.narrow ? !shell.open : !shell.open && !rail);
142
+ </script>
143
+
144
+ <svelte:window
145
+ onkeydown={(event) => {
146
+ if (event.key === 'Escape' && shell.narrow && shell.open) shell.close();
147
+ }}
148
+ />
149
+
150
+ {#if shell.narrow && shell.open}
151
+ <div aria-hidden="true" {...stylex.attrs(styles.scrim)} onclick={() => shell.close()}></div>
152
+ {/if}
153
+
154
+ <aside
155
+ bind:this={element}
156
+ id={shell.sidebarId}
157
+ aria-label={label}
158
+ inert={hidden || undefined}
159
+ data-slot="app-shell-sidebar"
160
+ {...rest}
161
+ {...attrs(
162
+ [
163
+ styles.sidebar,
164
+ shell.narrow
165
+ ? [styles.drawer, shell.open && styles.drawerOpen]
166
+ : [styles.wide, !shell.open && (rail ? styles.collapsedToRail : styles.collapsed)],
167
+ sx
168
+ ],
169
+ className
170
+ )}
171
+ >
172
+ {#if header}
173
+ <div
174
+ {...stylex.attrs(styles.header, !shell.open && !shell.narrow && styles.headerHidden)}
175
+ inert={!shell.open && !shell.narrow ? true : undefined}
176
+ >
177
+ {@render header()}
178
+ </div>
179
+ {/if}
180
+ <div {...stylex.attrs(styles.body)}>
181
+ {#if rail}
182
+ <div {...stylex.attrs(styles.rail)}>{@render rail()}</div>
183
+ {/if}
184
+ <div
185
+ {...stylex.attrs(styles.column)}
186
+ style:width="var(--narvi-sidebar-width)"
187
+ inert={!shell.open && !shell.narrow ? true : undefined}
188
+ >
189
+ {@render children?.()}
190
+ </div>
191
+ </div>
192
+ </aside>
@@ -0,0 +1,17 @@
1
+ import { type Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type AppShellSidebarProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
5
+ /** Names the region: "Threads", "Projects". */
6
+ label?: string;
7
+ /** A Sidebar.Header, across the full width, above the rail. */
8
+ header?: Snippet;
9
+ /** A Rail, the narrow column of icons that stays when the sidebar collapses. */
10
+ rail?: Snippet;
11
+ sx?: Sx;
12
+ /** Sidebar.Content and Sidebar.Footer. */
13
+ children?: Snippet;
14
+ };
15
+ declare const AppShellSidebar: import("svelte").Component<AppShellSidebarProps, {}, "">;
16
+ type AppShellSidebar = ReturnType<typeof AppShellSidebar>;
17
+ export default AppShellSidebar;
@@ -0,0 +1,50 @@
1
+ <script lang="ts" module>
2
+ import type { Sx } from '../../internal/sx.js';
3
+ import Button, { type ButtonProps } from '../button/Button.svelte';
4
+ import { useAppShell } from './context.js';
5
+
6
+ export type AppShellToggleProps = Omit<
7
+ ButtonProps,
8
+ 'children' | 'variant' | 'iconOnly' | 'href' | 'ref' | 'onclick'
9
+ > & {
10
+ showLabel?: string;
11
+ hideLabel?: string;
12
+ sx?: Sx;
13
+ };
14
+ </script>
15
+
16
+ <script lang="ts">
17
+ let {
18
+ showLabel = 'Show the sidebar',
19
+ hideLabel = 'Hide the sidebar',
20
+ size = 'sm',
21
+ ...rest
22
+ }: AppShellToggleProps = $props();
23
+
24
+ const shell = useAppShell('Toggle');
25
+ </script>
26
+
27
+ <Button
28
+ variant="ghost"
29
+ {size}
30
+ iconOnly
31
+ aria-label={shell.open ? hideLabel : showLabel}
32
+ aria-expanded={shell.open}
33
+ aria-controls={shell.sidebarId}
34
+ data-slot="app-shell-toggle"
35
+ {...rest}
36
+ onclick={() => shell.toggle()}
37
+ >
38
+ <svg
39
+ width="16"
40
+ height="16"
41
+ viewBox="0 0 16 16"
42
+ fill="none"
43
+ stroke="currentColor"
44
+ stroke-width="1.5"
45
+ aria-hidden="true"
46
+ >
47
+ <rect x="2.25" y="2.75" width="11.5" height="10.5" rx="2" />
48
+ <path d="M6.25 2.75v10.5" />
49
+ </svg>
50
+ </Button>
@@ -0,0 +1,10 @@
1
+ import type { Sx } from '../../internal/sx.js';
2
+ import { type ButtonProps } from '../button/Button.svelte';
3
+ export type AppShellToggleProps = Omit<ButtonProps, 'children' | 'variant' | 'iconOnly' | 'href' | 'ref' | 'onclick'> & {
4
+ showLabel?: string;
5
+ hideLabel?: string;
6
+ sx?: Sx;
7
+ };
8
+ declare const AppShellToggle: import("svelte").Component<AppShellToggleProps, {}, "">;
9
+ type AppShellToggle = ReturnType<typeof AppShellToggle>;
10
+ export default AppShellToggle;
@@ -0,0 +1,15 @@
1
+ export type AppShellContext = {
2
+ /** Whether the sidebar shows in full. On a narrow window: whether its drawer is open. */
3
+ readonly open: boolean;
4
+ /** True below the narrow width, where the sidebar is a drawer over the page. */
5
+ readonly narrow: boolean;
6
+ readonly sidebarId: string;
7
+ toggle(): void;
8
+ close(): void;
9
+ /** @internal The sidebar says whether it has a rail, which stays when it collapses. */
10
+ setRail(present: boolean): void;
11
+ };
12
+ export declare function setAppShellContext(context: AppShellContext): void;
13
+ /** The surrounding AppShell, for building parts of your own. */
14
+ export declare function getAppShellContext(): AppShellContext | undefined;
15
+ export declare function useAppShell(part: string): AppShellContext;
@@ -0,0 +1,15 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ const KEY = Symbol('narvi.app-shell');
3
+ export function setAppShellContext(context) {
4
+ setContext(KEY, context);
5
+ }
6
+ /** The surrounding AppShell, for building parts of your own. */
7
+ export function getAppShellContext() {
8
+ return getContext(KEY);
9
+ }
10
+ export function useAppShell(part) {
11
+ const context = getAppShellContext();
12
+ if (!context)
13
+ throw new Error(`<AppShell.${part}> must be placed inside <AppShell.Root>.`);
14
+ return context;
15
+ }
@@ -0,0 +1,15 @@
1
+ import Header from './AppShellHeader.svelte';
2
+ import Main from './AppShellMain.svelte';
3
+ import Panel from './AppShellPanel.svelte';
4
+ import Root from './AppShellRoot.svelte';
5
+ import Sidebar from './AppShellSidebar.svelte';
6
+ import Toggle from './AppShellToggle.svelte';
7
+ export { Root, Sidebar, Main, Header, Panel, Toggle };
8
+ export { getAppShellContext } from './context.js';
9
+ export type { AppShellContext } from './context.js';
10
+ export type { AppShellHeaderProps } from './AppShellHeader.svelte';
11
+ export type { AppShellMainProps } from './AppShellMain.svelte';
12
+ export type { AppShellPanelProps } from './AppShellPanel.svelte';
13
+ export type { AppShellRootProps } from './AppShellRoot.svelte';
14
+ export type { AppShellSidebarProps } from './AppShellSidebar.svelte';
15
+ export type { AppShellToggleProps } from './AppShellToggle.svelte';
@@ -0,0 +1,8 @@
1
+ import Header from './AppShellHeader.svelte';
2
+ import Main from './AppShellMain.svelte';
3
+ import Panel from './AppShellPanel.svelte';
4
+ import Root from './AppShellRoot.svelte';
5
+ import Sidebar from './AppShellSidebar.svelte';
6
+ import Toggle from './AppShellToggle.svelte';
7
+ export { Root, Sidebar, Main, Header, Panel, Toggle };
8
+ export { getAppShellContext } from './context.js';
@@ -0,0 +1,213 @@
1
+ <!--
2
+ The agent stops to ask. A question, what it wants to do, why, and the
3
+ choices; once answered, the card folds into one line that says what was
4
+ decided. Focus is kept: when the buttons go, it moves to that line, not to
5
+ the top of the page. (From Eregion, 2b566c1f.)
6
+ -->
7
+ <script lang="ts" module>
8
+ import * as stylex from '@stylexjs/stylex';
9
+ import { tick, type Snippet } from 'svelte';
10
+ import Glyph from '../../internal/Glyph.svelte';
11
+ import { attrs, type Sx } from '../../internal/sx.js';
12
+ import { colors, font, motion, radius, space } from '../../tokens.stylex.js';
13
+ import Button from '../button/Button.svelte';
14
+
15
+ export type ApprovalChoice = {
16
+ value: string;
17
+ label: string;
18
+ /** The one choice most people make; shown as the main button. */
19
+ primary?: boolean;
20
+ /** For a choice that refuses, or refuses and stops. */
21
+ tone?: 'default' | 'danger';
22
+ };
23
+
24
+ export type ApprovalAnswer = {
25
+ /** What was decided, in words: "Approved", "Declined". */
26
+ label: string;
27
+ tone: 'approved' | 'declined' | 'withdrawn';
28
+ };
29
+
30
+ export type ApprovalProps = {
31
+ /** A question: "Run this command?" */
32
+ title: string;
33
+ /** Why the agent wants it. */
34
+ reason?: string;
35
+ /** The command it would run. */
36
+ command?: string;
37
+ /** The files it would touch. */
38
+ files?: string[];
39
+ choices: ApprovalChoice[];
40
+ onchoose: (value: string) => void;
41
+ /** Once there is one, the card folds into a line that says it. */
42
+ answer?: ApprovalAnswer;
43
+ /** What the folded line names after the answer, such as the command. */
44
+ subject?: string;
45
+ /** More detail inside the card. */
46
+ children?: Snippet;
47
+ sx?: Sx;
48
+ class?: string;
49
+ };
50
+
51
+ const MOTION = '@media (prefers-reduced-motion: no-preference)';
52
+
53
+ const styles = stylex.create({
54
+ card: {
55
+ display: 'flex',
56
+ flexDirection: 'column',
57
+ gap: space.x3,
58
+ padding: '0.875rem',
59
+ borderRadius: radius.lg,
60
+ backgroundColor: `color-mix(in oklab, ${colors.warning} 7%, ${colors.bgRaised})`,
61
+ boxShadow: `inset 0 0 0 1px color-mix(in oklab, ${colors.warning} 40%, transparent)`,
62
+ opacity: { default: 1, '@starting-style': 0 },
63
+ translate: { default: null, [MOTION]: { default: '0 0', '@starting-style': '0 0.375rem' } },
64
+ transitionProperty: { default: 'opacity', [MOTION]: 'opacity, translate' },
65
+ transitionDuration: motion.slow,
66
+ transitionTimingFunction: motion.easeOut
67
+ },
68
+ title: { margin: 0, fontSize: font.sizeMd, fontWeight: font.weightSemibold },
69
+ reason: {
70
+ margin: 0,
71
+ color: colors.textMuted,
72
+ fontSize: font.sizeMd,
73
+ lineHeight: font.leadingNormal
74
+ },
75
+ command: {
76
+ margin: 0,
77
+ paddingBlock: '0.5rem',
78
+ paddingInline: '0.625rem',
79
+ overflowX: 'auto',
80
+ borderRadius: radius.md,
81
+ backgroundColor: colors.well,
82
+ boxShadow: `inset 0 0 0 1px ${colors.line}`,
83
+ fontFamily: font.mono,
84
+ fontSize: font.sizeSm,
85
+ whiteSpace: 'pre-wrap',
86
+ overflowWrap: 'anywhere',
87
+ userSelect: 'text'
88
+ },
89
+ prompt: { color: colors.textSubtle, userSelect: 'none' },
90
+ files: {
91
+ margin: 0,
92
+ paddingInlineStart: '1rem',
93
+ color: colors.textMuted,
94
+ fontFamily: font.mono,
95
+ fontSize: font.sizeXs,
96
+ lineHeight: 1.7
97
+ },
98
+ actions: { display: 'flex', flexWrap: 'wrap', gap: space.x2 },
99
+ answered: {
100
+ display: 'flex',
101
+ alignItems: 'center',
102
+ gap: '0.5rem',
103
+ minWidth: 0,
104
+ color: colors.textMuted,
105
+ fontSize: font.sizeSm,
106
+ borderRadius: radius.xs,
107
+ outlineStyle: 'solid',
108
+ outlineWidth: { default: 0, ':focus-visible': '2px' },
109
+ outlineColor: colors.focusRing,
110
+ outlineOffset: '2px'
111
+ },
112
+ approved: { color: colors.success, display: 'grid' },
113
+ declined: { color: colors.danger, display: 'grid' },
114
+ withdrawn: { color: colors.textSubtle, display: 'grid' },
115
+ subject: {
116
+ minWidth: 0,
117
+ overflow: 'hidden',
118
+ textOverflow: 'ellipsis',
119
+ whiteSpace: 'nowrap',
120
+ fontFamily: font.mono,
121
+ fontSize: font.sizeXs
122
+ }
123
+ });
124
+ </script>
125
+
126
+ <script lang="ts">
127
+ let {
128
+ title,
129
+ reason,
130
+ command,
131
+ files,
132
+ choices,
133
+ onchoose,
134
+ answer,
135
+ subject,
136
+ children,
137
+ sx,
138
+ class: className
139
+ }: ApprovalProps = $props();
140
+
141
+ const uid = $props.id();
142
+ let card = $state<HTMLElement | null>(null);
143
+ let line = $state<HTMLElement | null>(null);
144
+ let keepFocus = false;
145
+
146
+ function choose(value: string) {
147
+ // The buttons are about to go; focus follows to what replaces them
148
+ keepFocus = !!card?.contains(document.activeElement);
149
+ onchoose(value);
150
+ }
151
+
152
+ $effect(() => {
153
+ if (!answer || !keepFocus) return;
154
+ keepFocus = false;
155
+ tick().then(() => line?.focus());
156
+ });
157
+ </script>
158
+
159
+ {#if answer}
160
+ <p
161
+ bind:this={line}
162
+ tabindex="-1"
163
+ data-slot="approval"
164
+ data-answer={answer.tone}
165
+ {...attrs([styles.answered, sx], className)}
166
+ >
167
+ <span {...stylex.attrs(styles[answer.tone])}>
168
+ {#if answer.tone === 'approved'}<Glyph
169
+ name="check"
170
+ stroke={1.75}
171
+ />{:else if answer.tone === 'declined'}<Glyph name="close" />{:else}<Glyph
172
+ name="dashed"
173
+ size={14}
174
+ />{/if}
175
+ </span>
176
+ <span>{answer.label}</span>
177
+ {#if subject ?? command}<span aria-hidden="true">·</span><code {...stylex.attrs(styles.subject)}
178
+ >{subject ?? command}</code
179
+ >{/if}
180
+ </p>
181
+ {:else}
182
+ <section
183
+ bind:this={card}
184
+ role="group"
185
+ aria-labelledby="{uid}-title"
186
+ data-slot="approval"
187
+ {...attrs([styles.card, sx], className)}
188
+ >
189
+ <p id="{uid}-title" {...stylex.attrs(styles.title)}>{title}</p>
190
+ {#if reason}<p {...stylex.attrs(styles.reason)}>{reason}</p>{/if}
191
+ {#if command}
192
+ <pre {...stylex.attrs(styles.command)}><span {...stylex.attrs(styles.prompt)}
193
+ >$ </span>{command}</pre>
194
+ {/if}
195
+ {#if files?.length}
196
+ <ul {...stylex.attrs(styles.files)}>
197
+ {#each files as file (file)}<li>{file}</li>{/each}
198
+ </ul>
199
+ {/if}
200
+ {@render children?.()}
201
+ <div {...stylex.attrs(styles.actions)}>
202
+ {#each choices as choice (choice.value)}
203
+ <Button
204
+ size="sm"
205
+ variant={choice.primary ? 'primary' : choice.tone === 'danger' ? 'danger' : 'ghost'}
206
+ onclick={() => choose(choice.value)}
207
+ >
208
+ {choice.label}
209
+ </Button>
210
+ {/each}
211
+ </div>
212
+ </section>
213
+ {/if}
@@ -0,0 +1,38 @@
1
+ import { type Snippet } from 'svelte';
2
+ import { type Sx } from '../../internal/sx.js';
3
+ export type ApprovalChoice = {
4
+ value: string;
5
+ label: string;
6
+ /** The one choice most people make; shown as the main button. */
7
+ primary?: boolean;
8
+ /** For a choice that refuses, or refuses and stops. */
9
+ tone?: 'default' | 'danger';
10
+ };
11
+ export type ApprovalAnswer = {
12
+ /** What was decided, in words: "Approved", "Declined". */
13
+ label: string;
14
+ tone: 'approved' | 'declined' | 'withdrawn';
15
+ };
16
+ export type ApprovalProps = {
17
+ /** A question: "Run this command?" */
18
+ title: string;
19
+ /** Why the agent wants it. */
20
+ reason?: string;
21
+ /** The command it would run. */
22
+ command?: string;
23
+ /** The files it would touch. */
24
+ files?: string[];
25
+ choices: ApprovalChoice[];
26
+ onchoose: (value: string) => void;
27
+ /** Once there is one, the card folds into a line that says it. */
28
+ answer?: ApprovalAnswer;
29
+ /** What the folded line names after the answer, such as the command. */
30
+ subject?: string;
31
+ /** More detail inside the card. */
32
+ children?: Snippet;
33
+ sx?: Sx;
34
+ class?: string;
35
+ };
36
+ declare const Approval: import("svelte").Component<ApprovalProps, {}, "">;
37
+ type Approval = ReturnType<typeof Approval>;
38
+ export default Approval;
@@ -0,0 +1,73 @@
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 { getAvatarContext } from './context.js';
7
+
8
+ export type AvatarFallbackProps = Omit<HTMLAttributes<HTMLSpanElement>, 'children'> & {
9
+ sx?: Sx;
10
+ /** Usually initials. Leave it empty to show the built-in portrait instead. */
11
+ children?: Snippet;
12
+ };
13
+
14
+ const styles = stylex.create({
15
+ fallback: {
16
+ display: 'grid',
17
+ placeItems: 'center',
18
+ width: '100%',
19
+ height: '100%',
20
+ borderRadius: 'inherit'
21
+ },
22
+ // Initials sit on the person's own colour: dark enough for white text at every hue
23
+ initials: {
24
+ backgroundImage:
25
+ 'linear-gradient(140deg, oklch(0.56 0.075 var(--narvi-avatar-hue, 255)), oklch(0.3 0.06 var(--narvi-avatar-hue, 255)))',
26
+ color: '#fff',
27
+ forcedColorAdjust: 'none'
28
+ },
29
+ portrait: {
30
+ display: 'block',
31
+ width: '100%',
32
+ height: '100%'
33
+ }
34
+ });
35
+ </script>
36
+
37
+ <script lang="ts">
38
+ let { sx, class: className, children, ...rest }: AvatarFallbackProps = $props();
39
+
40
+ const avatar = getAvatarContext('Fallback');
41
+ const uid = $props.id();
42
+ </script>
43
+
44
+ {#if avatar.status !== 'loaded'}
45
+ <span
46
+ data-slot="avatar-fallback"
47
+ {...rest}
48
+ {...attrs([styles.fallback, children && styles.initials, sx], className)}
49
+ >
50
+ {#if children}
51
+ {@render children()}
52
+ {:else}
53
+ <!-- The built-in portrait: a head and shoulders on indigo -->
54
+ <svg
55
+ viewBox="0 0 96 96"
56
+ preserveAspectRatio="xMidYMid slice"
57
+ aria-hidden="true"
58
+ data-slot="avatar-portrait"
59
+ {...stylex.attrs(styles.portrait)}
60
+ >
61
+ <defs>
62
+ <linearGradient id="{uid}-bg" x1="0" y1="0" x2="1" y2="1">
63
+ <stop offset="0" stop-color="#7c8cf8" />
64
+ <stop offset="1" stop-color="#3b2f9e" />
65
+ </linearGradient>
66
+ </defs>
67
+ <rect width="96" height="96" fill="url(#{uid}-bg)" />
68
+ <circle cx="48" cy="38" r="17" fill="#f3e6d8" />
69
+ <path d="M14 96c2-20 16-31 34-31s32 11 34 31z" fill="#f3e6d8" />
70
+ </svg>
71
+ {/if}
72
+ </span>
73
+ {/if}
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Sx } from '../../internal/sx.js';
4
+ export type AvatarFallbackProps = Omit<HTMLAttributes<HTMLSpanElement>, 'children'> & {
5
+ sx?: Sx;
6
+ /** Usually initials. Leave it empty to show the built-in portrait instead. */
7
+ children?: Snippet;
8
+ };
9
+ declare const AvatarFallback: import("svelte").Component<AvatarFallbackProps, {}, "">;
10
+ type AvatarFallback = ReturnType<typeof AvatarFallback>;
11
+ export default AvatarFallback;