@refraction-ui/astro 0.4.2 → 0.4.5

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 (334) 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 +1 -1
  16. package/dist/astro-ai/index.ts +1 -1
  17. package/dist/astro-animated-text/AnimatedText.astro +1 -1
  18. package/dist/astro-animated-text/TypewriterText.astro +1 -1
  19. package/dist/astro-app-shell/AppShell.astro +1 -1
  20. package/dist/astro-app-shell/AuthShell.astro +1 -1
  21. package/dist/astro-app-shell/AuthShellCard.astro +1 -1
  22. package/dist/astro-app-shell/PageShell.astro +1 -1
  23. package/dist/astro-app-shell/PageShellSection.astro +1 -1
  24. package/dist/astro-app-shell/index.ts +1 -1
  25. package/dist/astro-auth/index.ts +2 -2
  26. package/dist/astro-avatar/Avatar.astro +1 -1
  27. package/dist/astro-avatar/AvatarFallback.astro +1 -1
  28. package/dist/astro-avatar/AvatarImage.astro +1 -1
  29. package/dist/astro-avatar-group/AvatarGroup.astro +1 -1
  30. package/dist/astro-badge/Badge.astro +1 -1
  31. package/dist/astro-bottom-nav/BottomNav.astro +1 -1
  32. package/dist/astro-breadcrumbs/Breadcrumbs.astro +1 -1
  33. package/dist/astro-button/Button.astro +1 -1
  34. package/dist/astro-calendar/Calendar.astro +1 -1
  35. package/dist/astro-card/Card.astro +1 -1
  36. package/dist/astro-card/CardContent.astro +1 -1
  37. package/dist/astro-card/CardDescription.astro +1 -1
  38. package/dist/astro-card/CardFooter.astro +1 -1
  39. package/dist/astro-card/CardHeader.astro +1 -1
  40. package/dist/astro-card/CardTitle.astro +1 -1
  41. package/dist/astro-card-grid/CardGrid.astro +1 -1
  42. package/dist/astro-carousel/Button.astro +1 -1
  43. package/dist/astro-charts/Bars.astro +1 -1
  44. package/dist/astro-charts/Chart.astro +1 -1
  45. package/dist/astro-charts/Circles.astro +1 -1
  46. package/dist/astro-charts/Histogram.astro +1 -1
  47. package/dist/astro-charts/Line.astro +1 -1
  48. package/dist/astro-charts/PieChart.astro +1 -1
  49. package/dist/astro-charts/ScatterPlot.astro +1 -1
  50. package/dist/astro-charts/index.ts +1 -1
  51. package/dist/astro-checkbox/Checkbox.astro +1 -1
  52. package/dist/astro-code-editor/CodeEditor.astro +1 -1
  53. package/dist/astro-collapsible/Collapsible.astro +1 -1
  54. package/dist/astro-collapsible/CollapsibleContent.astro +1 -1
  55. package/dist/astro-command/Command.astro +1 -1
  56. package/dist/astro-command/CommandGroup.astro +1 -1
  57. package/dist/astro-command/CommandInput.astro +1 -1
  58. package/dist/astro-command/CommandItem.astro +1 -1
  59. package/dist/astro-command-input/CommandInput.astro +1 -1
  60. package/dist/astro-content-protection/ContentProtection.astro +1 -1
  61. package/dist/astro-data-table/DataTable.astro +1 -1
  62. package/dist/astro-date-picker/DatePicker.astro +1 -1
  63. package/dist/astro-device-frame/DeviceFrame.astro +1 -1
  64. package/dist/astro-dialog/DialogContent.astro +1 -1
  65. package/dist/astro-dialog/DialogOverlay.astro +1 -1
  66. package/dist/astro-diff-viewer/DiffViewer.astro +1 -1
  67. package/dist/astro-dropdown-menu/DropdownMenuContent.astro +1 -1
  68. package/dist/astro-dropdown-menu/DropdownMenuItem.astro +1 -1
  69. package/dist/astro-emoji-picker/EmojiPicker.astro +1 -1
  70. package/dist/astro-feedback-dialog/FeedbackDialog.astro +1 -1
  71. package/dist/astro-file-upload/FileUpload.astro +1 -1
  72. package/dist/astro-footer/Footer.astro +1 -1
  73. package/dist/astro-inline-editor/InlineEditor.astro +1 -1
  74. package/dist/astro-input/Input.astro +1 -1
  75. package/dist/astro-input-group/InputGroup.astro +1 -1
  76. package/dist/astro-input-group/InputGroupAddon.astro +1 -1
  77. package/dist/astro-input-group/InputGroupButton.astro +1 -1
  78. package/dist/astro-install-prompt/InstallPrompt.astro +1 -1
  79. package/dist/astro-keyboard-shortcut/ShortcutBadge.astro +1 -1
  80. package/dist/astro-language-selector/LanguageSelector.astro +1 -1
  81. package/dist/astro-link-card/LinkCard.astro +1 -1
  82. package/dist/astro-markdown-renderer/MarkdownRenderer.astro +1 -1
  83. package/dist/astro-mobile-nav/MobileNav.astro +1 -1
  84. package/dist/astro-mobile-nav/MobileNavLink.astro +1 -1
  85. package/dist/astro-mobile-nav/MobileNavTrigger.astro +1 -1
  86. package/dist/astro-navbar/Navbar.astro +1 -1
  87. package/dist/astro-otp-input/OtpInput.astro +1 -1
  88. package/dist/astro-payment/Payment.astro +1 -1
  89. package/dist/astro-popover/PopoverContent.astro +1 -1
  90. package/dist/astro-presence-indicator/PresenceIndicator.astro +1 -1
  91. package/dist/astro-progress-display/BadgeDisplay.astro +1 -1
  92. package/dist/astro-progress-display/ProgressBar.astro +1 -1
  93. package/dist/astro-progress-display/StatsGrid.astro +1 -1
  94. package/dist/astro-radio/RadioGroup.astro +1 -1
  95. package/dist/astro-radio/RadioItem.astro +1 -1
  96. package/dist/astro-reaction-bar/ReactionBar.astro +1 -1
  97. package/dist/astro-resizable-layout/ResizableDivider.astro +1 -1
  98. package/dist/astro-resizable-layout/ResizableLayout.astro +1 -1
  99. package/dist/astro-resizable-layout/ResizablePane.astro +1 -1
  100. package/dist/astro-resizable-layout/index.ts +1 -1
  101. package/dist/astro-rich-editor/index.ts +2 -2
  102. package/dist/astro-search-bar/SearchBar.astro +1 -1
  103. package/dist/astro-search-bar/SearchResults.astro +1 -1
  104. package/dist/astro-select/Select.astro +1 -1
  105. package/dist/astro-select/SelectContent.astro +1 -1
  106. package/dist/astro-select/SelectItem.astro +1 -1
  107. package/dist/astro-select/SelectTrigger.astro +1 -1
  108. package/dist/astro-sidebar/Sidebar.astro +1 -1
  109. package/dist/astro-skeleton/Skeleton.astro +1 -1
  110. package/dist/astro-slide-viewer/SlideViewer.astro +1 -1
  111. package/dist/astro-status-indicator/StatusIndicator.astro +1 -1
  112. package/dist/astro-switch/Switch.astro +1 -1
  113. package/dist/astro-table-of-contents/TableOfContents.astro +1 -1
  114. package/dist/astro-tabs/Tabs.astro +1 -1
  115. package/dist/astro-tabs/TabsList.astro +1 -1
  116. package/dist/astro-tabs/TabsTrigger.astro +1 -1
  117. package/dist/astro-textarea/Textarea.astro +1 -1
  118. package/dist/astro-theme/ThemeScript.astro +1 -1
  119. package/dist/astro-thread-view/ThreadView.astro +1 -1
  120. package/dist/astro-toast/Toast.astro +1 -1
  121. package/dist/astro-tooltip/TooltipContent.astro +1 -1
  122. package/dist/astro-version-selector/VersionSelector.astro +1 -1
  123. package/dist/astro-video-player/VideoPlayer.astro +1 -1
  124. package/dist/auth/adapters/mock.ts +74 -0
  125. package/dist/auth/auth-machine.ts +120 -0
  126. package/dist/auth/index.ts +22 -0
  127. package/dist/auth/rbac.ts +44 -0
  128. package/dist/auth/types.ts +44 -0
  129. package/dist/avatar/avatar.styles.ts +47 -0
  130. package/dist/avatar/avatar.ts +73 -0
  131. package/dist/avatar/index.ts +15 -0
  132. package/dist/avatar-group/avatar-group.styles.ts +63 -0
  133. package/dist/avatar-group/avatar-group.ts +106 -0
  134. package/dist/avatar-group/index.ts +18 -0
  135. package/dist/badge/badge.styles.ts +24 -0
  136. package/dist/badge/badge.ts +48 -0
  137. package/dist/badge/index.ts +10 -0
  138. package/dist/bottom-nav/bottom-nav.styles.ts +18 -0
  139. package/dist/bottom-nav/bottom-nav.ts +33 -0
  140. package/dist/bottom-nav/index.ts +2 -0
  141. package/dist/breadcrumbs/breadcrumbs.styles.ts +20 -0
  142. package/dist/breadcrumbs/breadcrumbs.ts +72 -0
  143. package/dist/breadcrumbs/index.ts +8 -0
  144. package/dist/button/button.styles.ts +38 -0
  145. package/dist/button/button.ts +64 -0
  146. package/dist/button/index.ts +10 -0
  147. package/dist/calendar/calendar.styles.ts +21 -0
  148. package/dist/calendar/calendar.ts +202 -0
  149. package/dist/calendar/index.ts +9 -0
  150. package/dist/callout/callout.ts +1 -0
  151. package/dist/callout/index.ts +1 -0
  152. package/dist/card/card.styles.ts +55 -0
  153. package/dist/card/card.ts +45 -0
  154. package/dist/card/index.ts +20 -0
  155. package/dist/card-grid/card-grid.ts +9 -0
  156. package/dist/card-grid/index.ts +1 -0
  157. package/dist/carousel/index.ts +1 -0
  158. package/dist/charts/axis.ts +50 -0
  159. package/dist/charts/chart.ts +73 -0
  160. package/dist/charts/colorblind.ts +100 -0
  161. package/dist/charts/data.ts +72 -0
  162. package/dist/charts/geometry.ts +54 -0
  163. package/dist/charts/index.ts +61 -0
  164. package/dist/charts/scales.ts +151 -0
  165. package/dist/checkbox/checkbox.styles.ts +33 -0
  166. package/dist/checkbox/checkbox.ts +73 -0
  167. package/dist/checkbox/index.ts +10 -0
  168. package/dist/code-block/code-block.ts +1 -0
  169. package/dist/code-block/index.ts +1 -0
  170. package/dist/code-editor/code-editor.styles.ts +32 -0
  171. package/dist/code-editor/code-editor.ts +140 -0
  172. package/dist/code-editor/index.ts +9 -0
  173. package/dist/collapsible/collapsible.styles.ts +14 -0
  174. package/dist/collapsible/collapsible.ts +93 -0
  175. package/dist/collapsible/index.ts +7 -0
  176. package/dist/command/command.styles.ts +27 -0
  177. package/dist/command/command.ts +179 -0
  178. package/dist/command/index.ts +14 -0
  179. package/dist/command-input/command-input.ts +176 -0
  180. package/dist/command-input/index.ts +1 -0
  181. package/dist/content-protection/content-protection.styles.ts +9 -0
  182. package/dist/content-protection/content-protection.ts +68 -0
  183. package/dist/content-protection/index.ts +8 -0
  184. package/dist/data-table/data-table.styles.ts +55 -0
  185. package/dist/data-table/data-table.ts +183 -0
  186. package/dist/data-table/index.ts +15 -0
  187. package/dist/date-picker/date-picker.styles.ts +31 -0
  188. package/dist/date-picker/date-picker.ts +333 -0
  189. package/dist/date-picker/index.ts +18 -0
  190. package/dist/device-frame/device-frame.styles.ts +21 -0
  191. package/dist/device-frame/device-frame.ts +112 -0
  192. package/dist/device-frame/index.ts +10 -0
  193. package/dist/dialog/dialog.styles.ts +8 -0
  194. package/dist/dialog/dialog.ts +133 -0
  195. package/dist/dialog/index.ts +8 -0
  196. package/dist/diff-viewer/diff-viewer.styles.ts +124 -0
  197. package/dist/diff-viewer/diff-viewer.ts +255 -0
  198. package/dist/diff-viewer/index.ts +20 -0
  199. package/dist/dropdown-menu/dropdown-menu.styles.ts +9 -0
  200. package/dist/dropdown-menu/dropdown-menu.ts +139 -0
  201. package/dist/dropdown-menu/index.ts +9 -0
  202. package/dist/emoji-picker/emoji-data.ts +282 -0
  203. package/dist/emoji-picker/emoji-picker.styles.ts +32 -0
  204. package/dist/emoji-picker/emoji-picker.ts +165 -0
  205. package/dist/emoji-picker/index.ts +25 -0
  206. package/dist/feedback-dialog/feedback-dialog.styles.ts +15 -0
  207. package/dist/feedback-dialog/feedback-dialog.ts +147 -0
  208. package/dist/feedback-dialog/index.ts +11 -0
  209. package/dist/file-upload/file-upload.styles.ts +30 -0
  210. package/dist/file-upload/file-upload.ts +260 -0
  211. package/dist/file-upload/index.ts +19 -0
  212. package/dist/footer/footer.styles.ts +5 -0
  213. package/dist/footer/footer.ts +32 -0
  214. package/dist/footer/index.ts +9 -0
  215. package/dist/index.ts +1 -1
  216. package/dist/inline-editor/index.ts +13 -0
  217. package/dist/inline-editor/inline-editor.styles.ts +42 -0
  218. package/dist/inline-editor/inline-editor.ts +96 -0
  219. package/dist/input/index.ts +9 -0
  220. package/dist/input/input.styles.ts +15 -0
  221. package/dist/input/input.ts +84 -0
  222. package/dist/input-group/index.ts +13 -0
  223. package/dist/input-group/input-group.styles.ts +50 -0
  224. package/dist/input-group/input-group.ts +44 -0
  225. package/dist/install-prompt/index.ts +9 -0
  226. package/dist/install-prompt/install-prompt.styles.ts +5 -0
  227. package/dist/install-prompt/install-prompt.ts +68 -0
  228. package/dist/keyboard-shortcut/index.ts +12 -0
  229. package/dist/keyboard-shortcut/keyboard-shortcut.styles.ts +8 -0
  230. package/dist/keyboard-shortcut/keyboard-shortcut.ts +153 -0
  231. package/dist/language-selector/index.ts +8 -0
  232. package/dist/language-selector/language-selector.styles.ts +28 -0
  233. package/dist/language-selector/language-selector.ts +149 -0
  234. package/dist/link-card/index.ts +1 -0
  235. package/dist/link-card/link-card.ts +9 -0
  236. package/dist/markdown-renderer/index.ts +8 -0
  237. package/dist/markdown-renderer/markdown-renderer.styles.ts +31 -0
  238. package/dist/markdown-renderer/markdown-renderer.ts +251 -0
  239. package/dist/mobile-nav/index.ts +14 -0
  240. package/dist/mobile-nav/mobile-nav.styles.ts +39 -0
  241. package/dist/mobile-nav/mobile-nav.ts +74 -0
  242. package/dist/navbar/index.ts +9 -0
  243. package/dist/navbar/navbar.styles.ts +29 -0
  244. package/dist/navbar/navbar.ts +39 -0
  245. package/dist/otp-input/index.ts +13 -0
  246. package/dist/otp-input/otp-input.styles.ts +51 -0
  247. package/dist/otp-input/otp-input.ts +198 -0
  248. package/dist/pagination/index.ts +1 -0
  249. package/dist/payment/index.ts +1 -0
  250. package/dist/payment/payment.ts +16 -0
  251. package/dist/popover/index.ts +7 -0
  252. package/dist/popover/popover.styles.ts +16 -0
  253. package/dist/popover/popover.ts +89 -0
  254. package/dist/presence-indicator/index.ts +14 -0
  255. package/dist/presence-indicator/presence-indicator.styles.ts +29 -0
  256. package/dist/presence-indicator/presence-indicator.ts +63 -0
  257. package/dist/progress-display/index.ts +15 -0
  258. package/dist/progress-display/progress-display.styles.ts +72 -0
  259. package/dist/progress-display/progress-display.ts +60 -0
  260. package/dist/radio/index.ts +8 -0
  261. package/dist/radio/radio.styles.ts +34 -0
  262. package/dist/radio/radio.ts +70 -0
  263. package/dist/reaction-bar/index.ts +14 -0
  264. package/dist/reaction-bar/reaction-bar.styles.ts +23 -0
  265. package/dist/reaction-bar/reaction-bar.ts +87 -0
  266. package/dist/resizable-layout/index.ts +12 -0
  267. package/dist/resizable-layout/resizable-layout.styles.ts +50 -0
  268. package/dist/resizable-layout/resizable-layout.ts +139 -0
  269. package/dist/rich-editor/editor.ts +342 -0
  270. package/dist/rich-editor/emoji.ts +175 -0
  271. package/dist/rich-editor/history.ts +79 -0
  272. package/dist/rich-editor/index.ts +106 -0
  273. package/dist/rich-editor/markdown-shortcuts.ts +248 -0
  274. package/dist/rich-editor/mentions.ts +162 -0
  275. package/dist/rich-editor/model.ts +206 -0
  276. package/dist/rich-editor/operations.ts +772 -0
  277. package/dist/rich-editor/selection.ts +157 -0
  278. package/dist/rich-editor/serialization.ts +711 -0
  279. package/dist/rich-editor/slash-commands.ts +212 -0
  280. package/dist/search-bar/index.ts +7 -0
  281. package/dist/search-bar/search-bar.styles.ts +29 -0
  282. package/dist/search-bar/search-bar.ts +130 -0
  283. package/dist/select/index.ts +13 -0
  284. package/dist/select/select.styles.ts +52 -0
  285. package/dist/select/select.ts +152 -0
  286. package/dist/sidebar/index.ts +9 -0
  287. package/dist/sidebar/sidebar.styles.ts +27 -0
  288. package/dist/sidebar/sidebar.ts +59 -0
  289. package/dist/skeleton/index.ts +8 -0
  290. package/dist/skeleton/skeleton.styles.ts +16 -0
  291. package/dist/skeleton/skeleton.ts +39 -0
  292. package/dist/skip-to-content/index.ts +1 -0
  293. package/dist/skip-to-content/skip-to-content.ts +1 -0
  294. package/dist/slide-viewer/index.ts +16 -0
  295. package/dist/slide-viewer/slide-viewer.styles.ts +57 -0
  296. package/dist/slide-viewer/slide-viewer.ts +152 -0
  297. package/dist/slider/index.ts +1 -0
  298. package/dist/slider/slider.ts +2 -0
  299. package/dist/status-indicator/index.ts +15 -0
  300. package/dist/status-indicator/status-indicator.styles.ts +41 -0
  301. package/dist/status-indicator/status-indicator.ts +66 -0
  302. package/dist/steps/index.ts +1 -0
  303. package/dist/steps/steps.ts +1 -0
  304. package/dist/switch/index.ts +7 -0
  305. package/dist/switch/switch.styles.ts +55 -0
  306. package/dist/switch/switch.ts +63 -0
  307. package/dist/table-of-contents/index.ts +1 -0
  308. package/dist/table-of-contents/table-of-contents.ts +37 -0
  309. package/dist/tabs/index.ts +8 -0
  310. package/dist/tabs/tabs.styles.ts +9 -0
  311. package/dist/tabs/tabs.ts +133 -0
  312. package/dist/textarea/index.ts +7 -0
  313. package/dist/textarea/textarea.styles.ts +15 -0
  314. package/dist/textarea/textarea.ts +59 -0
  315. package/dist/theme/dom-adapters.ts +60 -0
  316. package/dist/theme/index.ts +18 -0
  317. package/dist/theme/theme-machine.ts +130 -0
  318. package/dist/theme/theme-script.ts +18 -0
  319. package/dist/thread-view/index.ts +26 -0
  320. package/dist/thread-view/thread-view.styles.ts +35 -0
  321. package/dist/thread-view/thread-view.ts +176 -0
  322. package/dist/toast/index.ts +13 -0
  323. package/dist/toast/toast.styles.ts +19 -0
  324. package/dist/toast/toast.ts +203 -0
  325. package/dist/tooltip/index.ts +7 -0
  326. package/dist/tooltip/tooltip.styles.ts +16 -0
  327. package/dist/tooltip/tooltip.ts +109 -0
  328. package/dist/version-selector/index.ts +12 -0
  329. package/dist/version-selector/version-selector.styles.ts +41 -0
  330. package/dist/version-selector/version-selector.ts +136 -0
  331. package/dist/video-player/index.ts +12 -0
  332. package/dist/video-player/video-player.styles.ts +42 -0
  333. package/dist/video-player/video-player.ts +100 -0
  334. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  createSearchBar,
