@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,20 @@
1
+ export {
2
+ createCard,
3
+ createCardHeader,
4
+ createCardTitle,
5
+ createCardDescription,
6
+ createCardContent,
7
+ createCardFooter,
8
+ type CardProps,
9
+ type CardAPI,
10
+ } from './card.js'
11
+
12
+ export {
13
+ cardVariants,
14
+ cardHeaderVariants,
15
+ cardTitleVariants,
16
+ cardDescriptionVariants,
17
+ cardContentVariants,
18
+ cardFooterVariants,
19
+ cardTokens,
20
+ } from './card.styles.js'
@@ -0,0 +1,9 @@
1
+ export interface CardGridProps {
2
+ columns?: number
3
+ }
4
+
5
+ export function createCardGrid(_props: CardGridProps = {}) {
6
+ return {
7
+ dataAttributes: { 'data-slot': 'card-grid' }
8
+ }
9
+ }
@@ -0,0 +1 @@
1
+ export * from './card-grid.js'
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,50 @@
1
+ import type { LinearScale, BandScale, TimeScale } from './scales.js'
2
+
3
+ type AnyScale = LinearScale | BandScale | TimeScale
4
+
5
+ export function generateTicks(
6
+ scale: AnyScale,
7
+ count?: number,
8
+ ): (number | string | Date)[] {
9
+ if (scale.type === 'band') {
10
+ return scale.domain
11
+ }
12
+ if (scale.type === 'time') {
13
+ return scale.ticks(count)
14
+ }
15
+ // linear
16
+ return scale.ticks(count)
17
+ }
18
+
19
+ export function formatTick(
20
+ value: number | string | Date,
21
+ type: 'number' | 'date' | 'string',
22
+ ): string {
23
+ if (type === 'string') {
24
+ return String(value)
25
+ }
26
+
27
+ if (type === 'date') {
28
+ if (value instanceof Date) {
29
+ return value.toISOString().split('T')[0]
30
+ }
31
+ return String(value)
32
+ }
33
+
34
+ // type === 'number'
35
+ const num = value as number
36
+ if (!Number.isFinite(num)) return String(num)
37
+
38
+ // Check if integer
39
+ if (Number.isInteger(num)) {
40
+ // Format with locale separators for large numbers
41
+ return num.toLocaleString('en-US', { maximumFractionDigits: 0 })
42
+ }
43
+
44
+ // Decimal: show up to 2 decimal places, strip trailing zeros
45
+ const formatted = num.toLocaleString('en-US', {
46
+ minimumFractionDigits: 0,
47
+ maximumFractionDigits: 2,
48
+ })
49
+ return formatted
50
+ }
@@ -0,0 +1,73 @@
1
+ export interface Margin {
2
+ top: number
3
+ right: number
4
+ bottom: number
5
+ left: number
6
+ }
7
+
8
+ export interface Dimensions {
9
+ width: number
10
+ height: number
11
+ margin: Margin
12
+ boundedWidth: number
13
+ boundedHeight: number
14
+ }
15
+
16
+ export interface ChartConfig {
17
+ width?: number
18
+ height?: number
19
+ margin?: Partial<Margin>
20
+ data?: unknown[]
21
+ }
22
+
23
+ export interface ChartAPI {
24
+ dimensions: Dimensions
25
+ scales: Record<string, unknown>
26
+ updateDimensions: (partial: Partial<ChartConfig>) => void
27
+ }
28
+
29
+ const DEFAULT_MARGIN: Margin = {
30
+ top: 40,
31
+ right: 30,
32
+ bottom: 40,
33
+ left: 75,
34
+ }
35
+
36
+ const DEFAULT_WIDTH = 600
37
+ const DEFAULT_HEIGHT = 400
38
+
39
+ export function combineDimensions(partial: Partial<ChartConfig>): Dimensions {
40
+ const width = partial.width ?? DEFAULT_WIDTH
41
+ const height = partial.height ?? DEFAULT_HEIGHT
42
+ const margin: Margin = {
43
+ ...DEFAULT_MARGIN,
44
+ ...(partial.margin ?? {}),
45
+ }
46
+ const boundedWidth = Math.max(0, width - margin.left - margin.right)
47
+ const boundedHeight = Math.max(0, height - margin.top - margin.bottom)
48
+
49
+ return { width, height, margin, boundedWidth, boundedHeight }
50
+ }
51
+
52
+ export function createChart(config: ChartConfig): ChartAPI {
53
+ let dimensions = combineDimensions(config)
54
+ const scales: Record<string, unknown> = {}
55
+
56
+ return {
57
+ get dimensions() {
58
+ return dimensions
59
+ },
60
+ scales,
61
+ updateDimensions(partial: Partial<ChartConfig>) {
62
+ const merged: Partial<ChartConfig> = {
63
+ width: partial.width ?? dimensions.width,
64
+ height: partial.height ?? dimensions.height,
65
+ margin: {
66
+ ...dimensions.margin,
67
+ ...(partial.margin ?? {}),
68
+ },
69
+ }
70
+ dimensions = combineDimensions(merged)
71
+ },
72
+ }
73
+ }
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Colorblind-safe color palettes for charts.
3
+ * Based on Wong (2011) "Points of view: Color blindness" — Nature Methods.
4
+ * These 8 colors are distinguishable by people with all types of color vision deficiency.
5
+ */
6
+ export const COLORBLIND_SAFE_PALETTE = [
7
+ '#0072B2', // blue
8
+ '#E69F00', // orange
9
+ '#009E73', // green (blue-tinted, safe for protanopia/deuteranopia)
10
+ '#F0E442', // yellow
11
+ '#56B4E9', // sky blue
12
+ '#D55E00', // vermillion (not red — distinguishable from green)
13
+ '#CC79A7', // pink
14
+ '#000000', // black
15
+ ] as const
16
+
17
+ /** Convert hex to HSL string for CSS variables */
18
+ export function hexToHSL(hex: string): string {
19
+ // Remove # prefix
20
+ const h = hex.replace(/^#/, '')
21
+
22
+ const r = parseInt(h.substring(0, 2), 16) / 255
23
+ const g = parseInt(h.substring(2, 4), 16) / 255
24
+ const b = parseInt(h.substring(4, 6), 16) / 255
25
+
26
+ const max = Math.max(r, g, b)
27
+ const min = Math.min(r, g, b)
28
+ const l = (max + min) / 2
29
+
30
+ if (max === min) {
31
+ // Achromatic
32
+ return `0 0% ${Math.round(l * 100)}%`
33
+ }
34
+
35
+ const d = max - min
36
+ const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)
37
+
38
+ let hue: number
39
+ if (max === r) {
40
+ hue = ((g - b) / d + (g < b ? 6 : 0)) / 6
41
+ } else if (max === g) {
42
+ hue = ((b - r) / d + 2) / 6
43
+ } else {
44
+ hue = ((r - g) / d + 4) / 6
45
+ }
46
+
47
+ return `${Math.round(hue * 360)} ${Math.round(s * 100)}% ${Math.round(l * 100)}%`
48
+ }
49
+
50
+ /** Get a colorblind-safe color by index (wraps around) */
51
+ export function getChartColor(index: number): string {
52
+ return COLORBLIND_SAFE_PALETTE[index % COLORBLIND_SAFE_PALETTE.length]
53
+ }
54
+
55
+ /**
56
+ * Pattern fills for charts — when color alone isn't enough.
57
+ * Returns SVG pattern definitions that can be used as fill.
58
+ */
59
+ export type PatternType = 'solid' | 'diagonal' | 'dots' | 'crosshatch' | 'horizontal' | 'vertical' | 'zigzag' | 'checker'
60
+
61
+ export function getPatternDef(type: PatternType, color: string, id: string): string {
62
+ const size = 8
63
+
64
+ switch (type) {
65
+ case 'solid':
66
+ return `<pattern id="${id}" width="${size}" height="${size}" patternUnits="userSpaceOnUse"><rect width="${size}" height="${size}" fill="${color}"/></pattern>`
67
+
68
+ case 'diagonal':
69
+ return `<pattern id="${id}" width="${size}" height="${size}" patternUnits="userSpaceOnUse"><rect width="${size}" height="${size}" fill="${color}" opacity="0.3"/><line x1="0" y1="${size}" x2="${size}" y2="0" stroke="${color}" stroke-width="1.5"/></pattern>`
70
+
71
+ case 'dots':
72
+ return `<pattern id="${id}" width="${size}" height="${size}" patternUnits="userSpaceOnUse"><rect width="${size}" height="${size}" fill="${color}" opacity="0.3"/><circle cx="${size / 2}" cy="${size / 2}" r="1.5" fill="${color}"/></pattern>`
73
+
74
+ case 'crosshatch':
75
+ return `<pattern id="${id}" width="${size}" height="${size}" patternUnits="userSpaceOnUse"><rect width="${size}" height="${size}" fill="${color}" opacity="0.3"/><line x1="0" y1="0" x2="${size}" y2="${size}" stroke="${color}" stroke-width="1"/><line x1="${size}" y1="0" x2="0" y2="${size}" stroke="${color}" stroke-width="1"/></pattern>`
76
+
77
+ case 'horizontal':
78
+ return `<pattern id="${id}" width="${size}" height="${size}" patternUnits="userSpaceOnUse"><rect width="${size}" height="${size}" fill="${color}" opacity="0.3"/><line x1="0" y1="${size / 2}" x2="${size}" y2="${size / 2}" stroke="${color}" stroke-width="1.5"/></pattern>`
79
+
80
+ case 'vertical':
81
+ return `<pattern id="${id}" width="${size}" height="${size}" patternUnits="userSpaceOnUse"><rect width="${size}" height="${size}" fill="${color}" opacity="0.3"/><line x1="${size / 2}" y1="0" x2="${size / 2}" y2="${size}" stroke="${color}" stroke-width="1.5"/></pattern>`
82
+
83
+ case 'zigzag':
84
+ return `<pattern id="${id}" width="${size}" height="${size}" patternUnits="userSpaceOnUse"><rect width="${size}" height="${size}" fill="${color}" opacity="0.3"/><polyline points="0,${size} ${size / 2},0 ${size},${size}" fill="none" stroke="${color}" stroke-width="1.5"/></pattern>`
85
+
86
+ case 'checker':
87
+ return `<pattern id="${id}" width="${size}" height="${size}" patternUnits="userSpaceOnUse"><rect width="${size}" height="${size}" fill="${color}" opacity="0.3"/><rect width="${size / 2}" height="${size / 2}" fill="${color}"/><rect x="${size / 2}" y="${size / 2}" width="${size / 2}" height="${size / 2}" fill="${color}"/></pattern>`
88
+ }
89
+ }
90
+
91
+ export const PATTERNS: PatternType[] = [
92
+ 'solid',
93
+ 'diagonal',
94
+ 'dots',
95
+ 'crosshatch',
96
+ 'horizontal',
97
+ 'vertical',
98
+ 'zigzag',
99
+ 'checker',
100
+ ]
@@ -0,0 +1,72 @@
1
+ export interface HistogramBin {
2
+ x0: number
3
+ x1: number
4
+ count: number
5
+ }
6
+
7
+ export function computeExtent(data: number[]): [number, number] {
8
+ let min = data[0]
9
+ let max = data[0]
10
+ for (let i = 1; i < data.length; i++) {
11
+ if (data[i] < min) min = data[i]
12
+ if (data[i] > max) max = data[i]
13
+ }
14
+ return [min, max]
15
+ }
16
+
17
+ export function computeMean(data: number[]): number {
18
+ let sum = 0
19
+ for (let i = 0; i < data.length; i++) {
20
+ sum += data[i]
21
+ }
22
+ return sum / data.length
23
+ }
24
+
25
+ export function computeHistogramBins(
26
+ data: number[],
27
+ binCount?: number,
28
+ ): HistogramBin[] {
29
+ const count = binCount ?? Math.ceil(Math.sqrt(data.length))
30
+ const [min, max] = computeExtent(data)
31
+ const span = max - min
32
+
33
+ // Handle case where all values are the same
34
+ if (span === 0) {
35
+ const bins: HistogramBin[] = []
36
+ for (let i = 0; i < count; i++) {
37
+ bins.push({ x0: min, x1: max, count: 0 })
38
+ }
39
+ // Put all items in the first bin
40
+ bins[0].count = data.length
41
+ return bins
42
+ }
43
+
44
+ const binWidth = span / count
45
+ const bins: HistogramBin[] = []
46
+ for (let i = 0; i < count; i++) {
47
+ bins.push({
48
+ x0: min + i * binWidth,
49
+ x1: min + (i + 1) * binWidth,
50
+ count: 0,
51
+ })
52
+ }
53
+
54
+ for (const value of data) {
55
+ let idx = Math.floor((value - min) / binWidth)
56
+ // Values at the max boundary go into the last bin
57
+ if (idx >= count) idx = count - 1
58
+ bins[idx].count++
59
+ }
60
+
61
+ return bins
62
+ }
63
+
64
+ export function normalizeData<T>(
65
+ data: T[],
66
+ accessor: string | ((d: T) => unknown),
67
+ ): unknown[] {
68
+ if (typeof accessor === 'string') {
69
+ return data.map((d) => (d as Record<string, unknown>)[accessor])
70
+ }
71
+ return data.map(accessor)
72
+ }
@@ -0,0 +1,54 @@
1
+ export interface Point {
2
+ x: number
3
+ y: number
4
+ }
5
+
6
+ export function linePath(points: Point[]): string {
7
+ if (points.length === 0) return ''
8
+ let d = `M${points[0].x},${points[0].y}`
9
+ for (let i = 1; i < points.length; i++) {
10
+ d += `L${points[i].x},${points[i].y}`
11
+ }
12
+ return d
13
+ }
14
+
15
+ export function areaPath(points: Point[], baseline: number): string {
16
+ if (points.length === 0) return ''
17
+ // Forward path along points
18
+ let d = `M${points[0].x},${points[0].y}`
19
+ for (let i = 1; i < points.length; i++) {
20
+ d += `L${points[i].x},${points[i].y}`
21
+ }
22
+ // Drop down to baseline, go back to start, close
23
+ const last = points[points.length - 1]
24
+ const first = points[0]
25
+ d += `L${last.x},${baseline}`
26
+ d += `L${first.x},${baseline}`
27
+ d += 'Z'
28
+ return d
29
+ }
30
+
31
+ export function arcPath(
32
+ cx: number,
33
+ cy: number,
34
+ radius: number,
35
+ startAngle: number,
36
+ endAngle: number,
37
+ ): string {
38
+ const x1 = cx + radius * Math.cos(startAngle)
39
+ const y1 = cy + radius * Math.sin(startAngle)
40
+ const x2 = cx + radius * Math.cos(endAngle)
41
+ const y2 = cy + radius * Math.sin(endAngle)
42
+
43
+ const largeArcFlag = endAngle - startAngle > Math.PI ? 1 : 0
44
+
45
+ // Round to avoid floating point noise in path string
46
+ const r = (n: number) => Math.round(n * 1e6) / 1e6
47
+
48
+ let d = `M${r(x1)},${r(y1)}`
49
+ d += `A${radius},${radius} 0 ${largeArcFlag} 1 ${r(x2)},${r(y2)}`
50
+ d += `L${cx},${cy}`
51
+ d += 'Z'
52
+
53
+ return d
54
+ }
@@ -0,0 +1,61 @@
1
+ // Scales
2
+ export {
3
+ createLinearScale,
4
+ createBandScale,
5
+ createTimeScale,
6
+ } from './scales.js'
7
+
8
+ export type {
9
+ LinearScale,
10
+ BandScale,
11
+ TimeScale,
12
+ } from './scales.js'
13
+
14
+ // Data utilities
15
+ export {
16
+ computeExtent,
17
+ computeMean,
18
+ computeHistogramBins,
19
+ normalizeData,
20
+ } from './data.js'
21
+
22
+ export type { HistogramBin } from './data.js'
23
+
24
+ // Geometry
25
+ export {
26
+ linePath,
27
+ areaPath,
28
+ arcPath,
29
+ } from './geometry.js'
30
+
31
+ export type { Point } from './geometry.js'
32
+
33
+ // Chart
34
+ export {
35
+ createChart,
36
+ combineDimensions,
37
+ } from './chart.js'
38
+
39
+ export type {
40
+ ChartConfig,
41
+ ChartAPI,
42
+ Dimensions,
43
+ Margin,
44
+ } from './chart.js'
45
+
46
+ // Axis
47
+ export {
48
+ generateTicks,
49
+ formatTick,
50
+ } from './axis.js'
51
+
52
+ // Colorblind-safe palette & patterns
53
+ export {
54
+ COLORBLIND_SAFE_PALETTE,
55
+ hexToHSL,
56
+ getChartColor,
57
+ getPatternDef,
58
+ PATTERNS,
59
+ } from './colorblind.js'
60
+
61
+ export type { PatternType } from './colorblind.js'
@@ -0,0 +1,151 @@
1
+ // --- Linear Scale ---
2
+
3
+ export interface LinearScale {
4
+ (value: number): number
5
+ invert: (value: number) => number
6
+ ticks: (count?: number) => number[]
7
+ type: 'linear'
8
+ domain: [number, number]
9
+ range: [number, number]
10
+ }
11
+
12
+ export function createLinearScale(
13
+ domain: [number, number],
14
+ range: [number, number],
15
+ ): LinearScale {
16
+ const [d0, d1] = domain
17
+ const [r0, r1] = range
18
+ const domainSpan = d1 - d0
19
+ const rangeSpan = r1 - r0
20
+
21
+ const scale = ((value: number): number => {
22
+ if (domainSpan === 0) return r0
23
+ return r0 + ((value - d0) / domainSpan) * rangeSpan
24
+ }) as LinearScale
25
+
26
+ scale.invert = (value: number): number => {
27
+ if (rangeSpan === 0) return d0
28
+ return d0 + ((value - r0) / rangeSpan) * domainSpan
29
+ }
30
+
31
+ scale.ticks = (count = 10): number[] => {
32
+ if (count <= 0) return []
33
+ const ticks: number[] = []
34
+ for (let i = 0; i < count; i++) {
35
+ ticks.push(d0 + (domainSpan * i) / (count - 1 || 1))
36
+ }
37
+ return ticks
38
+ }
39
+
40
+ scale.type = 'linear'
41
+ scale.domain = domain
42
+ scale.range = range
43
+
44
+ return scale
45
+ }
46
+
47
+ // --- Band Scale ---
48
+
49
+ export interface BandScale {
50
+ (value: string): number
51
+ bandwidth: () => number
52
+ type: 'band'
53
+ domain: string[]
54
+ range: [number, number]
55
+ }
56
+
57
+ export function createBandScale(
58
+ domain: string[],
59
+ range: [number, number],
60
+ padding = 0,
61
+ ): BandScale {
62
+ const [r0, r1] = range
63
+ const rangeSpan = r1 - r0
64
+ const n = domain.length
65
+
66
+ // With padding: each step = bandwidth + paddingInner
67
+ // total = n * step - paddingInner (no padding after last band)
68
+ // paddingInner = step * padding
69
+ // step * n - step * padding = rangeSpan => step * (n - padding) = rangeSpan
70
+ let step = 0
71
+ let bw = 0
72
+
73
+ if (n > 0) {
74
+ if (n === 1) {
75
+ bw = rangeSpan
76
+ step = rangeSpan
77
+ } else {
78
+ step = n > 0 ? rangeSpan / (n - padding) : 0
79
+ bw = step * (1 - padding)
80
+ }
81
+ }
82
+
83
+ const indexMap = new Map<string, number>()
84
+ domain.forEach((d, i) => indexMap.set(d, i))
85
+
86
+ const scale = ((value: string): number => {
87
+ const idx = indexMap.get(value)
88
+ if (idx === undefined) return 0
89
+ return r0 + idx * step
90
+ }) as BandScale
91
+
92
+ scale.bandwidth = (): number => {
93
+ return Math.max(0, bw)
94
+ }
95
+
96
+ scale.type = 'band'
97
+ scale.domain = domain
98
+ scale.range = range
99
+
100
+ return scale
101
+ }
102
+
103
+ // --- Time Scale ---
104
+
105
+ export interface TimeScale {
106
+ (value: Date): number
107
+ invert: (value: number) => Date
108
+ ticks: (count?: number) => Date[]
109
+ type: 'time'
110
+ domain: [Date, Date]
111
+ range: [number, number]
112
+ }
113
+
114
+ export function createTimeScale(
115
+ domain: [Date, Date],
116
+ range: [number, number],
117
+ ): TimeScale {
118
+ const [d0, d1] = domain
119
+ const [r0, r1] = range
120
+ const t0 = d0.getTime()
121
+ const t1 = d1.getTime()
122
+ const domainSpan = t1 - t0
123
+ const rangeSpan = r1 - r0
124
+
125
+ const scale = ((value: Date): number => {
126
+ if (domainSpan === 0) return r0
127
+ return r0 + ((value.getTime() - t0) / domainSpan) * rangeSpan
128
+ }) as TimeScale
129
+
130
+ scale.invert = (value: number): Date => {
131
+ if (rangeSpan === 0) return new Date(t0)
132
+ const t = t0 + ((value - r0) / rangeSpan) * domainSpan
133
+ return new Date(t)
134
+ }
135
+
136
+ scale.ticks = (count = 10): Date[] => {
137
+ if (count <= 0) return []
138
+ const ticks: Date[] = []
139
+ for (let i = 0; i < count; i++) {
140
+ const t = t0 + (domainSpan * i) / (count - 1 || 1)
141
+ ticks.push(new Date(t))
142
+ }
143
+ return ticks
144
+ }
145
+
146
+ scale.type = 'time'
147
+ scale.domain = domain
148
+ scale.range = range
149
+
150
+ return scale
151
+ }
@@ -0,0 +1,33 @@
1
+ import { cva } from '../shared/index.ts'
2
+ import type { TokenContract } from '../shared/index.ts'
3
+
4
+ export const checkboxTokens: TokenContract = {
5
+ name: 'checkbox',
6
+ tokens: {
7
+ bg: { variable: '--rfr-checkbox-bg', fallback: 'hsl(var(--background))' },
8
+ 'bg-checked': { variable: '--rfr-checkbox-bg-checked', fallback: 'hsl(var(--primary))' },
9
+ fg: { variable: '--rfr-checkbox-fg', fallback: 'hsl(var(--primary-foreground))' },
10
+ border: { variable: '--rfr-checkbox-border', fallback: 'hsl(var(--primary))' },
11
+ ring: { variable: '--rfr-checkbox-ring', fallback: 'hsl(var(--ring))' },
12
+ },
13
+ }
14
+
15
+ export const checkboxVariants = cva({
16
+ base: 'peer shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
17
+ variants: {
18
+ checked: {
19
+ true: 'bg-primary text-primary-foreground',
20
+ false: 'bg-background',
21
+ indeterminate: 'bg-primary text-primary-foreground',
22
+ },
23
+ size: {
24
+ sm: 'h-3.5 w-3.5',
25
+ default: 'h-4 w-4',
26
+ lg: 'h-5 w-5',
27
+ },
28
+ },
29
+ defaultVariants: {
30
+ checked: 'false',
31
+ size: 'default',
32
+ },
33
+ })