@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 @@
1
+ export {}
@@ -0,0 +1,121 @@
1
+ import type { AIProvider, AIConfig, AIAPI, GenerateOptions } from './types.js'
2
+
3
+ /**
4
+ * createAI — creates an AI manager that routes requests to registered providers.
5
+ *
6
+ * Resolution order: explicit opts.provider -> router -> default -> first available
7
+ * Fallback: on error, try next in fallback chain
8
+ */
9
+ export function createAI(config?: AIConfig): AIAPI {
10
+ const providers = new Map<string, AIProvider>()
11
+ /** Insertion-ordered list of provider names */
12
+ const providerOrder: string[] = []
13
+
14
+ const defaultProvider = config?.default
15
+ const fallbackChain = config?.fallback ?? []
16
+ const router = config?.router
17
+
18
+ function resolveProvider(opts?: GenerateOptions): AIProvider {
19
+ // 1. Explicit opts.provider
20
+ if (opts?.provider) {
21
+ const p = providers.get(opts.provider)
22
+ if (!p) {
23
+ throw new Error(`AI provider "${opts.provider}" not found. Registered providers: [${providerOrder.join(', ')}]`)
24
+ }
25
+ return p
26
+ }
27
+
28
+ // 2. Router
29
+ if (router) {
30
+ const chosen = router(opts ?? {}, {
31
+ providers: [...providerOrder],
32
+ default: defaultProvider ?? providerOrder[0] ?? '',
33
+ })
34
+ const p = providers.get(chosen)
35
+ if (p) return p
36
+ }
37
+
38
+ // 3. Default
39
+ if (defaultProvider) {
40
+ const p = providers.get(defaultProvider)
41
+ if (!p) {
42
+ throw new Error(`Default AI provider "${defaultProvider}" not registered. Registered providers: [${providerOrder.join(', ')}]`)
43
+ }
44
+ return p
45
+ }
46
+
47
+ // 4. First available
48
+ if (providerOrder.length === 0) {
49
+ throw new Error('No AI providers configured. Call addProvider() to register at least one provider.')
50
+ }
51
+
52
+ return providers.get(providerOrder[0])!
53
+ }
54
+
55
+ async function withFallback<T>(
56
+ primary: AIProvider,
57
+ fn: (provider: AIProvider) => Promise<T>,
58
+ ): Promise<T> {
59
+ try {
60
+ return await fn(primary)
61
+ } catch (error) {
62
+ // Try fallback chain
63
+ for (const name of fallbackChain) {
64
+ const fallback = providers.get(name)
65
+ if (!fallback || fallback === primary) continue
66
+ try {
67
+ return await fn(fallback)
68
+ } catch {
69
+ // continue to next fallback
70
+ }
71
+ }
72
+ // All fallbacks exhausted or no fallbacks — throw
73
+ // If there were fallbacks, throw the last error from the chain
74
+ if (fallbackChain.length > 0) {
75
+ // Try the last fallback one more time to get its error
76
+ const lastFallbackName = fallbackChain[fallbackChain.length - 1]
77
+ const lastFallback = providers.get(lastFallbackName)
78
+ if (lastFallback && lastFallback !== primary) {
79
+ return await fn(lastFallback)
80
+ }
81
+ }
82
+ throw error
83
+ }
84
+ }
85
+
86
+ const api: AIAPI = {
87
+ get providers() {
88
+ return [...providerOrder]
89
+ },
90
+
91
+ async generateText(prompt: string, opts?: GenerateOptions): Promise<string> {
92
+ const provider = resolveProvider(opts)
93
+ return withFallback(provider, (p) => p.generateText(prompt, opts))
94
+ },
95
+
96
+ async generateJSON<T = unknown>(prompt: string, opts?: GenerateOptions): Promise<T> {
97
+ const provider = resolveProvider(opts)
98
+ return withFallback(provider, (p) => p.generateJSON<T>(prompt, opts))
99
+ },
100
+
101
+ addProvider(name: string, provider: AIProvider): void {
102
+ if (providers.has(name)) {
103
+ // Replace, keep same position
104
+ providers.set(name, provider)
105
+ } else {
106
+ providers.set(name, provider)
107
+ providerOrder.push(name)
108
+ }
109
+ },
110
+
111
+ removeProvider(name: string): void {
112
+ if (providers.has(name)) {
113
+ providers.delete(name)
114
+ const idx = providerOrder.indexOf(name)
115
+ if (idx !== -1) providerOrder.splice(idx, 1)
116
+ }
117
+ },
118
+ }
119
+
120
+ return api
121
+ }
@@ -0,0 +1,23 @@
1
+ // Types
2
+ export type {
3
+ AIProvider,
4
+ GenerateOptions,
5
+ TTSProvider,
6
+ TTSOptions,
7
+ RouterFn,
8
+ AIConfig,
9
+ TTSConfig,
10
+ AIAPI,
11
+ TTSAPI,
12
+ } from './types.js'
13
+
14
+ // Managers
15
+ export { createAI } from './ai-manager.js'
16
+ export { createTTS } from './tts-manager.js'
17
+
18
+ // Mock providers (for testing)
19
+ export { createMockAIProvider, createMockTTSProvider } from './mock-providers.js'
20
+ export type { MockAIResponses, MockTTSProviderExtended } from './mock-providers.js'
21
+
22
+ // Utilities
23
+ export { sanitizeForSpeech } from './sanitizer.js'
@@ -0,0 +1,68 @@
1
+ import type { AIProvider, GenerateOptions, TTSProvider, TTSOptions } from './types.js'
2
+
3
+ export interface MockAIResponses {
4
+ text?: string[]
5
+ json?: unknown[]
6
+ }
7
+
8
+ export interface MockTTSProviderExtended extends TTSProvider {
9
+ speakCalls: Array<{ text: string; opts?: TTSOptions }>
10
+ stopCalls: number
11
+ }
12
+
13
+ /**
14
+ * createMockAIProvider — returns an AIProvider that returns canned responses.
15
+ * Used for testing without real API calls.
16
+ */
17
+ export function createMockAIProvider(
18
+ name: string = 'mock',
19
+ responses?: MockAIResponses,
20
+ ): AIProvider {
21
+ let textIndex = 0
22
+ let jsonIndex = 0
23
+
24
+ const textResponses = responses?.text ?? ['Mock AI response']
25
+ const jsonResponses = responses?.json ?? [{ mock: true }]
26
+
27
+ return {
28
+ name,
29
+ supportsVision: false,
30
+
31
+ async generateText(_prompt: string, _opts?: GenerateOptions): Promise<string> {
32
+ const response = textResponses[Math.min(textIndex, textResponses.length - 1)]
33
+ textIndex++
34
+ return response
35
+ },
36
+
37
+ async generateJSON<T = unknown>(_prompt: string, _opts?: GenerateOptions): Promise<T> {
38
+ const response = jsonResponses[Math.min(jsonIndex, jsonResponses.length - 1)]
39
+ jsonIndex++
40
+ return response as T
41
+ },
42
+ }
43
+ }
44
+
45
+ /**
46
+ * createMockTTSProvider — returns a TTSProvider that tracks calls for assertion.
47
+ * Used for testing without real speech synthesis.
48
+ */
49
+ export function createMockTTSProvider(
50
+ name: string = 'mock-tts',
51
+ ): MockTTSProviderExtended {
52
+ const provider: MockTTSProviderExtended = {
53
+ name,
54
+ isSupported: true,
55
+ speakCalls: [],
56
+ stopCalls: 0,
57
+
58
+ speak(text: string, opts?: TTSOptions): void {
59
+ provider.speakCalls.push({ text, opts })
60
+ },
61
+
62
+ stop(): void {
63
+ provider.stopCalls++
64
+ },
65
+ }
66
+
67
+ return provider
68
+ }
@@ -0,0 +1,174 @@
1
+ /**
2
+ * sanitizeForSpeech — converts AI-generated text (with markdown, LaTeX, HTML)
3
+ * into clean, speakable plain text suitable for TTS engines.
4
+ *
5
+ * 30+ regex-based transformation rules applied in order.
6
+ */
7
+ export function sanitizeForSpeech(text: string): string {
8
+ if (!text) return ''
9
+
10
+ let result = text
11
+
12
+ // === HTML ===
13
+
14
+ // 1. Strip HTML comments
15
+ result = result.replace(/<!--[\s\S]*?-->/g, '')
16
+
17
+ // 2. Strip HTML tags (including self-closing)
18
+ result = result.replace(/<[^>]+>/g, '')
19
+
20
+ // === Code blocks (before other markdown to avoid interference) ===
21
+
22
+ // 3. Strip fenced code blocks (``` with optional language)
23
+ result = result.replace(/```[\w]*\n?([\s\S]*?)```/g, '$1')
24
+
25
+ // 4. Strip inline code backticks
26
+ result = result.replace(/`([^`]+)`/g, '$1')
27
+
28
+ // === LaTeX (before markdown to handle $ delimiters) ===
29
+
30
+ // 5. Strip display math $$...$$
31
+ result = result.replace(/\$\$([\s\S]*?)\$\$/g, '$1')
32
+
33
+ // 6. Strip inline math $...$
34
+ result = result.replace(/\$([^$]+)\$/g, '$1')
35
+
36
+ // 7. Common fractions
37
+ result = result.replace(/\\frac\{1\}\{2\}/g, 'one half')
38
+ result = result.replace(/\\frac\{1\}\{3\}/g, 'one third')
39
+ result = result.replace(/\\frac\{1\}\{4\}/g, 'one quarter')
40
+ result = result.replace(/\\frac\{([^}]+)\}\{([^}]+)\}/g, '$1 over $2')
41
+
42
+ // 8. Square root
43
+ result = result.replace(/\\sqrt\{([^}]+)\}/g, 'square root of $1')
44
+
45
+ // 9. Superscripts (special cases)
46
+ result = result.replace(/\^\{2\}/g, ' squared')
47
+ result = result.replace(/\^\{3\}/g, ' cubed')
48
+ result = result.replace(/\^\{([^}]+)\}/g, ' to the power of $1')
49
+
50
+ // 10. Subscripts
51
+ result = result.replace(/_\{([^}]+)\}/g, ' sub $1')
52
+
53
+ // 11. Greek letters
54
+ result = result.replace(/\\alpha/g, 'alpha')
55
+ result = result.replace(/\\beta/g, 'beta')
56
+ result = result.replace(/\\gamma/g, 'gamma')
57
+ result = result.replace(/\\delta/g, 'delta')
58
+ result = result.replace(/\\theta/g, 'theta')
59
+ result = result.replace(/\\lambda/g, 'lambda')
60
+ result = result.replace(/\\mu/g, 'mu')
61
+ result = result.replace(/\\sigma/g, 'sigma')
62
+ result = result.replace(/\\omega/g, 'omega')
63
+ result = result.replace(/\\pi/g, 'pi')
64
+ result = result.replace(/\\phi/g, 'phi')
65
+
66
+ // 12. Operators
67
+ result = result.replace(/\\times/g, 'times')
68
+ result = result.replace(/\\div/g, 'divided by')
69
+ result = result.replace(/\\pm/g, 'plus or minus')
70
+ result = result.replace(/\\cdot/g, 'dot')
71
+
72
+ // 13. Relations
73
+ result = result.replace(/\\neq/g, 'not equal to')
74
+ result = result.replace(/\\leq/g, 'less than or equal to')
75
+ result = result.replace(/\\geq/g, 'greater than or equal to')
76
+ result = result.replace(/\\approx/g, 'approximately')
77
+ result = result.replace(/\\equiv/g, 'equivalent to')
78
+
79
+ // 14. Special symbols
80
+ result = result.replace(/\\infty/g, 'infinity')
81
+ result = result.replace(/\\partial/g, 'partial')
82
+
83
+ // 15. Summation and integrals
84
+ result = result.replace(/\\sum/g, 'sum')
85
+ result = result.replace(/\\prod/g, 'product')
86
+ result = result.replace(/\\int/g, 'integral')
87
+ result = result.replace(/\\lim/g, 'limit')
88
+
89
+ // 16. Trig functions
90
+ result = result.replace(/\\sin/g, 'sin')
91
+ result = result.replace(/\\cos/g, 'cos')
92
+ result = result.replace(/\\tan/g, 'tan')
93
+ result = result.replace(/\\log/g, 'log')
94
+ result = result.replace(/\\ln/g, 'ln')
95
+
96
+ // 17. Text commands (keep content)
97
+ result = result.replace(/\\text\{([^}]+)\}/g, '$1')
98
+ result = result.replace(/\\mathrm\{([^}]+)\}/g, '$1')
99
+ result = result.replace(/\\mathbf\{([^}]+)\}/g, '$1')
100
+ result = result.replace(/\\mathit\{([^}]+)\}/g, '$1')
101
+
102
+ // 18. Delimiters
103
+ result = result.replace(/\\left/g, '')
104
+ result = result.replace(/\\right/g, '')
105
+ result = result.replace(/\\big/g, '')
106
+ result = result.replace(/\\Big/g, '')
107
+
108
+ // 19. Strip remaining LaTeX commands (\word)
109
+ result = result.replace(/\\[a-zA-Z]+/g, '')
110
+
111
+ // 20. Strip LaTeX curly braces (but keep content)
112
+ result = result.replace(/\{([^}]*)\}/g, '$1')
113
+ // Handle any remaining stray braces
114
+ result = result.replace(/[{}]/g, '')
115
+
116
+ // === Markdown ===
117
+
118
+ // 21. Strip images ![alt](url)
119
+ result = result.replace(/!\[([^\]]*)\]\([^)]+\)/g, '$1')
120
+
121
+ // 22. Strip links [text](url) keeping text
122
+ result = result.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
123
+
124
+ // 23. Strip bold **text** and __text__
125
+ result = result.replace(/\*\*([^*]+)\*\*/g, '$1')
126
+ result = result.replace(/__([^_]+)__/g, '$1')
127
+
128
+ // 24. Strip italic *text* and _text_
129
+ result = result.replace(/\*([^*]+)\*/g, '$1')
130
+ result = result.replace(/(?<!\w)_([^_]+)_(?!\w)/g, '$1')
131
+
132
+ // 25. Strip strikethrough ~~text~~
133
+ result = result.replace(/~~([^~]+)~~/g, '$1')
134
+
135
+ // 26. Strip headings (# to ######)
136
+ result = result.replace(/^#{1,6}\s+/gm, '')
137
+
138
+ // 27. Strip blockquotes
139
+ result = result.replace(/^>\s+/gm, '')
140
+
141
+ // 28. Strip unordered list markers (- or * at line start)
142
+ result = result.replace(/^[-*]\s+/gm, '')
143
+
144
+ // 29. Strip ordered list markers (1. 2. etc.)
145
+ result = result.replace(/^\d+\.\s+/gm, '')
146
+
147
+ // 30. Strip horizontal rules (---, ***, ___)
148
+ result = result.replace(/^[-*_]{3,}\s*$/gm, '')
149
+
150
+ // 31. Strip table separator lines (|---|---|)
151
+ result = result.replace(/^\|[-:\s|]+\|\s*$/gm, '')
152
+
153
+ // 32. Strip table pipes (keep cell content)
154
+ result = result.replace(/\|/g, ' ')
155
+
156
+ // === Whitespace normalization ===
157
+
158
+ // 33. Collapse multiple spaces to single space
159
+ result = result.replace(/ {2,}/g, ' ')
160
+
161
+ // 34. Normalize excessive newlines (3+ -> 2)
162
+ result = result.replace(/\n{3,}/g, '\n\n')
163
+
164
+ // 35. Trim each line
165
+ result = result
166
+ .split('\n')
167
+ .map((line) => line.trim())
168
+ .join('\n')
169
+
170
+ // 36. Remove empty lines at start/end
171
+ result = result.trim()
172
+
173
+ return result
174
+ }
@@ -0,0 +1,80 @@
1
+ import type { TTSProvider, TTSConfig, TTSAPI, TTSOptions } from './types.js'
2
+
3
+ /**
4
+ * createTTS — creates a TTS manager that routes requests to registered providers.
5
+ *
6
+ * Resolution order: explicit opts.provider -> router -> default -> first available
7
+ */
8
+ export function createTTS(config?: TTSConfig): TTSAPI {
9
+ const providers = new Map<string, TTSProvider>()
10
+ const providerOrder: string[] = []
11
+
12
+ const defaultProvider = config?.default
13
+ const router = config?.router
14
+
15
+ function resolveProvider(opts?: TTSOptions): TTSProvider {
16
+ // 1. Explicit opts.provider
17
+ if (opts?.provider) {
18
+ const p = providers.get(opts.provider)
19
+ if (!p) {
20
+ throw new Error(`TTS provider "${opts.provider}" not found. Registered providers: [${providerOrder.join(', ')}]`)
21
+ }
22
+ return p
23
+ }
24
+
25
+ // 2. Router
26
+ if (router) {
27
+ const chosen = router(opts ?? {}, {
28
+ providers: [...providerOrder],
29
+ default: defaultProvider ?? providerOrder[0] ?? '',
30
+ })
31
+ const p = providers.get(chosen)
32
+ if (p) return p
33
+ }
34
+
35
+ // 3. Default
36
+ if (defaultProvider) {
37
+ const p = providers.get(defaultProvider)
38
+ if (!p) {
39
+ throw new Error(`Default TTS provider "${defaultProvider}" not registered. Registered providers: [${providerOrder.join(', ')}]`)
40
+ }
41
+ return p
42
+ }
43
+
44
+ // 4. First available
45
+ if (providerOrder.length === 0) {
46
+ throw new Error('No TTS providers configured. Call addProvider() to register at least one provider.')
47
+ }
48
+
49
+ return providers.get(providerOrder[0])!
50
+ }
51
+
52
+ const api: TTSAPI = {
53
+ get providers() {
54
+ return [...providerOrder]
55
+ },
56
+
57
+ speak(text: string, opts?: TTSOptions): void {
58
+ const provider = resolveProvider(opts)
59
+ provider.speak(text, opts)
60
+ },
61
+
62
+ stop(): void {
63
+ for (const name of providerOrder) {
64
+ const p = providers.get(name)
65
+ if (p) p.stop()
66
+ }
67
+ },
68
+
69
+ addProvider(name: string, provider: TTSProvider): void {
70
+ if (providers.has(name)) {
71
+ providers.set(name, provider)
72
+ } else {
73
+ providers.set(name, provider)
74
+ providerOrder.push(name)
75
+ }
76
+ },
77
+ }
78
+
79
+ return api
80
+ }
@@ -0,0 +1,72 @@
1
+ /** AI provider interface — implemented by adapter packages (OpenAI, Anthropic, etc.) */
2
+ export interface AIProvider {
3
+ name: string
4
+ generateText(prompt: string, opts?: GenerateOptions): Promise<string>
5
+ generateJSON<T = unknown>(prompt: string, opts?: GenerateOptions): Promise<T>
6
+ supportsVision: boolean
7
+ }
8
+
9
+ /** Options passed to generate calls */
10
+ export interface GenerateOptions {
11
+ provider?: string
12
+ model?: string
13
+ intent?: string
14
+ image?: unknown
15
+ maxTokens?: number
16
+ temperature?: number
17
+ [key: string]: unknown
18
+ }
19
+
20
+ /** TTS provider interface — implemented by TTS adapter packages */
21
+ export interface TTSProvider {
22
+ name: string
23
+ speak(text: string, opts?: TTSOptions): void
24
+ stop(): void
25
+ isSupported: boolean
26
+ }
27
+
28
+ /** Options passed to TTS calls */
29
+ export interface TTSOptions {
30
+ provider?: string
31
+ voice?: string
32
+ language?: string
33
+ speed?: number
34
+ onEnd?: () => void
35
+ [key: string]: unknown
36
+ }
37
+
38
+ /** Router function — picks a provider name given a request and context */
39
+ export type RouterFn<T> = (
40
+ request: T,
41
+ context: { providers: string[]; default: string },
42
+ ) => string
43
+
44
+ /** Config for createAI */
45
+ export interface AIConfig {
46
+ default?: string
47
+ fallback?: string[]
48
+ router?: RouterFn<GenerateOptions>
49
+ }
50
+
51
+ /** Config for createTTS */
52
+ export interface TTSConfig {
53
+ default?: string
54
+ router?: RouterFn<TTSOptions>
55
+ }
56
+
57
+ /** Return type of createAI */
58
+ export interface AIAPI {
59
+ providers: string[]
60
+ generateText(prompt: string, opts?: GenerateOptions): Promise<string>
61
+ generateJSON<T = unknown>(prompt: string, opts?: GenerateOptions): Promise<T>
62
+ addProvider(name: string, provider: AIProvider): void
63
+ removeProvider(name: string): void
64
+ }
65
+
66
+ /** Return type of createTTS */
67
+ export interface TTSAPI {
68
+ providers: string[]
69
+ speak(text: string, opts?: TTSOptions): void
70
+ stop(): void
71
+ addProvider(name: string, provider: TTSProvider): void
72
+ }
@@ -0,0 +1,28 @@
1
+ import { cva } from '../shared/index.ts'
2
+
3
+ export const animatedTextVariants = cva({
4
+ base: 'inline-block transition-opacity',
5
+ variants: {
6
+ state: {
7
+ entering: 'opacity-100',
8
+ exiting: 'opacity-0',
9
+ idle: 'opacity-100',
10
+ },
11
+ },
12
+ defaultVariants: {
13
+ state: 'idle',
14
+ },
15
+ })
16
+
17
+ export const typewriterVariants = cva({
18
+ base: 'inline',
19
+ variants: {
20
+ cursor: {
21
+ blinking: 'after:inline-block after:w-[2px] after:h-[1em] after:bg-current after:ml-[1px] after:animate-blink after:align-text-bottom',
22
+ hidden: '',
23
+ },
24
+ },
25
+ defaultVariants: {
26
+ cursor: 'blinking',
27
+ },
28
+ })
@@ -0,0 +1,83 @@
1
+ export interface AnimatedTextProps {
2
+ words: string[]
3
+ interval?: number
4
+ transitionDuration?: number
5
+ }
6
+
7
+ export interface AnimatedTextState {
8
+ currentIndex: number
9
+ }
10
+
11
+ export interface AnimatedTextAPI {
12
+ /** Get the current word */
13
+ getCurrentWord: () => string
14
+ /** Get the next index (wraps around) */
15
+ getNextIndex: () => number
16
+ /** Current state */
17
+ state: AnimatedTextState
18
+ }
19
+
20
+ export interface TypewriterProps {
21
+ text: string
22
+ speed?: number
23
+ startDelay?: number
24
+ }
25
+
26
+ export interface TypewriterState {
27
+ currentIndex: number
28
+ }
29
+
30
+ export interface TypewriterAPI {
31
+ /** Get the currently visible portion of text */
32
+ getVisibleText: () => string
33
+ /** Whether the typewriter has finished */
34
+ isComplete: () => boolean
35
+ /** Current state */
36
+ state: TypewriterState
37
+ }
38
+
39
+ export function createAnimatedText(props: AnimatedTextProps): AnimatedTextAPI {
40
+ const { words } = props
41
+
42
+ const state: AnimatedTextState = {
43
+ currentIndex: 0,
44
+ }
45
+
46
+ function getCurrentWord(): string {
47
+ if (words.length === 0) return ''
48
+ return words[state.currentIndex]
49
+ }
50
+
51
+ function getNextIndex(): number {
52
+ if (words.length === 0) return 0
53
+ return (state.currentIndex + 1) % words.length
54
+ }
55
+
56
+ return {
57
+ getCurrentWord,
58
+ getNextIndex,
59
+ state,
60
+ }
61
+ }
62
+
63
+ export function createTypewriter(props: TypewriterProps): TypewriterAPI {
64
+ const { text } = props
65
+
66
+ const state: TypewriterState = {
67
+ currentIndex: 0,
68
+ }
69
+
70
+ function getVisibleText(): string {
71
+ return text.slice(0, state.currentIndex)
72
+ }
73
+
74
+ function isComplete(): boolean {
75
+ return state.currentIndex >= text.length
76
+ }
77
+
78
+ return {
79
+ getVisibleText,
80
+ isComplete,
81
+ state,
82
+ }
83
+ }
@@ -0,0 +1,15 @@
1
+ export {
2
+ createAnimatedText,
3
+ createTypewriter,
4
+ type AnimatedTextProps,
5
+ type AnimatedTextState,
6
+ type AnimatedTextAPI,
7
+ type TypewriterProps,
8
+ type TypewriterState,
9
+ type TypewriterAPI,
10
+ } from './animated-text.js'
11
+
12
+ export {
13
+ animatedTextVariants,
14
+ typewriterVariants,
15
+ } from './animated-text.styles.js'