@refraction-ui/astro 0.4.0 → 0.4.4

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 (469) hide show
  1. package/dist/accordion/index.ts +1 -0
  2. package/dist/ai/ai-manager.ts +121 -0
  3. package/dist/ai/index.ts +23 -0
  4. package/dist/ai/mock-providers.ts +68 -0
  5. package/dist/ai/sanitizer.ts +174 -0
  6. package/dist/ai/tts-manager.ts +80 -0
  7. package/dist/ai/types.ts +72 -0
  8. package/dist/animated-text/animated-text.styles.ts +28 -0
  9. package/dist/animated-text/animated-text.ts +83 -0
  10. package/dist/animated-text/index.ts +15 -0
  11. package/dist/app-shell/app-shell.ts +252 -0
  12. package/dist/app-shell/auth-shell.ts +84 -0
  13. package/dist/app-shell/index.ts +22 -0
  14. package/dist/app-shell/page-shell.ts +125 -0
  15. package/dist/astro-accordion/Button.astro +55 -0
  16. package/dist/astro-accordion/index.ts +1 -0
  17. package/dist/astro-ai/AIScript.astro +69 -0
  18. package/dist/astro-ai/TTSScript.astro +60 -0
  19. package/dist/astro-ai/index.ts +16 -0
  20. package/dist/astro-animated-text/AnimatedText.astro +81 -0
  21. package/dist/astro-animated-text/TypewriterText.astro +90 -0
  22. package/dist/astro-animated-text/index.ts +1 -0
  23. package/dist/astro-app-shell/AppShell.astro +195 -0
  24. package/dist/astro-app-shell/AppShellContent.astro +29 -0
  25. package/dist/astro-app-shell/AppShellHeader.astro +54 -0
  26. package/dist/astro-app-shell/AppShellMain.astro +18 -0
  27. package/dist/astro-app-shell/AppShellMobileNav.astro +27 -0
  28. package/dist/astro-app-shell/AppShellOverlay.astro +21 -0
  29. package/dist/astro-app-shell/AppShellSidebar.astro +26 -0
  30. package/dist/astro-app-shell/AuthShell.astro +31 -0
  31. package/dist/astro-app-shell/AuthShellCard.astro +24 -0
  32. package/dist/astro-app-shell/PageShell.astro +36 -0
  33. package/dist/astro-app-shell/PageShellFooter.astro +30 -0
  34. package/dist/astro-app-shell/PageShellNav.astro +33 -0
  35. package/dist/astro-app-shell/PageShellSection.astro +32 -0
  36. package/dist/astro-app-shell/index.ts +21 -0
  37. package/dist/astro-auth/AuthGuard.astro +133 -0
  38. package/dist/astro-auth/index.ts +5 -0
  39. package/dist/astro-avatar/Avatar.astro +22 -0
  40. package/dist/astro-avatar/AvatarFallback.astro +18 -0
  41. package/dist/astro-avatar/AvatarImage.astro +48 -0
  42. package/dist/astro-avatar/index.ts +1 -0
  43. package/dist/astro-avatar-group/AvatarGroup.astro +42 -0
  44. package/dist/astro-avatar-group/index.ts +1 -0
  45. package/dist/astro-badge/Badge.astro +27 -0
  46. package/dist/astro-badge/index.ts +1 -0
  47. package/dist/astro-bottom-nav/BottomNav.astro +40 -0
  48. package/dist/astro-bottom-nav/index.ts +1 -0
  49. package/dist/astro-breadcrumbs/Breadcrumbs.astro +56 -0
  50. package/dist/astro-breadcrumbs/index.ts +1 -0
  51. package/dist/astro-button/Button.astro +55 -0
  52. package/dist/astro-button/index.ts +1 -0
  53. package/dist/astro-calendar/Calendar.astro +259 -0
  54. package/dist/astro-calendar/index.ts +1 -0
  55. package/dist/astro-callout/Callout.astro +3 -0
  56. package/dist/astro-callout/index.ts +1 -0
  57. package/dist/astro-card/Card.astro +20 -0
  58. package/dist/astro-card/CardContent.astro +13 -0
  59. package/dist/astro-card/CardDescription.astro +13 -0
  60. package/dist/astro-card/CardFooter.astro +13 -0
  61. package/dist/astro-card/CardHeader.astro +13 -0
  62. package/dist/astro-card/CardTitle.astro +15 -0
  63. package/dist/astro-card/index.ts +1 -0
  64. package/dist/astro-card-grid/CardGrid.astro +17 -0
  65. package/dist/astro-card-grid/index.ts +1 -0
  66. package/dist/astro-carousel/Button.astro +55 -0
  67. package/dist/astro-carousel/index.ts +1 -0
  68. package/dist/astro-charts/Bars.astro +53 -0
  69. package/dist/astro-charts/Chart.astro +31 -0
  70. package/dist/astro-charts/Circles.astro +48 -0
  71. package/dist/astro-charts/Gradient.astro +34 -0
  72. package/dist/astro-charts/Histogram.astro +107 -0
  73. package/dist/astro-charts/Line.astro +55 -0
  74. package/dist/astro-charts/PieChart.astro +63 -0
  75. package/dist/astro-charts/ScatterPlot.astro +95 -0
  76. package/dist/astro-charts/XAxis.astro +46 -0
  77. package/dist/astro-charts/YAxis.astro +44 -0
  78. package/dist/astro-charts/index.ts +26 -0
  79. package/dist/astro-checkbox/Checkbox.astro +129 -0
  80. package/dist/astro-checkbox/index.ts +1 -0
  81. package/dist/astro-code-block/CodeBlock.astro +3 -0
  82. package/dist/astro-code-block/index.ts +1 -0
  83. package/dist/astro-code-editor/CodeEditor.astro +123 -0
  84. package/dist/astro-code-editor/index.ts +1 -0
  85. package/dist/astro-collapsible/Collapsible.astro +58 -0
  86. package/dist/astro-collapsible/CollapsibleContent.astro +21 -0
  87. package/dist/astro-collapsible/CollapsibleTrigger.astro +17 -0
  88. package/dist/astro-collapsible/index.ts +1 -0
  89. package/dist/astro-command/Command.astro +170 -0
  90. package/dist/astro-command/CommandEmpty.astro +17 -0
  91. package/dist/astro-command/CommandGroup.astro +25 -0
  92. package/dist/astro-command/CommandInput.astro +21 -0
  93. package/dist/astro-command/CommandItem.astro +26 -0
  94. package/dist/astro-command/CommandList.astro +17 -0
  95. package/dist/astro-command/CommandSeparator.astro +14 -0
  96. package/dist/astro-command/index.ts +1 -0
  97. package/dist/astro-command-input/CommandInput.astro +6 -0
  98. package/dist/astro-command-input/index.ts +1 -0
  99. package/dist/astro-content-protection/ContentProtection.astro +104 -0
  100. package/dist/astro-content-protection/index.ts +1 -0
  101. package/dist/astro-data-table/DataTable.astro +263 -0
  102. package/dist/astro-data-table/index.ts +1 -0
  103. package/dist/astro-date-picker/DatePicker.astro +398 -0
  104. package/dist/astro-date-picker/index.ts +1 -0
  105. package/dist/astro-device-frame/DeviceFrame.astro +44 -0
  106. package/dist/astro-device-frame/index.ts +1 -0
  107. package/dist/astro-dialog/Dialog.astro +138 -0
  108. package/dist/astro-dialog/DialogClose.astro +16 -0
  109. package/dist/astro-dialog/DialogContent.astro +24 -0
  110. package/dist/astro-dialog/DialogDescription.astro +15 -0
  111. package/dist/astro-dialog/DialogFooter.astro +14 -0
  112. package/dist/astro-dialog/DialogHeader.astro +14 -0
  113. package/dist/astro-dialog/DialogOverlay.astro +17 -0
  114. package/dist/astro-dialog/DialogTitle.astro +15 -0
  115. package/dist/astro-dialog/DialogTrigger.astro +18 -0
  116. package/dist/astro-dialog/index.ts +1 -0
  117. package/dist/astro-diff-viewer/DiffViewer.astro +371 -0
  118. package/dist/astro-diff-viewer/index.ts +1 -0
  119. package/dist/astro-dropdown-menu/DropdownMenu.astro +138 -0
  120. package/dist/astro-dropdown-menu/DropdownMenuContent.astro +20 -0
  121. package/dist/astro-dropdown-menu/DropdownMenuItem.astro +21 -0
  122. package/dist/astro-dropdown-menu/DropdownMenuLabel.astro +14 -0
  123. package/dist/astro-dropdown-menu/DropdownMenuSeparator.astro +14 -0
  124. package/dist/astro-dropdown-menu/DropdownMenuTrigger.astro +18 -0
  125. package/dist/astro-dropdown-menu/index.ts +1 -0
  126. package/dist/astro-emoji-picker/EmojiPicker.astro +255 -0
  127. package/dist/astro-emoji-picker/index.ts +1 -0
  128. package/dist/astro-feedback-dialog/FeedbackDialog.astro +152 -0
  129. package/dist/astro-feedback-dialog/index.ts +1 -0
  130. package/dist/astro-file-tree/astro-file-tree.astro +4 -0
  131. package/dist/astro-file-tree/index.ts +1 -0
  132. package/dist/astro-file-upload/FileUpload.astro +306 -0
  133. package/dist/astro-file-upload/index.ts +1 -0
  134. package/dist/astro-footer/Footer.astro +61 -0
  135. package/dist/astro-footer/index.ts +1 -0
  136. package/dist/astro-icon-system/astro-icon-system.astro +4 -0
  137. package/dist/astro-icon-system/index.ts +1 -0
  138. package/dist/astro-inline-editor/InlineEditor.astro +169 -0
  139. package/dist/astro-inline-editor/index.ts +1 -0
  140. package/dist/astro-input/Input.astro +49 -0
  141. package/dist/astro-input/index.ts +1 -0
  142. package/dist/astro-input-group/InputGroup.astro +29 -0
  143. package/dist/astro-input-group/InputGroupAddon.astro +14 -0
  144. package/dist/astro-input-group/InputGroupButton.astro +19 -0
  145. package/dist/astro-input-group/InputGroupText.astro +11 -0
  146. package/dist/astro-input-group/index.ts +1 -0
  147. package/dist/astro-install-prompt/InstallPrompt.astro +115 -0
  148. package/dist/astro-install-prompt/index.ts +1 -0
  149. package/dist/astro-keyboard-shortcut/KeyboardShortcut.astro +83 -0
  150. package/dist/astro-keyboard-shortcut/ShortcutBadge.astro +41 -0
  151. package/dist/astro-keyboard-shortcut/index.ts +1 -0
  152. package/dist/astro-language-selector/LanguageSelector.astro +247 -0
  153. package/dist/astro-language-selector/index.ts +1 -0
  154. package/dist/astro-link-card/LinkCard.astro +17 -0
  155. package/dist/astro-link-card/index.ts +1 -0
  156. package/dist/astro-markdown-renderer/MarkdownRenderer.astro +62 -0
  157. package/dist/astro-markdown-renderer/index.ts +1 -0
  158. package/dist/astro-mobile-nav/MobileNav.astro +84 -0
  159. package/dist/astro-mobile-nav/MobileNavContent.astro +29 -0
  160. package/dist/astro-mobile-nav/MobileNavLink.astro +16 -0
  161. package/dist/astro-mobile-nav/MobileNavTrigger.astro +57 -0
  162. package/dist/astro-mobile-nav/index.ts +1 -0
  163. package/dist/astro-navbar/Navbar.astro +49 -0
  164. package/dist/astro-navbar/index.ts +1 -0
  165. package/dist/astro-otp-input/OtpInput.astro +253 -0
  166. package/dist/astro-otp-input/index.ts +1 -0
  167. package/dist/astro-pagination/Pagination.astro +3 -0
  168. package/dist/astro-pagination/index.ts +1 -0
  169. package/dist/astro-payment/Payment.astro +19 -0
  170. package/dist/astro-payment/index.ts +1 -0
  171. package/dist/astro-popover/Popover.astro +87 -0
  172. package/dist/astro-popover/PopoverClose.astro +16 -0
  173. package/dist/astro-popover/PopoverContent.astro +23 -0
  174. package/dist/astro-popover/PopoverTrigger.astro +18 -0
  175. package/dist/astro-popover/index.ts +1 -0
  176. package/dist/astro-presence-indicator/PresenceIndicator.astro +26 -0
  177. package/dist/astro-presence-indicator/index.ts +1 -0
  178. package/dist/astro-progress-display/BadgeDisplay.astro +33 -0
  179. package/dist/astro-progress-display/ProgressBar.astro +27 -0
  180. package/dist/astro-progress-display/StatsGrid.astro +32 -0
  181. package/dist/astro-progress-display/index.ts +1 -0
  182. package/dist/astro-radio/RadioGroup.astro +111 -0
  183. package/dist/astro-radio/RadioItem.astro +36 -0
  184. package/dist/astro-radio/index.ts +1 -0
  185. package/dist/astro-reaction-bar/ReactionBar.astro +117 -0
  186. package/dist/astro-reaction-bar/index.ts +1 -0
  187. package/dist/astro-resizable-layout/ResizableDivider.astro +27 -0
  188. package/dist/astro-resizable-layout/ResizableLayout.astro +162 -0
  189. package/dist/astro-resizable-layout/ResizablePane.astro +28 -0
  190. package/dist/astro-resizable-layout/index.ts +11 -0
  191. package/dist/astro-rich-editor/RichEditor.astro +260 -0
  192. package/dist/astro-rich-editor/index.ts +25 -0
  193. package/dist/astro-search-bar/SearchBar.astro +140 -0
  194. package/dist/astro-search-bar/SearchResultItem.astro +16 -0
  195. package/dist/astro-search-bar/SearchResults.astro +17 -0
  196. package/dist/astro-search-bar/index.ts +1 -0
  197. package/dist/astro-select/Select.astro +165 -0
  198. package/dist/astro-select/SelectContent.astro +19 -0
  199. package/dist/astro-select/SelectItem.astro +42 -0
  200. package/dist/astro-select/SelectTrigger.astro +36 -0
  201. package/dist/astro-select/index.ts +1 -0
  202. package/dist/astro-sidebar/Sidebar.astro +64 -0
  203. package/dist/astro-sidebar/index.ts +1 -0
  204. package/dist/astro-skeleton/Skeleton.astro +39 -0
  205. package/dist/astro-skeleton/SkeletonText.astro +22 -0
  206. package/dist/astro-skeleton/index.ts +1 -0
  207. package/dist/astro-skip-to-content/SkipToContent.astro +3 -0
  208. package/dist/astro-skip-to-content/index.ts +1 -0
  209. package/dist/astro-slide-viewer/SlideViewer.astro +231 -0
  210. package/dist/astro-slide-viewer/index.ts +1 -0
  211. package/dist/astro-slider/index.ts +1 -0
  212. package/dist/astro-status-indicator/StatusIndicator.astro +31 -0
  213. package/dist/astro-status-indicator/index.ts +1 -0
  214. package/dist/astro-steps/Steps.astro +3 -0
  215. package/dist/astro-steps/index.ts +1 -0
  216. package/dist/astro-switch/Switch.astro +89 -0
  217. package/dist/astro-switch/index.ts +1 -0
  218. package/dist/astro-table-of-contents/TableOfContents.astro +53 -0
  219. package/dist/astro-table-of-contents/index.ts +1 -0
  220. package/dist/astro-tabs/Tabs.astro +96 -0
  221. package/dist/astro-tabs/TabsContent.astro +20 -0
  222. package/dist/astro-tabs/TabsList.astro +16 -0
  223. package/dist/astro-tabs/TabsTrigger.astro +24 -0
  224. package/dist/astro-tabs/index.ts +1 -0
  225. package/dist/astro-textarea/Textarea.astro +51 -0
  226. package/dist/astro-textarea/index.ts +1 -0
  227. package/dist/astro-theme/ThemeScript.astro +13 -0
  228. package/dist/astro-theme/ThemeToggle.astro +279 -0
  229. package/dist/astro-theme/index.ts +1 -0
  230. package/dist/astro-thread-view/ThreadView.astro +159 -0
  231. package/dist/astro-thread-view/index.ts +1 -0
  232. package/dist/astro-toast/Toast.astro +49 -0
  233. package/dist/astro-toast/Toaster.astro +142 -0
  234. package/dist/astro-toast/index.ts +1 -0
  235. package/dist/astro-tooltip/Tooltip.astro +95 -0
  236. package/dist/astro-tooltip/TooltipContent.astro +22 -0
  237. package/dist/astro-tooltip/TooltipTrigger.astro +16 -0
  238. package/dist/astro-tooltip/index.ts +1 -0
  239. package/dist/astro-version-selector/VersionSelector.astro +174 -0
  240. package/dist/astro-version-selector/index.ts +1 -0
  241. package/dist/astro-video-player/VideoPlayer.astro +153 -0
  242. package/dist/astro-video-player/index.ts +1 -0
  243. package/dist/auth/adapters/mock.ts +74 -0
  244. package/dist/auth/auth-machine.ts +120 -0
  245. package/dist/auth/index.ts +22 -0
  246. package/dist/auth/rbac.ts +44 -0
  247. package/dist/auth/types.ts +44 -0
  248. package/dist/avatar/avatar.styles.ts +47 -0
  249. package/dist/avatar/avatar.ts +73 -0
  250. package/dist/avatar/index.ts +15 -0
  251. package/dist/avatar-group/avatar-group.styles.ts +63 -0
  252. package/dist/avatar-group/avatar-group.ts +106 -0
  253. package/dist/avatar-group/index.ts +18 -0
  254. package/dist/badge/badge.styles.ts +24 -0
  255. package/dist/badge/badge.ts +48 -0
  256. package/dist/badge/index.ts +10 -0
  257. package/dist/bottom-nav/bottom-nav.styles.ts +18 -0
  258. package/dist/bottom-nav/bottom-nav.ts +33 -0
  259. package/dist/bottom-nav/index.ts +2 -0
  260. package/dist/breadcrumbs/breadcrumbs.styles.ts +20 -0
  261. package/dist/breadcrumbs/breadcrumbs.ts +72 -0
  262. package/dist/breadcrumbs/index.ts +8 -0
  263. package/dist/button/button.styles.ts +38 -0
  264. package/dist/button/button.ts +64 -0
  265. package/dist/button/index.ts +10 -0
  266. package/dist/calendar/calendar.styles.ts +21 -0
  267. package/dist/calendar/calendar.ts +202 -0
  268. package/dist/calendar/index.ts +9 -0
  269. package/dist/callout/callout.ts +1 -0
  270. package/dist/callout/index.ts +1 -0
  271. package/dist/card/card.styles.ts +55 -0
  272. package/dist/card/card.ts +45 -0
  273. package/dist/card/index.ts +20 -0
  274. package/dist/card-grid/card-grid.ts +9 -0
  275. package/dist/card-grid/index.ts +1 -0
  276. package/dist/carousel/index.ts +1 -0
  277. package/dist/charts/axis.ts +50 -0
  278. package/dist/charts/chart.ts +73 -0
  279. package/dist/charts/colorblind.ts +100 -0
  280. package/dist/charts/data.ts +72 -0
  281. package/dist/charts/geometry.ts +54 -0
  282. package/dist/charts/index.ts +61 -0
  283. package/dist/charts/scales.ts +151 -0
  284. package/dist/checkbox/checkbox.styles.ts +33 -0
  285. package/dist/checkbox/checkbox.ts +73 -0
  286. package/dist/checkbox/index.ts +10 -0
  287. package/dist/code-block/code-block.ts +1 -0
  288. package/dist/code-block/index.ts +1 -0
  289. package/dist/code-editor/code-editor.styles.ts +32 -0
  290. package/dist/code-editor/code-editor.ts +140 -0
  291. package/dist/code-editor/index.ts +9 -0
  292. package/dist/collapsible/collapsible.styles.ts +14 -0
  293. package/dist/collapsible/collapsible.ts +93 -0
  294. package/dist/collapsible/index.ts +7 -0
  295. package/dist/command/command.styles.ts +27 -0
  296. package/dist/command/command.ts +179 -0
  297. package/dist/command/index.ts +14 -0
  298. package/dist/command-input/command-input.ts +176 -0
  299. package/dist/command-input/index.ts +1 -0
  300. package/dist/content-protection/content-protection.styles.ts +9 -0
  301. package/dist/content-protection/content-protection.ts +68 -0
  302. package/dist/content-protection/index.ts +8 -0
  303. package/dist/data-table/data-table.styles.ts +55 -0
  304. package/dist/data-table/data-table.ts +183 -0
  305. package/dist/data-table/index.ts +15 -0
  306. package/dist/date-picker/date-picker.styles.ts +31 -0
  307. package/dist/date-picker/date-picker.ts +333 -0
  308. package/dist/date-picker/index.ts +18 -0
  309. package/dist/device-frame/device-frame.styles.ts +21 -0
  310. package/dist/device-frame/device-frame.ts +112 -0
  311. package/dist/device-frame/index.ts +10 -0
  312. package/dist/dialog/dialog.styles.ts +8 -0
  313. package/dist/dialog/dialog.ts +133 -0
  314. package/dist/dialog/index.ts +8 -0
  315. package/dist/diff-viewer/diff-viewer.styles.ts +124 -0
  316. package/dist/diff-viewer/diff-viewer.ts +255 -0
  317. package/dist/diff-viewer/index.ts +20 -0
  318. package/dist/dropdown-menu/dropdown-menu.styles.ts +9 -0
  319. package/dist/dropdown-menu/dropdown-menu.ts +139 -0
  320. package/dist/dropdown-menu/index.ts +9 -0
  321. package/dist/emoji-picker/emoji-data.ts +282 -0
  322. package/dist/emoji-picker/emoji-picker.styles.ts +32 -0
  323. package/dist/emoji-picker/emoji-picker.ts +165 -0
  324. package/dist/emoji-picker/index.ts +25 -0
  325. package/dist/feedback-dialog/feedback-dialog.styles.ts +15 -0
  326. package/dist/feedback-dialog/feedback-dialog.ts +147 -0
  327. package/dist/feedback-dialog/index.ts +11 -0
  328. package/dist/file-upload/file-upload.styles.ts +30 -0
  329. package/dist/file-upload/file-upload.ts +260 -0
  330. package/dist/file-upload/index.ts +19 -0
  331. package/dist/footer/footer.styles.ts +5 -0
  332. package/dist/footer/footer.ts +32 -0
  333. package/dist/footer/index.ts +9 -0
  334. package/dist/index.ts +77 -0
  335. package/dist/inline-editor/index.ts +13 -0
  336. package/dist/inline-editor/inline-editor.styles.ts +42 -0
  337. package/dist/inline-editor/inline-editor.ts +96 -0
  338. package/dist/input/index.ts +9 -0
  339. package/dist/input/input.styles.ts +15 -0
  340. package/dist/input/input.ts +84 -0
  341. package/dist/input-group/index.ts +13 -0
  342. package/dist/input-group/input-group.styles.ts +50 -0
  343. package/dist/input-group/input-group.ts +44 -0
  344. package/dist/install-prompt/index.ts +9 -0
  345. package/dist/install-prompt/install-prompt.styles.ts +5 -0
  346. package/dist/install-prompt/install-prompt.ts +68 -0
  347. package/dist/keyboard-shortcut/index.ts +12 -0
  348. package/dist/keyboard-shortcut/keyboard-shortcut.styles.ts +8 -0
  349. package/dist/keyboard-shortcut/keyboard-shortcut.ts +153 -0
  350. package/dist/language-selector/index.ts +8 -0
  351. package/dist/language-selector/language-selector.styles.ts +28 -0
  352. package/dist/language-selector/language-selector.ts +149 -0
  353. package/dist/link-card/index.ts +1 -0
  354. package/dist/link-card/link-card.ts +9 -0
  355. package/dist/markdown-renderer/index.ts +8 -0
  356. package/dist/markdown-renderer/markdown-renderer.styles.ts +31 -0
  357. package/dist/markdown-renderer/markdown-renderer.ts +251 -0
  358. package/dist/mobile-nav/index.ts +14 -0
  359. package/dist/mobile-nav/mobile-nav.styles.ts +39 -0
  360. package/dist/mobile-nav/mobile-nav.ts +74 -0
  361. package/dist/navbar/index.ts +9 -0
  362. package/dist/navbar/navbar.styles.ts +29 -0
  363. package/dist/navbar/navbar.ts +39 -0
  364. package/dist/otp-input/index.ts +13 -0
  365. package/dist/otp-input/otp-input.styles.ts +51 -0
  366. package/dist/otp-input/otp-input.ts +198 -0
  367. package/dist/pagination/index.ts +1 -0
  368. package/dist/payment/index.ts +1 -0
  369. package/dist/payment/payment.ts +16 -0
  370. package/dist/popover/index.ts +7 -0
  371. package/dist/popover/popover.styles.ts +16 -0
  372. package/dist/popover/popover.ts +89 -0
  373. package/dist/presence-indicator/index.ts +14 -0
  374. package/dist/presence-indicator/presence-indicator.styles.ts +29 -0
  375. package/dist/presence-indicator/presence-indicator.ts +63 -0
  376. package/dist/progress-display/index.ts +15 -0
  377. package/dist/progress-display/progress-display.styles.ts +72 -0
  378. package/dist/progress-display/progress-display.ts +60 -0
  379. package/dist/radio/index.ts +8 -0
  380. package/dist/radio/radio.styles.ts +34 -0
  381. package/dist/radio/radio.ts +70 -0
  382. package/dist/reaction-bar/index.ts +14 -0
  383. package/dist/reaction-bar/reaction-bar.styles.ts +23 -0
  384. package/dist/reaction-bar/reaction-bar.ts +87 -0
  385. package/dist/resizable-layout/index.ts +12 -0
  386. package/dist/resizable-layout/resizable-layout.styles.ts +50 -0
  387. package/dist/resizable-layout/resizable-layout.ts +139 -0
  388. package/dist/rich-editor/editor.ts +342 -0
  389. package/dist/rich-editor/emoji.ts +175 -0
  390. package/dist/rich-editor/history.ts +79 -0
  391. package/dist/rich-editor/index.ts +106 -0
  392. package/dist/rich-editor/markdown-shortcuts.ts +248 -0
  393. package/dist/rich-editor/mentions.ts +162 -0
  394. package/dist/rich-editor/model.ts +206 -0
  395. package/dist/rich-editor/operations.ts +772 -0
  396. package/dist/rich-editor/selection.ts +157 -0
  397. package/dist/rich-editor/serialization.ts +711 -0
  398. package/dist/rich-editor/slash-commands.ts +212 -0
  399. package/dist/search-bar/index.ts +7 -0
  400. package/dist/search-bar/search-bar.styles.ts +29 -0
  401. package/dist/search-bar/search-bar.ts +130 -0
  402. package/dist/select/index.ts +13 -0
  403. package/dist/select/select.styles.ts +52 -0
  404. package/dist/select/select.ts +152 -0
  405. package/dist/shared/a11y.ts +33 -0
  406. package/dist/shared/aria.ts +30 -0
  407. package/dist/shared/cn.ts +35 -0
  408. package/dist/shared/cva.ts +79 -0
  409. package/dist/shared/engine-adapter.ts +10 -0
  410. package/dist/shared/focus-trap.ts +123 -0
  411. package/dist/shared/index.ts +60 -0
  412. package/dist/shared/keyboard.ts +36 -0
  413. package/dist/shared/live-region.ts +90 -0
  414. package/dist/shared/motion.ts +15 -0
  415. package/dist/shared/skip-link.ts +35 -0
  416. package/dist/shared/state-machine.ts +57 -0
  417. package/dist/shared/tokens.ts +16 -0
  418. package/dist/shared/types.ts +45 -0
  419. package/dist/shared/variants.ts +17 -0
  420. package/dist/sidebar/index.ts +9 -0
  421. package/dist/sidebar/sidebar.styles.ts +27 -0
  422. package/dist/sidebar/sidebar.ts +59 -0
  423. package/dist/skeleton/index.ts +8 -0
  424. package/dist/skeleton/skeleton.styles.ts +16 -0
  425. package/dist/skeleton/skeleton.ts +39 -0
  426. package/dist/skip-to-content/index.ts +1 -0
  427. package/dist/skip-to-content/skip-to-content.ts +1 -0
  428. package/dist/slide-viewer/index.ts +16 -0
  429. package/dist/slide-viewer/slide-viewer.styles.ts +57 -0
  430. package/dist/slide-viewer/slide-viewer.ts +152 -0
  431. package/dist/slider/index.ts +1 -0
  432. package/dist/slider/slider.ts +2 -0
  433. package/dist/status-indicator/index.ts +15 -0
  434. package/dist/status-indicator/status-indicator.styles.ts +41 -0
  435. package/dist/status-indicator/status-indicator.ts +66 -0
  436. package/dist/steps/index.ts +1 -0
  437. package/dist/steps/steps.ts +1 -0
  438. package/dist/switch/index.ts +7 -0
  439. package/dist/switch/switch.styles.ts +55 -0
  440. package/dist/switch/switch.ts +63 -0
  441. package/dist/table-of-contents/index.ts +1 -0
  442. package/dist/table-of-contents/table-of-contents.ts +37 -0
  443. package/dist/tabs/index.ts +8 -0
  444. package/dist/tabs/tabs.styles.ts +9 -0
  445. package/dist/tabs/tabs.ts +133 -0
  446. package/dist/textarea/index.ts +7 -0
  447. package/dist/textarea/textarea.styles.ts +15 -0
  448. package/dist/textarea/textarea.ts +59 -0
  449. package/dist/theme/dom-adapters.ts +60 -0
  450. package/dist/theme/index.ts +18 -0
  451. package/dist/theme/theme-machine.ts +130 -0
  452. package/dist/theme/theme-script.ts +18 -0
  453. package/dist/thread-view/index.ts +26 -0
  454. package/dist/thread-view/thread-view.styles.ts +35 -0
  455. package/dist/thread-view/thread-view.ts +176 -0
  456. package/dist/toast/index.ts +13 -0
  457. package/dist/toast/toast.styles.ts +19 -0
  458. package/dist/toast/toast.ts +203 -0
  459. package/dist/tooltip/index.ts +7 -0
  460. package/dist/tooltip/tooltip.styles.ts +16 -0
  461. package/dist/tooltip/tooltip.ts +109 -0
  462. package/dist/version-selector/index.ts +12 -0
  463. package/dist/version-selector/version-selector.styles.ts +41 -0
  464. package/dist/version-selector/version-selector.ts +136 -0
  465. package/dist/video-player/index.ts +12 -0
  466. package/dist/video-player/video-player.styles.ts +42 -0
  467. package/dist/video-player/video-player.ts +100 -0
  468. package/package.json +20 -19
  469. package/src/index.ts +0 -94
