@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,81 @@
1
+ ---
2
+ import { animatedTextVariants } from '../animated-text/index.ts'
3
+ import { cn } from '../shared/index.ts'
4
+
5
+ interface Props extends astroHTML.JSX.HTMLAttributes {
6
+ /** Array of words to cycle through */
7
+ words: string[]
8
+ /** Interval between word changes in ms. Default: 2500 */
9
+ interval?: number
10
+ /** Duration of the transition in ms. Default: 1000 */
11
+ transitionDuration?: number
12
+ }
13
+
14
+ const {
15
+ words,
16
+ interval = 2500,
17
+ transitionDuration = 1000,
18
+ class: className,
19
+ ...props
20
+ } = Astro.props
21
+
22
+ const classes = cn(animatedTextVariants({ state: 'idle' }), className)
23
+ ---
24
+
25
+ <span
26
+ data-rfr-animated-text
27
+ data-rfr-animated-words={JSON.stringify(words)}
28
+ data-rfr-animated-interval={interval}
29
+ data-rfr-animated-transition-duration={transitionDuration}
30
+ class={classes}
31
+ aria-live="polite"
32
+ aria-atomic="true"
33
+ {...props}
34
+ >
35
+ {words.length > 0 ? words[0] : ''}
36
+ </span>
37
+
38
+ <script>
39
+ function initAnimatedTexts() {
40
+ document.querySelectorAll<HTMLElement>('[data-rfr-animated-text]').forEach((el) => {
41
+ if (el.hasAttribute('data-rfr-animated-text-init')) return
42
+ el.setAttribute('data-rfr-animated-text-init', '')
43
+
44
+ const words: string[] = JSON.parse(el.getAttribute('data-rfr-animated-words') || '[]')
45
+ const interval = Number(el.getAttribute('data-rfr-animated-interval') || 2500)
46
+ const transitionDuration = Number(el.getAttribute('data-rfr-animated-transition-duration') || 1000)
47
+
48
+ if (words.length <= 1) return
49
+
50
+ const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches
51
+ let currentIndex = 0
52
+
53
+ const tick = setInterval(() => {
54
+ if (prefersReducedMotion) {
55
+ currentIndex = (currentIndex + 1) % words.length
56
+ el.textContent = words[currentIndex]
57
+ } else {
58
+ // Exit transition
59
+ el.style.opacity = '0'
60
+ setTimeout(() => {
61
+ currentIndex = (currentIndex + 1) % words.length
62
+ el.textContent = words[currentIndex]
63
+ // Enter transition
64
+ el.style.opacity = '1'
65
+ }, transitionDuration / 2)
66
+ }
67
+ }, interval)
68
+
69
+ // Set transition style if motion is allowed
70
+ if (!prefersReducedMotion) {
71
+ el.style.transition = `opacity ${transitionDuration / 2}ms ease`
72
+ }
73
+
74
+ // Cleanup on removal (Astro page transitions)
75
+ el.addEventListener('astro:before-swap', () => clearInterval(tick), { once: true })
76
+ })
77
+ }
78
+
79
+ initAnimatedTexts()
80
+ document.addEventListener('astro:after-swap', initAnimatedTexts)
81
+ </script>
@@ -0,0 +1,90 @@
1
+ ---
2
+ import { typewriterVariants } from '../animated-text/index.ts'
3
+ import { cn } from '../shared/index.ts'
4
+
5
+ interface Props extends astroHTML.JSX.HTMLAttributes {
6
+ /** The text to type out */
7
+ text: string
8
+ /** Typing speed in ms per character. Default: 50 */
9
+ speed?: number
10
+ /** Delay before starting in ms. Default: 0 */
11
+ startDelay?: number
12
+ }
13
+
14
+ const {
15
+ text,
16
+ speed = 50,
17
+ startDelay = 0,
18
+ class: className,
19
+ ...props
20
+ } = Astro.props
21
+
22
+ const classes = cn(typewriterVariants({ cursor: 'blinking' }), className)
23
+ ---
24
+
25
+ <span
26
+ data-rfr-typewriter
27
+ data-rfr-typewriter-text={text}
28
+ data-rfr-typewriter-speed={speed}
29
+ data-rfr-typewriter-start-delay={startDelay}
30
+ class={classes}
31
+ aria-label={text}
32
+ {...props}
33
+ ></span>
34
+
35
+ <script>
36
+ function initTypewriters() {
37
+ document.querySelectorAll<HTMLElement>('[data-rfr-typewriter]').forEach((el) => {
38
+ if (el.hasAttribute('data-rfr-typewriter-init')) return
39
+ el.setAttribute('data-rfr-typewriter-init', '')
40
+
41
+ const text = el.getAttribute('data-rfr-typewriter-text') || ''
42
+ const speed = Number(el.getAttribute('data-rfr-typewriter-speed') || 50)
43
+ const startDelay = Number(el.getAttribute('data-rfr-typewriter-start-delay') || 0)
44
+
45
+ const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches
46
+
47
+ if (prefersReducedMotion) {
48
+ el.textContent = text
49
+ // Remove cursor classes when complete
50
+ el.className = el.className
51
+ .replace(/after:inline-block/g, '')
52
+ .replace(/after:w-\[2px\]/g, '')
53
+ .replace(/after:h-\[1em\]/g, '')
54
+ .replace(/after:bg-current/g, '')
55
+ .replace(/after:ml-\[1px\]/g, '')
56
+ .replace(/after:animate-blink/g, '')
57
+ .replace(/after:align-text-bottom/g, '')
58
+ return
59
+ }
60
+
61
+ let currentIndex = 0
62
+
63
+ const startTimeout = setTimeout(() => {
64
+ function tick() {
65
+ if (currentIndex < text.length) {
66
+ currentIndex += 1
67
+ el.textContent = text.slice(0, currentIndex)
68
+ setTimeout(tick, speed)
69
+ } else {
70
+ // Typing complete — remove cursor
71
+ el.className = el.className
72
+ .replace(/after:inline-block/g, '')
73
+ .replace(/after:w-\[2px\]/g, '')
74
+ .replace(/after:h-\[1em\]/g, '')
75
+ .replace(/after:bg-current/g, '')
76
+ .replace(/after:ml-\[1px\]/g, '')
77
+ .replace(/after:animate-blink/g, '')
78
+ .replace(/after:align-text-bottom/g, '')
79
+ }
80
+ }
81
+ tick()
82
+ }, startDelay)
83
+
84
+ el.addEventListener('astro:before-swap', () => clearTimeout(startTimeout), { once: true })
85
+ })
86
+ }
87
+
88
+ initTypewriters()
89
+ document.addEventListener('astro:after-swap', initTypewriters)
90
+ </script>
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,195 @@
1
+ ---
2
+ /**
3
+ * AppShell — root layout container for app-style layouts with sidebar, header, and main content.
4
+ * Includes a client-side script for responsive breakpoint detection and sidebar toggling.
5
+ */
6
+ import { createAppShell, type AppShellConfig } from '../app-shell/index.ts'
7
+ import { cn } from '../shared/index.ts'
8
+
9
+ interface Props extends astroHTML.JSX.HTMLAttributes {
10
+ /** Sidebar width when expanded (default '16rem') */
11
+ sidebarWidth?: string
12
+ /** Sidebar width when collapsed (default '4rem') */
13
+ sidebarCollapsedWidth?: string
14
+ /** Header height (default '3.5rem') */
15
+ headerHeight?: string
16
+ /** Breakpoint below which layout is mobile (default 768) */
17
+ mobileBreakpoint?: number
18
+ /** Breakpoint below which layout is tablet (default 1024) */
19
+ tabletBreakpoint?: number
20
+ /** Sidebar position (default 'left') */
21
+ sidebarPosition?: 'left' | 'right'
22
+ /** Whether sidebar can collapse on desktop (default true) */
23
+ sidebarCollapsible?: boolean
24
+ /** Whether sidebar starts collapsed (default false) */
25
+ sidebarDefaultCollapsed?: boolean
26
+ /** Mobile nav position (default 'bottom') */
27
+ mobileNavPosition?: 'bottom' | 'none'
28
+ }
29
+
30
+ const {
31
+ sidebarWidth,
32
+ sidebarCollapsedWidth,
33
+ headerHeight,
34
+ mobileBreakpoint,
35
+ tabletBreakpoint,
36
+ sidebarPosition,
37
+ sidebarCollapsible,
38
+ sidebarDefaultCollapsed,
39
+ mobileNavPosition,
40
+ class: className,
41
+ ...props
42
+ } = Astro.props
43
+
44
+ const config: AppShellConfig = {
45
+ sidebarWidth,
46
+ sidebarCollapsedWidth,
47
+ headerHeight,
48
+ mobileBreakpoint,
49
+ tabletBreakpoint,
50
+ sidebarPosition,
51
+ sidebarCollapsible,
52
+ sidebarDefaultCollapsed,
53
+ mobileNavPosition,
54
+ }
55
+
56
+ const api = createAppShell(config)
57
+ const cssVars = api.getCSSVariables()
58
+ const styleStr = Object.entries(cssVars).map(([k, v]) => `${k}:${v}`).join(';')
59
+
60
+ const configJSON = JSON.stringify(api.config)
61
+ ---
62
+
63
+ <div
64
+ class={cn('flex h-screen w-full overflow-hidden', className)}
65
+ style={styleStr}
66
+ data-rfr-shell
67
+ data-rfr-shell-config={configJSON}
68
+ {...props}
69
+ >
70
+ <slot />
71
+ </div>
72
+
73
+ <script is:inline>
74
+ ;(function () {
75
+ var shell = document.querySelector('[data-rfr-shell]')
76
+ if (!shell) return
77
+
78
+ var config = {}
79
+ try { config = JSON.parse(shell.getAttribute('data-rfr-shell-config') || '{}') } catch (_) { /* */ }
80
+
81
+ var mobileBp = config.mobileBreakpoint || 768
82
+ var tabletBp = config.tabletBreakpoint || 1024
83
+ var sidebarCollapsible = config.sidebarCollapsible !== false
84
+ var sidebarWidth = config.sidebarWidth || '16rem'
85
+ var sidebarCollapsedWidth = config.sidebarCollapsedWidth || '4rem'
86
+ var sidebarPosition = config.sidebarPosition || 'left'
87
+
88
+ var state = {
89
+ breakpoint: 'desktop',
90
+ sidebarOpen: false,
91
+ sidebarCollapsed: config.sidebarDefaultCollapsed || false,
92
+ }
93
+
94
+ function isMobile() { return state.breakpoint === 'mobile' }
95
+
96
+ function updateBreakpoint() {
97
+ var w = window.innerWidth
98
+ var bp = w < mobileBp ? 'mobile' : w < tabletBp ? 'tablet' : 'desktop'
99
+ if (bp !== state.breakpoint) {
100
+ state.breakpoint = bp
101
+ if (bp !== 'mobile') state.sidebarOpen = false
102
+ applyState()
103
+ }
104
+ }
105
+
106
+ function toggleSidebar() {
107
+ if (isMobile()) {
108
+ state.sidebarOpen = !state.sidebarOpen
109
+ } else if (sidebarCollapsible) {
110
+ state.sidebarCollapsed = !state.sidebarCollapsed
111
+ }
112
+ applyState()
113
+ }
114
+
115
+ function closeSidebar() {
116
+ state.sidebarOpen = false
117
+ applyState()
118
+ }
119
+
120
+ function applyState() {
121
+ var sidebar = shell.querySelector('[data-rfr-shell-sidebar]')
122
+ var overlay = shell.querySelector('[data-rfr-shell-overlay]')
123
+ var mobileNav = shell.querySelector('[data-rfr-shell-mobile-nav]')
124
+ var hamburgers = shell.querySelectorAll('[data-rfr-shell-toggle]')
125
+
126
+ // Update CSS variable for sidebar width
127
+ var currentWidth = state.sidebarCollapsed ? sidebarCollapsedWidth : sidebarWidth
128
+ shell.style.setProperty('--shell-sidebar-width', currentWidth)
129
+
130
+ if (sidebar) {
131
+ if (isMobile()) {
132
+ sidebar.style.position = 'fixed'
133
+ sidebar.style.top = '0'
134
+ sidebar.style.zIndex = '40'
135
+ sidebar.style.width = sidebarWidth
136
+ sidebar.style[sidebarPosition === 'right' ? 'right' : 'left'] = '0'
137
+ sidebar.style.transform = state.sidebarOpen
138
+ ? 'translateX(0)'
139
+ : sidebarPosition === 'right' ? 'translateX(100%)' : 'translateX(-100%)'
140
+ sidebar.removeAttribute('data-collapsed')
141
+ } else {
142
+ sidebar.style.position = 'relative'
143
+ sidebar.style.transform = ''
144
+ sidebar.style.width = currentWidth
145
+ if (state.sidebarCollapsed) {
146
+ sidebar.setAttribute('data-collapsed', '')
147
+ } else {
148
+ sidebar.removeAttribute('data-collapsed')
149
+ }
150
+ }
151
+ if (state.sidebarOpen) {
152
+ sidebar.setAttribute('data-open', '')
153
+ } else {
154
+ sidebar.removeAttribute('data-open')
155
+ }
156
+ }
157
+
158
+ if (overlay) {
159
+ if (isMobile() && state.sidebarOpen) {
160
+ overlay.style.display = ''
161
+ } else {
162
+ overlay.style.display = 'none'
163
+ }
164
+ }
165
+
166
+ if (mobileNav) {
167
+ mobileNav.style.display = isMobile() ? '' : 'none'
168
+ }
169
+
170
+ hamburgers.forEach(function (btn) {
171
+ btn.setAttribute('aria-expanded', String(state.sidebarOpen))
172
+ })
173
+ }
174
+
175
+ // Bind toggle buttons
176
+ shell.addEventListener('click', function (e) {
177
+ var toggle = e.target.closest('[data-rfr-shell-toggle]')
178
+ if (toggle) {
179
+ toggleSidebar()
180
+ return
181
+ }
182
+ var overlayClick = e.target.closest('[data-rfr-shell-overlay]')
183
+ if (overlayClick) {
184
+ closeSidebar()
185
+ }
186
+ })
187
+
188
+ // Expose API for external scripts
189
+ window.__rfr_shell = { toggleSidebar: toggleSidebar, closeSidebar: closeSidebar, state: state }
190
+
191
+ // Responsive listener
192
+ window.addEventListener('resize', updateBreakpoint)
193
+ updateBreakpoint()
194
+ })()
195
+ </script>
@@ -0,0 +1,29 @@
1
+ ---
2
+ /**
3
+ * AppShellContent — scrollable content area within AppShellMain.
4
+ */
5
+ import { cn } from '../shared/index.ts'
6
+
7
+ interface Props extends astroHTML.JSX.HTMLAttributes {
8
+ /** Tailwind max-width class suffix, e.g. '6xl' -> max-w-6xl */
9
+ maxWidth?: string
10
+ }
11
+
12
+ const { maxWidth, class: className, ...props } = Astro.props
13
+
14
+ const mwClass = maxWidth ? `max-w-${maxWidth} mx-auto w-full` : ''
15
+ ---
16
+
17
+ <main
18
+ role="main"
19
+ class={cn(
20
+ 'flex-1 overflow-y-auto',
21
+ mwClass,
22
+ 'px-4 sm:px-6 lg:px-8 py-6',
23
+ className,
24
+ )}
25
+ data-rfr-shell-content
26
+ {...props}
27
+ >
28
+ <slot />
29
+ </main>
@@ -0,0 +1,54 @@
1
+ ---
2
+ /**
3
+ * AppShellHeader — header area within the AppShell.
4
+ * On mobile, automatically renders a hamburger toggle button.
5
+ */
6
+ import { cn } from '../shared/index.ts'
7
+
8
+ interface Props extends astroHTML.JSX.HTMLAttributes {
9
+ /** Hide the hamburger menu button */
10
+ hideToggle?: boolean
11
+ }
12
+
13
+ const { hideToggle, class: className, ...props } = Astro.props
14
+ ---
15
+
16
+ <header
17
+ role="banner"
18
+ class={cn(
19
+ 'sticky top-0 z-30 flex items-center shrink-0',
20
+ 'h-[var(--shell-header-height)]',
21
+ 'border-b bg-background px-4',
22
+ className,
23
+ )}
24
+ data-rfr-shell-header
25
+ {...props}
26
+ >
27
+ {!hideToggle && (
28
+ <button
29
+ type="button"
30
+ aria-label="Toggle sidebar"
31
+ aria-expanded="false"
32
+ class="inline-flex items-center justify-center p-2 mr-2 md:hidden"
33
+ data-rfr-shell-toggle
34
+ >
35
+ <svg
36
+ xmlns="http://www.w3.org/2000/svg"
37
+ width="24"
38
+ height="24"
39
+ viewBox="0 0 24 24"
40
+ fill="none"
41
+ stroke="currentColor"
42
+ stroke-width="2"
43
+ stroke-linecap="round"
44
+ stroke-linejoin="round"
45
+ aria-hidden="true"
46
+ >
47
+ <line x1="3" y1="6" x2="21" y2="6" />
48
+ <line x1="3" y1="12" x2="21" y2="12" />
49
+ <line x1="3" y1="18" x2="21" y2="18" />
50
+ </svg>
51
+ </button>
52
+ )}
53
+ <slot />
54
+ </header>
@@ -0,0 +1,18 @@
1
+ ---
2
+ /**
3
+ * AppShellMain — main content area wrapper (flex column).
4
+ */
5
+ import { cn } from '../shared/index.ts'
6
+
7
+ interface Props extends astroHTML.JSX.HTMLAttributes {}
8
+
9
+ const { class: className, ...props } = Astro.props
10
+ ---
11
+
12
+ <div
13
+ class={cn('flex flex-1 flex-col min-w-0 h-full', className)}
14
+ data-rfr-shell-main
15
+ {...props}
16
+ >
17
+ <slot />
18
+ </div>
@@ -0,0 +1,27 @@
1
+ ---
2
+ /**
3
+ * AppShellMobileNav — fixed bottom navigation bar, visible only on mobile.
4
+ */
5
+ import { cn } from '../shared/index.ts'
6
+
7
+ interface Props extends astroHTML.JSX.HTMLAttributes {}
8
+
9
+ const { class: className, ...props } = Astro.props
10
+ ---
11
+
12
+ <nav
13
+ role="navigation"
14
+ aria-label="Mobile navigation"
15
+ class={cn(
16
+ 'fixed bottom-0 left-0 right-0 z-30',
17
+ 'flex items-center justify-around',
18
+ 'border-t bg-background',
19
+ 'h-14',
20
+ className,
21
+ )}
22
+ style="display:none;"
23
+ data-rfr-shell-mobile-nav
24
+ {...props}
25
+ >
26
+ <slot />
27
+ </nav>
@@ -0,0 +1,21 @@
1
+ ---
2
+ /**
3
+ * AppShellOverlay — backdrop overlay shown when mobile sidebar is open.
4
+ */
5
+ import { cn } from '../shared/index.ts'
6
+
7
+ interface Props extends astroHTML.JSX.HTMLAttributes {}
8
+
9
+ const { class: className, ...props } = Astro.props
10
+ ---
11
+
12
+ <div
13
+ aria-hidden="true"
14
+ class={cn(
15
+ 'fixed inset-0 z-30 bg-black/50 transition-opacity',
16
+ className,
17
+ )}
18
+ style="display:none;"
19
+ data-rfr-shell-overlay
20
+ {...props}
21
+ />
@@ -0,0 +1,26 @@
1
+ ---
2
+ /**
3
+ * AppShellSidebar — sidebar navigation area within the AppShell.
4
+ */
5
+ import { cn } from '../shared/index.ts'
6
+
7
+ interface Props extends astroHTML.JSX.HTMLAttributes {}
8
+
9
+ const { class: className, ...props } = Astro.props
10
+ ---
11
+
12
+ <aside
13
+ role="navigation"
14
+ aria-label="Sidebar"
15
+ class={cn(
16
+ 'flex flex-col shrink-0 overflow-y-auto overflow-x-hidden',
17
+ 'bg-background border-r',
18
+ 'transition-[width,transform] duration-200 ease-in-out',
19
+ 'h-full relative w-[var(--shell-sidebar-width)]',
20
+ className,
21
+ )}
22
+ data-rfr-shell-sidebar
23
+ {...props}
24
+ >
25
+ <slot />
26
+ </aside>
@@ -0,0 +1,31 @@
1
+ ---
2
+ /**
3
+ * AuthShell — centered layout for authentication pages (sign-in, sign-up, etc.).
4
+ */
5
+ import { createAuthShell, type AuthShellConfig } from '../app-shell/index.ts'
6
+ import { cn } from '../shared/index.ts'
7
+
8
+ interface Props extends astroHTML.JSX.HTMLAttributes {
9
+ /** Card max-width preset (default 'sm') */
10
+ maxWidth?: 'xs' | 'sm' | 'md'
11
+ /** Card position (default 'center') */
12
+ position?: 'center' | 'left'
13
+ /** Show decorative background (default true) */
14
+ showBackground?: boolean
15
+ }
16
+
17
+ const { maxWidth, position, showBackground, class: className, ...props } = Astro.props
18
+
19
+ const config: AuthShellConfig = { maxWidth, position, showBackground }
20
+ const api = createAuthShell(config)
21
+ ---
22
+
23
+ <div
24
+ role="main"
25
+ aria-label="Authentication"
26
+ class={cn(api.containerClasses, className)}
27
+ data-rfr-auth-shell
28
+ {...props}
29
+ >
30
+ <slot />
31
+ </div>
@@ -0,0 +1,24 @@
1
+ ---
2
+ /**
3
+ * AuthShellCard — card container within AuthShell for form content.
4
+ */
5
+ import { createAuthShell, type AuthShellConfig } from '../app-shell/index.ts'
6
+ import { cn } from '../shared/index.ts'
7
+
8
+ interface Props extends astroHTML.JSX.HTMLAttributes {
9
+ /** Card max-width preset (default 'sm') */
10
+ maxWidth?: 'xs' | 'sm' | 'md'
11
+ }
12
+
13
+ const { maxWidth, class: className, ...props } = Astro.props
14
+
15
+ const api = createAuthShell({ maxWidth })
16
+ ---
17
+
18
+ <div
19
+ class={cn(api.cardClasses, className)}
20
+ data-rfr-auth-card
21
+ {...props}
22
+ >
23
+ <slot />
24
+ </div>
@@ -0,0 +1,36 @@
1
+ ---
2
+ /**
3
+ * PageShell — root layout for marketing/landing pages with nav, sections, footer.
4
+ */
5
+ import { createPageShell, type PageShellConfig } from '../app-shell/index.ts'
6
+ import { cn } from '../shared/index.ts'
7
+
8
+ interface Props extends astroHTML.JSX.HTMLAttributes {
9
+ /** Max width for contained sections (default '80rem') */
10
+ maxWidth?: string
11
+ /** Navigation bar height (default '4rem') */
12
+ navHeight?: string
13
+ /** Whether nav is transparent (default false) */
14
+ navTransparent?: boolean
15
+ /** Whether nav is sticky (default true) */
16
+ navSticky?: boolean
17
+ /** Number of footer columns (default 4) */
18
+ footerColumns?: number
19
+ }
20
+
21
+ const { maxWidth, navHeight, navTransparent, navSticky, footerColumns, class: className, ...props } = Astro.props
22
+
23
+ const config: PageShellConfig = { maxWidth, navHeight, navTransparent, navSticky, footerColumns }
24
+ const api = createPageShell(config)
25
+ const cssVars = api.getCSSVariables()
26
+ const styleStr = Object.entries(cssVars).map(([k, v]) => `${k}:${v}`).join(';')
27
+ ---
28
+
29
+ <div
30
+ class={cn('flex min-h-screen flex-col', className)}
31
+ style={styleStr}
32
+ data-rfr-page-shell
33
+ {...props}
34
+ >
35
+ <slot />
36
+ </div>
@@ -0,0 +1,30 @@
1
+ ---
2
+ /**
3
+ * PageShellFooter — footer area within PageShell.
4
+ */
5
+ import { cn } from '../shared/index.ts'
6
+
7
+ interface Props extends astroHTML.JSX.HTMLAttributes {
8
+ /** Number of grid columns (default 4) */
9
+ columns?: number
10
+ }
11
+
12
+ const { columns = 4, class: className, ...props } = Astro.props
13
+ ---
14
+
15
+ <footer
16
+ role="contentinfo"
17
+ class={cn(
18
+ 'border-t bg-muted py-12 px-4 sm:px-6 lg:px-8',
19
+ className,
20
+ )}
21
+ data-rfr-page-footer
22
+ {...props}
23
+ >
24
+ <div
25
+ class="mx-auto max-w-[var(--page-max-width)] grid gap-8"
26
+ style={`grid-template-columns: repeat(${columns}, minmax(0, 1fr));`}
27
+ >
28
+ <slot />
29
+ </div>
30
+ </footer>