4
4
  searchBarVariants,
5
- } from '@refraction-ui/search-bar'
5
+ } from '../search-bar/index.ts'
6
6
  import { cn } from '../shared/index.ts'
7
7
 
8
8
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { searchResultVariants } from '@refraction-ui/search-bar'
2
+ import { searchResultVariants } from '../search-bar/index.ts'
3
3
  import { cn } from '../shared/index.ts'
4
4
 
5
5
  interface Props extends astroHTML.JSX.HTMLAttributes {}
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { createSelect } from '@refraction-ui/select'
2
+ import { createSelect } from '../select/index.ts'
3
3
 
4
4
  interface Props extends astroHTML.JSX.HTMLAttributes {
5
5
  value?: string
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { selectContentVariants } from '@refraction-ui/select'
2
+ import { selectContentVariants } from '../select/index.ts'
3
3
  import { cn } from '../shared/index.ts'
4
4
 
5
5
  interface Props extends astroHTML.JSX.HTMLAttributes {}
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { selectItemVariants } from '@refraction-ui/select'
2
+ import { selectItemVariants } from '../select/index.ts'
3
3
  import { cn } from '../shared/index.ts'
4
4
 
5
5
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { selectTriggerVariants } from '@refraction-ui/select'
2
+ import { selectTriggerVariants } from '../select/index.ts'
3
3
  import { cn } from '../shared/index.ts'
4
4
 
5
5
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -4,7 +4,7 @@ import {
4
4
  sidebarVariants,
5
5
  sidebarItemVariants,
6
6
  type SidebarSection,
7
- } from '@refraction-ui/sidebar'
7
+ } from '../sidebar/index.ts'
8
8
  import { cn } from '../shared/index.ts'
