@refraction-ui/react 0.19.1 → 0.19.2
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/dist/chunk-533MCMSU.js +2355 -0
- package/dist/chunk-533MCMSU.js.map +7 -0
- package/dist/chunk-AMK4VCBG.js +250 -0
- package/dist/chunk-AMK4VCBG.js.map +7 -0
- package/dist/chunk-BOLFYVI6.js +90 -0
- package/dist/chunk-BOLFYVI6.js.map +7 -0
- package/dist/chunk-F7B64KT3.js +187 -0
- package/dist/chunk-F7B64KT3.js.map +7 -0
- package/dist/chunk-FD37DFCC.js +77 -0
- package/dist/chunk-FD37DFCC.js.map +7 -0
- package/dist/chunk-GFXGXZDB.js +23543 -0
- package/dist/chunk-GFXGXZDB.js.map +7 -0
- package/dist/chunk-H54FLNAF.js +132 -0
- package/dist/chunk-H54FLNAF.js.map +7 -0
- package/dist/chunk-INP46354.js +664 -0
- package/dist/chunk-INP46354.js.map +7 -0
- package/dist/chunk-O4R4W2KY.js +6460 -0
- package/dist/chunk-O4R4W2KY.js.map +7 -0
- package/dist/chunk-ONACRMG4.js +116 -0
- package/dist/chunk-ONACRMG4.js.map +7 -0
- package/dist/chunk-SDZ3LROZ.js +7 -0
- package/dist/chunk-SDZ3LROZ.js.map +7 -0
- package/dist/chunk-UJ6BBWQM.js +154 -0
- package/dist/chunk-UJ6BBWQM.js.map +7 -0
- package/dist/chunk-UNEM2TRI.js +225 -0
- package/dist/chunk-UNEM2TRI.js.map +7 -0
- package/dist/chunk-VK3EQ34F.js +92 -0
- package/dist/chunk-VK3EQ34F.js.map +7 -0
- package/dist/chunk-WK2IIUFO.js +316 -0
- package/dist/chunk-WK2IIUFO.js.map +7 -0
- package/dist/chunk-XWP763SH.js +3 -2
- package/dist/chunk-XWP763SH.js.map +7 -1
- package/dist/chunk-Y2FNNAIL.js +80 -0
- package/dist/chunk-Y2FNNAIL.js.map +1 -0
- package/dist/{chunk-4A4BW3GR.js → chunk-ZF3OHCGV.js} +28 -5
- package/dist/chunk-ZF3OHCGV.js.map +7 -0
- package/dist/form.cjs +5 -11
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +6 -12
- package/dist/form.js.map +1 -1
- package/dist/index.cjs +320 -538
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +125 -28780
- package/dist/internal/react-app-shell/index.d.cts +2 -22
- package/dist/internal/react-app-shell/index.d.ts +2 -22
- package/dist/internal/react-collapsible/index.d.cts +0 -3
- package/dist/internal/react-collapsible/index.d.ts +0 -3
- package/dist/internal/react-combobox/index.d.cts +0 -3
- package/dist/internal/react-combobox/index.d.ts +0 -3
- package/dist/internal/react-command/index.d.cts +0 -3
- package/dist/internal/react-command/index.d.ts +0 -3
- package/dist/internal/react-data-table/index.d.cts +0 -3
- package/dist/internal/react-data-table/index.d.ts +0 -3
- package/dist/internal/react-dialog/index.d.cts +0 -3
- package/dist/internal/react-dialog/index.d.ts +0 -3
- package/dist/internal/react-dropdown-menu/index.d.cts +0 -3
- package/dist/internal/react-dropdown-menu/index.d.ts +0 -3
- package/dist/internal/react-feedback-dialog/index.d.cts +0 -3
- package/dist/internal/react-feedback-dialog/index.d.ts +0 -3
- package/dist/internal/react-keyboard-shortcut/index.d.cts +0 -6
- package/dist/internal/react-keyboard-shortcut/index.d.ts +0 -6
- package/dist/internal/react-popover/index.d.cts +0 -3
- package/dist/internal/react-popover/index.d.ts +0 -3
- package/dist/internal/react-sheet/index.d.cts +0 -3
- package/dist/internal/react-sheet/index.d.ts +0 -3
- package/dist/internal/react-toast/index.d.cts +0 -3
- package/dist/internal/react-toast/index.d.ts +0 -3
- package/dist/internal/react-tooltip/index.d.cts +0 -3
- package/dist/internal/react-tooltip/index.d.ts +0 -3
- package/dist/react-accordion.js +125 -0
- package/dist/react-accordion.js.map +7 -0
- package/dist/react-ai.js +257 -0
- package/dist/react-ai.js.map +7 -0
- package/dist/react-analytics.js +1698 -0
- package/dist/react-analytics.js.map +7 -0
- package/dist/react-animated-text.js +164 -0
- package/dist/react-animated-text.js.map +7 -0
- package/dist/react-app-shell.js +631 -0
- package/dist/react-app-shell.js.map +7 -0
- package/dist/react-audience-feature-card.js +53 -0
- package/dist/react-audience-feature-card.js.map +7 -0
- package/dist/react-audio-room.js +166 -0
- package/dist/react-audio-room.js.map +7 -0
- package/dist/react-auth.js +211 -0
- package/dist/react-auth.js.map +7 -0
- package/dist/react-avatar-group.js +154 -0
- package/dist/react-avatar-group.js.map +7 -0
- package/dist/react-avatar.js +168 -0
- package/dist/react-avatar.js.map +7 -0
- package/dist/react-badge.js +70 -0
- package/dist/react-badge.js.map +7 -0
- package/dist/react-bottom-nav.js +67 -0
- package/dist/react-bottom-nav.js.map +7 -0
- package/dist/react-brand-network-cell.js +92 -0
- package/dist/react-brand-network-cell.js.map +7 -0
- package/dist/react-breadcrumbs.js +104 -0
- package/dist/react-breadcrumbs.js.map +7 -0
- package/dist/react-browser-chrome-mock.js +89 -0
- package/dist/react-browser-chrome-mock.js.map +7 -0
- package/dist/react-button.js +13 -0
- package/dist/react-button.js.map +7 -0
- package/dist/react-calendar.js +301 -0
- package/dist/react-calendar.js.map +7 -0
- package/dist/react-call-controls.js +113 -0
- package/dist/react-call-controls.js.map +7 -0
- package/dist/react-callout.js +136 -0
- package/dist/react-callout.js.map +7 -0
- package/dist/react-card-grid.js +34 -0
- package/dist/react-card-grid.js.map +7 -0
- package/dist/react-card.js +184 -0
- package/dist/react-card.js.map +7 -0
- package/dist/react-carousel.js +132 -0
- package/dist/react-carousel.js.map +7 -0
- package/dist/react-charts.js +509 -0
- package/dist/react-charts.js.map +7 -0
- package/dist/react-checkbox.js +156 -0
- package/dist/react-checkbox.js.map +7 -0
- package/dist/react-checklist.js +168 -0
- package/dist/react-checklist.js.map +7 -0
- package/dist/react-code-block.js +78 -0
- package/dist/react-code-block.js.map +7 -0
- package/dist/react-code-editor.js +184 -0
- package/dist/react-code-editor.js.map +7 -0
- package/dist/react-collapsible.js +192 -0
- package/dist/react-collapsible.js.map +7 -0
- package/dist/react-combobox.js +609 -0
- package/dist/react-combobox.js.map +7 -0
- package/dist/react-command-input.js +202 -0
- package/dist/react-command-input.js.map +7 -0
- package/dist/react-command.js +364 -0
- package/dist/react-command.js.map +7 -0
- package/dist/react-composer.js +2036 -0
- package/dist/react-composer.js.map +7 -0
- package/dist/react-content-protection.js +133 -0
- package/dist/react-content-protection.js.map +7 -0
- package/dist/react-conversation.js +1226 -0
- package/dist/react-conversation.js.map +7 -0
- package/dist/react-cookie-consent.js +291 -0
- package/dist/react-cookie-consent.js.map +7 -0
- package/dist/react-data-table.js +310 -0
- package/dist/react-data-table.js.map +7 -0
- package/dist/react-date-picker.js +95 -0
- package/dist/react-date-picker.js.map +7 -0
- package/dist/react-device-frame.js +137 -0
- package/dist/react-device-frame.js.map +7 -0
- package/dist/react-dialog.js +218 -0
- package/dist/react-dialog.js.map +7 -0
- package/dist/react-diff-viewer.js +460 -0
- package/dist/react-diff-viewer.js.map +7 -0
- package/dist/react-dropdown-menu.js +292 -0
- package/dist/react-dropdown-menu.js.map +7 -0
- package/dist/react-editor-status-bar.js +148 -0
- package/dist/react-editor-status-bar.js.map +7 -0
- package/dist/react-editor-tabs.js +159 -0
- package/dist/react-editor-tabs.js.map +7 -0
- package/dist/react-emoji-picker.js +238 -0
- package/dist/react-emoji-picker.js.map +7 -0
- package/dist/react-empty-state.js +90 -0
- package/dist/react-empty-state.js.map +7 -0
- package/dist/react-feedback-dialog.js +275 -0
- package/dist/react-feedback-dialog.js.map +7 -0
- package/dist/react-file-tree.js +376 -0
- package/dist/react-file-tree.js.map +7 -0
- package/dist/react-file-upload.js +360 -0
- package/dist/react-file-upload.js.map +7 -0
- package/dist/react-floating-reactions.js +124 -0
- package/dist/react-floating-reactions.js.map +7 -0
- package/dist/react-flow-editor.js +198 -0
- package/dist/react-flow-editor.js.map +7 -0
- package/dist/react-footer.js +67 -0
- package/dist/react-footer.js.map +7 -0
- package/dist/react-graph-view.js +197 -0
- package/dist/react-graph-view.js.map +7 -0
- package/dist/react-icon-system.js +9 -0
- package/dist/react-icon-system.js.map +7 -0
- package/dist/react-infinite-canvas.js +8 -0
- package/dist/react-infinite-canvas.js.map +7 -0
- package/dist/react-inline-editor.js +216 -0
- package/dist/react-inline-editor.js.map +7 -0
- package/dist/react-input-group.js +150 -0
- package/dist/react-input-group.js.map +7 -0
- package/dist/react-input.js +10 -0
- package/dist/react-input.js.map +7 -0
- package/dist/react-install-prompt.js +132 -0
- package/dist/react-install-prompt.js.map +7 -0
- package/dist/react-kanban-board.js +198 -0
- package/dist/react-kanban-board.js.map +7 -0
- package/dist/react-keyboard-shortcut.js +36 -0
- package/dist/react-keyboard-shortcut.js.map +7 -0
- package/dist/react-language-selector.js +311 -0
- package/dist/react-language-selector.js.map +7 -0
- package/dist/react-link-card.js +34 -0
- package/dist/react-link-card.js.map +7 -0
- package/dist/react-live-captions.js +92 -0
- package/dist/react-live-captions.js.map +7 -0
- package/dist/react-live-cursors.js +145 -0
- package/dist/react-live-cursors.js.map +7 -0
- package/dist/react-live-transcript.js +117 -0
- package/dist/react-live-transcript.js.map +7 -0
- package/dist/react-location-selector.js +252 -0
- package/dist/react-location-selector.js.map +7 -0
- package/dist/react-logger.js +415 -0
- package/dist/react-logger.js.map +7 -0
- package/dist/react-markdown-renderer.js +12 -0
- package/dist/react-markdown-renderer.js.map +7 -0
- package/dist/react-marquee-strip.js +62 -0
- package/dist/react-marquee-strip.js.map +7 -0
- package/dist/react-mascot.js +367 -0
- package/dist/react-mascot.js.map +7 -0
- package/dist/react-mastery-bar.js +97 -0
- package/dist/react-mastery-bar.js.map +7 -0
- package/dist/react-mini-map.js +207 -0
- package/dist/react-mini-map.js.map +7 -0
- package/dist/react-mobile-nav.js +216 -0
- package/dist/react-mobile-nav.js.map +7 -0
- package/dist/react-navbar.js +96 -0
- package/dist/react-navbar.js.map +7 -0
- package/dist/react-numbered-steps.js +67 -0
- package/dist/react-numbered-steps.js.map +7 -0
- package/dist/react-otp-input.js +318 -0
- package/dist/react-otp-input.js.map +7 -0
- package/dist/react-pagination.js +199 -0
- package/dist/react-pagination.js.map +7 -0
- package/dist/react-password-input.js +104 -0
- package/dist/react-password-input.js.map +7 -0
- package/dist/react-payment.js +81 -0
- package/dist/react-payment.js.map +7 -0
- package/dist/react-popover.js +176 -0
- package/dist/react-popover.js.map +7 -0
- package/dist/react-pre-call-lobby.js +309 -0
- package/dist/react-pre-call-lobby.js.map +7 -0
- package/dist/react-presence-indicator.js +86 -0
- package/dist/react-presence-indicator.js.map +7 -0
- package/dist/react-pricing-card.js +142 -0
- package/dist/react-pricing-card.js.map +7 -0
- package/dist/react-progress-display.js +188 -0
- package/dist/react-progress-display.js.map +7 -0
- package/dist/react-radial-gauge.js +193 -0
- package/dist/react-radial-gauge.js.map +7 -0
- package/dist/react-radio.js +169 -0
- package/dist/react-radio.js.map +7 -0
- package/dist/react-rating-scale.js +171 -0
- package/dist/react-rating-scale.js.map +7 -0
- package/dist/react-reaction-bar.js +111 -0
- package/dist/react-reaction-bar.js.map +7 -0
- package/dist/react-resizable-layout.js +298 -0
- package/dist/react-resizable-layout.js.map +7 -0
- package/dist/react-rich-editor.js +1 -0
- package/dist/react-rich-editor.js.map +7 -0
- package/dist/react-search-bar.js +285 -0
- package/dist/react-search-bar.js.map +7 -0
- package/dist/react-section-head.js +65 -0
- package/dist/react-section-head.js.map +7 -0
- package/dist/react-segmented-control.js +215 -0
- package/dist/react-segmented-control.js.map +7 -0
- package/dist/react-select.js +389 -0
- package/dist/react-select.js.map +7 -0
- package/dist/react-separator.js +86 -0
- package/dist/react-separator.js.map +7 -0
- package/dist/react-sheet.js +310 -0
- package/dist/react-sheet.js.map +7 -0
- package/dist/react-sidebar.js +100 -0
- package/dist/react-sidebar.js.map +7 -0
- package/dist/react-skeleton.js +91 -0
- package/dist/react-skeleton.js.map +7 -0
- package/dist/react-skip-to-content.js +38 -0
- package/dist/react-skip-to-content.js.map +7 -0
- package/dist/react-slide-viewer.js +264 -0
- package/dist/react-slide-viewer.js.map +7 -0
- package/dist/react-slider.js +105 -0
- package/dist/react-slider.js.map +7 -0
- package/dist/react-slot-picker.js +184 -0
- package/dist/react-slot-picker.js.map +7 -0
- package/dist/react-social-auth-button.js +169 -0
- package/dist/react-social-auth-button.js.map +7 -0
- package/dist/react-sortable-list.js +204 -0
- package/dist/react-sortable-list.js.map +7 -0
- package/dist/react-stat-grid.js +69 -0
- package/dist/react-stat-grid.js.map +7 -0
- package/dist/react-status-indicator.js +117 -0
- package/dist/react-status-indicator.js.map +7 -0
- package/dist/react-steps.js +167 -0
- package/dist/react-steps.js.map +7 -0
- package/dist/react-sticky-note.js +131 -0
- package/dist/react-sticky-note.js.map +7 -0
- package/dist/react-switch.js +139 -0
- package/dist/react-switch.js.map +7 -0
- package/dist/react-table-of-contents.js +80 -0
- package/dist/react-table-of-contents.js.map +7 -0
- package/dist/react-tabs.js +230 -0
- package/dist/react-tabs.js.map +7 -0
- package/dist/react-terminal.js +101 -0
- package/dist/react-terminal.js.map +7 -0
- package/dist/react-test-results.js +158 -0
- package/dist/react-test-results.js.map +7 -0
- package/dist/react-textarea.js +89 -0
- package/dist/react-textarea.js.map +7 -0
- package/dist/react-thread-view.js +139 -0
- package/dist/react-thread-view.js.map +7 -0
- package/dist/react-timeline.js +153 -0
- package/dist/react-timeline.js.map +7 -0
- package/dist/react-toast.js +253 -0
- package/dist/react-toast.js.map +7 -0
- package/dist/react-tooltip.js +221 -0
- package/dist/react-tooltip.js.map +7 -0
- package/dist/react-version-selector.js +270 -0
- package/dist/react-version-selector.js.map +7 -0
- package/dist/react-video-grid.js +129 -0
- package/dist/react-video-grid.js.map +7 -0
- package/dist/react-video-player.js +206 -0
- package/dist/react-video-player.js.map +7 -0
- package/dist/react-video-tile.js +8 -0
- package/dist/react-video-tile.js.map +7 -0
- package/dist/react-voice-pill.js +314 -0
- package/dist/react-voice-pill.js.map +7 -0
- package/dist/react-waveform.js +558 -0
- package/dist/react-waveform.js.map +7 -0
- package/dist/react-wizard.js +337 -0
- package/dist/react-wizard.js.map +7 -0
- package/dist/theme.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-4A4BW3GR.js.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn,
|
|
3
|
+
cva
|
|
4
|
+
} from "./chunk-ZF3OHCGV.js";
|
|
5
|
+
|
|
6
|
+
// ../react-video-tile/dist/index.js
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
|
|
9
|
+
// ../video-tile/dist/index.js
|
|
10
|
+
function createVideoTile(props = {}) {
|
|
11
|
+
const { speaking = false, pinned = false } = props;
|
|
12
|
+
return {
|
|
13
|
+
dataAttributes: {
|
|
14
|
+
"data-speaking": speaking ? "true" : "false",
|
|
15
|
+
"data-pinned": pinned ? "true" : "false"
|
|
16
|
+
},
|
|
17
|
+
ariaProps: {
|
|
18
|
+
role: "group"
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function getInitials(name) {
|
|
23
|
+
const words = name.trim().split(/\s+/).filter(Boolean);
|
|
24
|
+
return words.slice(0, 2).map((w) => w[0].toUpperCase()).join("");
|
|
25
|
+
}
|
|
26
|
+
var videoTileVariants = cva({
|
|
27
|
+
base: [
|
|
28
|
+
"relative aspect-video overflow-hidden rounded-lg bg-muted",
|
|
29
|
+
"transition-shadow duration-200"
|
|
30
|
+
].join(" "),
|
|
31
|
+
variants: {
|
|
32
|
+
speaking: {
|
|
33
|
+
"true": "ring-2 ring-emerald-500 dark:ring-emerald-400 ring-offset-2 ring-offset-background",
|
|
34
|
+
"false": ""
|
|
35
|
+
},
|
|
36
|
+
pinned: {
|
|
37
|
+
"true": "ring-2 ring-primary ring-offset-2 ring-offset-background",
|
|
38
|
+
"false": ""
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
defaultVariants: {
|
|
42
|
+
speaking: "false",
|
|
43
|
+
pinned: "false"
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
var videoTileNameChipClass = "absolute bottom-2 left-2 flex items-center gap-1.5 rounded-md bg-background/70 px-2 py-0.5 text-xs font-medium text-foreground backdrop-blur-sm";
|
|
47
|
+
var videoTileMicIconClass = "text-destructive";
|
|
48
|
+
var videoTileAvatarFallbackClass = "absolute inset-0 flex items-center justify-center";
|
|
49
|
+
var videoTileAvatarCircleClass = "flex size-16 items-center justify-center rounded-full bg-card text-foreground text-xl font-semibold select-none";
|
|
50
|
+
var videoTileReactionBadgeClass = "absolute right-2 top-2 flex items-center justify-center rounded-full bg-background/70 px-1.5 py-0.5 text-sm backdrop-blur-sm";
|
|
51
|
+
|
|
52
|
+
// ../react-video-tile/dist/index.js
|
|
53
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
54
|
+
var VideoTile = React.forwardRef(
|
|
55
|
+
function VideoTile2({
|
|
56
|
+
name,
|
|
57
|
+
micState = "on",
|
|
58
|
+
speaking = false,
|
|
59
|
+
pinned = false,
|
|
60
|
+
avatarUrl,
|
|
61
|
+
mediaSlot,
|
|
62
|
+
reaction,
|
|
63
|
+
className,
|
|
64
|
+
...props
|
|
65
|
+
}, ref) {
|
|
66
|
+
const api = createVideoTile({ speaking, pinned });
|
|
67
|
+
const initials = getInitials(name);
|
|
68
|
+
const isMuted = micState === "muted";
|
|
69
|
+
return /* @__PURE__ */ jsxs(
|
|
70
|
+
"div",
|
|
71
|
+
{
|
|
72
|
+
ref,
|
|
73
|
+
className: cn(
|
|
74
|
+
videoTileVariants({
|
|
75
|
+
speaking: speaking ? "true" : "false",
|
|
76
|
+
pinned: pinned ? "true" : "false"
|
|
77
|
+
}),
|
|
78
|
+
className
|
|
79
|
+
),
|
|
80
|
+
"aria-label": name,
|
|
81
|
+
...api.ariaProps,
|
|
82
|
+
...api.dataAttributes,
|
|
83
|
+
...props,
|
|
84
|
+
children: [
|
|
85
|
+
mediaSlot != null ? /* @__PURE__ */ jsx("div", { className: "absolute inset-0 h-full w-full object-cover", children: mediaSlot }) : (
|
|
86
|
+
/* Avatar fallback */
|
|
87
|
+
/* @__PURE__ */ jsx("div", { className: videoTileAvatarFallbackClass, children: avatarUrl ? /* @__PURE__ */ jsx(
|
|
88
|
+
"img",
|
|
89
|
+
{
|
|
90
|
+
src: avatarUrl,
|
|
91
|
+
alt: name,
|
|
92
|
+
className: videoTileAvatarCircleClass
|
|
93
|
+
}
|
|
94
|
+
) : /* @__PURE__ */ jsx("div", { className: videoTileAvatarCircleClass, "aria-hidden": "true", children: initials }) })
|
|
95
|
+
),
|
|
96
|
+
reaction != null && /* @__PURE__ */ jsx("div", { className: videoTileReactionBadgeClass, "aria-hidden": "true", children: reaction }),
|
|
97
|
+
/* @__PURE__ */ jsxs("div", { className: videoTileNameChipClass, children: [
|
|
98
|
+
/* @__PURE__ */ jsx("span", { children: `${name}${isMuted ? "" : ""}` }),
|
|
99
|
+
isMuted && /* @__PURE__ */ jsx("span", { className: videoTileMicIconClass, "aria-label": "Microphone muted", children: /* @__PURE__ */ jsxs(
|
|
100
|
+
"svg",
|
|
101
|
+
{
|
|
102
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
103
|
+
width: "12",
|
|
104
|
+
height: "12",
|
|
105
|
+
viewBox: "0 0 24 24",
|
|
106
|
+
fill: "none",
|
|
107
|
+
stroke: "currentColor",
|
|
108
|
+
strokeWidth: "2",
|
|
109
|
+
strokeLinecap: "round",
|
|
110
|
+
strokeLinejoin: "round",
|
|
111
|
+
"aria-hidden": "true",
|
|
112
|
+
children: [
|
|
113
|
+
/* @__PURE__ */ jsx("line", { x1: "2", y1: "2", x2: "22", y2: "22" }),
|
|
114
|
+
/* @__PURE__ */ jsx("path", { d: "M18.89 13.23A7.12 7.12 0 0 0 19 12v-2" }),
|
|
115
|
+
/* @__PURE__ */ jsx("path", { d: "M5 10v2a7 7 0 0 0 12 5" }),
|
|
116
|
+
/* @__PURE__ */ jsx("path", { d: "M15 9.34V5a3 3 0 0 0-5.68-1.33" }),
|
|
117
|
+
/* @__PURE__ */ jsx("path", { d: "M9 9v3a3 3 0 0 0 5.12 2.12" }),
|
|
118
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "19", x2: "12", y2: "22" })
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
) })
|
|
122
|
+
] })
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
export {
|
|
130
|
+
VideoTile
|
|
131
|
+
};
|
|
132
|
+
//# sourceMappingURL=chunk-H54FLNAF.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../video-tile/src/video-tile.ts", "../../video-tile/src/video-tile.styles.ts", "../../react-video-tile/src/video-tile.tsx"],
|
|
4
|
+
"sourcesContent": ["/** Microphone state for a video participant. */\nexport type VideoTileMicState = 'on' | 'muted'\n\n/** Data describing a video meeting participant tile. */\nexport interface VideoTileData {\n /** Unique participant identifier. */\n id: string\n /** Display name shown in the name chip. */\n name: string\n /** Current microphone state. Defaults to 'on'. */\n micState?: VideoTileMicState\n /** Whether the participant is currently speaking (active audio). */\n speaking?: boolean\n /** Whether the tile is pinned in the grid. */\n pinned?: boolean\n}\n\nexport interface VideoTileHeadlessProps {\n /** Whether the participant is actively speaking. */\n speaking?: boolean\n /** Whether the tile is pinned in the grid. */\n pinned?: boolean\n}\n\nexport interface VideoTileAPI {\n /** Data attributes for styling hooks — spread onto the tile container. */\n dataAttributes: {\n 'data-speaking': string\n 'data-pinned': string\n }\n /** ARIA props — spread onto the tile container. */\n ariaProps: {\n role: 'group'\n }\n}\n\n/**\n * Derive framework-agnostic data attributes and ARIA props for a VideoTile.\n *\n * Adapters spread `dataAttributes` and `ariaProps` onto the tile container so\n * CSS selectors and assistive technology can reflect the current participant\n * state without coupling to a specific framework.\n */\nexport function createVideoTile(props: VideoTileHeadlessProps = {}): VideoTileAPI {\n const { speaking = false, pinned = false } = props\n\n return {\n dataAttributes: {\n 'data-speaking': speaking ? 'true' : 'false',\n 'data-pinned': pinned ? 'true' : 'false',\n },\n ariaProps: {\n role: 'group',\n },\n }\n}\n\n/**\n * Derive up to two uppercase initials from a display name.\n *\n * Splits on whitespace and takes the first character of the first two words.\n * Single-word names produce a single initial.\n *\n * @example\n * getInitials('Maya Goldberg') // 'MG'\n * getInitials('Alice') // 'A'\n */\nexport function getInitials(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean)\n return words\n .slice(0, 2)\n .map((w) => w[0].toUpperCase())\n .join('')\n}\n", "import { cva } from '@refraction-ui/shared'\n\n/**\n * Root tile container — aspect-video, rounded corners, clipped media.\n *\n * `speaking` variant adds a visible ring to indicate active audio.\n * `pinned` variant adds a stronger ring to mark a pinned participant.\n *\n * cva boolean-like variants use string values ('true'/'false') per the\n * refraction-ui convention — callers must pass strings, not raw booleans.\n */\nexport const videoTileVariants = cva({\n base: [\n 'relative aspect-video overflow-hidden rounded-lg bg-muted',\n 'transition-shadow duration-200',\n ].join(' '),\n variants: {\n speaking: {\n 'true': 'ring-2 ring-emerald-500 dark:ring-emerald-400 ring-offset-2 ring-offset-background',\n 'false': '',\n },\n pinned: {\n 'true': 'ring-2 ring-primary ring-offset-2 ring-offset-background',\n 'false': '',\n },\n },\n defaultVariants: {\n speaking: 'false',\n pinned: 'false',\n },\n})\n\n/**\n * Name chip anchored to the bottom-left of the tile.\n * Semi-transparent bg keeps it legible over any media content.\n */\nexport const videoTileNameChipClass =\n 'absolute bottom-2 left-2 flex items-center gap-1.5 rounded-md bg-background/70 px-2 py-0.5 text-xs font-medium text-foreground backdrop-blur-sm'\n\n/**\n * Mic-muted icon container — sits inside the name chip at the trailing edge.\n */\nexport const videoTileMicIconClass = 'text-destructive'\n\n/**\n * Avatar fallback circle — centred in the tile when no media stream is available.\n */\nexport const videoTileAvatarFallbackClass =\n 'absolute inset-0 flex items-center justify-center'\n\n/** Inner circle with initials. */\nexport const videoTileAvatarCircleClass =\n 'flex size-16 items-center justify-center rounded-full bg-card text-foreground text-xl font-semibold select-none'\n\n/**\n * Reaction badge slot — anchored to the top-right corner.\n */\nexport const videoTileReactionBadgeClass =\n 'absolute right-2 top-2 flex items-center justify-center rounded-full bg-background/70 px-1.5 py-0.5 text-sm backdrop-blur-sm'\n", "import * as React from 'react'\nimport {\n createVideoTile,\n getInitials,\n videoTileVariants,\n videoTileNameChipClass,\n videoTileMicIconClass,\n videoTileAvatarFallbackClass,\n videoTileAvatarCircleClass,\n videoTileReactionBadgeClass,\n type VideoTileMicState,\n type VideoTileData,\n} from '@refraction-ui/video-tile'\nimport { cn } from '@refraction-ui/shared'\n\nexport type { VideoTileMicState, VideoTileData }\n\nexport interface VideoTileProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'content' | 'color'> {\n /** Participant display name — shown in the name chip and used for initials. */\n name: string\n /** Current microphone state. Defaults to 'on'. */\n micState?: VideoTileMicState\n /** Whether the participant is actively speaking. Adds an emerald ring. */\n speaking?: boolean\n /** Whether the tile is pinned in the grid. Adds a primary ring. */\n pinned?: boolean\n /** URL of the participant's avatar image, used in the fallback circle. */\n avatarUrl?: string\n /**\n * Media slot — pass a `<video>` element (or any ReactNode) to render as the\n * tile's background media layer. When omitted, an avatar fallback is shown.\n */\n mediaSlot?: React.ReactNode\n /** Optional emoji/reaction badge rendered at the top-right of the tile. */\n reaction?: React.ReactNode\n}\n\n/**\n * VideoTile — a single participant tile for a video meeting grid.\n *\n * Renders a `role=\"group\"` container with an aspect-video aspect ratio.\n * If a `mediaSlot` is provided it fills the tile; otherwise an avatar fallback\n * with initials is centred on a muted background.\n *\n * Overlays:\n * - Name chip (bottom-left) with optional mic-muted indicator\n * - Speaking ring (emerald) when `speaking` is true\n * - Pinned ring (primary) when `pinned` is true\n * - Reaction badge (top-right) when `reaction` is provided\n *\n * Logic and styles come from the headless `@refraction-ui/video-tile` core.\n */\nexport const VideoTile = React.forwardRef<HTMLDivElement, VideoTileProps>(\n function VideoTile(\n {\n name,\n micState = 'on',\n speaking = false,\n pinned = false,\n avatarUrl,\n mediaSlot,\n reaction,\n className,\n ...props\n },\n ref,\n ) {\n const api = createVideoTile({ speaking, pinned })\n const initials = getInitials(name)\n const isMuted = micState === 'muted'\n\n return (\n <div\n ref={ref}\n className={cn(\n videoTileVariants({\n speaking: speaking ? 'true' : 'false',\n pinned: pinned ? 'true' : 'false',\n }),\n className,\n )}\n aria-label={name}\n {...api.ariaProps}\n {...api.dataAttributes}\n {...props}\n >\n {/* Media layer */}\n {mediaSlot != null ? (\n <div className=\"absolute inset-0 h-full w-full object-cover\">\n {mediaSlot}\n </div>\n ) : (\n /* Avatar fallback */\n <div className={videoTileAvatarFallbackClass}>\n {avatarUrl ? (\n <img\n src={avatarUrl}\n alt={name}\n className={videoTileAvatarCircleClass}\n />\n ) : (\n <div className={videoTileAvatarCircleClass} aria-hidden=\"true\">\n {initials}\n </div>\n )}\n </div>\n )}\n\n {/* Reaction badge (top-right) */}\n {reaction != null && (\n <div className={videoTileReactionBadgeClass} aria-hidden=\"true\">\n {reaction}\n </div>\n )}\n\n {/* Name chip (bottom-left) */}\n <div className={videoTileNameChipClass}>\n <span>{`${name}${isMuted ? '' : ''}`}</span>\n {isMuted && (\n <span className={videoTileMicIconClass} aria-label=\"Microphone muted\">\n {/* Inline SVG mic-off icon — no external icon dep */}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"2\" y1=\"2\" x2=\"22\" y2=\"22\" />\n <path d=\"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2\" />\n <path d=\"M5 10v2a7 7 0 0 0 12 5\" />\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"22\" />\n </svg>\n </span>\n )}\n </div>\n </div>\n )\n },\n)\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;AA2CO,SAAS,gBAAgB,QAAgC,CAAA,GAAkB;AAChF,QAAM,EAAE,WAAW,OAAO,SAAS,MAAA,IAAU;AAE7C,SAAO;IACL,gBAAgB;MACd,iBAAiB,WAAW,SAAS;MACrC,eAAe,SAAS,SAAS;IAAA;IAEnC,WAAW;MACT,MAAM;IAAA;EACR;AAEJ;AAYO,SAAS,YAAY,MAAsB;AAChD,QAAM,QAAQ,KAAK,KAAA,EAAO,MAAM,KAAK,EAAE,OAAO,OAAO;AACrD,SAAO,MACJ,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,YAAA,CAAa,EAC7B,KAAK,EAAE;AACZ;AC9DO,IAAM,oBAAoB,IAAI;EACnC,MAAM;IACJ;IACA;EAAA,EACA,KAAK,GAAG;EACV,UAAU;IACR,UAAU;MACR,QAAQ;MACR,SAAS;IAAA;IAEX,QAAQ;MACN,QAAQ;MACR,SAAS;IAAA;EACX;EAEF,iBAAiB;IACf,UAAU;IACV,QAAQ;EAAA;AAEZ,CAAC;AAMM,IAAM,yBACX;AAKK,IAAM,wBAAwB;AAK9B,IAAM,+BACX;AAGK,IAAM,6BACX;AAKK,IAAM,8BACX;;;;ACLK,IAAM,YAAkB;EAC7B,SAASA,WACP;IACE;IACA,WAAW;IACX,WAAW;IACX,SAAS;IACT;IACA;IACA;IACA;IACA,GAAG;EAAA,GAEL,KACA;AACA,UAAM,MAAM,gBAAgB,EAAE,UAAU,OAAA,CAAQ;AAChD,UAAM,WAAW,YAAY,IAAI;AACjC,UAAM,UAAU,aAAa;AAE7B,WACE;MAAC;MAAA;QACC;QACA,WAAW;UACT,kBAAkB;YAChB,UAAU,WAAW,SAAS;YAC9B,QAAQ,SAAS,SAAS;UAAA,CAC3B;UACD;QAAA;QAEF,cAAY;QACX,GAAG,IAAI;QACP,GAAG,IAAI;QACP,GAAG;QAGH,UAAA;UAAA,aAAa,OACZ,oBAAC,OAAA,EAAI,WAAU,+CACZ,UAAA,UAAA,CACH;;YAGA,oBAAC,OAAA,EAAI,WAAW,8BACb,UAAA,YACC;cAAC;cAAA;gBACC,KAAK;gBACL,KAAK;gBACL,WAAW;cAAA;YAAA,IACb,oBAEC,OAAA,EAAI,WAAW,4BAA4B,eAAY,QACrD,UAAA,SAAA,CACH,EAAA,CAEJ;;UAID,YAAY,QACX,oBAAC,OAAA,EAAI,WAAW,6BAA6B,eAAY,QACtD,UAAA,SAAA,CACH;UAIF,qBAAC,OAAA,EAAI,WAAW,wBACd,UAAA;YAAA,oBAAC,QAAA,EAAM,UAAA,GAAG,IAAI,GAAG,UAAU,KAAK,EAAE,GAAA,CAAG;YACpC,WACC,oBAAC,QAAA,EAAK,WAAW,uBAAuB,cAAW,oBAEjD,UAAA;cAAC;cAAA;gBACC,OAAM;gBACN,OAAM;gBACN,QAAO;gBACP,SAAQ;gBACR,MAAK;gBACL,QAAO;gBACP,aAAY;gBACZ,eAAc;gBACd,gBAAe;gBACf,eAAY;gBAEZ,UAAA;kBAAA,oBAAC,QAAA,EAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,KAAA,CAAK;kBACpC,oBAAC,QAAA,EAAK,GAAE,wCAAA,CAAwC;kBAChD,oBAAC,QAAA,EAAK,GAAE,yBAAA,CAAyB;kBACjC,oBAAC,QAAA,EAAK,GAAE,iCAAA,CAAiC;kBACzC,oBAAC,QAAA,EAAK,GAAE,6BAAA,CAA6B;kBACrC,oBAAC,QAAA,EAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAA,CAAK;gBAAA;cAAA;YAAA,EACxC,CACF;UAAA,EAAA,CAEJ;QAAA;MAAA;IAAA;EAGN;AACF;",
|
|
6
|
+
"names": ["VideoTile"]
|
|
7
|
+
}
|