@refraction-ui/react 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/index.cjs +4244 -2
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +32 -0
  4. package/dist/index.d.ts +32 -0
  5. package/dist/index.js +4199 -3
  6. package/dist/index.js.map +1 -1
  7. package/dist/internal/audio-room/index.d.ts +91 -0
  8. package/dist/internal/browser-chrome-mock/index.d.ts +57 -0
  9. package/dist/internal/call-controls/index.d.ts +83 -0
  10. package/dist/internal/checklist/index.d.ts +84 -0
  11. package/dist/internal/editor-status-bar/index.d.ts +70 -0
  12. package/dist/internal/editor-tabs/index.d.ts +68 -0
  13. package/dist/internal/floating-reactions/index.d.ts +98 -0
  14. package/dist/internal/flow-editor/index.d.ts +91 -0
  15. package/dist/internal/graph-view/index.d.ts +107 -0
  16. package/dist/internal/infinite-canvas/index.d.ts +74 -0
  17. package/dist/internal/live-captions/index.d.ts +59 -0
  18. package/dist/internal/live-cursors/index.d.ts +65 -0
  19. package/dist/internal/live-transcript/index.d.ts +73 -0
  20. package/dist/internal/mastery-bar/index.d.ts +60 -0
  21. package/dist/internal/mini-map/index.d.ts +81 -0
  22. package/dist/internal/numbered-steps/index.d.ts +71 -0
  23. package/dist/internal/pre-call-lobby/index.d.ts +97 -0
  24. package/dist/internal/pricing-card/index.d.ts +61 -0
  25. package/dist/internal/radial-gauge/index.d.ts +120 -0
  26. package/dist/internal/rating-scale/index.d.ts +76 -0
  27. package/dist/internal/react-audience-feature-card/index.d.ts +22 -0
  28. package/dist/internal/react-audio-room/index.d.ts +39 -0
  29. package/dist/internal/react-brand-network-cell/index.d.ts +30 -0
  30. package/dist/internal/react-browser-chrome-mock/index.d.ts +21 -0
  31. package/dist/internal/react-call-controls/index.d.ts +44 -0
  32. package/dist/internal/react-checklist/index.d.ts +27 -0
  33. package/dist/internal/react-editor-status-bar/index.d.ts +43 -0
  34. package/dist/internal/react-editor-tabs/index.d.ts +25 -0
  35. package/dist/internal/react-floating-reactions/index.d.ts +65 -0
  36. package/dist/internal/react-flow-editor/index.d.ts +35 -0
  37. package/dist/internal/react-graph-view/index.d.ts +25 -0
  38. package/dist/internal/react-infinite-canvas/index.d.ts +40 -0
  39. package/dist/internal/react-live-captions/index.d.ts +29 -0
  40. package/dist/internal/react-live-cursors/index.d.ts +42 -0
  41. package/dist/internal/react-live-transcript/index.d.ts +22 -0
  42. package/dist/internal/react-marquee-strip/index.d.ts +33 -0
  43. package/dist/internal/react-mastery-bar/index.d.ts +26 -0
  44. package/dist/internal/react-mini-map/index.d.ts +35 -0
  45. package/dist/internal/react-numbered-steps/index.d.ts +24 -0
  46. package/dist/internal/react-pre-call-lobby/index.d.ts +47 -0
  47. package/dist/internal/react-pricing-card/index.d.ts +40 -0
  48. package/dist/internal/react-radial-gauge/index.d.ts +43 -0
  49. package/dist/internal/react-rating-scale/index.d.ts +38 -0
  50. package/dist/internal/react-section-head/index.d.ts +27 -0
  51. package/dist/internal/react-stat-grid/index.d.ts +29 -0
  52. package/dist/internal/react-sticky-note/index.d.ts +39 -0
  53. package/dist/internal/react-terminal/index.d.ts +39 -0
  54. package/dist/internal/react-test-results/index.d.ts +21 -0
  55. package/dist/internal/react-timeline/index.d.ts +35 -0
  56. package/dist/internal/react-video-grid/index.d.ts +33 -0
  57. package/dist/internal/react-video-tile/index.d.ts +41 -0
  58. package/dist/internal/react-wizard/index.d.ts +59 -0
  59. package/dist/internal/section-head/index.d.ts +36 -0
  60. package/dist/internal/stat-grid/index.d.ts +45 -0
  61. package/dist/internal/sticky-note/index.d.ts +49 -0
  62. package/dist/internal/terminal/index.d.ts +65 -0
  63. package/dist/internal/test-results/index.d.ts +97 -0
  64. package/dist/internal/timeline/index.d.ts +111 -0
  65. package/dist/internal/video-grid/index.d.ts +83 -0
  66. package/dist/internal/video-tile/index.d.ts +88 -0
  67. package/dist/internal/wizard/index.d.ts +148 -0
  68. package/package.json +33 -1
