@refraction-ui/react 0.4.1 → 0.5.0

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 (288) hide show
  1. package/README.md +9 -1
  2. package/dist/chunk-ZWRGVWUY.js +120 -0
  3. package/dist/chunk-ZWRGVWUY.js.map +1 -0
  4. package/dist/form.cjs +315 -0
  5. package/dist/form.cjs.map +1 -0
  6. package/dist/form.d.cts +1 -0
  7. package/dist/form.d.ts +1 -0
  8. package/dist/form.js +196 -0
  9. package/dist/form.js.map +1 -0
  10. package/dist/index.cjs +45 -258
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +74 -76
  13. package/dist/index.d.ts +74 -76
  14. package/dist/index.js +47 -334
  15. package/dist/index.js.map +1 -1
  16. package/dist/internal/animated-text/index.d.cts +47 -0
  17. package/dist/internal/animated-text/index.d.ts +47 -0
  18. package/dist/internal/app-shell/index.d.cts +128 -0
  19. package/dist/internal/app-shell/index.d.ts +128 -0
  20. package/dist/internal/auth/index.d.cts +74 -0
  21. package/dist/internal/auth/index.d.ts +74 -0
  22. package/dist/internal/avatar/index.d.cts +53 -0
  23. package/dist/internal/avatar/index.d.ts +53 -0
  24. package/dist/internal/avatar-group/index.d.cts +70 -0
  25. package/dist/internal/avatar-group/index.d.ts +70 -0
  26. package/dist/internal/badge/index.d.cts +26 -0
  27. package/dist/internal/badge/index.d.ts +26 -0
  28. package/dist/internal/bottom-nav/index.d.cts +29 -0
  29. package/dist/internal/bottom-nav/index.d.ts +29 -0
  30. package/dist/internal/breadcrumbs/index.d.cts +38 -0
  31. package/dist/internal/breadcrumbs/index.d.ts +38 -0
  32. package/dist/internal/button/index.d.cts +34 -0
  33. package/dist/internal/button/index.d.ts +34 -0
  34. package/dist/internal/calendar/index.d.cts +73 -0
  35. package/dist/internal/calendar/index.d.ts +73 -0
  36. package/dist/internal/card/index.d.cts +62 -0
  37. package/dist/internal/card/index.d.ts +62 -0
  38. package/dist/internal/card-grid/index.d.cts +10 -0
  39. package/dist/internal/card-grid/index.d.ts +10 -0
  40. package/dist/internal/checkbox/index.d.cts +40 -0
  41. package/dist/internal/checkbox/index.d.ts +40 -0
  42. package/dist/internal/code-editor/index.d.cts +47 -0
  43. package/dist/internal/code-editor/index.d.ts +47 -0
  44. package/dist/internal/collapsible/index.d.cts +43 -0
  45. package/dist/internal/collapsible/index.d.ts +43 -0
  46. package/dist/internal/command/index.d.cts +80 -0
  47. package/dist/internal/command/index.d.ts +80 -0
  48. package/dist/internal/content-protection/index.d.cts +47 -0
  49. package/dist/internal/content-protection/index.d.ts +47 -0
  50. package/dist/internal/data-table/index.d.cts +73 -0
  51. package/dist/internal/data-table/index.d.ts +73 -0
  52. package/dist/internal/date-picker/index.d.cts +98 -0
  53. package/dist/internal/date-picker/index.d.ts +98 -0
  54. package/dist/internal/device-frame/index.d.cts +40 -0
  55. package/dist/internal/device-frame/index.d.ts +40 -0
  56. package/dist/internal/dialog/index.d.cts +54 -0
  57. package/dist/internal/dialog/index.d.ts +54 -0
  58. package/dist/internal/dropdown-menu/index.d.cts +55 -0
  59. package/dist/internal/dropdown-menu/index.d.ts +55 -0
  60. package/dist/internal/emoji-picker/index.d.cts +77 -0
  61. package/dist/internal/emoji-picker/index.d.ts +77 -0
  62. package/dist/internal/feedback-dialog/index.d.cts +55 -0
  63. package/dist/internal/feedback-dialog/index.d.ts +55 -0
  64. package/dist/internal/file-upload/index.d.cts +91 -0
  65. package/dist/internal/file-upload/index.d.ts +91 -0
  66. package/dist/internal/footer/index.d.cts +30 -0
  67. package/dist/internal/footer/index.d.ts +30 -0
  68. package/dist/internal/inline-editor/index.d.cts +52 -0
  69. package/dist/internal/inline-editor/index.d.ts +52 -0
  70. package/dist/internal/input/index.d.cts +38 -0
  71. package/dist/internal/input/index.d.ts +38 -0
  72. package/dist/internal/input-group/index.d.cts +35 -0
  73. package/dist/internal/input-group/index.d.ts +35 -0
  74. package/dist/internal/install-prompt/index.d.cts +36 -0
  75. package/dist/internal/install-prompt/index.d.ts +36 -0
  76. package/dist/internal/keyboard-shortcut/index.d.cts +49 -0
  77. package/dist/internal/keyboard-shortcut/index.d.ts +49 -0
  78. package/dist/internal/language-selector/index.d.cts +63 -0
  79. package/dist/internal/language-selector/index.d.ts +63 -0
  80. package/dist/internal/markdown-renderer/index.d.cts +40 -0
  81. package/dist/internal/markdown-renderer/index.d.ts +40 -0
  82. package/dist/internal/mobile-nav/index.d.cts +45 -0
  83. package/dist/internal/mobile-nav/index.d.ts +45 -0
  84. package/dist/internal/navbar/index.d.cts +30 -0
  85. package/dist/internal/navbar/index.d.ts +30 -0
  86. package/dist/internal/otp-input/index.d.cts +66 -0
  87. package/dist/internal/otp-input/index.d.ts +66 -0
  88. package/dist/internal/payment/index.d.cts +9 -0
  89. package/dist/internal/payment/index.d.ts +9 -0
  90. package/dist/internal/popover/index.d.cts +46 -0
  91. package/dist/internal/popover/index.d.ts +46 -0
  92. package/dist/internal/presence-indicator/index.d.cts +38 -0
  93. package/dist/internal/presence-indicator/index.d.ts +38 -0
  94. package/dist/internal/progress-display/index.d.cts +60 -0
  95. package/dist/internal/progress-display/index.d.ts +60 -0
  96. package/dist/internal/radio/index.d.ts +43 -0
  97. package/dist/internal/react-accordion/index.d.ts +22 -0
  98. package/dist/internal/react-animated-text/index.d.cts +12 -0
  99. package/dist/internal/react-animated-text/index.d.ts +12 -0
  100. package/dist/internal/react-app-shell/index.d.cts +169 -0
  101. package/dist/internal/react-app-shell/index.d.ts +169 -0
  102. package/dist/internal/react-auth/index.d.cts +59 -0
  103. package/dist/internal/react-auth/index.d.ts +59 -0
  104. package/dist/internal/react-avatar/index.d.cts +20 -0
  105. package/dist/internal/react-avatar/index.d.ts +20 -0
  106. package/dist/internal/react-avatar-group/index.d.cts +33 -0
  107. package/dist/internal/react-avatar-group/index.d.ts +33 -0
  108. package/dist/internal/react-badge/index.d.cts +17 -0
  109. package/dist/internal/react-badge/index.d.ts +17 -0
  110. package/dist/internal/react-bottom-nav/index.d.cts +19 -0
  111. package/dist/internal/react-bottom-nav/index.d.ts +19 -0
  112. package/dist/internal/react-breadcrumbs/index.d.cts +24 -0
  113. package/dist/internal/react-breadcrumbs/index.d.ts +24 -0
  114. package/dist/internal/react-button/index.d.cts +21 -0
  115. package/dist/internal/react-button/index.d.ts +21 -0
  116. package/dist/internal/react-calendar/index.d.cts +44 -0
  117. package/dist/internal/react-calendar/index.d.ts +44 -0
  118. package/dist/internal/react-callout/index.d.cts +12 -0
  119. package/dist/internal/react-callout/index.d.ts +12 -0
  120. package/dist/internal/react-card/index.d.cts +29 -0
  121. package/dist/internal/react-card/index.d.ts +29 -0
  122. package/dist/internal/react-card-grid/index.d.cts +8 -0
  123. package/dist/internal/react-card-grid/index.d.ts +8 -0
  124. package/dist/internal/react-carousel/index.d.ts +22 -0
  125. package/dist/internal/react-checkbox/index.d.cts +18 -0
  126. package/dist/internal/react-checkbox/index.d.ts +18 -0
  127. package/dist/internal/react-code-block/index.d.cts +7 -0
  128. package/dist/internal/react-code-block/index.d.ts +7 -0
  129. package/dist/internal/react-code-editor/index.d.cts +28 -0
  130. package/dist/internal/react-code-editor/index.d.ts +28 -0
  131. package/dist/internal/react-collapsible/index.d.cts +29 -0
  132. package/dist/internal/react-collapsible/index.d.ts +29 -0
  133. package/dist/internal/react-combobox/index.d.cts +94 -0
  134. package/dist/internal/react-combobox/index.d.ts +94 -0
  135. package/dist/internal/react-command/index.d.cts +51 -0
  136. package/dist/internal/react-command/index.d.ts +51 -0
  137. package/dist/internal/react-content-protection/index.d.cts +22 -0
  138. package/dist/internal/react-content-protection/index.d.ts +22 -0
  139. package/dist/internal/react-data-table/index.d.cts +22 -0
  140. package/dist/internal/react-data-table/index.d.ts +22 -0
  141. package/dist/internal/react-date-picker/index.d.cts +23 -0
  142. package/dist/internal/react-date-picker/index.d.ts +23 -0
  143. package/dist/internal/react-device-frame/index.d.cts +37 -0
  144. package/dist/internal/react-device-frame/index.d.ts +37 -0
  145. package/dist/internal/react-dialog/index.d.cts +49 -0
  146. package/dist/internal/react-dialog/index.d.ts +49 -0
  147. package/dist/internal/react-dropdown-menu/index.d.cts +37 -0
  148. package/dist/internal/react-dropdown-menu/index.d.ts +37 -0
  149. package/dist/internal/react-emoji-picker/index.d.cts +32 -0
  150. package/dist/internal/react-emoji-picker/index.d.ts +32 -0
  151. package/dist/internal/react-feedback-dialog/index.d.cts +40 -0
  152. package/dist/internal/react-feedback-dialog/index.d.ts +40 -0
  153. package/dist/internal/react-file-tree/index.d.cts +5 -0
  154. package/dist/internal/react-file-tree/index.d.ts +5 -0
  155. package/dist/internal/react-file-upload/index.d.cts +22 -0
  156. package/dist/internal/react-file-upload/index.d.ts +22 -0
  157. package/dist/internal/react-footer/index.d.cts +20 -0
  158. package/dist/internal/react-footer/index.d.ts +20 -0
  159. package/dist/internal/react-form/index.d.cts +85 -0
  160. package/dist/internal/react-form/index.d.ts +85 -0
  161. package/dist/internal/react-icon-system/index.d.cts +5 -0
  162. package/dist/internal/react-icon-system/index.d.ts +5 -0
  163. package/dist/internal/react-inline-editor/index.d.cts +17 -0
  164. package/dist/internal/react-inline-editor/index.d.ts +17 -0
  165. package/dist/internal/react-input/index.d.cts +31 -0
  166. package/dist/internal/react-input/index.d.ts +31 -0
  167. package/dist/internal/react-input-group/index.d.cts +34 -0
  168. package/dist/internal/react-input-group/index.d.ts +34 -0
  169. package/dist/internal/react-install-prompt/index.d.cts +24 -0
  170. package/dist/internal/react-install-prompt/index.d.ts +24 -0
  171. package/dist/internal/react-keyboard-shortcut/index.d.cts +57 -0
  172. package/dist/internal/react-keyboard-shortcut/index.d.ts +57 -0
  173. package/dist/internal/react-language-selector/index.d.cts +26 -0
  174. package/dist/internal/react-language-selector/index.d.ts +26 -0
  175. package/dist/internal/react-link-card/index.d.cts +5 -0
  176. package/dist/internal/react-link-card/index.d.ts +5 -0
  177. package/dist/internal/react-markdown-renderer/index.d.cts +20 -0
  178. package/dist/internal/react-markdown-renderer/index.d.ts +20 -0
  179. package/dist/internal/react-mobile-nav/index.d.cts +33 -0
  180. package/dist/internal/react-mobile-nav/index.d.ts +33 -0
  181. package/dist/internal/react-navbar/index.d.cts +25 -0
  182. package/dist/internal/react-navbar/index.d.ts +25 -0
  183. package/dist/internal/react-otp-input/index.d.cts +21 -0
  184. package/dist/internal/react-otp-input/index.d.ts +21 -0
  185. package/dist/internal/react-pagination/index.d.ts +7 -0
  186. package/dist/internal/react-payment/index.d.cts +9 -0
  187. package/dist/internal/react-payment/index.d.ts +9 -0
  188. package/dist/internal/react-popover/index.d.cts +33 -0
  189. package/dist/internal/react-popover/index.d.ts +33 -0
  190. package/dist/internal/react-presence-indicator/index.d.cts +34 -0
  191. package/dist/internal/react-presence-indicator/index.d.ts +34 -0
  192. package/dist/internal/react-progress-display/index.d.cts +21 -0
  193. package/dist/internal/react-progress-display/index.d.ts +21 -0
  194. package/dist/internal/react-radio/index.d.ts +33 -0
  195. package/dist/internal/react-reaction-bar/index.d.cts +34 -0
  196. package/dist/internal/react-reaction-bar/index.d.ts +34 -0
  197. package/dist/internal/react-resizable-layout/index.d.cts +36 -0
  198. package/dist/internal/react-resizable-layout/index.d.ts +36 -0
  199. package/dist/internal/react-rich-editor/index.d.cts +2 -0
  200. package/dist/internal/react-rich-editor/index.d.ts +2 -0
  201. package/dist/internal/react-search-bar/index.d.cts +32 -0
  202. package/dist/internal/react-search-bar/index.d.ts +32 -0
  203. package/dist/internal/react-select/index.d.cts +30 -0
  204. package/dist/internal/react-select/index.d.ts +30 -0
  205. package/dist/internal/react-sheet/index.d.cts +67 -0
  206. package/dist/internal/react-sheet/index.d.ts +67 -0
  207. package/dist/internal/react-sidebar/index.d.cts +23 -0
  208. package/dist/internal/react-sidebar/index.d.ts +23 -0
  209. package/dist/internal/react-skeleton/index.d.cts +31 -0
  210. package/dist/internal/react-skeleton/index.d.ts +31 -0
  211. package/dist/internal/react-skip-to-content/index.d.cts +9 -0
  212. package/dist/internal/react-skip-to-content/index.d.ts +9 -0
  213. package/dist/internal/react-slide-viewer/index.d.cts +23 -0
  214. package/dist/internal/react-slide-viewer/index.d.ts +23 -0
  215. package/dist/internal/react-slider/index.d.cts +1 -0
  216. package/dist/internal/react-slider/index.d.ts +1 -0
  217. package/dist/internal/react-status-indicator/index.d.cts +34 -0
  218. package/dist/internal/react-status-indicator/index.d.ts +34 -0
  219. package/dist/internal/react-steps/index.d.cts +19 -0
  220. package/dist/internal/react-steps/index.d.ts +19 -0
  221. package/dist/internal/react-switch/index.d.cts +17 -0
  222. package/dist/internal/react-switch/index.d.ts +17 -0
  223. package/dist/internal/react-table-of-contents/index.d.ts +10 -0
  224. package/dist/internal/react-tabs/index.d.cts +31 -0
  225. package/dist/internal/react-tabs/index.d.ts +31 -0
  226. package/dist/internal/react-textarea/index.d.cts +16 -0
  227. package/dist/internal/react-textarea/index.d.ts +16 -0
  228. package/dist/internal/react-theme/index.d.cts +44 -0
  229. package/dist/internal/react-theme/index.d.ts +44 -0
  230. package/dist/internal/react-thread-view/index.d.cts +34 -0
  231. package/dist/internal/react-thread-view/index.d.ts +34 -0
  232. package/dist/internal/react-toast/index.d.cts +36 -0
  233. package/dist/internal/react-toast/index.d.ts +36 -0
  234. package/dist/internal/react-tooltip/index.d.cts +33 -0
  235. package/dist/internal/react-tooltip/index.d.ts +33 -0
  236. package/dist/internal/react-version-selector/index.d.cts +24 -0
  237. package/dist/internal/react-version-selector/index.d.ts +24 -0
  238. package/dist/internal/react-video-player/index.d.cts +9 -0
  239. package/dist/internal/react-video-player/index.d.ts +9 -0
  240. package/dist/internal/react-voice-pill/index.d.cts +10 -0
  241. package/dist/internal/react-voice-pill/index.d.ts +10 -0
  242. package/dist/internal/react-waveform/index.d.cts +9 -0
  243. package/dist/internal/react-waveform/index.d.ts +9 -0
  244. package/dist/internal/reaction-bar/index.d.cts +50 -0
  245. package/dist/internal/reaction-bar/index.d.ts +50 -0
  246. package/dist/internal/resizable-layout/index.d.cts +47 -0
  247. package/dist/internal/resizable-layout/index.d.ts +47 -0
  248. package/dist/internal/search-bar/index.d.cts +51 -0
  249. package/dist/internal/search-bar/index.d.ts +51 -0
  250. package/dist/internal/select/index.d.cts +69 -0
  251. package/dist/internal/select/index.d.ts +69 -0
  252. package/dist/internal/shared/index.d.cts +249 -0
  253. package/dist/internal/shared/index.d.ts +249 -0
  254. package/dist/internal/sidebar/index.d.cts +40 -0
  255. package/dist/internal/sidebar/index.d.ts +40 -0
  256. package/dist/internal/skeleton/index.d.cts +27 -0
  257. package/dist/internal/skeleton/index.d.ts +27 -0
  258. package/dist/internal/slide-viewer/index.d.cts +72 -0
  259. package/dist/internal/slide-viewer/index.d.ts +72 -0
  260. package/dist/internal/slider/index.d.cts +4 -0
  261. package/dist/internal/slider/index.d.ts +4 -0
  262. package/dist/internal/status-indicator/index.d.cts +42 -0
  263. package/dist/internal/status-indicator/index.d.ts +42 -0
  264. package/dist/internal/switch/index.d.cts +41 -0
  265. package/dist/internal/switch/index.d.ts +41 -0
  266. package/dist/internal/tabs/index.d.cts +45 -0
  267. package/dist/internal/tabs/index.d.ts +45 -0
  268. package/dist/internal/textarea/index.d.cts +28 -0
  269. package/dist/internal/textarea/index.d.ts +28 -0
  270. package/dist/internal/theme/index.d.cts +60 -0
  271. package/dist/internal/theme/index.d.ts +60 -0
  272. package/dist/internal/thread-view/index.d.cts +95 -0
  273. package/dist/internal/thread-view/index.d.ts +95 -0
  274. package/dist/internal/toast/index.d.cts +64 -0
  275. package/dist/internal/toast/index.d.ts +64 -0
  276. package/dist/internal/tooltip/index.d.cts +45 -0
  277. package/dist/internal/tooltip/index.d.ts +45 -0
  278. package/dist/internal/version-selector/index.d.cts +68 -0
  279. package/dist/internal/version-selector/index.d.ts +68 -0
  280. package/dist/internal/video-player/index.d.cts +50 -0
  281. package/dist/internal/video-player/index.d.ts +50 -0
  282. package/dist/internal/voice-pill/index.d.cts +86 -0
  283. package/dist/internal/voice-pill/index.d.ts +86 -0
  284. package/dist/internal/waveform/index.d.cts +83 -0
  285. package/dist/internal/waveform/index.d.ts +83 -0
  286. package/dist/theme.d.cts +1 -1
  287. package/dist/theme.d.ts +1 -1
  288. package/package.json +7 -6