9
9
 
10
10
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -3,7 +3,7 @@ import {
3
3
  createSkeleton,
4
4
  skeletonVariants,
5
5
  type SkeletonShape,
6
- } from '@refraction-ui/skeleton'
6
+ } from '../skeleton/index.ts'
7
7
  import { cn } from '../shared/index.ts'
8
8
 
9
9
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -5,7 +5,7 @@ import {
5
5
  progressBarVariants,
6
6
  slideTypeBadgeVariants,
7
7
  type SlideData,
8
- } from '@refraction-ui/slide-viewer'
8
+ } from '../slide-viewer/index.ts'
9
9
  import { cn } from '../shared/index.ts'
10
10
 
11
11
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -6,7 +6,7 @@ import {
6
6
  statusPulseVariants,
7
7
  statusLabelStyles,
8
8
  type StatusType,
9
- } from '@refraction-ui/status-indicator'
9
+ } from '../status-indicator/index.ts'
10
10
  import { cn } from '../shared/index.ts'
11
11
 
12
12
  interface Props {
@@ -3,7 +3,7 @@ import {
3
3
  createSwitch,
4
4
  switchVariants,
5
5
  switchThumbVariants,
6
- } from '@refraction-ui/switch'
6
+ } from '../switch/index.ts'
7
7
  import { cn } from '../shared/index.ts'