@@ -0,0 +1,97 @@
1
+ /** A single selectable media device (camera, microphone, or speaker). */
2
+ interface MediaDeviceOption {
3
+ id: string;
4
+ label: string;
5
+ }
6
+ /** The kind of media device. */
7
+ type DeviceKind = 'camera' | 'microphone' | 'speaker';
8
+ interface PreCallLobbyProps {
9
+ /** Whether the camera is currently enabled. */
10
+ cameraOn: boolean;
11
+ /** Whether the microphone is currently enabled. */
12
+ micOn: boolean;
13
+ }
14
+ interface PreCallLobbyAPI {
15
+ /** ARIA attributes to spread on the group element. */
16
+ ariaProps: {
17
+ role: 'group';
18
+ 'aria-label': string;
19
+ };
20
+ /** Data attributes for styling hooks. */
21
+ dataAttributes: {
22
+ 'data-camera': string;
23
+ 'data-mic': string;
24
+ };
25
+ }
26
+ /**
27
+ * Build the framework-agnostic group props for a pre-call lobby / device-check panel.
28
+ *
29
+ * Returns `role="group"` plus data attributes reflecting camera and mic state.
30
+ * Adapters spread these onto their container and render the device pickers,
31
+ * preview, and join button themselves.
32
+ */
33
+ declare function createPreCallLobby(props: PreCallLobbyProps): PreCallLobbyAPI;
34
+ /**
35
+ * Convert a microphone level (0..1) to a count of lit bars.
36
+ *
37
+ * Pure function — no side effects, no JSX. Adapters use this to render
38
+ * the mic level meter by iterating `0..barCount` and lighting bars up to
39
+ * the returned value.
40
+ *
41
+ * @param level Current mic level in the range [0, 1].
42
+ * @param barCount Total number of bars in the meter.
43
+ * @returns Number of bars that should appear "lit" (0..barCount).
44
+ */
45
+ declare function micLevelToBars(level: number, barCount: number): number;
46
+
47
+ /**
48
+ * Outer lobby card — a centered panel that holds all preflight controls.
49
+ */
50
+ declare const preCallLobbyVariants: (props?: ({} & {
51
+ className?: string;
52
+ }) | undefined) => string;
53
+ /**
54
+ * Camera preview area. The `camera` variant switches between the live preview
55
+ * slot and an avatar / placeholder shown when the camera is off.
56
+ */
57
+ declare const preCallCameraVariants: (props?: ({
58
+ camera?: "on" | "off" | undefined;
59
+ } & {
60
+ className?: string;
61
+ }) | undefined) => string;
62
+ /** Placeholder shown inside the camera area when the camera is off. */
63
+ declare const preCallCameraPlaceholderClass: string;
64
+ /** Row that holds the label and the <select> for a device picker. */
65
+ declare const preCallDeviceRowClass = "flex flex-col gap-1";
66
+ /** Label text above a device picker. */
67
+ declare const preCallDeviceLabelClass = "text-xs font-medium text-muted-foreground";
68
+ /** The <select> element used for device selection. */
69
+ declare const preCallDeviceSelectClass: string;
70
+ /**
71
+ * Mic level meter container. Renders a row of bars.
72
+ */
73
+ declare const preCallMicMeterClass = "flex items-end gap-0.5 h-5";
74
+ /**
75
+ * An individual bar in the mic level meter.
76
+ * The `lit` variant distinguishes active (lit) from inactive bars.
77
+ */
78
+ declare const preCallMicBarVariants: (props?: ({
79
+ lit?: "true" | "false" | undefined;
80
+ } & {
81
+ className?: string;
82
+ }) | undefined) => string;
83
+ /** Row holding the camera-toggle and mic-toggle buttons. */
84
+ declare const preCallControlsRowClass = "flex items-center gap-3";
85
+ /**
86
+ * Toggle button for camera or microphone.
87
+ * The `active` variant styles the enabled vs disabled states.
88
+ */
89
+ declare const preCallToggleVariants: (props?: ({
90
+ active?: "true" | "false" | undefined;
91
+ } & {
92
+ className?: string;
93
+ }) | undefined) => string;
94
+ /** Primary "Join" button. */
95
+ declare const preCallJoinButtonClass: string;
96
+
97
+ export { type DeviceKind, type MediaDeviceOption, type PreCallLobbyAPI, type PreCallLobbyProps, createPreCallLobby, micLevelToBars, preCallCameraPlaceholderClass, preCallCameraVariants, preCallControlsRowClass, preCallDeviceLabelClass, preCallDeviceRowClass, preCallDeviceSelectClass, preCallJoinButtonClass, preCallLobbyVariants, preCallMicBarVariants, preCallMicMeterClass, preCallToggleVariants };
@@ -0,0 +1,61 @@
1
+ import { AccessibilityProps } from '../shared/index.js';
2
+
3
+ /** CTA button/link visual variant. */
4
+ type PricingCtaVariant = 'default' | 'outline';
5
+ interface PricingCardOptions {
6
+ /** Whether this card is highlighted as the featured / recommended plan. */
7
+ featured?: boolean;
8
+ }
9
+ interface PricingCardAPI {
10
+ /** ARIA props to spread on the card container. */
11
+ ariaProps: Partial<AccessibilityProps>;
12
+ /** Data attributes for styling hooks and CSS selectors. */
13
+ dataAttributes: Record<string, string>;
14
+ }
15
+ /**
16
+ * Build the framework-agnostic props for a pricing plan card.
17
+ *
18
+ * Returns `role="group"` (semantically groups the plan's content without
19
+ * imposing listitem semantics on a standalone card) and a `data-featured`
20
+ * attribute that adapters can use for conditional ring/highlight styling.
21
+ */
22
+ declare function createPricingCard(options?: PricingCardOptions): PricingCardAPI;
23
+
24
+ /**
25
+ * Root pricing card container. The `featured` variant adds a primary-coloured
26
+ * ring to draw the eye to the recommended plan.
27
+ */
28
+ declare const pricingCardVariants: (props?: ({
29
+ featured?: "true" | "false" | undefined;
30
+ } & {
31
+ className?: string;
32
+ }) | undefined) => string;
33
+ /** "Best value" / "Most popular" badge above the plan name. */
34
+ declare const pricingCardBadgeClass = "mb-3 inline-flex items-center rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-medium text-primary";
35
+ /** Plan name (e.g. "Pro", "Starter"). */
36
+ declare const pricingCardNameClass = "text-lg font-bold text-foreground";
37
+ /** Main price figure (e.g. "$29", "Free"). */
38
+ declare const pricingCardPriceClass = "text-3xl font-bold text-foreground";
39
+ /** Billing period or qualifier (e.g. "/ month", "forever"). */
40
+ declare const pricingCardPeriodClass = "text-sm text-muted-foreground";
41
+ /** Short marketing description beneath the price. */
42
+ declare const pricingCardDescriptionClass = "text-sm text-muted-foreground";
43
+ /** Unordered list of included features. */
44
+ declare const pricingCardFeatureListClass = "flex flex-col gap-2";
45
+ /** A single feature row — tick icon + text. */
46
+ declare const pricingCardFeatureRowClass = "flex items-start gap-2 text-sm text-foreground";
47
+ /** Inline check SVG rendered before each feature string. */
48
+ declare const pricingCardFeatureTickClass = "mt-0.5 size-4 shrink-0 text-primary";
49
+ /**
50
+ * CTA button/link that appears at the bottom of the card.
51
+ *
52
+ * `default` — filled primary style (call to action on featured plans).
53
+ * `outline` — bordered secondary style (for non-featured plans).
54
+ */
55
+ declare const pricingCtaVariants: (props?: ({
56
+ variant?: "default" | "outline" | undefined;
57
+ } & {
58
+ className?: string;
59
+ }) | undefined) => string;
60
+
61
+ export { type PricingCardAPI, type PricingCardOptions, type PricingCtaVariant, createPricingCard, pricingCardBadgeClass, pricingCardDescriptionClass, pricingCardFeatureListClass, pricingCardFeatureRowClass, pricingCardFeatureTickClass, pricingCardNameClass, pricingCardPeriodClass, pricingCardPriceClass, pricingCardVariants, pricingCtaVariants };
@@ -0,0 +1,120 @@
1
+ /** The visual size of the gauge. */
2
+ type GaugeSize = 'sm' | 'md' | 'lg';
3
+ /** Tone mapped to a zone range. */
4
+ type GaugeTone = 'default' | 'success' | 'warning' | 'danger';
5
+ /**
6
+ * A threshold zone that applies a semantic tone when the gauge value falls
7
+ * at or below `upTo`. Zones should be listed in ascending `upTo` order; the
8
+ * first zone whose `upTo >= value` wins.
9
+ */
10
+ interface GaugeZone {
11
+ /** Value up to (and including) which this zone applies. */
12
+ upTo: number;
13
+ /** Semantic tone for the arc while the value is in this zone. */
14
+ tone: GaugeTone;
15
+ }
16
+ interface RadialGaugeProps {
17
+ /** Current gauge value. */
18
+ value: number;
19
+ /** Minimum possible value. */
20
+ min?: number;
21
+ /** Maximum possible value. */
22
+ max?: number;
23
+ /** Visual size. */
24
+ size?: GaugeSize;
25
+ }
26
+ interface RadialGaugeAPI {
27
+ /** ARIA attributes to spread on the SVG element (`role="meter"`). */
28
+ ariaProps: Record<string, string | number>;
29
+ /** Data attributes for styling hooks. */
30
+ dataAttributes: Record<string, string>;
31
+ }
32
+ declare const GAUGE_SIZE_PX: Record<GaugeSize, number>;
33
+ /**
34
+ * Clamp `value` to the inclusive range `[min, max]`.
35
+ */
36
+ declare function clampValue(value: number, min: number, max: number): number;
37
+ /**
38
+ * Map a `value` within `[min, max]` to a fraction in `[0, 1]`.
39
+ * Returns 0 when `min === max` to avoid division by zero.
40
+ */
41
+ declare function valueToFraction(value: number, min: number, max: number): number;
42
+ /**
43
+ * Convert polar coordinates to Cartesian.
44
+ * `angleDeg` is measured clockwise from the positive x-axis (SVG convention).
45
+ */
46
+ declare function polarToCartesian(cx: number, cy: number, r: number, angleDeg: number): {
47
+ x: number;
48
+ y: number;
49
+ };
50
+ /**
51
+ * Build an SVG arc path `d` string from `startAngleDeg` to `endAngleDeg`
52
+ * (both measured clockwise from the top / 12-o'clock position).
53
+ *
54
+ * Returns an empty string when the arc span is zero.
55
+ */
56
+ declare function describeArc(cx: number, cy: number, r: number, startAngleDeg: number, endAngleDeg: number): string;
57
+ /**
58
+ * Compute the `stroke-dashoffset` for a full-circle ring gauge.
59
+ *
60
+ * With `stroke-dasharray="circumference circumference"` and this offset, the
61
+ * visible portion of the stroke equals `fraction × circumference`.
62
+ */
63
+ declare function gaugeStrokeDashoffset(fraction: number, circumference: number): number;
64
+ /**
65
+ * Find the active zone tone for the current `value`.
66
+ * Zones are tested in ascending `upTo` order; the first zone whose
67
+ * `upTo >= value` wins. Falls back to `'default'` when no zone matches.
68
+ */
69
+ declare function resolveZoneTone(value: number, zones: GaugeZone[], _max: number): GaugeTone;
70
+ /**
71
+ * Build the framework-agnostic props for a radial gauge element.
72
+ *
73
+ * Returns `role="meter"` plus ARIA value attributes and data attributes;
74
+ * adapters spread these onto their `<svg>` element.
75
+ */
76
+ declare function createRadialGauge(props: RadialGaugeProps): RadialGaugeAPI;
77
+
78
+ /**
79
+ * Root SVG element variants — controls the rendered size via an inline
80
+ * width/height (adapters use GAUGE_SIZE_PX) and sets up the color context.
81
+ */
82
+ declare const radialGaugeRootVariants: (props?: ({
83
+ size?: "sm" | "md" | "lg" | undefined;
84
+ } & {
85
+ className?: string;
86
+ }) | undefined) => string;
87
+ /**
88
+ * Track (background) circle stroke class.
89
+ * Uses a muted foreground so it sits behind the value arc without competing.
90
+ */
91
+ declare const gaugeTrackClass = "fill-none stroke-muted-foreground/20";
92
+ /**
93
+ * Value arc stroke class — resolved per tone via {@link gaugeArcToneVariants}.
94
+ * `currentColor` stroke picks up the Tailwind text-* class applied by the
95
+ * tone variant so we only need one class-generating helper.
96
+ */
97
+ declare const gaugeArcClass = "fill-none stroke-current transition-[stroke-dashoffset] duration-300 ease-out";
98
+ /**
99
+ * Tone variants for the value arc. Adapters combine this with `gaugeArcClass`.
100
+ */
101
+ declare const gaugeArcToneVariants: (props?: ({
102
+ tone?: "default" | "success" | "warning" | "danger" | undefined;
103
+ } & {
104
+ className?: string;
105
+ }) | undefined) => string;
106
+ /** Center label (primary text) classes. */
107
+ declare const gaugeLabelClass = "fill-foreground text-center font-semibold";
108
+ /** Center sub-label (secondary text) classes. */
109
+ declare const gaugeSublabelClass = "fill-muted-foreground";
110
+ /**
111
+ * Font size for the primary label by size variant.
112
+ * Expressed as SVG `font-size` values (px) for use in the `<text>` element.
113
+ */
114
+ declare const GAUGE_LABEL_FONT_SIZE: Record<'sm' | 'md' | 'lg', number>;
115
+ /**
116
+ * Font size for the sub-label by size variant.
117
+ */
118
+ declare const GAUGE_SUBLABEL_FONT_SIZE: Record<'sm' | 'md' | 'lg', number>;
119
+
120
+ export { GAUGE_LABEL_FONT_SIZE, GAUGE_SIZE_PX, GAUGE_SUBLABEL_FONT_SIZE, type GaugeSize, type GaugeTone, type GaugeZone, type RadialGaugeAPI, type RadialGaugeProps, clampValue, createRadialGauge, describeArc, gaugeArcClass, gaugeArcToneVariants, gaugeLabelClass, gaugeStrokeDashoffset, gaugeSublabelClass, gaugeTrackClass, polarToCartesian, radialGaugeRootVariants, resolveZoneTone, valueToFraction };
@@ -0,0 +1,76 @@
1
+ import { AccessibilityProps } from '../shared/index.js';
2
+
3
+ /** Visual size of a rating scale. */
4
+ type RatingScaleSize = 'sm' | 'md';
5
+ /** A single selectable point on the scale (1-indexed value + accessible label). */
6
+ interface RatingScalePoint {
7
+ /** The value this point represents. */
8
+ value: number;
9
+ /** Accessible label for the point (falls back to the value). */
10
+ label?: string;
11
+ }
12
+ interface RatingScaleProps {
13
+ /** Currently selected value (controlled). */
14
+ value?: number;
15
+ /** Number of points on the scale. Ignored when {@link points} is given. */
16
+ count?: number;
17
+ /** Visual size. */
18
+ size?: RatingScaleSize;
19
+ }
20
+ interface RatingScaleAPI {
21
+ /** ARIA attributes to spread on the group element (`role="radiogroup"`). */
22
+ ariaProps: Partial<AccessibilityProps>;
23
+ /** Data attributes for styling hooks. */
24
+ dataAttributes: Record<string, string>;
25
+ }
26
+ /**
27
+ * Build the framework-agnostic group props for a rating / Likert scale.
28
+ *
29
+ * Returns `role="radiogroup"` plus data attributes; adapters spread these onto
30
+ * their container and render the points themselves. A rating scale is a
31
+ * single-select control with radio semantics, like a segmented control, but
32
+ * tuned for ordinal self-rating (e.g. a 1–5 Likert prompt with end labels).
33
+ */
34
+ declare function createRatingScale(props?: RatingScaleProps): RatingScaleAPI;
35
+ /**
36
+ * Resolve the list of points for a scale from either an explicit list or a
37
+ * `count` (producing `1..count`). The single source of truth shared by every
38
+ * adapter so a `count={5}` scale renders identical points everywhere.
39
+ */
40
+ declare function resolveRatingPoints(points: RatingScalePoint[] | undefined, count?: number): RatingScalePoint[];
41
+ /**
42
+ * Pure keyboard-navigation rule shared by every adapter.
43
+ *
44
+ * Unlike a wrapping segmented control, an ordinal rating scale **clamps** at
45
+ * the ends (you can't wrap from "5 — strongly agree" back to "1"). Home/End
46
+ * jump to the extremes; unhandled keys return `current` unchanged.
47
+ *
48
+ * - ArrowRight / ArrowUp → next (clamped to last)
49
+ * - ArrowLeft / ArrowDown → previous (clamped to first)
50
+ * - Home → first
51
+ * - End → last
52
+ */
53
+ declare function getNextRatingIndex(current: number, key: string, count: number): number;
54
+
55
+ /** Container row that holds the points plus optional end labels. */
56
+ declare const ratingScaleVariants: (props?: ({
57
+ size?: "sm" | "md" | undefined;
58
+ } & {
59
+ className?: string;
60
+ }) | undefined) => string;
61
+ /** Row of point buttons (the scale itself, between the end labels). */
62
+ declare const ratingScaleTrackClass = "inline-flex items-center gap-1.5";
63
+ /**
64
+ * A single point button. The `state` variant carries the selected vs unselected
65
+ * treatment so adapters never inline these classes.
66
+ */
67
+ declare const ratingScaleItemVariants: (props?: ({
68
+ size?: "sm" | "md" | undefined;
69
+ state?: "checked" | "unchecked" | undefined;
70
+ } & {
71
+ className?: string;
72
+ }) | undefined) => string;
73
+ /** End-label text flanking the scale (e.g. "Never seen this" / "Could write it"). */
74
+ declare const ratingScaleLabelClass = "text-xs text-muted-foreground";
75
+
76
+ export { type RatingScaleAPI, type RatingScalePoint, type RatingScaleProps, type RatingScaleSize, createRatingScale, getNextRatingIndex, ratingScaleItemVariants, ratingScaleLabelClass, ratingScaleTrackClass, ratingScaleVariants, resolveRatingPoints };
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+
3
+ interface AudienceFeatureCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
4
+ /** Kicker text displayed above the title (e.g. "For teams"). */
5
+ kicker?: React.ReactNode;
6
+ /** Main title — required. */
7
+ title: React.ReactNode;
8
+ /** Body copy. */
9
+ body: React.ReactNode;
10
+ /** Footer slot — pushed to bottom of the card. */
11
+ footer?: React.ReactNode;
12
+ }
13
+ /**
14
+ * AudienceFeatureCard — a marketing feature/audience card.
15
+ *
16
+ * Full-height flex-col layout so footers align across a row of cards.
17
+ * Accepts kicker, title, body, and an optional footer slot.
18
+ * Spreads `role="group"` from the headless core for accessibility.
19
+ */
20
+ declare const AudienceFeatureCard: React.ForwardRefExoticComponent<AudienceFeatureCardProps & React.RefAttributes<HTMLDivElement>>;
21
+
22
+ export { AudienceFeatureCard, type AudienceFeatureCardProps };
@@ -0,0 +1,39 @@
1
+ import * as React from 'react';
2
+ import { AudioParticipant } from '../audio-room/index.js';
3
+ export { AudioParticipant } from '../audio-room/index.js';
4
+
5
+ interface SpeakingOrbProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'color' | 'content'> {
6
+ /** Participant display name; used for initials and aria-label. */
7
+ name: string;
8
+ /** Optional avatar image URL. Falls back to initials when absent. */
9
+ avatarUrl?: string;
10
+ /** Whether this participant is actively speaking. */
11
+ speaking?: boolean;
12
+ /** Whether this participant is muted. */
13
+ muted?: boolean;
14
+ /** Whether this participant has raised their hand. */
15
+ handRaised?: boolean;
16
+ }
17
+ /**
18
+ * SpeakingOrb — a circular avatar for one audio-room participant.
19
+ *
20
+ * Renders an avatar image (or initials fallback), an animated speaking ring
21
+ * when `speaking` is true, a mic-muted badge when `muted` is true, and an
22
+ * optional raised-hand badge. Fully accessible with `role="img"` and an
23
+ * `aria-label` set to the participant's name.
24
+ */
25
+ declare const SpeakingOrb: React.ForwardRefExoticComponent<SpeakingOrbProps & React.RefAttributes<HTMLDivElement>>;
26
+ interface AudioRoomProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'color' | 'content'> {
27
+ /** List of participants to render as speaking orbs. */
28
+ participants: AudioParticipant[];
29
+ }
30
+ /**
31
+ * AudioRoom — a responsive grid of SpeakingOrbs for an audio-only meeting.
32
+ *
33
+ * Column count is derived from `orbColumns(n)` so the layout adapts
34
+ * automatically as participants join or leave. The grid uses inline
35
+ * `gridTemplateColumns` because the column count is dynamic.
36
+ */
37
+ declare const AudioRoom: React.ForwardRefExoticComponent<AudioRoomProps & React.RefAttributes<HTMLDivElement>>;
38
+
39
+ export { AudioRoom, type AudioRoomProps, SpeakingOrb, type SpeakingOrbProps };
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+
3
+ interface BrandNetworkCellProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'color' | 'content'> {
4
+ /** Single character or short string used as the brand monogram. */
5
+ glyph: string;
6
+ /** CSS colour value for the glyph box background (brand tint). Applied via inline style. */
7
+ glyphBg?: string;
8
+ /** CSS colour value for the glyph text (brand tint). Applied via inline style. */
9
+ glyphColor?: string;
10
+ /** Primary identifier shown below the glyph (product domain or name). */
11
+ domain: string;
12
+ /** Supporting description text. */
13
+ body: string;
14
+ /** When provided, renders a link at the bottom of the card. */
15
+ href?: string;
16
+ /** Label for the link. Defaults to "Visit →". */
17
+ linkLabel?: string;
18
+ /** Marks this cell as the current/active product in the network. */
19
+ current?: boolean;
20
+ }
21
+ /**
22
+ * BrandNetworkCell — a card for surfacing related products in a brand network.
23
+ *
24
+ * Renders a glyph monogram (brand tint via inline style), the product domain,
25
+ * a "You are here" badge when `current`, body copy, and an optional visit link.
26
+ * The `current` variant adds `ring-1 ring-primary` to the card border.
27
+ */
28
+ declare const BrandNetworkCell: React.ForwardRefExoticComponent<BrandNetworkCellProps & React.RefAttributes<HTMLDivElement>>;
29
+
30
+ export { BrandNetworkCell, type BrandNetworkCellProps };
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+ import { BrowserChromeStatus } from '../browser-chrome-mock/index.js';
3
+ export { BrowserChromeStatus } from '../browser-chrome-mock/index.js';
4
+
5
+ interface BrowserChromeMockProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'color' | 'content'> {
6
+ /** URL to display in the address bar. Bold domain + normal path. */
7
+ url: string;
8
+ /** Optional status badge shown in the chrome bar. */
9
+ status?: BrowserChromeStatus;
10
+ }
11
+ /**
12
+ * BrowserChromeMock — a decorative browser window frame.
13
+ *
14
+ * Renders a mock browser chrome with traffic-light dots, a monospace URL bar
15
+ * (bold domain + normal path), an optional live/rec status badge, and a
16
+ * content area for arbitrary children. Logic and styles come from the headless
17
+ * `@refraction-ui/browser-chrome-mock` core.
18
+ */
19
+ declare const BrowserChromeMock: React.ForwardRefExoticComponent<BrowserChromeMockProps & React.RefAttributes<HTMLDivElement>>;
20
+
21
+ export { BrowserChromeMock, type BrowserChromeMockProps };
@@ -0,0 +1,44 @@
1
+ import * as React from 'react';
2
+ import { CallControlTone } from '../call-controls/index.js';
3
+ export { CallControlItem, CallControlTone } from '../call-controls/index.js';
4
+
5
+ interface CallControlButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'color' | 'content'> {
6
+ /** Accessible label (used as aria-label and visible to screen readers). */
7
+ label: string;
8
+ /** Optional icon node rendered inside the button. */
9
+ icon?: React.ReactNode;
10
+ /** Visual/semantic tone of the button. */
11
+ tone?: CallControlTone;
12
+ /**
13
+ * Whether this control is currently in a "pressed" / toggled-on state.
14
+ * When provided, the button gains `aria-pressed`.
15
+ */
16
+ pressed?: boolean;
17
+ /** Visual size of the button. */
18
+ size?: 'sm' | 'md';
19
+ }
20
+ /**
21
+ * A single round meeting-control button with icon, accessible label,
22
+ * tone variants (default / active / destructive), and optional aria-pressed
23
+ * for toggleable controls (mic, camera, screen-share).
24
+ */
25
+ declare const CallControlButton: React.ForwardRefExoticComponent<CallControlButtonProps & React.RefAttributes<HTMLButtonElement>>;
26
+ interface CallControlsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'color' | 'content'> {
27
+ /** Visual size passed down to child buttons when using the composable API. */
28
+ size?: 'sm' | 'md';
29
+ }
30
+ /**
31
+ * Toolbar wrapper for a set of meeting-control buttons.
32
+ *
33
+ * Composable: render `<CallControlButton>` children directly.
34
+ *
35
+ * ```tsx
36
+ * <CallControls>
37
+ * <CallControlButton label="Mute" icon={<MicIcon />} tone="active" pressed={true} />
38
+ * <CallControlButton label="Leave" tone="destructive" />
39
+ * </CallControls>
40
+ * ```
41
+ */
42
+ declare const CallControls: React.ForwardRefExoticComponent<CallControlsProps & React.RefAttributes<HTMLDivElement>>;
43
+
44
+ export { CallControlButton, type CallControlButtonProps, CallControls, type CallControlsProps };
@@ -0,0 +1,27 @@
1
+ import * as React from 'react';
2
+ import { ChecklistItemData } from '../checklist/index.js';
3
+ export { ChecklistItemData } from '../checklist/index.js';
4
+
5
+ interface ChecklistProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
6
+ /** Controlled list of items. */
7
+ items?: ChecklistItemData[];
8
+ /** Initial items for uncontrolled usage. */
9
+ defaultItems?: ChecklistItemData[];
10
+ /** Called when an item is toggled, with the updated items array. */
11
+ onChange?: (items: ChecklistItemData[]) => void;
12
+ /** Called with the id of the item that was toggled. */
13
+ onItemToggle?: (id: string) => void;
14
+ /** Show a "{completed}/{total}" progress summary below the list. */
15
+ showProgress?: boolean;
16
+ }
17
+ /**
18
+ * Checklist — an interactive task list with optional progress summary.
19
+ *
20
+ * Supports controlled (`items`) and uncontrolled (`defaultItems`) usage.
21
+ * Each item renders as a `role="checkbox"` button; clicking toggles its
22
+ * checked state. Completed items receive muted + strikethrough styling.
23
+ * Logic and styles come from the headless `@refraction-ui/checklist` core.
24
+ */
25
+ declare const Checklist: React.ForwardRefExoticComponent<ChecklistProps & React.RefAttributes<HTMLDivElement>>;
26
+
27
+ export { Checklist, type ChecklistProps };
@@ -0,0 +1,43 @@
1
+ import * as React from 'react';
2
+ import { StatusSegment } from '../editor-status-bar/index.js';
3
+ export { StatusSegment, StatusSegmentTone } from '../editor-status-bar/index.js';
4
+
5
+ /** Convenience props that map to common IDE status-bar segments. */
6
+ interface EditorStatusBarConvenienceProps {
7
+ /** Current line number (1-indexed). */
8
+ line?: number;
9
+ /** Current column number (1-indexed). */
10
+ col?: number;
11
+ /** Indentation descriptor, e.g. `'Spaces: 4'` or `'Tab Size: 2'`. */
12
+ indentation?: string;
13
+ /** Language / runtime label, e.g. `'Python 3.11.4'`. */
14
+ language?: string;
15
+ /** File encoding, e.g. `'UTF-8'`. */
16
+ encoding?: string;
17
+ /** End-of-line sequence, e.g. `'LF'` or `'CRLF'`. */
18
+ eol?: string;
19
+ /** Persistence status label, e.g. `'Auto-saved'` or `'Unsaved changes'`. */
20
+ status?: string;
21
+ }
22
+ interface EditorStatusBarProps extends React.HTMLAttributes<HTMLDivElement>, EditorStatusBarConvenienceProps {
23
+ /**
24
+ * Explicit list of segments. When provided, the convenience props (`line`,
25
+ * `col`, `language`, etc.) are ignored and you have full control over which
26
+ * segments appear and where.
27
+ */
28
+ segments?: StatusSegment[];
29
+ }
30
+ /**
31
+ * EditorStatusBar — an IDE-style bottom bar.
32
+ *
33
+ * Accepts either an explicit `segments` array for full control, or the
34
+ * convenience props (`line`, `col`, `language`, `encoding`, `indentation`,
35
+ * `eol`, `status`) which are assembled into a standard left/right layout
36
+ * automatically.
37
+ *
38
+ * Uses `role="status"` with `aria-live="polite"` so cursor-position updates
39
+ * are announced to screen readers without interrupting flow.
40
+ */
41
+ declare const EditorStatusBar: React.ForwardRefExoticComponent<EditorStatusBarProps & React.RefAttributes<HTMLDivElement>>;
42
+
43
+ export { EditorStatusBar, type EditorStatusBarConvenienceProps, type EditorStatusBarProps };
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+ import { EditorTabData } from '../editor-tabs/index.js';
3
+ export { EditorTabData } from '../editor-tabs/index.js';
4
+
5
+ interface EditorTabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
6
+ /** The list of tab entries to render. */
7
+ tabs: EditorTabData[];
8
+ /** The id of the currently active tab (controlled). */
9
+ activeId: string;
10
+ /** Called when the user clicks or navigates to a tab. */
11
+ onSelect: (id: string) => void;
12
+ /** Called when the user clicks the close button on a tab. */
13
+ onClose?: (id: string) => void;
14
+ }
15
+ /**
16
+ * EditorTabs — an IDE-style open-file tab bar.
17
+ *
18
+ * Renders `role="tablist"`; each tab is `role="tab"` with `aria-selected`.
19
+ * Supports optional icons, dirty-state dots, and close buttons. Keyboard
20
+ * navigation uses wrapping roving tabindex (ArrowLeft/Right, Home/End) via the
21
+ * headless `@refraction-ui/editor-tabs` core helper.
22
+ */
23
+ declare const EditorTabs: React.ForwardRefExoticComponent<EditorTabsProps & React.RefAttributes<HTMLDivElement>>;
24
+
25
+ export { EditorTabs, type EditorTabsProps };