@refraction-ui/react 0.4.2 → 0.6.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.
- package/README.md +9 -1
- package/dist/chunk-O4453CBF.js +137 -0
- package/dist/chunk-O4453CBF.js.map +1 -0
- package/dist/chunk-XWP763SH.js +76 -0
- package/dist/chunk-XWP763SH.js.map +1 -0
- package/dist/faro-engine-47HGRAQH-JKINJPMH.js +3 -0
- package/dist/faro-engine-47HGRAQH-JKINJPMH.js.map +1 -0
- package/dist/form.cjs +340 -0
- package/dist/form.cjs.map +1 -0
- package/dist/form.d.cts +1 -0
- package/dist/form.d.ts +1 -0
- package/dist/form.js +204 -0
- package/dist/form.js.map +1 -0
- package/dist/index.cjs +1438 -237
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +76 -76
- package/dist/index.d.ts +76 -76
- package/dist/index.js +1317 -312
- package/dist/index.js.map +1 -1
- package/dist/internal/analytics/index.d.cts +448 -0
- package/dist/internal/analytics/index.d.ts +448 -0
- package/dist/internal/animated-text/index.d.cts +47 -0
- package/dist/internal/animated-text/index.d.ts +47 -0
- package/dist/internal/app-shell/index.d.cts +128 -0
- package/dist/internal/app-shell/index.d.ts +128 -0
- package/dist/internal/auth/index.d.cts +74 -0
- package/dist/internal/auth/index.d.ts +74 -0
- package/dist/internal/avatar/index.d.cts +53 -0
- package/dist/internal/avatar/index.d.ts +53 -0
- package/dist/internal/avatar-group/index.d.cts +70 -0
- package/dist/internal/avatar-group/index.d.ts +70 -0
- package/dist/internal/badge/index.d.cts +26 -0
- package/dist/internal/badge/index.d.ts +26 -0
- package/dist/internal/bottom-nav/index.d.cts +29 -0
- package/dist/internal/bottom-nav/index.d.ts +29 -0
- package/dist/internal/breadcrumbs/index.d.cts +38 -0
- package/dist/internal/breadcrumbs/index.d.ts +38 -0
- package/dist/internal/button/index.d.cts +34 -0
- package/dist/internal/button/index.d.ts +34 -0
- package/dist/internal/calendar/index.d.cts +73 -0
- package/dist/internal/calendar/index.d.ts +73 -0
- package/dist/internal/card/index.d.cts +62 -0
- package/dist/internal/card/index.d.ts +62 -0
- package/dist/internal/card-grid/index.d.cts +10 -0
- package/dist/internal/card-grid/index.d.ts +10 -0
- package/dist/internal/checkbox/index.d.cts +40 -0
- package/dist/internal/checkbox/index.d.ts +40 -0
- package/dist/internal/code-editor/index.d.cts +47 -0
- package/dist/internal/code-editor/index.d.ts +47 -0
- package/dist/internal/collapsible/index.d.cts +43 -0
- package/dist/internal/collapsible/index.d.ts +43 -0
- package/dist/internal/command/index.d.cts +80 -0
- package/dist/internal/command/index.d.ts +80 -0
- package/dist/internal/content-protection/index.d.cts +47 -0
- package/dist/internal/content-protection/index.d.ts +47 -0
- package/dist/internal/data-table/index.d.cts +73 -0
- package/dist/internal/data-table/index.d.ts +73 -0
- package/dist/internal/date-picker/index.d.cts +98 -0
- package/dist/internal/date-picker/index.d.ts +98 -0
- package/dist/internal/device-frame/index.d.cts +40 -0
- package/dist/internal/device-frame/index.d.ts +40 -0
- package/dist/internal/dialog/index.d.cts +54 -0
- package/dist/internal/dialog/index.d.ts +54 -0
- package/dist/internal/dropdown-menu/index.d.cts +55 -0
- package/dist/internal/dropdown-menu/index.d.ts +55 -0
- package/dist/internal/emoji-picker/index.d.cts +77 -0
- package/dist/internal/emoji-picker/index.d.ts +77 -0
- package/dist/internal/feedback-dialog/index.d.cts +55 -0
- package/dist/internal/feedback-dialog/index.d.ts +55 -0
- package/dist/internal/file-upload/index.d.cts +91 -0
- package/dist/internal/file-upload/index.d.ts +91 -0
- package/dist/internal/footer/index.d.cts +30 -0
- package/dist/internal/footer/index.d.ts +30 -0
- package/dist/internal/inline-editor/index.d.cts +52 -0
- package/dist/internal/inline-editor/index.d.ts +52 -0
- package/dist/internal/input/index.d.cts +38 -0
- package/dist/internal/input/index.d.ts +38 -0
- package/dist/internal/input-group/index.d.cts +35 -0
- package/dist/internal/input-group/index.d.ts +35 -0
- package/dist/internal/install-prompt/index.d.cts +36 -0
- package/dist/internal/install-prompt/index.d.ts +36 -0
- package/dist/internal/keyboard-shortcut/index.d.cts +49 -0
- package/dist/internal/keyboard-shortcut/index.d.ts +49 -0
- package/dist/internal/language-selector/index.d.cts +63 -0
- package/dist/internal/language-selector/index.d.ts +63 -0
- package/dist/internal/logger/index.d.cts +229 -0
- package/dist/internal/logger/index.d.ts +229 -0
- package/dist/internal/markdown-renderer/index.d.cts +40 -0
- package/dist/internal/markdown-renderer/index.d.ts +40 -0
- package/dist/internal/mobile-nav/index.d.cts +45 -0
- package/dist/internal/mobile-nav/index.d.ts +45 -0
- package/dist/internal/navbar/index.d.cts +30 -0
- package/dist/internal/navbar/index.d.ts +30 -0
- package/dist/internal/otp-input/index.d.cts +66 -0
- package/dist/internal/otp-input/index.d.ts +66 -0
- package/dist/internal/payment/index.d.cts +9 -0
- package/dist/internal/payment/index.d.ts +9 -0
- package/dist/internal/popover/index.d.cts +46 -0
- package/dist/internal/popover/index.d.ts +46 -0
- package/dist/internal/presence-indicator/index.d.cts +38 -0
- package/dist/internal/presence-indicator/index.d.ts +38 -0
- package/dist/internal/progress-display/index.d.cts +60 -0
- package/dist/internal/progress-display/index.d.ts +60 -0
- package/dist/internal/radio/index.d.ts +43 -0
- package/dist/internal/react-accordion/index.d.ts +22 -0
- package/dist/internal/react-analytics/index.d.cts +44 -0
- package/dist/internal/react-analytics/index.d.ts +44 -0
- package/dist/internal/react-animated-text/index.d.cts +12 -0
- package/dist/internal/react-animated-text/index.d.ts +12 -0
- package/dist/internal/react-app-shell/index.d.cts +169 -0
- package/dist/internal/react-app-shell/index.d.ts +169 -0
- package/dist/internal/react-auth/index.d.cts +59 -0
- package/dist/internal/react-auth/index.d.ts +59 -0
- package/dist/internal/react-avatar/index.d.cts +20 -0
- package/dist/internal/react-avatar/index.d.ts +20 -0
- package/dist/internal/react-avatar-group/index.d.cts +33 -0
- package/dist/internal/react-avatar-group/index.d.ts +33 -0
- package/dist/internal/react-badge/index.d.cts +17 -0
- package/dist/internal/react-badge/index.d.ts +17 -0
- package/dist/internal/react-bottom-nav/index.d.cts +19 -0
- package/dist/internal/react-bottom-nav/index.d.ts +19 -0
- package/dist/internal/react-breadcrumbs/index.d.cts +24 -0
- package/dist/internal/react-breadcrumbs/index.d.ts +24 -0
- package/dist/internal/react-button/index.d.cts +21 -0
- package/dist/internal/react-button/index.d.ts +21 -0
- package/dist/internal/react-calendar/index.d.cts +44 -0
- package/dist/internal/react-calendar/index.d.ts +44 -0
- package/dist/internal/react-callout/index.d.cts +12 -0
- package/dist/internal/react-callout/index.d.ts +12 -0
- package/dist/internal/react-card/index.d.cts +29 -0
- package/dist/internal/react-card/index.d.ts +29 -0
- package/dist/internal/react-card-grid/index.d.cts +8 -0
- package/dist/internal/react-card-grid/index.d.ts +8 -0
- package/dist/internal/react-carousel/index.d.ts +22 -0
- package/dist/internal/react-checkbox/index.d.cts +18 -0
- package/dist/internal/react-checkbox/index.d.ts +18 -0
- package/dist/internal/react-code-block/index.d.cts +7 -0
- package/dist/internal/react-code-block/index.d.ts +7 -0
- package/dist/internal/react-code-editor/index.d.cts +28 -0
- package/dist/internal/react-code-editor/index.d.ts +28 -0
- package/dist/internal/react-collapsible/index.d.cts +29 -0
- package/dist/internal/react-collapsible/index.d.ts +29 -0
- package/dist/internal/react-combobox/index.d.cts +94 -0
- package/dist/internal/react-combobox/index.d.ts +94 -0
- package/dist/internal/react-command/index.d.cts +51 -0
- package/dist/internal/react-command/index.d.ts +51 -0
- package/dist/internal/react-content-protection/index.d.cts +22 -0
- package/dist/internal/react-content-protection/index.d.ts +22 -0
- package/dist/internal/react-data-table/index.d.cts +22 -0
- package/dist/internal/react-data-table/index.d.ts +22 -0
- package/dist/internal/react-date-picker/index.d.cts +23 -0
- package/dist/internal/react-date-picker/index.d.ts +23 -0
- package/dist/internal/react-device-frame/index.d.cts +37 -0
- package/dist/internal/react-device-frame/index.d.ts +37 -0
- package/dist/internal/react-dialog/index.d.cts +49 -0
- package/dist/internal/react-dialog/index.d.ts +49 -0
- package/dist/internal/react-dropdown-menu/index.d.cts +37 -0
- package/dist/internal/react-dropdown-menu/index.d.ts +37 -0
- package/dist/internal/react-emoji-picker/index.d.cts +32 -0
- package/dist/internal/react-emoji-picker/index.d.ts +32 -0
- package/dist/internal/react-feedback-dialog/index.d.cts +40 -0
- package/dist/internal/react-feedback-dialog/index.d.ts +40 -0
- package/dist/internal/react-file-tree/index.d.cts +5 -0
- package/dist/internal/react-file-tree/index.d.ts +5 -0
- package/dist/internal/react-file-upload/index.d.cts +22 -0
- package/dist/internal/react-file-upload/index.d.ts +22 -0
- package/dist/internal/react-footer/index.d.cts +20 -0
- package/dist/internal/react-footer/index.d.ts +20 -0
- package/dist/internal/react-form/index.d.cts +85 -0
- package/dist/internal/react-form/index.d.ts +85 -0
- package/dist/internal/react-icon-system/index.d.cts +5 -0
- package/dist/internal/react-icon-system/index.d.ts +5 -0
- package/dist/internal/react-inline-editor/index.d.cts +17 -0
- package/dist/internal/react-inline-editor/index.d.ts +17 -0
- package/dist/internal/react-input/index.d.cts +31 -0
- package/dist/internal/react-input/index.d.ts +31 -0
- package/dist/internal/react-input-group/index.d.cts +34 -0
- package/dist/internal/react-input-group/index.d.ts +34 -0
- package/dist/internal/react-install-prompt/index.d.cts +24 -0
- package/dist/internal/react-install-prompt/index.d.ts +24 -0
- package/dist/internal/react-keyboard-shortcut/index.d.cts +57 -0
- package/dist/internal/react-keyboard-shortcut/index.d.ts +57 -0
- package/dist/internal/react-language-selector/index.d.cts +26 -0
- package/dist/internal/react-language-selector/index.d.ts +26 -0
- package/dist/internal/react-link-card/index.d.cts +5 -0
- package/dist/internal/react-link-card/index.d.ts +5 -0
- package/dist/internal/react-logger/index.d.cts +107 -0
- package/dist/internal/react-logger/index.d.ts +107 -0
- package/dist/internal/react-markdown-renderer/index.d.cts +20 -0
- package/dist/internal/react-markdown-renderer/index.d.ts +20 -0
- package/dist/internal/react-mobile-nav/index.d.cts +33 -0
- package/dist/internal/react-mobile-nav/index.d.ts +33 -0
- package/dist/internal/react-navbar/index.d.cts +25 -0
- package/dist/internal/react-navbar/index.d.ts +25 -0
- package/dist/internal/react-otp-input/index.d.cts +21 -0
- package/dist/internal/react-otp-input/index.d.ts +21 -0
- package/dist/internal/react-pagination/index.d.ts +7 -0
- package/dist/internal/react-payment/index.d.cts +9 -0
- package/dist/internal/react-payment/index.d.ts +9 -0
- package/dist/internal/react-popover/index.d.cts +33 -0
- package/dist/internal/react-popover/index.d.ts +33 -0
- package/dist/internal/react-presence-indicator/index.d.cts +34 -0
- package/dist/internal/react-presence-indicator/index.d.ts +34 -0
- package/dist/internal/react-progress-display/index.d.cts +21 -0
- package/dist/internal/react-progress-display/index.d.ts +21 -0
- package/dist/internal/react-radio/index.d.ts +33 -0
- package/dist/internal/react-reaction-bar/index.d.cts +34 -0
- package/dist/internal/react-reaction-bar/index.d.ts +34 -0
- package/dist/internal/react-resizable-layout/index.d.cts +36 -0
- package/dist/internal/react-resizable-layout/index.d.ts +36 -0
- package/dist/internal/react-rich-editor/index.d.cts +2 -0
- package/dist/internal/react-rich-editor/index.d.ts +2 -0
- package/dist/internal/react-search-bar/index.d.cts +32 -0
- package/dist/internal/react-search-bar/index.d.ts +32 -0
- package/dist/internal/react-select/index.d.cts +30 -0
- package/dist/internal/react-select/index.d.ts +30 -0
- package/dist/internal/react-sheet/index.d.cts +67 -0
- package/dist/internal/react-sheet/index.d.ts +67 -0
- package/dist/internal/react-sidebar/index.d.cts +23 -0
- package/dist/internal/react-sidebar/index.d.ts +23 -0
- package/dist/internal/react-skeleton/index.d.cts +31 -0
- package/dist/internal/react-skeleton/index.d.ts +31 -0
- package/dist/internal/react-skip-to-content/index.d.cts +9 -0
- package/dist/internal/react-skip-to-content/index.d.ts +9 -0
- package/dist/internal/react-slide-viewer/index.d.cts +23 -0
- package/dist/internal/react-slide-viewer/index.d.ts +23 -0
- package/dist/internal/react-slider/index.d.cts +1 -0
- package/dist/internal/react-slider/index.d.ts +1 -0
- package/dist/internal/react-status-indicator/index.d.cts +34 -0
- package/dist/internal/react-status-indicator/index.d.ts +34 -0
- package/dist/internal/react-steps/index.d.cts +19 -0
- package/dist/internal/react-steps/index.d.ts +19 -0
- package/dist/internal/react-switch/index.d.cts +17 -0
- package/dist/internal/react-switch/index.d.ts +17 -0
- package/dist/internal/react-table-of-contents/index.d.ts +10 -0
- package/dist/internal/react-tabs/index.d.cts +31 -0
- package/dist/internal/react-tabs/index.d.ts +31 -0
- package/dist/internal/react-textarea/index.d.cts +16 -0
- package/dist/internal/react-textarea/index.d.ts +16 -0
- package/dist/internal/react-theme/index.d.cts +44 -0
- package/dist/internal/react-theme/index.d.ts +44 -0
- package/dist/internal/react-thread-view/index.d.cts +34 -0
- package/dist/internal/react-thread-view/index.d.ts +34 -0
- package/dist/internal/react-toast/index.d.cts +36 -0
- package/dist/internal/react-toast/index.d.ts +36 -0
- package/dist/internal/react-tooltip/index.d.cts +33 -0
- package/dist/internal/react-tooltip/index.d.ts +33 -0
- package/dist/internal/react-version-selector/index.d.cts +24 -0
- package/dist/internal/react-version-selector/index.d.ts +24 -0
- package/dist/internal/react-video-player/index.d.cts +9 -0
- package/dist/internal/react-video-player/index.d.ts +9 -0
- package/dist/internal/react-voice-pill/index.d.cts +10 -0
- package/dist/internal/react-voice-pill/index.d.ts +10 -0
- package/dist/internal/react-waveform/index.d.cts +9 -0
- package/dist/internal/react-waveform/index.d.ts +9 -0
- package/dist/internal/reaction-bar/index.d.cts +50 -0
- package/dist/internal/reaction-bar/index.d.ts +50 -0
- package/dist/internal/resizable-layout/index.d.cts +47 -0
- package/dist/internal/resizable-layout/index.d.ts +47 -0
- package/dist/internal/search-bar/index.d.cts +51 -0
- package/dist/internal/search-bar/index.d.ts +51 -0
- package/dist/internal/select/index.d.cts +69 -0
- package/dist/internal/select/index.d.ts +69 -0
- package/dist/internal/shared/index.d.cts +419 -0
- package/dist/internal/shared/index.d.ts +419 -0
- package/dist/internal/sidebar/index.d.cts +40 -0
- package/dist/internal/sidebar/index.d.ts +40 -0
- package/dist/internal/skeleton/index.d.cts +27 -0
- package/dist/internal/skeleton/index.d.ts +27 -0
- package/dist/internal/slide-viewer/index.d.cts +72 -0
- package/dist/internal/slide-viewer/index.d.ts +72 -0
- package/dist/internal/slider/index.d.cts +4 -0
- package/dist/internal/slider/index.d.ts +4 -0
- package/dist/internal/status-indicator/index.d.cts +42 -0
- package/dist/internal/status-indicator/index.d.ts +42 -0
- package/dist/internal/switch/index.d.cts +41 -0
- package/dist/internal/switch/index.d.ts +41 -0
- package/dist/internal/tabs/index.d.cts +45 -0
- package/dist/internal/tabs/index.d.ts +45 -0
- package/dist/internal/textarea/index.d.cts +28 -0
- package/dist/internal/textarea/index.d.ts +28 -0
- package/dist/internal/theme/index.d.cts +60 -0
- package/dist/internal/theme/index.d.ts +60 -0
- package/dist/internal/thread-view/index.d.cts +95 -0
- package/dist/internal/thread-view/index.d.ts +95 -0
- package/dist/internal/toast/index.d.cts +64 -0
- package/dist/internal/toast/index.d.ts +64 -0
- package/dist/internal/tooltip/index.d.cts +45 -0
- package/dist/internal/tooltip/index.d.ts +45 -0
- package/dist/internal/version-selector/index.d.cts +68 -0
- package/dist/internal/version-selector/index.d.ts +68 -0
- package/dist/internal/video-player/index.d.cts +50 -0
- package/dist/internal/video-player/index.d.ts +50 -0
- package/dist/internal/voice-pill/index.d.cts +86 -0
- package/dist/internal/voice-pill/index.d.ts +86 -0
- package/dist/internal/waveform/index.d.cts +83 -0
- package/dist/internal/waveform/index.d.ts +83 -0
- package/dist/theme.cjs +23 -0
- package/dist/theme.cjs.map +1 -1
- package/dist/theme.d.cts +1 -1
- package/dist/theme.d.ts +1 -1
- package/dist/theme.js +5 -2
- package/dist/theme.js.map +1 -1
- package/package.json +10 -7
|
@@ -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,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 };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { AccessibilityProps } from '../shared/index.cjs';
|
|
2
|
+
|
|
3
|
+
interface MessageReaction {
|
|
4
|
+
emoji: string;
|
|
5
|
+
count: number;
|
|
6
|
+
userReacted: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface MessageAttachment {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
url: string;
|
|
12
|
+
type: string;
|
|
13
|
+
size?: number;
|
|
14
|
+
}
|
|
15
|
+
interface MessageData {
|
|
16
|
+
/** Unique message ID */
|
|
17
|
+
id: string;
|
|
18
|
+
/** Author display info */
|
|
19
|
+
author: {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
avatarUrl?: string;
|
|
23
|
+
};
|
|
24
|
+
/** Message content (can contain markdown) */
|
|
25
|
+
content: string;
|
|
26
|
+
/** Message timestamp */
|
|
27
|
+
timestamp: Date;
|
|
28
|
+
/** Reactions on this message */
|
|
29
|
+
reactions?: MessageReaction[];
|
|
30
|
+
/** Threaded replies */
|
|
31
|
+
replies?: MessageData[];
|
|
32
|
+
/** File attachments */
|
|
33
|
+
attachments?: MessageAttachment[];
|
|
34
|
+
/** Whether this message has been edited */
|
|
35
|
+
edited?: boolean;
|
|
36
|
+
}
|
|
37
|
+
interface ThreadViewProps {
|
|
38
|
+
/** Messages to display */
|
|
39
|
+
messages: MessageData[];
|
|
40
|
+
/** Callback when a reply is sent */
|
|
41
|
+
onReply?: (messageId: string, content: string) => void;
|
|
42
|
+
/** Callback when a reaction is toggled */
|
|
43
|
+
onReact?: (messageId: string, emoji: string) => void;
|
|
44
|
+
/** Current user ID (for highlighting own messages) */
|
|
45
|
+
currentUserId?: string;
|
|
46
|
+
}
|
|
47
|
+
interface ThreadViewState {
|
|
48
|
+
messages: MessageData[];
|
|
49
|
+
replyingTo: string | null;
|
|
50
|
+
}
|
|
51
|
+
interface ThreadViewAPI {
|
|
52
|
+
/** Current state */
|
|
53
|
+
state: ThreadViewState;
|
|
54
|
+
/** Start replying to a message */
|
|
55
|
+
startReply(messageId: string): void;
|
|
56
|
+
/** Cancel reply */
|
|
57
|
+
cancelReply(): void;
|
|
58
|
+
/** Send a reply */
|
|
59
|
+
reply(messageId: string, content: string): void;
|
|
60
|
+
/** Toggle a reaction on a message */
|
|
61
|
+
react(messageId: string, emoji: string): void;
|
|
62
|
+
/** Format a timestamp for display */
|
|
63
|
+
formatTimestamp(date: Date): string;
|
|
64
|
+
/** Format relative time (e.g., "2 minutes ago") */
|
|
65
|
+
formatRelativeTime(date: Date): string;
|
|
66
|
+
/** ARIA props for the thread container */
|
|
67
|
+
ariaProps: Partial<AccessibilityProps> & Record<string, unknown>;
|
|
68
|
+
/** Get ARIA props for a message */
|
|
69
|
+
getMessageAriaProps(message: MessageData): Record<string, unknown>;
|
|
70
|
+
/** Get ARIA props for a reply button */
|
|
71
|
+
getReplyButtonAriaProps(messageId: string): Record<string, unknown>;
|
|
72
|
+
/** Generated IDs */
|
|
73
|
+
ids: {
|
|
74
|
+
thread: string;
|
|
75
|
+
label: string;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
declare function formatTimestamp(date: Date): string;
|
|
79
|
+
declare function formatRelativeTime(date: Date, now?: Date): string;
|
|
80
|
+
declare function createThreadView(props: ThreadViewProps): ThreadViewAPI;
|
|
81
|
+
|
|
82
|
+
declare const threadContainerStyles = "flex flex-col gap-1";
|
|
83
|
+
declare const threadMessageStyles = "flex gap-3 px-4 py-2 hover:bg-accent/50 rounded-md transition-colors group";
|
|
84
|
+
declare const threadAvatarStyles = "h-9 w-9 rounded-full bg-muted flex items-center justify-center text-sm font-medium overflow-hidden flex-shrink-0";
|
|
85
|
+
declare const threadContentStyles = "flex-1 min-w-0";
|
|
86
|
+
declare const threadAuthorStyles = "font-semibold text-sm";
|
|
87
|
+
declare const threadTimestampStyles = "text-xs text-muted-foreground ml-2";
|
|
88
|
+
declare const threadBodyStyles = "text-sm mt-0.5 whitespace-pre-wrap break-words";
|
|
89
|
+
declare const threadReactionsStyles = "flex flex-wrap gap-1 mt-1";
|
|
90
|
+
declare const threadReplyIndicatorStyles = "flex items-center gap-1 mt-1 text-xs text-primary cursor-pointer hover:underline";
|
|
91
|
+
declare const threadActionsStyles = "flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity";
|
|
92
|
+
declare const threadAttachmentStyles = "flex items-center gap-2 mt-1 p-2 rounded border text-xs bg-muted/50";
|
|
93
|
+
declare const threadEditedStyles = "text-xs text-muted-foreground ml-1";
|
|
94
|
+
|
|
95
|
+
export { type MessageAttachment, type MessageData, type MessageReaction, type ThreadViewAPI, type ThreadViewProps, type ThreadViewState, createThreadView, formatRelativeTime, formatTimestamp, threadActionsStyles, threadAttachmentStyles, threadAuthorStyles, threadAvatarStyles, threadBodyStyles, threadContainerStyles, threadContentStyles, threadEditedStyles, threadMessageStyles, threadReactionsStyles, threadReplyIndicatorStyles, threadTimestampStyles };
|