8
8
 
9
9
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -14,7 +14,7 @@ const { selectors = 'h2, h3, h4', class: className, ...props } = Astro.props;
14
14
  </nav>
15
15
 
16
16
  <script>
17
- import { parseHeadings, observeHeadings } from '@refraction-ui/table-of-contents';
17
+ import { parseHeadings, observeHeadings } from '../table-of-contents/index.ts';
18
18
 
19
19
  document.querySelectorAll('.refraction-toc').forEach((el) => {
20
20
  const selectors = el.getAttribute('data-selectors') || 'h2, h3, h4';
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { createTabs } from '@refraction-ui/tabs'
2
+ import { createTabs } from '../tabs/index.ts'
3
3
 
4
4
  interface Props extends astroHTML.JSX.HTMLAttributes {
5
5
  defaultValue?: string
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { tabsListVariants } from '@refraction-ui/tabs'
2
+ import { tabsListVariants } from '../tabs/index.ts'
3
3
  import { cn } from '../shared/index.ts'
4
4
 
5
5
  interface Props extends astroHTML.JSX.HTMLAttributes {}
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { tabsTriggerVariants } from '@refraction-ui/tabs'
2
+ import { tabsTriggerVariants } from '../tabs/index.ts'
3
3
  import { cn } from '../shared/index.ts'
4
4
 
5
5
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  createTextarea,
4
4
  textareaVariants,
5
- } from '@refraction-ui/textarea'
5
+ } from '../textarea/index.ts'
6
6
  import { cn } from '../shared/index.ts'
7
7
 
8
8
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { getThemeScript } from '@refraction-ui/theme'
2
+ import { getThemeScript } from '../theme/index.ts'
3
3
 
4
4
  interface Props {
5
5
  storageKey?: string
@@ -14,7 +14,7 @@ import {
14
14
  threadAttachmentStyles,
15
15
  threadEditedStyles,
16
16
  type MessageData,
17
- } from '@refraction-ui/thread-view'
17
+ } from '../thread-view/index.ts'
18
18
  import { cn } from '../shared/index.ts'
19
19
 
20
20
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { toastVariants, type ToastVariant } from '@refraction-ui/toast'
2
+ import { toastVariants, type ToastVariant } from '../toast/index.ts'
3
3
  import { cn } from '../shared/index.ts'
4
4
 
5
5
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { tooltipContentVariants } from '@refraction-ui/tooltip'
2
+ import { tooltipContentVariants } from '../tooltip/index.ts'
3
3
  import { cn } from '../shared/index.ts'
4
4
  import type { Side } from '../shared/index.ts'
5
5
 
@@ -5,7 +5,7 @@ import {
5
5
  optionVariants,
6
6
  latestBadgeVariants,
7
7
  type VersionOption,
8
- } from '@refraction-ui/version-selector'
8
+ } from '../version-selector/index.ts'
9
9
  import { cn } from '../shared/index.ts'
