@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,95 @@
|
|
|
1
|
+
import { AccessibilityProps } from '../shared/index.js';
|
|
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 };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { AccessibilityProps } from '../shared/index.cjs';
|
|
2
|
+
|
|
3
|
+
type ToastVariant = 'default' | 'success' | 'error' | 'warning';
|
|
4
|
+
/** Get the icon name for a toast variant (colorblind-safe: meaning not conveyed by color alone) */
|
|
5
|
+
declare function getToastIcon(variant: ToastVariant): string;
|
|
6
|
+
interface ToastProps {
|
|
7
|
+
/** Visual variant */
|
|
8
|
+
variant?: ToastVariant;
|
|
9
|
+
/** Auto-dismiss duration in ms (default: 3000). Set to 0 to disable. */
|
|
10
|
+
duration?: number;
|
|
11
|
+
/** Whether the toast is open (controlled) */
|
|
12
|
+
open?: boolean;
|
|
13
|
+
/** Callback when open state changes */
|
|
14
|
+
onOpenChange?: (open: boolean) => void;
|
|
15
|
+
}
|
|
16
|
+
interface ToastState {
|
|
17
|
+
open: boolean;
|
|
18
|
+
variant: ToastVariant;
|
|
19
|
+
}
|
|
20
|
+
interface ToastAPI {
|
|
21
|
+
/** Current toast state */
|
|
22
|
+
state: ToastState;
|
|
23
|
+
/** ARIA attributes for the toast element */
|
|
24
|
+
ariaProps: Partial<AccessibilityProps>;
|
|
25
|
+
/** Dismiss the toast */
|
|
26
|
+
dismiss(): void;
|
|
27
|
+
/** Start the auto-dismiss timer */
|
|
28
|
+
startTimer(): void;
|
|
29
|
+
/** Pause the auto-dismiss timer (e.g. on hover) */
|
|
30
|
+
pauseTimer(): void;
|
|
31
|
+
/** Resume the auto-dismiss timer */
|
|
32
|
+
resumeTimer(): void;
|
|
33
|
+
}
|
|
34
|
+
declare function createToast(props?: ToastProps): ToastAPI;
|
|
35
|
+
/** Entry in the toast manager */
|
|
36
|
+
interface ToastEntry {
|
|
37
|
+
id: string;
|
|
38
|
+
message: string;
|
|
39
|
+
variant: ToastVariant;
|
|
40
|
+
duration: number;
|
|
41
|
+
createdAt: number;
|
|
42
|
+
}
|
|
43
|
+
interface ToastManagerAPI {
|
|
44
|
+
/** Add a new toast. Returns the toast id. */
|
|
45
|
+
toast(message: string, opts?: {
|
|
46
|
+
variant?: ToastVariant;
|
|
47
|
+
duration?: number;
|
|
48
|
+
}): string;
|
|
49
|
+
/** Dismiss a toast by id */
|
|
50
|
+
dismiss(id: string): void;
|
|
51
|
+
/** Current toast list (read-only) */
|
|
52
|
+
readonly toasts: ReadonlyArray<ToastEntry>;
|
|
53
|
+
/** Subscribe to toast list changes. Returns unsubscribe function. */
|
|
54
|
+
subscribe(fn: (toasts: ReadonlyArray<ToastEntry>) => void): () => void;
|
|
55
|
+
}
|
|
56
|
+
declare function createToastManager(): ToastManagerAPI;
|
|
57
|
+
|
|
58
|
+
declare const toastVariants: (props?: ({
|
|
59
|
+
variant?: "default" | "success" | "error" | "warning" | undefined;
|
|
60
|
+
} & {
|
|
61
|
+
className?: string;
|
|
62
|
+
}) | undefined) => string;
|
|
63
|
+
|
|
64
|
+
export { type ToastAPI, type ToastEntry, type ToastManagerAPI, type ToastProps, type ToastState, type ToastVariant, createToast, createToastManager, getToastIcon, toastVariants };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { AccessibilityProps } from '../shared/index.js';
|
|
2
|
+
|
|
3
|
+
type ToastVariant = 'default' | 'success' | 'error' | 'warning';
|
|
4
|
+
/** Get the icon name for a toast variant (colorblind-safe: meaning not conveyed by color alone) */
|
|
5
|
+
declare function getToastIcon(variant: ToastVariant): string;
|
|
6
|
+
interface ToastProps {
|
|
7
|
+
/** Visual variant */
|
|
8
|
+
variant?: ToastVariant;
|
|
9
|
+
/** Auto-dismiss duration in ms (default: 3000). Set to 0 to disable. */
|
|
10
|
+
duration?: number;
|
|
11
|
+
/** Whether the toast is open (controlled) */
|
|
12
|
+
open?: boolean;
|
|
13
|
+
/** Callback when open state changes */
|
|
14
|
+
onOpenChange?: (open: boolean) => void;
|
|
15
|
+
}
|
|
16
|
+
interface ToastState {
|
|
17
|
+
open: boolean;
|
|
18
|
+
variant: ToastVariant;
|
|
19
|
+
}
|
|
20
|
+
interface ToastAPI {
|
|
21
|
+
/** Current toast state */
|
|
22
|
+
state: ToastState;
|
|
23
|
+
/** ARIA attributes for the toast element */
|
|
24
|
+
ariaProps: Partial<AccessibilityProps>;
|
|
25
|
+
/** Dismiss the toast */
|
|
26
|
+
dismiss(): void;
|
|
27
|
+
/** Start the auto-dismiss timer */
|
|
28
|
+
startTimer(): void;
|
|
29
|
+
/** Pause the auto-dismiss timer (e.g. on hover) */
|
|
30
|
+
pauseTimer(): void;
|
|
31
|
+
/** Resume the auto-dismiss timer */
|
|
32
|
+
resumeTimer(): void;
|
|
33
|
+
}
|
|
34
|
+
declare function createToast(props?: ToastProps): ToastAPI;
|
|
35
|
+
/** Entry in the toast manager */
|
|
36
|
+
interface ToastEntry {
|
|
37
|
+
id: string;
|
|
38
|
+
message: string;
|
|
39
|
+
variant: ToastVariant;
|
|
40
|
+
duration: number;
|
|
41
|
+
createdAt: number;
|
|
42
|
+
}
|
|
43
|
+
interface ToastManagerAPI {
|
|
44
|
+
/** Add a new toast. Returns the toast id. */
|
|
45
|
+
toast(message: string, opts?: {
|
|
46
|
+
variant?: ToastVariant;
|
|
47
|
+
duration?: number;
|
|
48
|
+
}): string;
|
|
49
|
+
/** Dismiss a toast by id */
|
|
50
|
+
dismiss(id: string): void;
|
|
51
|
+
/** Current toast list (read-only) */
|
|
52
|
+
readonly toasts: ReadonlyArray<ToastEntry>;
|
|
53
|
+
/** Subscribe to toast list changes. Returns unsubscribe function. */
|
|
54
|
+
subscribe(fn: (toasts: ReadonlyArray<ToastEntry>) => void): () => void;
|
|
55
|
+
}
|
|
56
|
+
declare function createToastManager(): ToastManagerAPI;
|
|
57
|
+
|
|
58
|
+
declare const toastVariants: (props?: ({
|
|
59
|
+
variant?: "default" | "success" | "error" | "warning" | undefined;
|
|
60
|
+
} & {
|
|
61
|
+
className?: string;
|
|
62
|
+
}) | undefined) => string;
|
|
63
|
+
|
|
64
|
+
export { type ToastAPI, type ToastEntry, type ToastManagerAPI, type ToastProps, type ToastState, type ToastVariant, createToast, createToastManager, getToastIcon, toastVariants };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { AccessibilityProps, Side } from '../shared/index.cjs';
|
|
2
|
+
|
|
3
|
+
interface TooltipProps {
|
|
4
|
+
open?: boolean;
|
|
5
|
+
defaultOpen?: boolean;
|
|
6
|
+
onOpenChange?: (open: boolean) => void;
|
|
7
|
+
placement?: Side;
|
|
8
|
+
delayDuration?: number;
|
|
9
|
+
}
|
|
10
|
+
interface TooltipAPI {
|
|
11
|
+
/** Current open state */
|
|
12
|
+
state: {
|
|
13
|
+
open: boolean;
|
|
14
|
+
};
|
|
15
|
+
/** Props to spread on the trigger element */
|
|
16
|
+
triggerProps: Partial<AccessibilityProps> & {
|
|
17
|
+
'aria-describedby': string;
|
|
18
|
+
};
|
|
19
|
+
/** Props to spread on the content element */
|
|
20
|
+
contentProps: {
|
|
21
|
+
role: 'tooltip';
|
|
22
|
+
id: string;
|
|
23
|
+
};
|
|
24
|
+
/** Resolved placement */
|
|
25
|
+
placement: Side;
|
|
26
|
+
/** Open the tooltip */
|
|
27
|
+
open: () => void;
|
|
28
|
+
/** Close the tooltip (and clear any pending delay) */
|
|
29
|
+
close: () => void;
|
|
30
|
+
/** Open with delay */
|
|
31
|
+
openWithDelay: () => void;
|
|
32
|
+
/** The configured delay duration */
|
|
33
|
+
delayDuration: number;
|
|
34
|
+
/** Cancel any pending delay timer */
|
|
35
|
+
cancelDelay: () => void;
|
|
36
|
+
}
|
|
37
|
+
declare function createTooltip(props?: TooltipProps): TooltipAPI;
|
|
38
|
+
|
|
39
|
+
declare const tooltipContentVariants: (props?: ({
|
|
40
|
+
side?: "top" | "right" | "bottom" | "left" | undefined;
|
|
41
|
+
} & {
|
|
42
|
+
className?: string;
|
|
43
|
+
}) | undefined) => string;
|
|
44
|
+
|
|
45
|
+
export { type TooltipAPI, type TooltipProps, createTooltip, tooltipContentVariants };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { AccessibilityProps, Side } from '../shared/index.js';
|
|
2
|
+
|
|
3
|
+
interface TooltipProps {
|
|
4
|
+
open?: boolean;
|
|
5
|
+
defaultOpen?: boolean;
|
|
6
|
+
onOpenChange?: (open: boolean) => void;
|
|
7
|
+
placement?: Side;
|
|
8
|
+
delayDuration?: number;
|
|
9
|
+
}
|
|
10
|
+
interface TooltipAPI {
|
|
11
|
+
/** Current open state */
|
|
12
|
+
state: {
|
|
13
|
+
open: boolean;
|
|
14
|
+
};
|
|
15
|
+
/** Props to spread on the trigger element */
|
|
16
|
+
triggerProps: Partial<AccessibilityProps> & {
|
|
17
|
+
'aria-describedby': string;
|
|
18
|
+
};
|
|
19
|
+
/** Props to spread on the content element */
|
|
20
|
+
contentProps: {
|
|
21
|
+
role: 'tooltip';
|
|
22
|
+
id: string;
|
|
23
|
+
};
|
|
24
|
+
/** Resolved placement */
|
|
25
|
+
placement: Side;
|
|
26
|
+
/** Open the tooltip */
|
|
27
|
+
open: () => void;
|
|
28
|
+
/** Close the tooltip (and clear any pending delay) */
|
|
29
|
+
close: () => void;
|
|
30
|
+
/** Open with delay */
|
|
31
|
+
openWithDelay: () => void;
|
|
32
|
+
/** The configured delay duration */
|
|
33
|
+
delayDuration: number;
|
|
34
|
+
/** Cancel any pending delay timer */
|
|
35
|
+
cancelDelay: () => void;
|
|
36
|
+
}
|
|
37
|
+
declare function createTooltip(props?: TooltipProps): TooltipAPI;
|
|
38
|
+
|
|
39
|
+
declare const tooltipContentVariants: (props?: ({
|
|
40
|
+
side?: "top" | "right" | "bottom" | "left" | undefined;
|
|
41
|
+
} & {
|
|
42
|
+
className?: string;
|
|
43
|
+
}) | undefined) => string;
|
|
44
|
+
|
|
45
|
+
export { type TooltipAPI, type TooltipProps, createTooltip, tooltipContentVariants };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { KeyboardHandlerMap } from '../shared/index.cjs';
|
|
2
|
+
|
|
3
|
+
interface VersionOption {
|
|
4
|
+
value: string;
|
|
5
|
+
label: string;
|
|
6
|
+
isLatest?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface VersionSelectorProps {
|
|
9
|
+
value?: string;
|
|
10
|
+
onValueChange?: (value: string) => void;
|
|
11
|
+
versions: VersionOption[];
|
|
12
|
+
}
|
|
13
|
+
interface VersionSelectorAPI {
|
|
14
|
+
/** Current state */
|
|
15
|
+
state: {
|
|
16
|
+
selectedVersion: string;
|
|
17
|
+
isOpen: boolean;
|
|
18
|
+
};
|
|
19
|
+
/** Props to spread on the trigger element */
|
|
20
|
+
triggerProps: {
|
|
21
|
+
'aria-expanded': boolean;
|
|
22
|
+
'aria-controls': string;
|
|
23
|
+
'aria-haspopup': 'listbox';
|
|
24
|
+
role: 'combobox';
|
|
25
|
+
};
|
|
26
|
+
/** Props to spread on the content/dropdown element */
|
|
27
|
+
contentProps: {
|
|
28
|
+
role: 'listbox';
|
|
29
|
+
id: string;
|
|
30
|
+
};
|
|
31
|
+
/** Get props for an individual option */
|
|
32
|
+
getOptionProps: (value: string) => {
|
|
33
|
+
role: 'option';
|
|
34
|
+
'aria-selected': boolean;
|
|
35
|
+
'data-value': string;
|
|
36
|
+
'data-latest'?: string;
|
|
37
|
+
};
|
|
38
|
+
/** Select a version */
|
|
39
|
+
select: (value: string) => void;
|
|
40
|
+
/** Open the dropdown */
|
|
41
|
+
open: () => void;
|
|
42
|
+
/** Close the dropdown */
|
|
43
|
+
close: () => void;
|
|
44
|
+
/** Keyboard handler map */
|
|
45
|
+
keyboardHandlers: KeyboardHandlerMap;
|
|
46
|
+
/** Pre-built keyboard event handler */
|
|
47
|
+
handleKeyDown: (event: KeyboardEvent) => void;
|
|
48
|
+
}
|
|
49
|
+
declare function createVersionSelector(props: VersionSelectorProps): VersionSelectorAPI;
|
|
50
|
+
|
|
51
|
+
declare const versionSelectorVariants: (props?: ({
|
|
52
|
+
size?: "sm" | "md" | "lg" | undefined;
|
|
53
|
+
} & {
|
|
54
|
+
className?: string;
|
|
55
|
+
}) | undefined) => string;
|
|
56
|
+
declare const versionSelectorOptionVariants: (props?: ({
|
|
57
|
+
selected?: "true" | "false" | undefined;
|
|
58
|
+
} & {
|
|
59
|
+
className?: string;
|
|
60
|
+
}) | undefined) => string;
|
|
61
|
+
|
|
62
|
+
declare const latestBadgeVariants: (props?: ({
|
|
63
|
+
variant?: "default" | "accent" | undefined;
|
|
64
|
+
} & {
|
|
65
|
+
className?: string;
|
|
66
|
+
}) | undefined) => string;
|
|
67
|
+
|
|
68
|
+
export { type VersionOption, type VersionSelectorAPI, type VersionSelectorProps, createVersionSelector, latestBadgeVariants, versionSelectorOptionVariants as optionVariants, versionSelectorVariants };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { KeyboardHandlerMap } from '../shared/index.js';
|
|
2
|
+
|
|
3
|
+
interface VersionOption {
|
|
4
|
+
value: string;
|
|
5
|
+
label: string;
|
|
6
|
+
isLatest?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface VersionSelectorProps {
|
|
9
|
+
value?: string;
|
|
10
|
+
onValueChange?: (value: string) => void;
|
|
11
|
+
versions: VersionOption[];
|
|
12
|
+
}
|
|
13
|
+
interface VersionSelectorAPI {
|
|
14
|
+
/** Current state */
|
|
15
|
+
state: {
|
|
16
|
+
selectedVersion: string;
|
|
17
|
+
isOpen: boolean;
|
|
18
|
+
};
|
|
19
|
+
/** Props to spread on the trigger element */
|
|
20
|
+
triggerProps: {
|
|
21
|
+
'aria-expanded': boolean;
|
|
22
|
+
'aria-controls': string;
|
|
23
|
+
'aria-haspopup': 'listbox';
|
|
24
|
+
role: 'combobox';
|
|
25
|
+
};
|
|
26
|
+
/** Props to spread on the content/dropdown element */
|
|
27
|
+
contentProps: {
|
|
28
|
+
role: 'listbox';
|
|
29
|
+
id: string;
|
|
30
|
+
};
|
|
31
|
+
/** Get props for an individual option */
|
|
32
|
+
getOptionProps: (value: string) => {
|
|
33
|
+
role: 'option';
|
|
34
|
+
'aria-selected': boolean;
|
|
35
|
+
'data-value': string;
|
|
36
|
+
'data-latest'?: string;
|
|
37
|
+
};
|
|
38
|
+
/** Select a version */
|
|
39
|
+
select: (value: string) => void;
|
|
40
|
+
/** Open the dropdown */
|
|
41
|
+
open: () => void;
|
|
42
|
+
/** Close the dropdown */
|
|
43
|
+
close: () => void;
|
|
44
|
+
/** Keyboard handler map */
|
|
45
|
+
keyboardHandlers: KeyboardHandlerMap;
|
|
46
|
+
/** Pre-built keyboard event handler */
|
|
47
|
+
handleKeyDown: (event: KeyboardEvent) => void;
|
|
48
|
+
}
|
|
49
|
+
declare function createVersionSelector(props: VersionSelectorProps): VersionSelectorAPI;
|
|
50
|
+
|
|
51
|
+
declare const versionSelectorVariants: (props?: ({
|
|
52
|
+
size?: "sm" | "md" | "lg" | undefined;
|
|
53
|
+
} & {
|
|
54
|
+
className?: string;
|
|
55
|
+
}) | undefined) => string;
|
|
56
|
+
declare const versionSelectorOptionVariants: (props?: ({
|
|
57
|
+
selected?: "true" | "false" | undefined;
|
|
58
|
+
} & {
|
|
59
|
+
className?: string;
|
|
60
|
+
}) | undefined) => string;
|
|
61
|
+
|
|
62
|
+
declare const latestBadgeVariants: (props?: ({
|
|
63
|
+
variant?: "default" | "accent" | undefined;
|
|
64
|
+
} & {
|
|
65
|
+
className?: string;
|
|
66
|
+
}) | undefined) => string;
|
|
67
|
+
|
|
68
|
+
export { type VersionOption, type VersionSelectorAPI, type VersionSelectorProps, createVersionSelector, latestBadgeVariants, versionSelectorOptionVariants as optionVariants, versionSelectorVariants };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { AccessibilityProps } from '../shared/index.cjs';
|
|
2
|
+
|
|
3
|
+
interface VideoPlayerProps {
|
|
4
|
+
src?: string;
|
|
5
|
+
poster?: string;
|
|
6
|
+
autoplay?: boolean;
|
|
7
|
+
muted?: boolean;
|
|
8
|
+
controls?: boolean;
|
|
9
|
+
}
|
|
10
|
+
type VideoState = 'idle' | 'loading' | 'playing' | 'paused' | 'ended';
|
|
11
|
+
interface VideoPlayerAPI {
|
|
12
|
+
/** Current player state */
|
|
13
|
+
state: VideoState;
|
|
14
|
+
/** Transition to playing state */
|
|
15
|
+
play: () => void;
|
|
16
|
+
/** Transition to paused state */
|
|
17
|
+
pause: () => void;
|
|
18
|
+
/** Toggle between playing and paused */
|
|
19
|
+
togglePlay: () => void;
|
|
20
|
+
/** Toggle mute state */
|
|
21
|
+
toggleMute: () => boolean;
|
|
22
|
+
/** ARIA props for the player region */
|
|
23
|
+
ariaProps: Partial<AccessibilityProps>;
|
|
24
|
+
/** ARIA props for control buttons */
|
|
25
|
+
controlAriaProps: {
|
|
26
|
+
playPause: Partial<AccessibilityProps>;
|
|
27
|
+
mute: Partial<AccessibilityProps>;
|
|
28
|
+
};
|
|
29
|
+
/** Data attributes reflecting current state */
|
|
30
|
+
dataAttributes: Record<string, string>;
|
|
31
|
+
}
|
|
32
|
+
declare function createVideoPlayer(props?: VideoPlayerProps): VideoPlayerAPI;
|
|
33
|
+
|
|
34
|
+
declare const playerVariants: (props?: ({
|
|
35
|
+
size?: "sm" | "md" | "lg" | "full" | undefined;
|
|
36
|
+
} & {
|
|
37
|
+
className?: string;
|
|
38
|
+
}) | undefined) => string;
|
|
39
|
+
declare const controlsVariants: (props?: ({
|
|
40
|
+
visibility?: "visible" | "hidden" | undefined;
|
|
41
|
+
} & {
|
|
42
|
+
className?: string;
|
|
43
|
+
}) | undefined) => string;
|
|
44
|
+
declare const overlayVariants: (props?: ({
|
|
45
|
+
visibility?: "visible" | "hidden" | undefined;
|
|
46
|
+
} & {
|
|
47
|
+
className?: string;
|
|
48
|
+
}) | undefined) => string;
|
|
49
|
+
|
|
50
|
+
export { type VideoPlayerAPI, type VideoPlayerProps, type VideoState, controlsVariants, createVideoPlayer, overlayVariants, playerVariants };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { AccessibilityProps } from '../shared/index.js';
|
|
2
|
+
|
|
3
|
+
interface VideoPlayerProps {
|
|
4
|
+
src?: string;
|
|
5
|
+
poster?: string;
|
|
6
|
+
autoplay?: boolean;
|
|
7
|
+
muted?: boolean;
|
|
8
|
+
controls?: boolean;
|
|
9
|
+
}
|
|
10
|
+
type VideoState = 'idle' | 'loading' | 'playing' | 'paused' | 'ended';
|
|
11
|
+
interface VideoPlayerAPI {
|
|
12
|
+
/** Current player state */
|
|
13
|
+
state: VideoState;
|
|
14
|
+
/** Transition to playing state */
|
|
15
|
+
play: () => void;
|
|
16
|
+
/** Transition to paused state */
|
|
17
|
+
pause: () => void;
|
|
18
|
+
/** Toggle between playing and paused */
|
|
19
|
+
togglePlay: () => void;
|
|
20
|
+
/** Toggle mute state */
|
|
21
|
+
toggleMute: () => boolean;
|
|
22
|
+
/** ARIA props for the player region */
|
|
23
|
+
ariaProps: Partial<AccessibilityProps>;
|
|
24
|
+
/** ARIA props for control buttons */
|
|
25
|
+
controlAriaProps: {
|
|
26
|
+
playPause: Partial<AccessibilityProps>;
|
|
27
|
+
mute: Partial<AccessibilityProps>;
|
|
28
|
+
};
|
|
29
|
+
/** Data attributes reflecting current state */
|
|
30
|
+
dataAttributes: Record<string, string>;
|
|
31
|
+
}
|
|
32
|
+
declare function createVideoPlayer(props?: VideoPlayerProps): VideoPlayerAPI;
|
|
33
|
+
|
|
34
|
+
declare const playerVariants: (props?: ({
|
|
35
|
+
size?: "sm" | "md" | "lg" | "full" | undefined;
|
|
36
|
+
} & {
|
|
37
|
+
className?: string;
|
|
38
|
+
}) | undefined) => string;
|
|
39
|
+
declare const controlsVariants: (props?: ({
|
|
40
|
+
visibility?: "visible" | "hidden" | undefined;
|
|
41
|
+
} & {
|
|
42
|
+
className?: string;
|
|
43
|
+
}) | undefined) => string;
|
|
44
|
+
declare const overlayVariants: (props?: ({
|
|
45
|
+
visibility?: "visible" | "hidden" | undefined;
|
|
46
|
+
} & {
|
|
47
|
+
className?: string;
|
|
48
|
+
}) | undefined) => string;
|
|
49
|
+
|
|
50
|
+
export { type VideoPlayerAPI, type VideoPlayerProps, type VideoState, controlsVariants, createVideoPlayer, overlayVariants, playerVariants };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { AccessibilityProps, TokenContract } from '../shared/index.cjs';
|
|
2
|
+
|
|
3
|
+
type VoicePillSpeaker = 'ai' | 'user' | (string & {});
|
|
4
|
+
type VoicePillPosition = 'inline' | 'top-start' | 'top-center' | 'top-end' | 'bottom-start' | 'bottom-center' | 'bottom-end' | 'left-start' | 'left-center' | 'left-end' | 'right-start' | 'right-center' | 'right-end';
|
|
5
|
+
interface VoicePillProps {
|
|
6
|
+
/** Speaker identity used for labels and data-speaker theming */
|
|
7
|
+
speaker?: VoicePillSpeaker;
|
|
8
|
+
/** Primary voice status text */
|
|
9
|
+
label: string;
|
|
10
|
+
/** Optional secondary status text */
|
|
11
|
+
sub?: string;
|
|
12
|
+
/** Voice activity intensity, clamped from 0 to 1 */
|
|
13
|
+
intensity?: number;
|
|
14
|
+
/** Whether voice output/input is muted */
|
|
15
|
+
muted?: boolean;
|
|
16
|
+
/** Callback for the optional mute toggle */
|
|
17
|
+
onToggleMute?: () => void;
|
|
18
|
+
/** Viewport position, or inline for embedding inside another layout */
|
|
19
|
+
position?: VoicePillPosition;
|
|
20
|
+
}
|
|
21
|
+
interface VoicePillStyleVars {
|
|
22
|
+
[key: `--${string}`]: string;
|
|
23
|
+
}
|
|
24
|
+
interface VoicePillAPI {
|
|
25
|
+
/** Display speaker label */
|
|
26
|
+
speaker: string;
|
|
27
|
+
/** Normalized key for data-speaker */
|
|
28
|
+
speakerKey: string;
|
|
29
|
+
/** Primary label */
|
|
30
|
+
label: string;
|
|
31
|
+
/** Secondary label */
|
|
32
|
+
sub?: string;
|
|
33
|
+
/** Clamped raw intensity */
|
|
34
|
+
intensity: number;
|
|
35
|
+
/** Intensity used for visual animation after muted state is applied */
|
|
36
|
+
visualIntensity: number;
|
|
37
|
+
/** Muted state */
|
|
38
|
+
muted: boolean;
|
|
39
|
+
/** Viewport position, or inline for embedding inside another layout */
|
|
40
|
+
position: VoicePillPosition;
|
|
41
|
+
/** Fallback initials for the speaker avatar */
|
|
42
|
+
initials: string;
|
|
43
|
+
/** Invoke the mute callback when provided */
|
|
44
|
+
toggleMute(): void;
|
|
45
|
+
/** ARIA props for the live status pill */
|
|
46
|
+
ariaProps: Partial<AccessibilityProps> & Record<string, unknown>;
|
|
47
|
+
/** ARIA props for the mute toggle */
|
|
48
|
+
toggleMuteAriaProps: Record<string, unknown>;
|
|
49
|
+
/** Data attributes reflecting speaker/state */
|
|
50
|
+
dataAttributes: Record<string, string>;
|
|
51
|
+
/** CSS custom properties that drive pulse visuals */
|
|
52
|
+
style: VoicePillStyleVars;
|
|
53
|
+
}
|
|
54
|
+
declare const DEFAULT_VOICE_PILL_SPEAKER = "ai";
|
|
55
|
+
declare const DEFAULT_VOICE_PILL_POSITION: VoicePillPosition;
|
|
56
|
+
declare function clampVoicePillIntensity(intensity?: number): number;
|
|
57
|
+
declare function getVoicePillSpeakerKey(speaker?: VoicePillSpeaker): string;
|
|
58
|
+
declare function getVoicePillSpeakerLabel(speaker?: VoicePillSpeaker): string;
|
|
59
|
+
declare function getVoicePillInitials(speaker?: VoicePillSpeaker): string;
|
|
60
|
+
declare function getVoicePillPosition(position?: VoicePillPosition): VoicePillPosition;
|
|
61
|
+
declare function getVoicePillAriaLabel(props: {
|
|
62
|
+
speaker?: VoicePillSpeaker;
|
|
63
|
+
label: string;
|
|
64
|
+
sub?: string;
|
|
65
|
+
muted?: boolean;
|
|
66
|
+
}): string;
|
|
67
|
+
declare function getVoicePillPulseStyle(intensity?: number, muted?: boolean): VoicePillStyleVars;
|
|
68
|
+
declare function createVoicePill(props: VoicePillProps): VoicePillAPI;
|
|
69
|
+
|
|
70
|
+
declare const voicePillTokens: TokenContract;
|
|
71
|
+
declare const voicePillRootStyles = "inline-flex min-w-0 max-w-[min(calc(100vw-2rem),22rem)] items-center gap-3 rounded-full border border-border bg-background px-3 py-2 text-foreground shadow-lg ring-1 ring-border/50 transition-opacity data-[muted=true]:opacity-80";
|
|
72
|
+
declare const voicePillSpeakerStyles = "[--rfr-voice-pill-accent:hsl(var(--primary))] [--rfr-voice-pill-accent-foreground:hsl(var(--primary-foreground))] data-[speaker=user]:[--rfr-voice-pill-accent:hsl(var(--accent-foreground))] data-[speaker=user]:[--rfr-voice-pill-accent-foreground:hsl(var(--accent))] data-[muted=true]:[--rfr-voice-pill-accent:hsl(var(--muted-foreground))]";
|
|
73
|
+
declare const voicePillPositionVariants: (props?: ({
|
|
74
|
+
position?: "inline" | "top-start" | "top-center" | "top-end" | "bottom-start" | "bottom-center" | "bottom-end" | "left-start" | "left-center" | "left-end" | "right-start" | "right-center" | "right-end" | undefined;
|
|
75
|
+
} & {
|
|
76
|
+
className?: string;
|
|
77
|
+
}) | undefined) => string;
|
|
78
|
+
declare const voicePillAvatarWrapStyles = "relative flex h-10 w-10 shrink-0 items-center justify-center";
|
|
79
|
+
declare const voicePillPulseRingStyles = "pointer-events-none absolute inset-0 rounded-full border border-[var(--rfr-voice-pill-accent)] opacity-[var(--rfr-voice-pill-ring-opacity)] motion-safe:animate-ping motion-reduce:animate-none";
|
|
80
|
+
declare const voicePillAvatarStyles = "relative z-10 flex h-10 w-10 items-center justify-center overflow-hidden rounded-full bg-[var(--rfr-voice-pill-accent)] text-[var(--rfr-voice-pill-accent-foreground)] text-xs font-semibold uppercase";
|
|
81
|
+
declare const voicePillTextStyles = "min-w-0 flex-1";
|
|
82
|
+
declare const voicePillLabelStyles = "block truncate text-sm font-medium leading-tight";
|
|
83
|
+
declare const voicePillSubStyles = "block truncate text-xs leading-tight text-muted-foreground";
|
|
84
|
+
declare const voicePillMuteButtonStyles = "inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-border text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring";
|
|
85
|
+
|
|
86
|
+
export { DEFAULT_VOICE_PILL_POSITION, DEFAULT_VOICE_PILL_SPEAKER, type VoicePillAPI, type VoicePillPosition, type VoicePillProps, type VoicePillSpeaker, type VoicePillStyleVars, clampVoicePillIntensity, createVoicePill, getVoicePillAriaLabel, getVoicePillInitials, getVoicePillPosition, getVoicePillPulseStyle, getVoicePillSpeakerKey, getVoicePillSpeakerLabel, voicePillAvatarStyles, voicePillAvatarWrapStyles, voicePillLabelStyles, voicePillMuteButtonStyles, voicePillPositionVariants, voicePillPulseRingStyles, voicePillRootStyles, voicePillSpeakerStyles, voicePillSubStyles, voicePillTextStyles, voicePillTokens };
|