@@ -0,0 +1,72 @@
1
+ import { KeyboardHandlerMap, AccessibilityProps, TokenContract } from '../shared/index.cjs';
2
+
3
+ type SlideType = 'lesson' | 'quiz' | 'exercise' | 'intro' | 'summary';
4
+ type BookmarkType = 'important' | 'difficult' | 'to-revise';
5
+ interface SlideData {
6
+ id: string;
7
+ type: SlideType;
8
+ content: string;
9
+ }
10
+ interface SlideViewerProps {
11
+ slides: SlideData[];
12
+ initialSlide?: number;
13
+ onSlideChange?: (index: number) => void;
14
+ onComplete?: () => void;
15
+ }
16
+ interface SlideViewerState {
17
+ currentSlide: number;
18
+ totalSlides: number;
19
+ bookmarks: Map<number, BookmarkType>;
20
+ }
21
+ interface SlideViewerAPI {
22
+ /** Current viewer state */
23
+ state: SlideViewerState;
24
+ /** Navigate to the next slide */
25
+ next: () => void;
26
+ /** Navigate to the previous slide */
27
+ prev: () => void;
28
+ /** Navigate to a specific slide index */
29
+ goTo: (index: number) => void;
30
+ /** Toggle a bookmark on the current slide */
31
+ toggleBookmark: (type: BookmarkType) => void;
32
+ /** Get all bookmarks as an array of entries */
33
+ getBookmarks: () => Array<{
34
+ slide: number;
35
+ type: BookmarkType;
36
+ }>;
37
+ /** Current progress as a number between 0 and 1 */
38
+ progress: number;
39
+ /** Keyboard handlers for slide navigation */
40
+ keyboardHandlers: KeyboardHandlerMap;
41
+ /** ARIA props for the current slide */
42
+ getSlideAriaProps: () => Partial<AccessibilityProps> & {
43
+ 'aria-roledescription'?: string;
44
+ };
45
+ }
46
+ /**
47
+ * Create a headless slide viewer.
48
+ *
49
+ * Manages slide navigation state, bookmarks, progress tracking,
50
+ * and keyboard navigation. Framework wrappers handle rendering.
51
+ */
52
+ declare function createSlideViewer(props: SlideViewerProps): SlideViewerAPI;
53
+
54
+ declare const slideViewerTokens: TokenContract;
55
+ declare const slideViewerVariants: (props?: ({
56
+ size?: "compact" | "default" | "full" | undefined;
57
+ } & {
58
+ className?: string;
59
+ }) | undefined) => string;
60
+ declare const slideViewerProgressBarVariants: (props?: ({
61
+ position?: "top" | "bottom" | "inline" | undefined;
62
+ } & {
63
+ className?: string;
64
+ }) | undefined) => string;
65
+
66
+ declare const slideTypeBadgeVariants: (props?: ({
67
+ type?: "lesson" | "quiz" | "exercise" | "intro" | "summary" | undefined;
68
+ } & {
69
+ className?: string;
70
+ }) | undefined) => string;
71
+
72
+ export { type BookmarkType, type SlideData, type SlideType, type SlideViewerAPI, type SlideViewerProps, type SlideViewerState, createSlideViewer, slideViewerProgressBarVariants as progressBarVariants, slideTypeBadgeVariants, slideViewerTokens, slideViewerVariants };
@@ -0,0 +1,72 @@
1
+ import { KeyboardHandlerMap, AccessibilityProps, TokenContract } from '../shared/index.js';
2
+
3
+ type SlideType = 'lesson' | 'quiz' | 'exercise' | 'intro' | 'summary';
4
+ type BookmarkType = 'important' | 'difficult' | 'to-revise';
5
+ interface SlideData {
6
+ id: string;
7
+ type: SlideType;
8
+ content: string;
9
+ }
10
+ interface SlideViewerProps {
11
+ slides: SlideData[];
12
+ initialSlide?: number;
13
+ onSlideChange?: (index: number) => void;
14
+ onComplete?: () => void;
15
+ }
16
+ interface SlideViewerState {
17
+ currentSlide: number;
18
+ totalSlides: number;
19
+ bookmarks: Map<number, BookmarkType>;
20
+ }
21
+ interface SlideViewerAPI {
22
+ /** Current viewer state */
23
+ state: SlideViewerState;
24
+ /** Navigate to the next slide */
25
+ next: () => void;
26
+ /** Navigate to the previous slide */
27
+ prev: () => void;
28
+ /** Navigate to a specific slide index */
29
+ goTo: (index: number) => void;
30
+ /** Toggle a bookmark on the current slide */
31
+ toggleBookmark: (type: BookmarkType) => void;
32
+ /** Get all bookmarks as an array of entries */
33
+ getBookmarks: () => Array<{
34
+ slide: number;
35
+ type: BookmarkType;
36
+ }>;
37
+ /** Current progress as a number between 0 and 1 */
38
+ progress: number;
39
+ /** Keyboard handlers for slide navigation */
40
+ keyboardHandlers: KeyboardHandlerMap;
41
+ /** ARIA props for the current slide */
42
+ getSlideAriaProps: () => Partial<AccessibilityProps> & {
43
+ 'aria-roledescription'?: string;
44
+ };
45
+ }
46
+ /**
47
+ * Create a headless slide viewer.
48
+ *
49
+ * Manages slide navigation state, bookmarks, progress tracking,
50
+ * and keyboard navigation. Framework wrappers handle rendering.
51
+ */
52
+ declare function createSlideViewer(props: SlideViewerProps): SlideViewerAPI;
53
+
54
+ declare const slideViewerTokens: TokenContract;
55
+ declare const slideViewerVariants: (props?: ({
56
+ size?: "compact" | "default" | "full" | undefined;
57
+ } & {
58
+ className?: string;
59
+ }) | undefined) => string;
60
+ declare const slideViewerProgressBarVariants: (props?: ({
61
+ position?: "top" | "bottom" | "inline" | undefined;
62
+ } & {
63
+ className?: string;
64
+ }) | undefined) => string;
65
+
66
+ declare const slideTypeBadgeVariants: (props?: ({
67
+ type?: "lesson" | "quiz" | "exercise" | "intro" | "summary" | undefined;
68
+ } & {
69
+ className?: string;
70
+ }) | undefined) => string;
71
+
72
+ export { type BookmarkType, type SlideData, type SlideType, type SlideViewerAPI, type SlideViewerProps, type SlideViewerState, createSlideViewer, slideViewerProgressBarVariants as progressBarVariants, slideTypeBadgeVariants, slideViewerTokens, slideViewerVariants };
@@ -0,0 +1,4 @@
1
+ interface SliderProps {
2
+ }
3
+
4
+ export type { SliderProps };
@@ -0,0 +1,4 @@
1
+ interface SliderProps {
2
+ }
3
+
4
+ export type { SliderProps };
@@ -0,0 +1,42 @@
1
+ import { AccessibilityProps } from '../shared/index.cjs';
2
+
3
+ type StatusType = 'success' | 'error' | 'warning' | 'info' | 'pending' | 'neutral';
4
+ interface StatusProps {
5
+ /** The status type */
6
+ type: StatusType;
7
+ /** Label to display alongside the status dot */
8
+ label?: string;
9
+ /** Whether to show a pulse animation (primarily for 'pending' status) */
10
+ pulse?: boolean;
11
+ }
12
+ interface StatusAPI {
13
+ /** ARIA attributes for the status indicator */
14
+ ariaProps: Partial<AccessibilityProps> & Record<string, unknown>;
15
+ /** The status type */
16
+ type: StatusType;
17
+ /** The display label */
18
+ label: string;
19
+ /** Whether to show pulse animation */
20
+ pulse: boolean;
21
+ /** CSS color class name for the dot */
22
+ color: string;
23
+ }
24
+ declare const STATUS_INDICATOR_COLORS: Record<StatusType, string>;
25
+ declare const STATUS_INDICATOR_LABELS: Record<StatusType, string>;
26
+
27
+ declare function createStatusIndicator(props: StatusProps): StatusAPI;
28
+
29
+ declare const statusContainerStyles = "inline-flex items-center gap-1.5";
30
+ declare const statusDotVariants: (props?: ({
31
+ type?: "success" | "error" | "warning" | "info" | "pending" | "neutral" | undefined;
32
+ } & {
33
+ className?: string;
34
+ }) | undefined) => string;
35
+ declare const statusPulseVariants: (props?: ({
36
+ type?: "success" | "error" | "warning" | "info" | "pending" | "neutral" | undefined;
37
+ } & {
38
+ className?: string;
39
+ }) | undefined) => string;
40
+ declare const statusLabelStyles = "text-sm text-muted-foreground";
41
+
42
+ export { STATUS_INDICATOR_COLORS as STATUS_COLORS, STATUS_INDICATOR_LABELS as STATUS_LABELS, type StatusAPI, type StatusProps, type StatusType, createStatusIndicator, statusContainerStyles, statusDotVariants, statusLabelStyles, statusPulseVariants };
@@ -0,0 +1,42 @@
1
+ import { AccessibilityProps } from '../shared/index.js';
2
+
3
+ type StatusType = 'success' | 'error' | 'warning' | 'info' | 'pending' | 'neutral';
4
+ interface StatusProps {
5
+ /** The status type */
6
+ type: StatusType;
7
+ /** Label to display alongside the status dot */
8
+ label?: string;
9
+ /** Whether to show a pulse animation (primarily for 'pending' status) */
10
+ pulse?: boolean;
11
+ }
12
+ interface StatusAPI {
13
+ /** ARIA attributes for the status indicator */
14
+ ariaProps: Partial<AccessibilityProps> & Record<string, unknown>;
15
+ /** The status type */
16
+ type: StatusType;
17
+ /** The display label */
18
+ label: string;
19
+ /** Whether to show pulse animation */
20
+ pulse: boolean;
21
+ /** CSS color class name for the dot */
22
+ color: string;
23
+ }
24
+ declare const STATUS_INDICATOR_COLORS: Record<StatusType, string>;
25
+ declare const STATUS_INDICATOR_LABELS: Record<StatusType, string>;
26
+
27
+ declare function createStatusIndicator(props: StatusProps): StatusAPI;
28
+
29
+ declare const statusContainerStyles = "inline-flex items-center gap-1.5";
30
+ declare const statusDotVariants: (props?: ({
31
+ type?: "success" | "error" | "warning" | "info" | "pending" | "neutral" | undefined;
32
+ } & {
33
+ className?: string;
34
+ }) | undefined) => string;
35
+ declare const statusPulseVariants: (props?: ({
36
+ type?: "success" | "error" | "warning" | "info" | "pending" | "neutral" | undefined;
37
+ } & {
38
+ className?: string;
39
+ }) | undefined) => string;
40
+ declare const statusLabelStyles = "text-sm text-muted-foreground";
41
+
42
+ export { STATUS_INDICATOR_COLORS as STATUS_COLORS, STATUS_INDICATOR_LABELS as STATUS_LABELS, type StatusAPI, type StatusProps, type StatusType, createStatusIndicator, statusContainerStyles, statusDotVariants, statusLabelStyles, statusPulseVariants };
@@ -0,0 +1,41 @@
1
+ import { AccessibilityProps, KeyboardHandlerMap, TokenContract } from '../shared/index.cjs';
2
+
3
+ interface SwitchProps {
4
+ checked?: boolean;
5
+ disabled?: boolean;
6
+ required?: boolean;
7
+ name?: string;
8
+ value?: string;
9
+ }
10
+ interface SwitchAPI {
11
+ /** ARIA attributes to spread on the element */
12
+ ariaProps: Partial<AccessibilityProps>;
13
+ /** Keyboard handlers to attach */
14
+ keyboardHandlers: KeyboardHandlerMap;
15
+ /** Whether interaction should be blocked */
16
+ isInteractive: boolean;
17
+ /** Data attributes for CSS styling hooks */
18
+ dataAttributes: Record<string, string>;
19
+ /** Current state */
20
+ state: {
21
+ checked: boolean;
22
+ disabled: boolean;
23
+ };
24
+ }
25
+ declare function createSwitch(props?: SwitchProps): SwitchAPI;
26
+
27
+ declare const switchTokens: TokenContract;
28
+ declare const switchVariants: (props?: ({
29
+ checked?: "true" | "false" | undefined;
30
+ size?: "sm" | "default" | "lg" | undefined;
31
+ } & {
32
+ className?: string;
33
+ }) | undefined) => string;
34
+ declare const switchThumbVariants: (props?: ({
35
+ checked?: "true" | "false" | undefined;
36
+ size?: "sm" | "default" | "lg" | undefined;
37
+ } & {
38
+ className?: string;
39
+ }) | undefined) => string;
40
+
41
+ export { type SwitchAPI, type SwitchProps, createSwitch, switchThumbVariants, switchTokens, switchVariants };
@@ -0,0 +1,41 @@
1
+ import { AccessibilityProps, KeyboardHandlerMap, TokenContract } from '../shared/index.js';
2
+
3
+ interface SwitchProps {
4
+ checked?: boolean;
5
+ disabled?: boolean;
6
+ required?: boolean;
7
+ name?: string;
8
+ value?: string;
9
+ }
10
+ interface SwitchAPI {
11
+ /** ARIA attributes to spread on the element */
12
+ ariaProps: Partial<AccessibilityProps>;
13
+ /** Keyboard handlers to attach */
14
+ keyboardHandlers: KeyboardHandlerMap;
15
+ /** Whether interaction should be blocked */
16
+ isInteractive: boolean;
17
+ /** Data attributes for CSS styling hooks */
18
+ dataAttributes: Record<string, string>;
19
+ /** Current state */
20
+ state: {
21
+ checked: boolean;
22
+ disabled: boolean;
23
+ };
24
+ }
25
+ declare function createSwitch(props?: SwitchProps): SwitchAPI;
26
+
27
+ declare const switchTokens: TokenContract;
28
+ declare const switchVariants: (props?: ({
29
+ checked?: "true" | "false" | undefined;
30
+ size?: "sm" | "default" | "lg" | undefined;
31
+ } & {
32
+ className?: string;
33
+ }) | undefined) => string;
34
+ declare const switchThumbVariants: (props?: ({
35
+ checked?: "true" | "false" | undefined;
36
+ size?: "sm" | "default" | "lg" | undefined;
37
+ } & {
38
+ className?: string;
39
+ }) | undefined) => string;
40
+
41
+ export { type SwitchAPI, type SwitchProps, createSwitch, switchThumbVariants, switchTokens, switchVariants };
@@ -0,0 +1,45 @@
1
+ import { AccessibilityProps, KeyboardHandlerMap } from '../shared/index.cjs';
2
+
3
+ interface TabsProps {
4
+ /** The active tab value (controlled) */
5
+ value?: string;
6
+ /** The default active tab value (uncontrolled) */
7
+ defaultValue?: string;
8
+ /** Callback when active tab changes */
9
+ onValueChange?: (value: string) => void;
10
+ /** Orientation of the tab list */
11
+ orientation?: 'horizontal' | 'vertical';
12
+ }
13
+ interface TabsState {
14
+ activeValue: string;
15
+ }
16
+ interface TabsAPI {
17
+ /** Current tabs state */
18
+ state: TabsState;
19
+ /** ARIA attributes for the tab list */
20
+ listProps: Partial<AccessibilityProps> & Record<string, unknown>;
21
+ /** Factory for individual tab trigger props */
22
+ getTabProps(value: string): Partial<AccessibilityProps> & Record<string, unknown>;
23
+ /** Factory for individual tab panel props */
24
+ getPanelProps(value: string): Partial<AccessibilityProps> & Record<string, unknown>;
25
+ /** Select a tab by value */
26
+ select(value: string): void;
27
+ /** Keyboard handlers for the tab list */
28
+ keyboardHandlers: KeyboardHandlerMap;
29
+ /** Generated ID prefix for aria linking */
30
+ idPrefix: string;
31
+ }
32
+ declare function createTabs(props?: TabsProps): TabsAPI;
33
+
34
+ declare const tabsListVariants: (props?: ({
35
+ [x: string]: string | undefined;
36
+ } & {
37
+ className?: string;
38
+ }) | undefined) => string;
39
+ declare const tabsTriggerVariants: (props?: ({
40
+ [x: string]: string | undefined;
41
+ } & {
42
+ className?: string;
43
+ }) | undefined) => string;
44
+
45
+ export { type TabsAPI, type TabsProps, type TabsState, createTabs, tabsListVariants, tabsTriggerVariants };
@@ -0,0 +1,45 @@
1
+ import { AccessibilityProps, KeyboardHandlerMap } from '../shared/index.js';
2
+
3
+ interface TabsProps {
4
+ /** The active tab value (controlled) */
5
+ value?: string;
6
+ /** The default active tab value (uncontrolled) */
7
+ defaultValue?: string;
8
+ /** Callback when active tab changes */
9
+ onValueChange?: (value: string) => void;
10
+ /** Orientation of the tab list */
11
+ orientation?: 'horizontal' | 'vertical';
12
+ }
13
+ interface TabsState {
14
+ activeValue: string;
15
+ }
16
+ interface TabsAPI {
17
+ /** Current tabs state */
18
+ state: TabsState;
19
+ /** ARIA attributes for the tab list */
20
+ listProps: Partial<AccessibilityProps> & Record<string, unknown>;
21
+ /** Factory for individual tab trigger props */
22
+ getTabProps(value: string): Partial<AccessibilityProps> & Record<string, unknown>;
23
+ /** Factory for individual tab panel props */
24
+ getPanelProps(value: string): Partial<AccessibilityProps> & Record<string, unknown>;
25
+ /** Select a tab by value */
26
+ select(value: string): void;
27
+ /** Keyboard handlers for the tab list */
28
+ keyboardHandlers: KeyboardHandlerMap;
29
+ /** Generated ID prefix for aria linking */
30
+ idPrefix: string;
31
+ }
32
+ declare function createTabs(props?: TabsProps): TabsAPI;
33
+
34
+ declare const tabsListVariants: (props?: ({
35
+ [x: string]: string | undefined;
36
+ } & {
37
+ className?: string;
38
+ }) | undefined) => string;
39
+ declare const tabsTriggerVariants: (props?: ({
40
+ [x: string]: string | undefined;
41
+ } & {
42
+ className?: string;
43
+ }) | undefined) => string;
44
+
45
+ export { type TabsAPI, type TabsProps, type TabsState, createTabs, tabsListVariants, tabsTriggerVariants };
@@ -0,0 +1,28 @@
1
+ import { AccessibilityProps } from '../shared/index.cjs';
2
+
3
+ interface TextareaProps {
4
+ disabled?: boolean;
5
+ readOnly?: boolean;
6
+ required?: boolean;
7
+ 'aria-invalid'?: boolean;
8
+ rows?: number;
9
+ maxRows?: number;
10
+ }
11
+ interface TextareaAPI {
12
+ /** ARIA attributes to spread on the element */
13
+ ariaProps: Partial<AccessibilityProps> & {
14
+ 'aria-invalid'?: boolean;
15
+ 'aria-required'?: boolean;
16
+ };
17
+ /** Data attributes for CSS styling hooks */
18
+ dataAttributes: Record<string, string>;
19
+ }
20
+ declare function createTextarea(props?: TextareaProps): TextareaAPI;
21
+
22
+ declare const textareaVariants: (props?: ({
23
+ size?: "sm" | "default" | "lg" | undefined;
24
+ } & {
25
+ className?: string;
26
+ }) | undefined) => string;
27
+
28
+ export { type TextareaAPI, type TextareaProps, createTextarea, textareaVariants };
@@ -0,0 +1,28 @@
1
+ import { AccessibilityProps } from '../shared/index.js';
2
+
3
+ interface TextareaProps {
4
+ disabled?: boolean;
5
+ readOnly?: boolean;
6
+ required?: boolean;
7
+ 'aria-invalid'?: boolean;
8
+ rows?: number;
9
+ maxRows?: number;
10
+ }
11
+ interface TextareaAPI {
12
+ /** ARIA attributes to spread on the element */
13
+ ariaProps: Partial<AccessibilityProps> & {
14
+ 'aria-invalid'?: boolean;
15
+ 'aria-required'?: boolean;
16
+ };
17
+ /** Data attributes for CSS styling hooks */
18
+ dataAttributes: Record<string, string>;
19
+ }
20
+ declare function createTextarea(props?: TextareaProps): TextareaAPI;
21
+
22
+ declare const textareaVariants: (props?: ({
23
+ size?: "sm" | "default" | "lg" | undefined;
24
+ } & {
25
+ className?: string;
26
+ }) | undefined) => string;
27
+
28
+ export { type TextareaAPI, type TextareaProps, createTextarea, textareaVariants };
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Headless theme state machine — pure TypeScript, zero DOM dependencies.
3
+ * Manages light/dark/system mode with system preference tracking.
4
+ */
5
+ type ThemeMode = 'light' | 'dark' | 'system';
6
+ type ResolvedTheme = 'light' | 'dark';
7
+ interface ThemeState {
8
+ /** User's chosen mode */
9
+ mode: ThemeMode;
10
+ /** Resolved theme after system preference detection */
11
+ resolved: ResolvedTheme;
12
+ }
13
+ interface ThemeConfig {
14
+ /** Initial mode. Default: 'system' */
15
+ defaultMode?: ThemeMode;
16
+ /** localStorage key. Default: 'rfr-theme' */
17
+ storageKey?: string;
18
+ /** HTML attribute to set. Default: 'class' */
19
+ attribute?: 'class' | 'data-theme';
20
+ }
21
+ interface StorageAdapter {
22
+ get(key: string): string | null;
23
+ set(key: string, value: string): void;
24
+ }
25
+ interface MediaQueryAdapter {
26
+ matches(query: string): boolean;
27
+ subscribe(query: string, callback: (matches: boolean) => void): () => void;
28
+ }
29
+ interface ThemeAPI {
30
+ /** Get current state */
31
+ getState(): ThemeState;
32
+ /** Set mode (light/dark/system) */
33
+ setMode(mode: ThemeMode): void;
34
+ /** Subscribe to state changes */
35
+ subscribe(fn: (state: ThemeState) => void): () => void;
36
+ /** Clean up subscriptions */
37
+ destroy(): void;
38
+ }
39
+ declare function createTheme(config?: ThemeConfig, storage?: StorageAdapter, mediaQuery?: MediaQueryAdapter): ThemeAPI;
40
+
41
+ /**
42
+ * Inline script for preventing theme flash on page load.
43
+ * Inject this as a <script> tag in the <head> before any CSS.
44
+ * Works with any framework (React, Angular, Astro, plain HTML).
45
+ */
46
+ declare function getThemeScript(storageKey?: string, attribute?: 'class' | 'data-theme'): string;
47
+
48
+ /**
49
+ * Browser DOM adapters for the theme machine.
50
+ * These bridge the headless core to browser APIs.
51
+ */
52
+
53
+ /** localStorage adapter */
54
+ declare function createLocalStorageAdapter(): StorageAdapter;
55
+ /** matchMedia adapter */
56
+ declare function createMediaQueryAdapter(): MediaQueryAdapter;
57
+ /** Apply resolved theme to the document */
58
+ declare function applyThemeToDOM(resolved: ResolvedTheme, attribute?: 'class' | 'data-theme'): void;
59
+
60
+ export { type MediaQueryAdapter, type ResolvedTheme, type StorageAdapter, type ThemeAPI, type ThemeConfig, type ThemeMode, type ThemeState, applyThemeToDOM, createLocalStorageAdapter, createMediaQueryAdapter, createTheme, getThemeScript };
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Headless theme state machine — pure TypeScript, zero DOM dependencies.
3
+ * Manages light/dark/system mode with system preference tracking.
4
+ */
5
+ type ThemeMode = 'light' | 'dark' | 'system';
6
+ type ResolvedTheme = 'light' | 'dark';
7
+ interface ThemeState {
8
+ /** User's chosen mode */
9
+ mode: ThemeMode;
10
+ /** Resolved theme after system preference detection */
11
+ resolved: ResolvedTheme;
12
+ }
13
+ interface ThemeConfig {
14
+ /** Initial mode. Default: 'system' */
15
+ defaultMode?: ThemeMode;
16
+ /** localStorage key. Default: 'rfr-theme' */
17
+ storageKey?: string;
18
+ /** HTML attribute to set. Default: 'class' */
19
+ attribute?: 'class' | 'data-theme';
20
+ }
21
+ interface StorageAdapter {
22
+ get(key: string): string | null;
23
+ set(key: string, value: string): void;
24
+ }
25
+ interface MediaQueryAdapter {
26
+ matches(query: string): boolean;
27
+ subscribe(query: string, callback: (matches: boolean) => void): () => void;
28
+ }
29
+ interface ThemeAPI {
30
+ /** Get current state */
31
+ getState(): ThemeState;
32
+ /** Set mode (light/dark/system) */
33
+ setMode(mode: ThemeMode): void;
34
+ /** Subscribe to state changes */
35
+ subscribe(fn: (state: ThemeState) => void): () => void;
36
+ /** Clean up subscriptions */
37
+ destroy(): void;
38
+ }
39
+ declare function createTheme(config?: ThemeConfig, storage?: StorageAdapter, mediaQuery?: MediaQueryAdapter): ThemeAPI;
40
+
41
+ /**
42
+ * Inline script for preventing theme flash on page load.
43
+ * Inject this as a <script> tag in the <head> before any CSS.
44
+ * Works with any framework (React, Angular, Astro, plain HTML).
45
+ */
46
+ declare function getThemeScript(storageKey?: string, attribute?: 'class' | 'data-theme'): string;
47
+
48
+ /**
49
+ * Browser DOM adapters for the theme machine.
50
+ * These bridge the headless core to browser APIs.
51
+ */
52
+
53
+ /** localStorage adapter */
54
+ declare function createLocalStorageAdapter(): StorageAdapter;
55
+ /** matchMedia adapter */
56
+ declare function createMediaQueryAdapter(): MediaQueryAdapter;
57
+ /** Apply resolved theme to the document */
58
+ declare function applyThemeToDOM(resolved: ResolvedTheme, attribute?: 'class' | 'data-theme'): void;
59
+
60
+ export { type MediaQueryAdapter, type ResolvedTheme, type StorageAdapter, type ThemeAPI, type ThemeConfig, type ThemeMode, type ThemeState, applyThemeToDOM, createLocalStorageAdapter, createMediaQueryAdapter, createTheme, getThemeScript };