10
10
 
11
11
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -4,7 +4,7 @@ import {
4
4
  playerVariants,
5
5
  controlsVariants,
6
6
  overlayVariants,
7
- } from '@refraction-ui/video-player'
7
+ } from '../video-player/index.ts'
8
8
  import { cn } from '../shared/index.ts'
9
9
 
10
10
  interface Props extends astroHTML.JSX.HTMLAttributes {
@@ -0,0 +1,74 @@
1
+ import type { AuthAdapter, User } from '../types.js'
2
+
3
+ /**
4
+ * Mock auth adapter for testing and development.
5
+ * No external dependencies. Stores state in memory.
6
+ */
7
+ export function createMockAdapter(initialUser?: User): AuthAdapter {
8
+ let currentUser: User | null = initialUser ?? null
9
+ const listeners = new Set<(user: User | null) => void>()
10
+
11
+ function notify() {
12
+ for (const fn of listeners) {
13
+ fn(currentUser)
14
+ }
15
+ }
16
+
17
+ return {
18
+ async signIn(email, _password) {
19
+ currentUser = {
20
+ uid: 'mock-' + email,
21
+ email,
22
+ displayName: email.split('@')[0],
23
+ photoURL: null,
24
+ roles: ['student'],
25
+ }
26
+ notify()
27
+ return currentUser
28
+ },
29
+
30
+ async signInWithOAuth(_provider) {
31
+ currentUser = {
32
+ uid: 'mock-oauth',
33
+ email: 'oauth@example.com',
34
+ displayName: 'OAuth User',
35
+ photoURL: null,
36
+ roles: ['student'],
37
+ }
38
+ notify()
39
+ return currentUser
40
+ },
41
+
42
+ async signUp(email, _password, displayName) {
43
+ currentUser = {
44
+ uid: 'mock-' + email,
45
+ email,
46
+ displayName,
47
+ photoURL: null,
48
+ roles: ['student'],
49
+ }
50
+ notify()
51
+ return currentUser
52
+ },
53
+
54
+ async signOut() {
55
+ currentUser = null
56
+ notify()
57
+ },
58
+
59
+ async resetPassword(_email) {
60
+ // no-op in mock
61
+ },
62
+
63
+ async getToken() {
64
+ return currentUser ? 'mock-token-' + currentUser.uid : null
65
+ },
66
+
67
+ onAuthStateChange(callback) {
68
+ listeners.add(callback)
69
+ // Fire immediately with current state
70
+ callback(currentUser)
71
+ return () => { listeners.delete(callback) }
72
+ },
73
+ }
74
+ }
@@ -0,0 +1,120 @@
1
+ import type { User, AuthState, AuthStatus, AuthConfig, AuthAdapter, OAuthProvider } from './types.js'
2
+
3
+ export interface AuthAPI {
4
+ getState(): AuthState
5
+ signIn(email: string, password: string): Promise<User>
6
+ signInWithOAuth(provider: OAuthProvider): Promise<User>
7
+ signUp(email: string, password: string, displayName: string): Promise<User>
8
+ signOut(): Promise<void>
9
+ resetPassword(email: string): Promise<void>
10
+ getToken(): Promise<string | null>
11
+ subscribe(fn: (state: AuthState) => void): () => void
12
+ destroy(): void
13
+ }
14
+
15
+ export function createAuth(
16
+ adapter: AuthAdapter,
17
+ config: Omit<AuthConfig, 'adapter'> = {},
18
+ ): AuthAPI {
19
+ const listeners = new Set<(state: AuthState) => void>()
20
+ let state: AuthState = { user: null, status: 'loading' }
21
+ let unsubAuth: (() => void) | null = null
22
+ let tokenRefreshTimer: ReturnType<typeof setInterval> | null = null
23
+
24
+ const { tokenRefreshInterval = 50, testMode = false, testUser } = config
25
+
26
+ function setState(newState: AuthState) {
27
+ state = newState
28
+ for (const fn of listeners) {
29
+ fn(state)
30
+ }
31
+ }
32
+
33
+ function setUser(user: User | null) {
34
+ setState({
35
+ user,
36
+ status: user ? 'authenticated' : 'unauthenticated',
37
+ })
38
+ }
39
+
40
+ // Start token refresh timer
41
+ function startTokenRefresh() {
42
+ if (tokenRefreshTimer) clearInterval(tokenRefreshTimer)
43
+ tokenRefreshTimer = setInterval(
44
+ () => { adapter.getToken().catch(() => {}) },
45
+ tokenRefreshInterval * 60 * 1000,
46
+ )
47
+ }
48
+
49
+ // Initialize
50
+ if (testMode && testUser) {
51
+ setUser(testUser)
52
+ } else {
53
+ unsubAuth = adapter.onAuthStateChange((user) => {
54
+ setUser(user)
55
+ if (user) {
56
+ startTokenRefresh()
57
+ } else if (tokenRefreshTimer) {
58
+ clearInterval(tokenRefreshTimer)
59
+ tokenRefreshTimer = null
60
+ }
61
+ })
62
+ }
63
+
64
+ return {
65
+ getState() {
66
+ return state
67
+ },
68
+
69
+ async signIn(email, password) {
70
+ const user = await adapter.signIn(email, password)
71
+ setUser(user)
72
+ startTokenRefresh()
73
+ return user
74
+ },
75
+
76
+ async signInWithOAuth(provider) {
77
+ const user = await adapter.signInWithOAuth(provider)
78
+ setUser(user)
79
+ startTokenRefresh()
80
+ return user
81
+ },
82
+
83
+ async signUp(email, password, displayName) {
84
+ const user = await adapter.signUp(email, password, displayName)
85
+ setUser(user)
86
+ startTokenRefresh()
87
+ return user
88
+ },
89
+
90
+ async signOut() {
91
+ await adapter.signOut()
92
+ if (tokenRefreshTimer) {
93
+ clearInterval(tokenRefreshTimer)
94
+ tokenRefreshTimer = null
95
+ }
96
+ setUser(null)
97
+ },
98
+
99
+ async resetPassword(email) {
100
+ await adapter.resetPassword(email)
101
+ },
102
+
103
+ async getToken() {
104
+ return adapter.getToken()
105
+ },
106
+
107
+ subscribe(fn) {
108
+ listeners.add(fn)
109
+ return () => { listeners.delete(fn) }
110
+ },
111
+
112
+ destroy() {
113
+ listeners.clear()
114
+ unsubAuth?.()
115
+ if (tokenRefreshTimer) {
116
+ clearInterval(tokenRefreshTimer)
117
+ }
118
+ },
119
+ }
120
+ }
@@ -0,0 +1,22 @@
1
+ export type {
2
+ User,
3
+ AuthState,
4
+ AuthStatus,
5
+ OAuthProvider,
6
+ AuthConfig,
7
+ AuthAdapter,
8
+ } from './types.js'
9
+
10
+ export { createAuth, type AuthAPI } from './auth-machine.js'
11
+
12
+ export {
13
+ hasRole,
14
+ hasAnyRole,
15
+ hasAllRoles,
16
+ canAccessAdmin,
17
+ canAccessReviewer,
18
+ getDefaultPortal,
19
+ getAssignableRoles,
20
+ } from './rbac.js'
21
+
22
+ export { createMockAdapter } from './adapters/mock.js'
@@ -0,0 +1,44 @@
1
+ import type { User } from './types.js'
2
+
3
+ /** Check if user has a specific role */
4
+ export function hasRole(user: User | null, role: string): boolean {
5
+ return user?.roles?.includes(role) ?? false
6
+ }
7
+
8
+ /** Check if user has any of the specified roles */
9
+ export function hasAnyRole(user: User | null, roles: string[]): boolean {
10
+ if (!user?.roles) return false
11
+ return roles.some((role) => user.roles.includes(role))
12
+ }
13
+
14
+ /** Check if user has all of the specified roles */
15
+ export function hasAllRoles(user: User | null, roles: string[]): boolean {
16
+ if (!user?.roles) return false
17
+ return roles.every((role) => user.roles.includes(role))
18
+ }
19
+
20
+ /** Convenience role checks */
21
+ export function canAccessAdmin(user: User | null): boolean {
22
+ return hasRole(user, 'admin')
23
+ }
24
+
25
+ export function canAccessReviewer(user: User | null): boolean {
26
+ return hasAnyRole(user, ['admin', 'reviewer'])
27
+ }
28
+
29
+ /** Get the default portal URL based on highest-privilege role */
30
+ export function getDefaultPortal(roles: string[]): string {
31
+ if (roles.includes('admin')) return '/admin'
32
+ if (roles.includes('reviewer')) return '/reviewer'
33
+ if (roles.includes('parent')) return '/parent'
34
+ if (roles.includes('student')) return '/student'
35
+ return '/'
36
+ }
37
+
38
+ /** Get roles that the given user can assign to others */
39
+ export function getAssignableRoles(user: User | null): string[] {
40
+ if (!user) return []
41
+ if (hasRole(user, 'admin')) return ['admin', 'reviewer', 'parent', 'student']
42
+ if (hasRole(user, 'reviewer')) return ['student']
43
+ return []
44
+ }
@@ -0,0 +1,44 @@
1
+ /** User object — framework-agnostic, provider-agnostic */
2
+ export interface User {
3
+ uid: string
4
+ email: string | null
5
+ displayName: string | null
6
+ photoURL: string | null
7
+ roles: string[]
8
+ }
9
+
10
+ /** Auth state */
11
+ export type AuthStatus = 'loading' | 'authenticated' | 'unauthenticated'
12
+
13
+ export interface AuthState {
14
+ user: User | null
15
+ status: AuthStatus
16
+ }
17
+
18
+ /** OAuth providers */
19
+ export type OAuthProvider = string
20
+
21
+ /**
22
+ * AuthAdapter — interface implemented by provider adapters (e.g. Firebase, Supabase, Auth0).
23
+ * Consumers must provide an implementation of this adapter to the AuthProvider.
24
+ */
25
+ export interface AuthAdapter {
26
+ signIn(email: string, password: string): Promise<User>
27
+ signInWithOAuth(provider: OAuthProvider): Promise<User>
28
+ signUp(email: string, password: string, displayName: string): Promise<User>
29
+ signOut(): Promise<void>
30
+ resetPassword(email: string): Promise<void>
31
+ getToken(): Promise<string | null>
32
+ onAuthStateChange(callback: (user: User | null) => void): () => void
33
+ }
34
+
35
+ export interface AuthConfig {
36
+ /** The adapter implementation for your specific auth provider (Supabase, Firebase, Auth0, Custom, etc.) */
37
+ adapter: AuthAdapter
38
+ /** Token refresh interval in minutes. Default: 50 */
39
+ tokenRefreshInterval?: number
40
+ /** Enable E2E test mode with mock user */
41
+ testMode?: boolean
42
+ /** Mock user for test mode */
43
+ testUser?: User
44
+ }
@@ -0,0 +1,47 @@
1
+ import { cva } from '../shared/index.ts'
2
+ import type { TokenContract } from '../shared/index.ts'
3
+
4
+ export const avatarTokens: TokenContract = {
5
+ name: 'avatar',
6
+ tokens: {
7
+ bg: { variable: '--rfr-avatar-bg', fallback: 'hsl(var(--muted))' },
8
+ fg: { variable: '--rfr-avatar-fg', fallback: 'hsl(var(--muted-foreground))' },
9
+ border: { variable: '--rfr-avatar-border', fallback: 'hsl(var(--border))' },
10
+ },
11
+ }
12
+
13
+ export const avatarVariants = cva({
14
+ base: 'relative flex shrink-0 overflow-hidden rounded-full',
15
+ variants: {
16
+ size: {
17
+ xs: 'h-6 w-6',
18
+ sm: 'h-8 w-8',
19
+ md: 'h-10 w-10',
20
+ lg: 'h-12 w-12',
21
+ xl: 'h-16 w-16',
22
+ },
23
+ },
24
+ defaultVariants: {
25
+ size: 'md',
26
+ },
27
+ })
28
+
29
+ export const avatarImageVariants = cva({
30
+ base: 'aspect-square h-full w-full object-cover',
31
+ })
32
+
33
+ export const avatarFallbackVariants = cva({
34
+ base: 'flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground',
35
+ variants: {
36
+ size: {
37
+ xs: 'text-xs',
38
+ sm: 'text-xs',
39
+ md: 'text-sm',
40
+ lg: 'text-base',
41
+ xl: 'text-lg',
42
+ },
43
+ },
44
+ defaultVariants: {
45
+ size: 'md',
46
+ },
47
+ })
@@ -0,0 +1,73 @@
1
+ import type { AccessibilityProps } from '../shared/index.ts'
2
+
3
+ export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
4
+
5
+ export type AvatarLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error'
6
+
7
+ export interface AvatarProps {
8
+ src?: string
9
+ alt?: string
10
+ fallback?: string
11
+ size?: AvatarSize
12
+ }
13
+
14
+ export interface AvatarAPI {
15
+ /** ARIA attributes to spread on the root element */
16
+ ariaProps: Partial<AccessibilityProps>
17
+ /** Data attributes for CSS styling hooks */
18
+ dataAttributes: Record<string, string>
19
+ /** Image ARIA props */
20
+ imageProps: {
21
+ alt: string
22
+ role: string
23
+ }
24
+ /** Fallback text (initials) */
25
+ fallbackText: string
26
+ /** Current state */
27
+ state: {
28
+ size: AvatarSize
29
+ hasSrc: boolean
30
+ }
31
+ }
32
+
33
+ /**
34
+ * Extract initials from a name or fallback string.
35
+ * Takes first letter of first two words, uppercased.
36
+ */
37
+ export function getInitials(name: string): string {
38
+ const parts = name.trim().split(/\s+/)
39
+ if (parts.length === 0 || parts[0] === '') return ''
40
+ if (parts.length === 1) return parts[0].charAt(0).toUpperCase()
41
+ return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase()
42
+ }
43
+
44
+ export function createAvatar(props: AvatarProps = {}): AvatarAPI {
45
+ const { src, alt = '', fallback = '', size = 'md' } = props
46
+
47
+ const ariaProps: Partial<AccessibilityProps> = {
48
+ role: 'img',
49
+ }
50
+ if (alt) {
51
+ ariaProps['aria-label'] = alt
52
+ }
53
+
54
+ const fallbackText = fallback ? getInitials(fallback) : (alt ? getInitials(alt) : '')
55
+
56
+ const dataAttributes: Record<string, string> = {
57
+ 'data-slot': 'avatar',
58
+ }
59
+
60
+ return {
61
+ ariaProps,
62
+ dataAttributes,
63
+ imageProps: {
64
+ alt,
65
+ role: 'img',
66
+ },
67
+ fallbackText,
68
+ state: {
69
+ size,
70
+ hasSrc: !!src,
71
+ },
72
+ }
73
+ }
@@ -0,0 +1,15 @@
1
+ export {
2
+ createAvatar,
3
+ getInitials,
4
+ type AvatarProps,
5
+ type AvatarAPI,
6
+ type AvatarSize,
7
+ type AvatarLoadingStatus,
8
+ } from './avatar.js'
9
+
10
+ export {
11
+ avatarVariants,
12
+ avatarImageVariants,
13
+ avatarFallbackVariants,
14
+ avatarTokens,
15
+ } from './avatar.styles.js'