@@ -0,0 +1,259 @@
1
+ ---
2
+ import {
3
+ createCalendar,
4
+ calendarVariants,
5
+ dayVariants,
6
+ type CalendarDay,
7
+ } from '../calendar/index.ts'
8
+ import { cn } from '../shared/index.ts'
9
+
10
+ interface Props extends astroHTML.JSX.HTMLAttributes {
11
+ /** Selected date (ISO string or Date-compatible value) */
12
+ value?: string
13
+ /** Minimum selectable date (ISO string) */
14
+ minDate?: string
15
+ /** Maximum selectable date (ISO string) */
16
+ maxDate?: string
17
+ /** Disabled date ISO strings */
18
+ disabledDates?: string[]
19
+ }
20
+
21
+ const { value, minDate, maxDate, disabledDates = [], class: className, ...props } = Astro.props
22
+
23
+ const parsedValue = value ? new Date(value) : undefined
24
+ const parsedMin = minDate ? new Date(minDate) : undefined
25
+ const parsedMax = maxDate ? new Date(maxDate) : undefined
26
+ const parsedDisabled = disabledDates.map((d: string) => new Date(d))
27
+
28
+ const api = createCalendar({
29
+ value: parsedValue,
30
+ month: parsedValue ?? new Date(),
31
+ minDate: parsedMin,
32
+ maxDate: parsedMax,
33
+ disabledDates: parsedDisabled,
34
+ })
35
+
36
+ const MONTH_NAMES = [
37
+ 'January', 'February', 'March', 'April', 'May', 'June',
38
+ 'July', 'August', 'September', 'October', 'November', 'December',
39
+ ]
40
+
41
+ const DAY_HEADERS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']
42
+
43
+ function getDayState(day: CalendarDay): 'selected' | 'today' | 'disabled' | 'outside' | 'default' {
44
+ if (day.isDisabled) return 'disabled'
45
+ if (day.isSelected) return 'selected'
46
+ if (!day.isCurrentMonth) return 'outside'
47
+ if (day.isToday) return 'today'
48
+ return 'default'
49
+ }
50
+
51
+ const monthLabel = `${MONTH_NAMES[api.state.currentMonth.getMonth()]} ${api.state.currentMonth.getFullYear()}`
52
+ const currentYear = api.state.currentMonth.getFullYear()
53
+ const currentMonthIndex = api.state.currentMonth.getMonth()
54
+ ---
55
+
56
+ <div
57
+ data-rfr-calendar
58
+ data-rfr-calendar-year={currentYear}
59
+ data-rfr-calendar-month={currentMonthIndex}
60
+ data-rfr-calendar-selected={value || ''}
61
+ data-rfr-calendar-min={minDate || ''}
62
+ data-rfr-calendar-max={maxDate || ''}
63
+ data-rfr-calendar-disabled-dates={JSON.stringify(disabledDates)}
64
+ class={cn(calendarVariants(), className)}
65
+ role="grid"
66
+ aria-labelledby={api.ids.label}
67
+ {...props}
68
+ >
69
+ <!-- Header: prev, month label, next -->
70
+ <div class="flex items-center justify-between mb-2">
71
+ <button
72
+ type="button"
73
+ aria-label="Previous month"
74
+ data-rfr-calendar-prev
75
+ class="inline-flex items-center justify-center h-7 w-7 rounded-md hover:bg-accent"
76
+ >&lsaquo;</button>
77
+ <div
78
+ id={api.ids.label}
79
+ data-rfr-calendar-label
80
+ class="text-sm font-medium"
81
+ aria-live="polite"
82
+ >{monthLabel}</div>
83
+ <button
84
+ type="button"
85
+ aria-label="Next month"
86
+ data-rfr-calendar-next
87
+ class="inline-flex items-center justify-center h-7 w-7 rounded-md hover:bg-accent"
88
+ >&rsaquo;</button>
89
+ </div>
90
+
91
+ <!-- Day-of-week headers -->
92
+ <div class="grid grid-cols-7 gap-1 mb-1" role="row">
93
+ {DAY_HEADERS.map((d) => (
94
+ <div
95
+ class="text-center text-xs font-medium text-muted-foreground h-9 flex items-center justify-center"
96
+ role="columnheader"
97
+ aria-label={d}
98
+ >{d}</div>
99
+ ))}
100
+ </div>
101
+
102
+ <!-- Day grid -->
103
+ <div class="grid grid-cols-7 gap-1" role="rowgroup" data-rfr-calendar-grid>
104
+ {api.days.map((day) => {
105
+ const state = getDayState(day)
106
+ const ariaProps = api.getDayAriaProps(day)
107
+ return (
108
+ <button
109
+ type="button"
110
+ class={dayVariants({ state })}
111
+ disabled={day.isDisabled}
112
+ data-rfr-calendar-day
113
+ data-date={day.date.toISOString()}
114
+ data-current-month={day.isCurrentMonth ? '' : undefined}
115
+ role={ariaProps.role as string}
116
+ aria-selected={ariaProps['aria-selected'] as boolean}
117
+ aria-disabled={ariaProps['aria-disabled'] as boolean}
118
+ aria-current={ariaProps['aria-current'] as any}
119
+ aria-label={ariaProps['aria-label'] as string}
120
+ >{day.date.getDate()}</button>
121
+ )
122
+ })}
123
+ </div>
124
+ </div>
125
+
126
+ <script>
127
+ const MONTH_NAMES = [
128
+ 'January', 'February', 'March', 'April', 'May', 'June',
129
+ 'July', 'August', 'September', 'October', 'November', 'December',
130
+ ]
131
+ const DAY_NAMES = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
132
+ const DAY_VARIANT_DEFAULT = 'inline-flex items-center justify-center rounded-md text-sm h-9 w-9 hover:bg-accent hover:text-accent-foreground'
133
+ const DAY_VARIANT_SELECTED = 'inline-flex items-center justify-center rounded-md text-sm h-9 w-9 bg-primary text-primary-foreground hover:bg-primary/90'
134
+ const DAY_VARIANT_TODAY = 'inline-flex items-center justify-center rounded-md text-sm h-9 w-9 bg-accent text-accent-foreground'
135
+ const DAY_VARIANT_DISABLED = 'inline-flex items-center justify-center rounded-md text-sm h-9 w-9 text-muted-foreground opacity-50 cursor-not-allowed'
136
+ const DAY_VARIANT_OUTSIDE = 'inline-flex items-center justify-center rounded-md text-sm h-9 w-9 text-muted-foreground opacity-50'
137
+
138
+ function isSameDay(a: Date, b: Date): boolean {
139
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()
140
+ }
141
+
142
+ function isDateDisabled(date: Date, minDate: Date | null, maxDate: Date | null, disabledDates: Date[]): boolean {
143
+ if (minDate) {
144
+ const startOfMin = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate())
145
+ if (date < startOfMin) return true
146
+ }
147
+ if (maxDate) {
148
+ const endOfMax = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999)
149
+ if (date > endOfMax) return true
150
+ }
151
+ return disabledDates.some((d) => isSameDay(d, date))
152
+ }
153
+
154
+ function renderGrid(root: HTMLElement) {
155
+ const year = parseInt(root.getAttribute('data-rfr-calendar-year') || '0', 10)
156
+ const month = parseInt(root.getAttribute('data-rfr-calendar-month') || '0', 10)
157
+ const selectedStr = root.getAttribute('data-rfr-calendar-selected') || ''
158
+ const minStr = root.getAttribute('data-rfr-calendar-min') || ''
159
+ const maxStr = root.getAttribute('data-rfr-calendar-max') || ''
160
+ const disabledStr = root.getAttribute('data-rfr-calendar-disabled-dates') || '[]'
161
+
162
+ const selectedDate = selectedStr ? new Date(selectedStr) : null
163
+ const minDate = minStr ? new Date(minStr) : null
164
+ const maxDate = maxStr ? new Date(maxStr) : null
165
+ let disabledDates: Date[] = []
166
+ try { disabledDates = JSON.parse(disabledStr).map((s: string) => new Date(s)) } catch {}
167
+
168
+ const today = new Date()
169
+
170
+ // Update label
171
+ const label = root.querySelector<HTMLElement>('[data-rfr-calendar-label]')
172
+ if (label) label.textContent = `${MONTH_NAMES[month]} ${year}`
173
+
174
+ // Build 42-cell grid
175
+ const first = new Date(year, month, 1)
176
+ const startDow = first.getDay()
177
+ const gridStart = new Date(year, month, 1 - startDow)
178
+
179
+ const grid = root.querySelector<HTMLElement>('[data-rfr-calendar-grid]')
180
+ if (!grid) return
181
+
182
+ grid.innerHTML = ''
183
+
184
+ for (let i = 0; i < 42; i++) {
185
+ const date = new Date(gridStart.getFullYear(), gridStart.getMonth(), gridStart.getDate() + i)
186
+ const isToday = isSameDay(date, today)
187
+ const isSelected = selectedDate ? isSameDay(date, selectedDate) : false
188
+ const isCurrentMonth = date.getMonth() === month
189
+ const isDisabled = isDateDisabled(date, minDate, maxDate, disabledDates)
190
+
191
+ let variant = DAY_VARIANT_DEFAULT
192
+ if (isDisabled) variant = DAY_VARIANT_DISABLED
193
+ else if (isSelected) variant = DAY_VARIANT_SELECTED
194
+ else if (!isCurrentMonth) variant = DAY_VARIANT_OUTSIDE
195
+ else if (isToday) variant = DAY_VARIANT_TODAY
196
+
197
+ const btn = document.createElement('button')
198
+ btn.type = 'button'
199
+ btn.className = variant
200
+ btn.disabled = isDisabled
201
+ btn.setAttribute('data-rfr-calendar-day', '')
202
+ btn.setAttribute('data-date', date.toISOString())
203
+ btn.setAttribute('role', 'gridcell')
204
+ btn.setAttribute('aria-selected', String(isSelected))
205
+ btn.setAttribute('aria-disabled', String(isDisabled))
206
+ if (isToday) btn.setAttribute('aria-current', 'date')
207
+ btn.setAttribute('aria-label', `${DAY_NAMES[date.getDay()]}, ${date.toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' })}`)
208
+ if (isCurrentMonth) btn.setAttribute('data-current-month', '')
209
+ btn.textContent = String(date.getDate())
210
+ grid.appendChild(btn)
211
+ }
212
+ }
213
+
214
+ function initCalendars() {
215
+ document.querySelectorAll<HTMLElement>('[data-rfr-calendar]').forEach((root) => {
216
+ if (root.hasAttribute('data-rfr-calendar-init')) return
217
+ root.setAttribute('data-rfr-calendar-init', '')
218
+
219
+ // Prev month
220
+ root.querySelector('[data-rfr-calendar-prev]')?.addEventListener('click', () => {
221
+ const year = parseInt(root.getAttribute('data-rfr-calendar-year') || '0', 10)
222
+ const month = parseInt(root.getAttribute('data-rfr-calendar-month') || '0', 10)
223
+ const prev = new Date(year, month - 1, 1)
224
+ root.setAttribute('data-rfr-calendar-year', String(prev.getFullYear()))
225
+ root.setAttribute('data-rfr-calendar-month', String(prev.getMonth()))
226
+ renderGrid(root)
227
+ })
228
+
229
+ // Next month
230
+ root.querySelector('[data-rfr-calendar-next]')?.addEventListener('click', () => {
231
+ const year = parseInt(root.getAttribute('data-rfr-calendar-year') || '0', 10)
232
+ const month = parseInt(root.getAttribute('data-rfr-calendar-month') || '0', 10)
233
+ const next = new Date(year, month + 1, 1)
234
+ root.setAttribute('data-rfr-calendar-year', String(next.getFullYear()))
235
+ root.setAttribute('data-rfr-calendar-month', String(next.getMonth()))
236
+ renderGrid(root)
237
+ })
238
+
239
+ // Day click (delegated)
240
+ root.querySelector('[data-rfr-calendar-grid]')?.addEventListener('click', (e) => {
241
+ const btn = (e.target as HTMLElement).closest<HTMLButtonElement>('[data-rfr-calendar-day]')
242
+ if (!btn || btn.disabled) return
243
+ const dateStr = btn.getAttribute('data-date')
244
+ if (!dateStr) return
245
+
246
+ root.setAttribute('data-rfr-calendar-selected', dateStr)
247
+ renderGrid(root)
248
+
249
+ root.dispatchEvent(new CustomEvent('rfr-calendar-select', {
250
+ detail: { date: new Date(dateStr), iso: dateStr },
251
+ bubbles: true,
252
+ }))
253
+ })
254
+ })
255
+ }
256
+
257
+ initCalendars()
258
+ document.addEventListener('astro:after-swap', initCalendars)
259
+ </script>
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,3 @@
1
+ ---
2
+ ---
3
+ <div></div>
@@ -0,0 +1 @@
1
+ export { default as Callout } from './Callout.astro';
@@ -0,0 +1,20 @@
1
+ ---
2
+ import { createCard, cardVariants } from '../card/index.ts'
3
+ import { cn } from '../shared/index.ts'
4
+
5
+ interface Props extends astroHTML.JSX.HTMLAttributes {
6
+ padding?: 'none' | 'default' | 'compact'
7
+ }
8
+
9
+ const { padding, class: className, ...props } = Astro.props
10
+ const api = createCard(props)
11
+ ---
12
+
13
+ <div
14
+ class={cn(cardVariants({ padding }), className)}
15
+ {...api.ariaProps}
16
+ {...api.dataAttributes}
17
+ {...props}
18
+ >
19
+ <slot />
20
+ </div>
@@ -0,0 +1,13 @@
1
+ ---
2
+ import { createCardContent, cardContentVariants } from '../card/index.ts'
3
+ import { cn } from '../shared/index.ts'
4
+
5
+ interface Props extends astroHTML.JSX.HTMLAttributes {}
6
+
7
+ const { class: className, ...props } = Astro.props
8
+ const api = createCardContent()
9
+ ---
10
+
11
+ <div class={cn(cardContentVariants(), className)} {...api.dataAttributes} {...props}>
12
+ <slot />
13
+ </div>
@@ -0,0 +1,13 @@
1
+ ---
2
+ import { createCardDescription, cardDescriptionVariants } from '../card/index.ts'
3
+ import { cn } from '../shared/index.ts'
4
+
5
+ interface Props extends astroHTML.JSX.HTMLAttributes {}
6
+
7
+ const { class: className, ...props } = Astro.props
8
+ const api = createCardDescription()
9
+ ---
10
+
11
+ <p class={cn(cardDescriptionVariants(), className)} {...api.dataAttributes} {...props}>
12
+ <slot />
13
+ </p>
@@ -0,0 +1,13 @@
1
+ ---
2
+ import { createCardFooter, cardFooterVariants } from '../card/index.ts'
3
+ import { cn } from '../shared/index.ts'
4
+
5
+ interface Props extends astroHTML.JSX.HTMLAttributes {}
6
+
7
+ const { class: className, ...props } = Astro.props
8
+ const api = createCardFooter()
9
+ ---
10
+
11
+ <div class={cn(cardFooterVariants(), className)} {...api.dataAttributes} {...props}>
12
+ <slot />
13
+ </div>
@@ -0,0 +1,13 @@
1
+ ---
2
+ import { createCardHeader, cardHeaderVariants } from '../card/index.ts'
3
+ import { cn } from '../shared/index.ts'
4
+
5
+ interface Props extends astroHTML.JSX.HTMLAttributes {}
6
+
7
+ const { class: className, ...props } = Astro.props
8
+ const api = createCardHeader()
9
+ ---
10
+
11
+ <div class={cn(cardHeaderVariants(), className)} {...api.dataAttributes} {...props}>
12
+ <slot />
13
+ </div>
@@ -0,0 +1,15 @@
1
+ ---
2
+ import { createCardTitle, cardTitleVariants } from '../card/index.ts'
3
+ import { cn } from '../shared/index.ts'
4
+
5
+ interface Props extends astroHTML.JSX.HTMLAttributes {
6
+ size?: 'sm' | 'default' | 'lg'
7
+ }
8
+
9
+ const { size, class: className, ...props } = Astro.props
10
+ const api = createCardTitle()
11
+ ---
12
+
13
+ <h3 class={cn(cardTitleVariants({ size }), className)} {...api.dataAttributes} {...props}>
14
+ <slot />
15
+ </h3>
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,17 @@
1
+ ---
2
+ import { createCardGrid } from '../card-grid/index.ts'
3
+ import { cn } from '../shared/index.ts'
4
+
5
+ interface Props extends astroHTML.JSX.HTMLAttributes {}
6
+
7
+ const { class: className, ...props } = Astro.props
8
+ const api = createCardGrid(props as any)
9
+ ---
10
+
11
+ <div
12
+ class={cn(className)}
13
+ {...api.dataAttributes}
14
+ {...props}
15
+ >
16
+ <slot />
17
+ </div>
@@ -0,0 +1 @@
1
+ export { default as CardGrid } from './CardGrid.astro'
@@ -0,0 +1,55 @@
1
+ ---
2
+ import {
3
+ createButton,
4
+ buttonVariants,
5
+ getButtonType,
6
+ type ButtonVariant,
7
+ type ButtonSize,
8
+ } from '../button/index.ts'
9
+ import { cn } from '../shared/index.ts'
10
+
11
+ interface Props extends astroHTML.JSX.HTMLAttributes {
12
+ variant?: ButtonVariant
13
+ size?: ButtonSize
14
+ loading?: boolean
15
+ disabled?: boolean
16
+ }
17
+
18
+ const { variant, size, loading, disabled, class: className, ...props } = Astro.props
19
+ const api = createButton({ variant, size, disabled, loading, type: props.type as string })
20
+ const classes = cn(buttonVariants({ variant, size }), className)
21
+ ---
22
+
23
+ <button
24
+ type={getButtonType({ type: props.type as string }) as any}
25
+ class={classes}
26
+ disabled={disabled || loading}
27
+ {...api.ariaProps}
28
+ {...api.dataAttributes}
29
+ {...props}
30
+ >
31
+ {loading && (
32
+ <svg
33
+ class="animate-spin h-4 w-4"
34
+ xmlns="http://www.w3.org/2000/svg"
35
+ fill="none"
36
+ viewBox="0 0 24 24"
37
+ aria-hidden="true"
38
+ >
39
+ <circle
40
+ class="opacity-25"
41
+ cx="12"
42
+ cy="12"
43
+ r="10"
44
+ stroke="currentColor"
45
+ stroke-width="4"
46
+ />
47
+ <path
48
+ class="opacity-75"
49
+ fill="currentColor"
50
+ d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
51
+ />
52
+ </svg>
53
+ )}
54
+ <slot />
55
+ </button>
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,53 @@
1
+ ---
2
+ /**
3
+ * Bars — bar chart rectangles, server-rendered as SVG <rect> elements.
4
+ * Accepts pre-computed labels and values arrays.
5
+ */
6
+ import { createBandScale, createLinearScale, computeExtent } from '../charts/index.ts'
7
+
8
+ interface Props {
9
+ /** Category labels for each bar */
10
+ labels: string[]
11
+ /** Numeric values for each bar */
12
+ values: number[]
13
+ /** Bounded width of the chart area */
14
+ boundedWidth: number
15
+ /** Bounded height of the chart area */
16
+ boundedHeight: number
17
+ /** Fill color (default 'currentColor') */
18
+ fill?: string
19
+ /** Band padding ratio (default 0.1) */
20
+ padding?: number
21
+ }
22
+
23
+ const {
24
+ labels,
25
+ values,
26
+ boundedWidth,
27
+ boundedHeight,
28
+ fill = 'currentColor',
29
+ padding = 0.1,
30
+ } = Astro.props
31
+
32
+ const [, maxVal] = computeExtent(values)
33
+ const xScale = createBandScale(labels, [0, boundedWidth], padding)
34
+ const yScale = createLinearScale([0, maxVal], [boundedHeight, 0])
35
+ ---
36
+
37
+ <g data-rfr-chart-bars>
38
+ {labels.map((label, i) => {
39
+ const barX = xScale(label)
40
+ const barY = yScale(values[i])
41
+ const barHeight = boundedHeight - barY
42
+ const barWidth = xScale.bandwidth()
43
+ return (
44
+ <rect
45
+ x={barX}
46
+ y={barY}
47
+ width={barWidth}
48
+ height={barHeight}
49
+ fill={fill}
50
+ />
51
+ )
52
+ })}
53
+ </g>
@@ -0,0 +1,31 @@
1
+ ---
2
+ /**
3
+ * Chart — root SVG container for chart compositions.
4
+ * Provides chart dimensions via data attributes for sub-components.
5
+ */
6
+ import { combineDimensions, type Margin } from '../charts/index.ts'
7
+
8
+ interface Props extends astroHTML.JSX.HTMLAttributes {
9
+ width?: number
10
+ height?: number
11
+ margin?: Partial<Margin>
12
+ }
13
+
14
+ const { width = 600, height = 400, margin, class: className, ...props } = Astro.props
15
+
16
+ const dimensions = combineDimensions({ width, height, margin })
17
+ const dimensionsJSON = JSON.stringify(dimensions)
18
+ ---
19
+
20
+ <svg
21
+ width={width}
22
+ height={height}
23
+ class={className}
24
+ data-rfr-chart
25
+ data-rfr-chart-dimensions={dimensionsJSON}
26
+ {...props}
27
+ >
28
+ <g transform={`translate(${dimensions.margin.left},${dimensions.margin.top})`}>
29
+ <slot />
30
+ </g>
31
+ </svg>
@@ -0,0 +1,48 @@
1
+ ---
2
+ /**
3
+ * Circles — circle markers for scatter/bubble chart overlays.
4
+ * Accepts pre-computed x/y value arrays.
5
+ */
6
+ import { createLinearScale, computeExtent } from '../charts/index.ts'
7
+
8
+ interface Props {
9
+ /** X values for each data point */
10
+ xValues: number[]
11
+ /** Y values for each data point */
12
+ yValues: number[]
13
+ /** Bounded width of the chart area */
14
+ boundedWidth: number
15
+ /** Bounded height of the chart area */
16
+ boundedHeight: number
17
+ /** Circle radius (default 4) */
18
+ r?: number
19
+ /** Fill color (default 'currentColor') */
20
+ fill?: string
21
+ }
22
+
23
+ const {
24
+ xValues,
25
+ yValues,
26
+ boundedWidth,
27
+ boundedHeight,
28
+ r = 4,
29
+ fill = 'currentColor',
30
+ } = Astro.props
31
+
32
+ const [xMin, xMax] = computeExtent(xValues)
33
+ const [yMin, yMax] = computeExtent(yValues)
34
+
35
+ const xScale = createLinearScale([xMin, xMax], [0, boundedWidth])
36
+ const yScale = createLinearScale([yMin, yMax], [boundedHeight, 0])
37
+ ---
38
+
39
+ <g data-rfr-chart-circles>
40
+ {xValues.map((xv, i) => (
41
+ <circle
42
+ cx={xScale(xv)}
43
+ cy={yScale(yValues[i])}
44
+ r={r}
45
+ fill={fill}
46
+ />
47
+ ))}
48
+ </g>
@@ -0,0 +1,34 @@
1
+ ---
2
+ /**
3
+ * Gradient — SVG linear gradient definition.
4
+ * Use inside a Chart or any SVG element; reference via `url(#id)` in fill/stroke.
5
+ */
6
+
7
+ interface Props {
8
+ /** Gradient ID for referencing */
9
+ id: string
10
+ /** Start color */
11
+ from: string
12
+ /** End color */
13
+ to: string
14
+ /** Direction (default 'vertical') */
15
+ direction?: 'vertical' | 'horizontal'
16
+ }
17
+
18
+ const { id, from, to, direction = 'vertical' } = Astro.props
19
+
20
+ const isVertical = direction === 'vertical'
21
+ ---
22
+
23
+ <defs>
24
+ <linearGradient
25
+ id={id}
26
+ x1="0"
27
+ y1="0"
28
+ x2={isVertical ? '0' : '1'}
29
+ y2={isVertical ? '1' : '0'}
30
+ >
31
+ <stop offset="0%" stop-color={from} />
32
+ <stop offset="100%" stop-color={to} />
33
+ </linearGradient>
34
+ </defs>