@sesionario/blocks 1.33.1 → 1.34.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/dist/livo.cjs ADDED
@@ -0,0 +1,220 @@
1
+ 'use strict';
2
+
3
+ // src/livo/studio-labels-en.json
4
+ var studio_labels_en_default = {
5
+ live: "LIVE",
6
+ preview: "Preview",
7
+ waiting: "Waiting to join",
8
+ waitingHost: "Waiting for the host to let you in",
9
+ admit: "Admit",
10
+ deny: "Deny",
11
+ denied: "Guest declined",
12
+ denyError: "Could not decline that guest",
13
+ rejectedTitle: "The host declined your request",
14
+ rejectedDescription: "You can ask to join again if the studio is still open.",
15
+ rejectedAction: "Ask to join again",
16
+ kick: "Remove",
17
+ camera: "Camera",
18
+ screen: "Screen",
19
+ mute: "Mute",
20
+ unmute: "Unmute",
21
+ copyLink: "Copy guest link",
22
+ shareLink: "Share guest link",
23
+ shareGuestText: "Join the studio for {title}",
24
+ shareFailed: "Could not share the guest link",
25
+ copied: "Guest link copied",
26
+ publish: "Go live",
27
+ publishTitle: "Go live?",
28
+ publishDescription: "Viewers will see this studio on the public player.",
29
+ publishConfirm: "Go live",
30
+ publishPending: "Going on air\u2026",
31
+ stop: "Stop",
32
+ stopTitle: "Stop this broadcast?",
33
+ stopDescription: "Viewers will lose the live feed. Guests will be disconnected.",
34
+ stopConfirm: "Stop stream",
35
+ fullscreen: "Fullscreen",
36
+ publishError: "Could not go live",
37
+ stopError: "Could not stop the stream",
38
+ published: "Going live",
39
+ stopped: "Stream stopped",
40
+ cameraDevice: "Camera",
41
+ micDevice: "Microphone",
42
+ speakerDevice: "Speaker",
43
+ preflightCamera: "Camera",
44
+ preflightMic: "Microphone",
45
+ knock: "{name} is waiting to join",
46
+ egressLost: "Reconnect studio",
47
+ livestreamStarting: "Initializing\u2026",
48
+ livestreamSending: "Initializing\u2026",
49
+ livestreamInitializing: "Initializing\u2026",
50
+ livestreamRetry: "Retry egress",
51
+ livestreamError: "Could not start RTMP egress",
52
+ screenBusy: "Someone else is already sharing their screen",
53
+ endedTitle: "This studio session has ended",
54
+ endedDescription: "The host stopped the stream.",
55
+ endedAction: "Back",
56
+ rejoin: "Rejoin studio",
57
+ duplicateTitle: "Studio is already open",
58
+ duplicateDescription: "This studio is already open in another window.",
59
+ duplicateDescriptionNoTakeover: "This studio is already open in another window. Close that window to continue here.",
60
+ duplicateAction: "Continue here",
61
+ duplicateTakenOver: "This session moved to another window.",
62
+ joinBusy: "Too many join attempts. Try again in a moment.",
63
+ cameraError: "Could not enable the camera",
64
+ screenError: "Could not share the screen",
65
+ leave: "Leave studio",
66
+ leaveTitle: "Leave this studio?",
67
+ leaveDescription: "You will disconnect from the host and other guests.",
68
+ leaveConfirm: "Leave",
69
+ chat: "Chat",
70
+ chatSend: "Send",
71
+ chatPlaceholder: "Message",
72
+ chatError: "Could not send the message",
73
+ settings: "Settings",
74
+ settingsTitle: "Settings",
75
+ settingsDescription: "Name, audio, and video settings",
76
+ guestName: "Your name",
77
+ displayNameSave: "Save",
78
+ displayNameSaved: "Display name updated",
79
+ displayNameError: "Could not update your display name",
80
+ testSpeaker: "Test",
81
+ testSpeakerError: "Could not play the speaker test",
82
+ cameraOff: "Camera is off",
83
+ micLevel: "Microphone level",
84
+ share: "Copy player link",
85
+ shareCopied: "Player link copied",
86
+ stopCamera: "Stop camera",
87
+ stopScreen: "Stop screen share",
88
+ hostMutedYou: "The host muted you",
89
+ hostStoppedYourCamera: "The host turned off your camera",
90
+ hostStoppedYourScreen: "The host stopped your screen share",
91
+ hostMediaError: "Could not change that guest's media",
92
+ tileMenu: "Guest controls",
93
+ openPip: "Picture-in-picture",
94
+ closePip: "Close picture-in-picture",
95
+ backToStudio: "Back to studio",
96
+ pipTitle: "Studio",
97
+ pipError: "Could not open picture-in-picture",
98
+ screenUnsupportedDevice: "Screen sharing is not available on this device",
99
+ screenNotAllowed: "You do not have permission to share your screen",
100
+ askToShare: "Ask to share",
101
+ shareRequested: "Requested",
102
+ cancelShareRequest: "Cancel request",
103
+ shareRequestSent: "Asked the host to share your screen",
104
+ shareRequestFrom: "{name} wants to share their screen",
105
+ approve: "Approve",
106
+ shareApproved: "The host approved your screen share",
107
+ shareDenied: "The host declined your screen share",
108
+ shareRequestError: "Could not ask the host to share",
109
+ shareRequestTimeout: "No response from the host",
110
+ shareRespondError: "Could not respond to that share request",
111
+ goOffAir: "Go off air",
112
+ goOnAir: "Go on air",
113
+ takeOffAir: "Take off air",
114
+ bringOnAir: "Bring on air",
115
+ offAir: "Off air",
116
+ offAirCount: "Off air ({count})",
117
+ offAirBanner: "You are off camera. Your microphone is still live.",
118
+ offAirLastVisible: "At least one participant must stay on air while you are live",
119
+ offAirHidden: "Taken off air",
120
+ offAirShown: "Back on air",
121
+ offAirError: "Could not change on-air state",
122
+ takeOffAirTitle: "Take this guest off air?",
123
+ takeOffAirDescription: "They stay in the studio but stop publishing camera, mic, and screen.",
124
+ takeOffAirConfirm: "Take off air",
125
+ admitAsPanelist: "Admit as panelist",
126
+ admitAsAudience: "Admit as audience",
127
+ admitAllPanelists: "Admit all as panelists",
128
+ admitAllAudience: "Admit all as audience",
129
+ askToGoOnAir: "Ask to go on air",
130
+ stageRequested: "Asked to go on air",
131
+ stageRequests: "Stage requests",
132
+ people: "People",
133
+ panelists: "Panelists",
134
+ audience: "Audience",
135
+ noWaiting: "No one is waiting",
136
+ noPanelists: "No panelists",
137
+ noAudience: "No audience",
138
+ closePanel: "Close",
139
+ muteChat: "Mute chat",
140
+ allowChat: "Allow chat",
141
+ pin: "Pin on stage",
142
+ unpin: "Unpin",
143
+ pinnedToast: "You are pinned on stage",
144
+ unpinnedToast: "You are no longer pinned",
145
+ pinError: "Could not pin that participant",
146
+ kickTitle: "Remove this guest from the studio?",
147
+ kickDescription: "They will be disconnected.",
148
+ kickConfirm: "Remove",
149
+ kickError: "Could not remove that guest",
150
+ stageError: "Could not change stage access",
151
+ stageDisabled: "This guest link cannot join the stage.",
152
+ stageGrantNoEffect: "That guest stayed in the audience.",
153
+ stageOverflow: "+{count} more",
154
+ chatEveryone: "Everyone",
155
+ chatEdited: "Edited",
156
+ chatPinned: "Pinned message",
157
+ chatLoadOlder: "Load earlier messages",
158
+ chatRateLimited: "You are sending messages too quickly",
159
+ chatDelete: "Delete",
160
+ chatEdit: "Edit",
161
+ chatPin: "Pin message",
162
+ chatUnpin: "Unpin message",
163
+ chatSave: "Save",
164
+ waitingSkeleton: "Loading waiting room"
165
+ };
166
+
167
+ // src/livo/studio-labels.ts
168
+ var catalog = studio_labels_en_default;
169
+ function interpolateSesionarioStudioLabel(key, values) {
170
+ let text = catalog[key] ?? key;
171
+ if (values) {
172
+ for (const [name, value] of Object.entries(values)) {
173
+ text = text.replaceAll(`{${name}}`, value);
174
+ }
175
+ }
176
+ return text;
177
+ }
178
+ var sesionarioStudioLabelFn = interpolateSesionarioStudioLabel;
179
+ var sesionarioLobbyLabels = {
180
+ title: "Get ready to join",
181
+ hint: "Set your camera and microphone, then join when you are ready.",
182
+ name: "Your name",
183
+ join: "Join",
184
+ waitingForHost: "Waiting for the host to open the studio",
185
+ camera: "Camera",
186
+ mic: "Microphone",
187
+ joinError: "Could not join studio",
188
+ joinBusy: "Too many join attempts. Try again in a moment.",
189
+ endedTitle: "This studio session has ended"
190
+ };
191
+
192
+ // src/livo/embed-theme.ts
193
+ var FALLBACK = {
194
+ background: "oklch(1 0 0)",
195
+ foreground: "oklch(0.145 0 0)",
196
+ primary: "oklch(0.4824 0.1149 242.2039)",
197
+ radius: "0.625rem",
198
+ fontFamily: "ui-sans-serif, system-ui, sans-serif"
199
+ };
200
+ function cssVar(name, fallback) {
201
+ if (typeof document === "undefined") return fallback;
202
+ const value = getComputedStyle(document.documentElement).getPropertyValue(name).trim();
203
+ return value || fallback;
204
+ }
205
+ function sesionarioEmbedTheme() {
206
+ return {
207
+ background: cssVar("--background", FALLBACK.background),
208
+ foreground: cssVar("--foreground", FALLBACK.foreground),
209
+ primary: cssVar("--primary", FALLBACK.primary),
210
+ radius: cssVar("--radius", FALLBACK.radius),
211
+ fontFamily: cssVar("--font-sans", FALLBACK.fontFamily)
212
+ };
213
+ }
214
+
215
+ exports.interpolateSesionarioStudioLabel = interpolateSesionarioStudioLabel;
216
+ exports.sesionarioEmbedTheme = sesionarioEmbedTheme;
217
+ exports.sesionarioLobbyLabels = sesionarioLobbyLabels;
218
+ exports.sesionarioStudioLabelFn = sesionarioStudioLabelFn;
219
+ //# sourceMappingURL=livo.cjs.map
220
+ //# sourceMappingURL=livo.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/livo/studio-labels-en.json","../src/livo/studio-labels.ts","../src/livo/embed-theme.ts"],"names":[],"mappings":"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","file":"livo.cjs","sourcesContent":["{\n\t\"live\": \"LIVE\",\n\t\"preview\": \"Preview\",\n\t\"waiting\": \"Waiting to join\",\n\t\"waitingHost\": \"Waiting for the host to let you in\",\n\t\"admit\": \"Admit\",\n\t\"deny\": \"Deny\",\n\t\"denied\": \"Guest declined\",\n\t\"denyError\": \"Could not decline that guest\",\n\t\"rejectedTitle\": \"The host declined your request\",\n\t\"rejectedDescription\": \"You can ask to join again if the studio is still open.\",\n\t\"rejectedAction\": \"Ask to join again\",\n\t\"kick\": \"Remove\",\n\t\"camera\": \"Camera\",\n\t\"screen\": \"Screen\",\n\t\"mute\": \"Mute\",\n\t\"unmute\": \"Unmute\",\n\t\"copyLink\": \"Copy guest link\",\n\t\"shareLink\": \"Share guest link\",\n\t\"shareGuestText\": \"Join the studio for {title}\",\n\t\"shareFailed\": \"Could not share the guest link\",\n\t\"copied\": \"Guest link copied\",\n\t\"publish\": \"Go live\",\n\t\"publishTitle\": \"Go live?\",\n\t\"publishDescription\": \"Viewers will see this studio on the public player.\",\n\t\"publishConfirm\": \"Go live\",\n\t\"publishPending\": \"Going on air…\",\n\t\"stop\": \"Stop\",\n\t\"stopTitle\": \"Stop this broadcast?\",\n\t\"stopDescription\": \"Viewers will lose the live feed. Guests will be disconnected.\",\n\t\"stopConfirm\": \"Stop stream\",\n\t\"fullscreen\": \"Fullscreen\",\n\t\"publishError\": \"Could not go live\",\n\t\"stopError\": \"Could not stop the stream\",\n\t\"published\": \"Going live\",\n\t\"stopped\": \"Stream stopped\",\n\t\"cameraDevice\": \"Camera\",\n\t\"micDevice\": \"Microphone\",\n\t\"speakerDevice\": \"Speaker\",\n\t\"preflightCamera\": \"Camera\",\n\t\"preflightMic\": \"Microphone\",\n\t\"knock\": \"{name} is waiting to join\",\n\t\"egressLost\": \"Reconnect studio\",\n\t\"livestreamStarting\": \"Initializing…\",\n\t\"livestreamSending\": \"Initializing…\",\n\t\"livestreamInitializing\": \"Initializing…\",\n\t\"livestreamRetry\": \"Retry egress\",\n\t\"livestreamError\": \"Could not start RTMP egress\",\n\t\"screenBusy\": \"Someone else is already sharing their screen\",\n\t\"endedTitle\": \"This studio session has ended\",\n\t\"endedDescription\": \"The host stopped the stream.\",\n\t\"endedAction\": \"Back\",\n\t\"rejoin\": \"Rejoin studio\",\n\t\"duplicateTitle\": \"Studio is already open\",\n\t\"duplicateDescription\": \"This studio is already open in another window.\",\n\t\"duplicateDescriptionNoTakeover\": \"This studio is already open in another window. Close that window to continue here.\",\n\t\"duplicateAction\": \"Continue here\",\n\t\"duplicateTakenOver\": \"This session moved to another window.\",\n\t\"joinBusy\": \"Too many join attempts. Try again in a moment.\",\n\t\"cameraError\": \"Could not enable the camera\",\n\t\"screenError\": \"Could not share the screen\",\n\t\"leave\": \"Leave studio\",\n\t\"leaveTitle\": \"Leave this studio?\",\n\t\"leaveDescription\": \"You will disconnect from the host and other guests.\",\n\t\"leaveConfirm\": \"Leave\",\n\t\"chat\": \"Chat\",\n\t\"chatSend\": \"Send\",\n\t\"chatPlaceholder\": \"Message\",\n\t\"chatError\": \"Could not send the message\",\n\t\"settings\": \"Settings\",\n\t\"settingsTitle\": \"Settings\",\n\t\"settingsDescription\": \"Name, audio, and video settings\",\n\t\"guestName\": \"Your name\",\n\t\"displayNameSave\": \"Save\",\n\t\"displayNameSaved\": \"Display name updated\",\n\t\"displayNameError\": \"Could not update your display name\",\n\t\"testSpeaker\": \"Test\",\n\t\"testSpeakerError\": \"Could not play the speaker test\",\n\t\"cameraOff\": \"Camera is off\",\n\t\"micLevel\": \"Microphone level\",\n\t\"share\": \"Copy player link\",\n\t\"shareCopied\": \"Player link copied\",\n\t\"stopCamera\": \"Stop camera\",\n\t\"stopScreen\": \"Stop screen share\",\n\t\"hostMutedYou\": \"The host muted you\",\n\t\"hostStoppedYourCamera\": \"The host turned off your camera\",\n\t\"hostStoppedYourScreen\": \"The host stopped your screen share\",\n\t\"hostMediaError\": \"Could not change that guest's media\",\n\t\"tileMenu\": \"Guest controls\",\n\t\"openPip\": \"Picture-in-picture\",\n\t\"closePip\": \"Close picture-in-picture\",\n\t\"backToStudio\": \"Back to studio\",\n\t\"pipTitle\": \"Studio\",\n\t\"pipError\": \"Could not open picture-in-picture\",\n\t\"screenUnsupportedDevice\": \"Screen sharing is not available on this device\",\n\t\"screenNotAllowed\": \"You do not have permission to share your screen\",\n\t\"askToShare\": \"Ask to share\",\n\t\"shareRequested\": \"Requested\",\n\t\"cancelShareRequest\": \"Cancel request\",\n\t\"shareRequestSent\": \"Asked the host to share your screen\",\n\t\"shareRequestFrom\": \"{name} wants to share their screen\",\n\t\"approve\": \"Approve\",\n\t\"shareApproved\": \"The host approved your screen share\",\n\t\"shareDenied\": \"The host declined your screen share\",\n\t\"shareRequestError\": \"Could not ask the host to share\",\n\t\"shareRequestTimeout\": \"No response from the host\",\n\t\"shareRespondError\": \"Could not respond to that share request\",\n\t\"goOffAir\": \"Go off air\",\n\t\"goOnAir\": \"Go on air\",\n\t\"takeOffAir\": \"Take off air\",\n\t\"bringOnAir\": \"Bring on air\",\n\t\"offAir\": \"Off air\",\n\t\"offAirCount\": \"Off air ({count})\",\n\t\"offAirBanner\": \"You are off camera. Your microphone is still live.\",\n\t\"offAirLastVisible\": \"At least one participant must stay on air while you are live\",\n\t\"offAirHidden\": \"Taken off air\",\n\t\"offAirShown\": \"Back on air\",\n\t\"offAirError\": \"Could not change on-air state\",\n\t\"takeOffAirTitle\": \"Take this guest off air?\",\n\t\"takeOffAirDescription\": \"They stay in the studio but stop publishing camera, mic, and screen.\",\n\t\"takeOffAirConfirm\": \"Take off air\",\n\t\"admitAsPanelist\": \"Admit as panelist\",\n\t\"admitAsAudience\": \"Admit as audience\",\n\t\"admitAllPanelists\": \"Admit all as panelists\",\n\t\"admitAllAudience\": \"Admit all as audience\",\n\t\"askToGoOnAir\": \"Ask to go on air\",\n\t\"stageRequested\": \"Asked to go on air\",\n\t\"stageRequests\": \"Stage requests\",\n\t\"people\": \"People\",\n\t\"panelists\": \"Panelists\",\n\t\"audience\": \"Audience\",\n\t\"noWaiting\": \"No one is waiting\",\n\t\"noPanelists\": \"No panelists\",\n\t\"noAudience\": \"No audience\",\n\t\"closePanel\": \"Close\",\n\t\"muteChat\": \"Mute chat\",\n\t\"allowChat\": \"Allow chat\",\n\t\"pin\": \"Pin on stage\",\n\t\"unpin\": \"Unpin\",\n\t\"pinnedToast\": \"You are pinned on stage\",\n\t\"unpinnedToast\": \"You are no longer pinned\",\n\t\"pinError\": \"Could not pin that participant\",\n\t\"kickTitle\": \"Remove this guest from the studio?\",\n\t\"kickDescription\": \"They will be disconnected.\",\n\t\"kickConfirm\": \"Remove\",\n\t\"kickError\": \"Could not remove that guest\",\n\t\"stageError\": \"Could not change stage access\",\n\t\"stageDisabled\": \"This guest link cannot join the stage.\",\n\t\"stageGrantNoEffect\": \"That guest stayed in the audience.\",\n\t\"stageOverflow\": \"+{count} more\",\n\t\"chatEveryone\": \"Everyone\",\n\t\"chatEdited\": \"Edited\",\n\t\"chatPinned\": \"Pinned message\",\n\t\"chatLoadOlder\": \"Load earlier messages\",\n\t\"chatRateLimited\": \"You are sending messages too quickly\",\n\t\"chatDelete\": \"Delete\",\n\t\"chatEdit\": \"Edit\",\n\t\"chatPin\": \"Pin message\",\n\t\"chatUnpin\": \"Unpin message\",\n\t\"chatSave\": \"Save\",\n\t\"waitingSkeleton\": \"Loading waiting room\"\n}\n","import copy from \"./studio-labels-en.json\";\n\nconst catalog = copy as Record<string, string>;\n\nexport function interpolateSesionarioStudioLabel(\n\tkey: string,\n\tvalues?: Record<string, string>,\n): string {\n\tlet text = catalog[key] ?? key;\n\tif (values) {\n\t\tfor (const [name, value] of Object.entries(values)) {\n\t\t\ttext = text.replaceAll(`{${name}}`, value);\n\t\t}\n\t}\n\treturn text;\n}\n\n/** Alias used by unit tests and local copies in admin/app. */\nexport const interpolateStudioLabel = interpolateSesionarioStudioLabel;\n\n/**\n * Catalog interpolator for `@livo-tv/sdk/studio` `studioRoomLabels`.\n * Consuming apps wrap: `studioRoomLabels(sesionarioStudioLabelFn)`.\n */\nexport const sesionarioStudioLabelFn = interpolateSesionarioStudioLabel;\n\nexport function sesionarioStudioLabels() {\n\treturn interpolateSesionarioStudioLabel;\n}\n\nexport const sesionarioLobbyLabels = {\n\ttitle: \"Get ready to join\",\n\thint: \"Set your camera and microphone, then join when you are ready.\",\n\tname: \"Your name\",\n\tjoin: \"Join\",\n\twaitingForHost: \"Waiting for the host to open the studio\",\n\tcamera: \"Camera\",\n\tmic: \"Microphone\",\n\tjoinError: \"Could not join studio\",\n\tjoinBusy: \"Too many join attempts. Try again in a moment.\",\n\tendedTitle: \"This studio session has ended\",\n};\n","/**\n * Shared EmbedTheme for native `@livo-tv/sdk` surfaces (LivoPlayer, studio).\n * Built from Sesionario shadcn CSS variables so admin and app match the shell.\n * Host studio encodes this with `encodeEmbedTheme` (SDK expects a string token).\n */\nexport type SesionarioEmbedTheme = {\n\tprimary: string;\n\tbackground: string;\n\tforeground: string;\n\tradius: string;\n\tfontFamily: string;\n};\n\nconst FALLBACK: SesionarioEmbedTheme = {\n\tbackground: \"oklch(1 0 0)\",\n\tforeground: \"oklch(0.145 0 0)\",\n\tprimary: \"oklch(0.4824 0.1149 242.2039)\",\n\tradius: \"0.625rem\",\n\tfontFamily: \"ui-sans-serif, system-ui, sans-serif\",\n};\n\nfunction cssVar(name: string, fallback: string): string {\n\tif (typeof document === \"undefined\") return fallback;\n\tconst value = getComputedStyle(document.documentElement)\n\t\t.getPropertyValue(name)\n\t\t.trim();\n\treturn value || fallback;\n}\n\nexport function sesionarioEmbedTheme(): SesionarioEmbedTheme {\n\treturn {\n\t\tbackground: cssVar(\"--background\", FALLBACK.background),\n\t\tforeground: cssVar(\"--foreground\", FALLBACK.foreground),\n\t\tprimary: cssVar(\"--primary\", FALLBACK.primary),\n\t\tradius: cssVar(\"--radius\", FALLBACK.radius),\n\t\tfontFamily: cssVar(\"--font-sans\", FALLBACK.fontFamily),\n\t};\n}\n"]}
@@ -0,0 +1,34 @@
1
+ declare function interpolateSesionarioStudioLabel(key: string, values?: Record<string, string>): string;
2
+ /**
3
+ * Catalog interpolator for `@livo-tv/sdk/studio` `studioRoomLabels`.
4
+ * Consuming apps wrap: `studioRoomLabels(sesionarioStudioLabelFn)`.
5
+ */
6
+ declare const sesionarioStudioLabelFn: typeof interpolateSesionarioStudioLabel;
7
+ declare const sesionarioLobbyLabels: {
8
+ title: string;
9
+ hint: string;
10
+ name: string;
11
+ join: string;
12
+ waitingForHost: string;
13
+ camera: string;
14
+ mic: string;
15
+ joinError: string;
16
+ joinBusy: string;
17
+ endedTitle: string;
18
+ };
19
+
20
+ /**
21
+ * Shared EmbedTheme for native `@livo-tv/sdk` surfaces (LivoPlayer, studio).
22
+ * Built from Sesionario shadcn CSS variables so admin and app match the shell.
23
+ * Host studio encodes this with `encodeEmbedTheme` (SDK expects a string token).
24
+ */
25
+ type SesionarioEmbedTheme = {
26
+ primary: string;
27
+ background: string;
28
+ foreground: string;
29
+ radius: string;
30
+ fontFamily: string;
31
+ };
32
+ declare function sesionarioEmbedTheme(): SesionarioEmbedTheme;
33
+
34
+ export { type SesionarioEmbedTheme, interpolateSesionarioStudioLabel, sesionarioEmbedTheme, sesionarioLobbyLabels, sesionarioStudioLabelFn };
package/dist/livo.d.ts ADDED
@@ -0,0 +1,34 @@
1
+ declare function interpolateSesionarioStudioLabel(key: string, values?: Record<string, string>): string;
2
+ /**
3
+ * Catalog interpolator for `@livo-tv/sdk/studio` `studioRoomLabels`.
4
+ * Consuming apps wrap: `studioRoomLabels(sesionarioStudioLabelFn)`.
5
+ */
6
+ declare const sesionarioStudioLabelFn: typeof interpolateSesionarioStudioLabel;
7
+ declare const sesionarioLobbyLabels: {
8
+ title: string;
9
+ hint: string;
10
+ name: string;
11
+ join: string;
12
+ waitingForHost: string;
13
+ camera: string;
14
+ mic: string;
15
+ joinError: string;
16
+ joinBusy: string;
17
+ endedTitle: string;
18
+ };
19
+
20
+ /**
21
+ * Shared EmbedTheme for native `@livo-tv/sdk` surfaces (LivoPlayer, studio).
22
+ * Built from Sesionario shadcn CSS variables so admin and app match the shell.
23
+ * Host studio encodes this with `encodeEmbedTheme` (SDK expects a string token).
24
+ */
25
+ type SesionarioEmbedTheme = {
26
+ primary: string;
27
+ background: string;
28
+ foreground: string;
29
+ radius: string;
30
+ fontFamily: string;
31
+ };
32
+ declare function sesionarioEmbedTheme(): SesionarioEmbedTheme;
33
+
34
+ export { type SesionarioEmbedTheme, interpolateSesionarioStudioLabel, sesionarioEmbedTheme, sesionarioLobbyLabels, sesionarioStudioLabelFn };
package/dist/livo.js ADDED
@@ -0,0 +1,215 @@
1
+ // src/livo/studio-labels-en.json
2
+ var studio_labels_en_default = {
3
+ live: "LIVE",
4
+ preview: "Preview",
5
+ waiting: "Waiting to join",
6
+ waitingHost: "Waiting for the host to let you in",
7
+ admit: "Admit",
8
+ deny: "Deny",
9
+ denied: "Guest declined",
10
+ denyError: "Could not decline that guest",
11
+ rejectedTitle: "The host declined your request",
12
+ rejectedDescription: "You can ask to join again if the studio is still open.",
13
+ rejectedAction: "Ask to join again",
14
+ kick: "Remove",
15
+ camera: "Camera",
16
+ screen: "Screen",
17
+ mute: "Mute",
18
+ unmute: "Unmute",
19
+ copyLink: "Copy guest link",
20
+ shareLink: "Share guest link",
21
+ shareGuestText: "Join the studio for {title}",
22
+ shareFailed: "Could not share the guest link",
23
+ copied: "Guest link copied",
24
+ publish: "Go live",
25
+ publishTitle: "Go live?",
26
+ publishDescription: "Viewers will see this studio on the public player.",
27
+ publishConfirm: "Go live",
28
+ publishPending: "Going on air\u2026",
29
+ stop: "Stop",
30
+ stopTitle: "Stop this broadcast?",
31
+ stopDescription: "Viewers will lose the live feed. Guests will be disconnected.",
32
+ stopConfirm: "Stop stream",
33
+ fullscreen: "Fullscreen",
34
+ publishError: "Could not go live",
35
+ stopError: "Could not stop the stream",
36
+ published: "Going live",
37
+ stopped: "Stream stopped",
38
+ cameraDevice: "Camera",
39
+ micDevice: "Microphone",
40
+ speakerDevice: "Speaker",
41
+ preflightCamera: "Camera",
42
+ preflightMic: "Microphone",
43
+ knock: "{name} is waiting to join",
44
+ egressLost: "Reconnect studio",
45
+ livestreamStarting: "Initializing\u2026",
46
+ livestreamSending: "Initializing\u2026",
47
+ livestreamInitializing: "Initializing\u2026",
48
+ livestreamRetry: "Retry egress",
49
+ livestreamError: "Could not start RTMP egress",
50
+ screenBusy: "Someone else is already sharing their screen",
51
+ endedTitle: "This studio session has ended",
52
+ endedDescription: "The host stopped the stream.",
53
+ endedAction: "Back",
54
+ rejoin: "Rejoin studio",
55
+ duplicateTitle: "Studio is already open",
56
+ duplicateDescription: "This studio is already open in another window.",
57
+ duplicateDescriptionNoTakeover: "This studio is already open in another window. Close that window to continue here.",
58
+ duplicateAction: "Continue here",
59
+ duplicateTakenOver: "This session moved to another window.",
60
+ joinBusy: "Too many join attempts. Try again in a moment.",
61
+ cameraError: "Could not enable the camera",
62
+ screenError: "Could not share the screen",
63
+ leave: "Leave studio",
64
+ leaveTitle: "Leave this studio?",
65
+ leaveDescription: "You will disconnect from the host and other guests.",
66
+ leaveConfirm: "Leave",
67
+ chat: "Chat",
68
+ chatSend: "Send",
69
+ chatPlaceholder: "Message",
70
+ chatError: "Could not send the message",
71
+ settings: "Settings",
72
+ settingsTitle: "Settings",
73
+ settingsDescription: "Name, audio, and video settings",
74
+ guestName: "Your name",
75
+ displayNameSave: "Save",
76
+ displayNameSaved: "Display name updated",
77
+ displayNameError: "Could not update your display name",
78
+ testSpeaker: "Test",
79
+ testSpeakerError: "Could not play the speaker test",
80
+ cameraOff: "Camera is off",
81
+ micLevel: "Microphone level",
82
+ share: "Copy player link",
83
+ shareCopied: "Player link copied",
84
+ stopCamera: "Stop camera",
85
+ stopScreen: "Stop screen share",
86
+ hostMutedYou: "The host muted you",
87
+ hostStoppedYourCamera: "The host turned off your camera",
88
+ hostStoppedYourScreen: "The host stopped your screen share",
89
+ hostMediaError: "Could not change that guest's media",
90
+ tileMenu: "Guest controls",
91
+ openPip: "Picture-in-picture",
92
+ closePip: "Close picture-in-picture",
93
+ backToStudio: "Back to studio",
94
+ pipTitle: "Studio",
95
+ pipError: "Could not open picture-in-picture",
96
+ screenUnsupportedDevice: "Screen sharing is not available on this device",
97
+ screenNotAllowed: "You do not have permission to share your screen",
98
+ askToShare: "Ask to share",
99
+ shareRequested: "Requested",
100
+ cancelShareRequest: "Cancel request",
101
+ shareRequestSent: "Asked the host to share your screen",
102
+ shareRequestFrom: "{name} wants to share their screen",
103
+ approve: "Approve",
104
+ shareApproved: "The host approved your screen share",
105
+ shareDenied: "The host declined your screen share",
106
+ shareRequestError: "Could not ask the host to share",
107
+ shareRequestTimeout: "No response from the host",
108
+ shareRespondError: "Could not respond to that share request",
109
+ goOffAir: "Go off air",
110
+ goOnAir: "Go on air",
111
+ takeOffAir: "Take off air",
112
+ bringOnAir: "Bring on air",
113
+ offAir: "Off air",
114
+ offAirCount: "Off air ({count})",
115
+ offAirBanner: "You are off camera. Your microphone is still live.",
116
+ offAirLastVisible: "At least one participant must stay on air while you are live",
117
+ offAirHidden: "Taken off air",
118
+ offAirShown: "Back on air",
119
+ offAirError: "Could not change on-air state",
120
+ takeOffAirTitle: "Take this guest off air?",
121
+ takeOffAirDescription: "They stay in the studio but stop publishing camera, mic, and screen.",
122
+ takeOffAirConfirm: "Take off air",
123
+ admitAsPanelist: "Admit as panelist",
124
+ admitAsAudience: "Admit as audience",
125
+ admitAllPanelists: "Admit all as panelists",
126
+ admitAllAudience: "Admit all as audience",
127
+ askToGoOnAir: "Ask to go on air",
128
+ stageRequested: "Asked to go on air",
129
+ stageRequests: "Stage requests",
130
+ people: "People",
131
+ panelists: "Panelists",
132
+ audience: "Audience",
133
+ noWaiting: "No one is waiting",
134
+ noPanelists: "No panelists",
135
+ noAudience: "No audience",
136
+ closePanel: "Close",
137
+ muteChat: "Mute chat",
138
+ allowChat: "Allow chat",
139
+ pin: "Pin on stage",
140
+ unpin: "Unpin",
141
+ pinnedToast: "You are pinned on stage",
142
+ unpinnedToast: "You are no longer pinned",
143
+ pinError: "Could not pin that participant",
144
+ kickTitle: "Remove this guest from the studio?",
145
+ kickDescription: "They will be disconnected.",
146
+ kickConfirm: "Remove",
147
+ kickError: "Could not remove that guest",
148
+ stageError: "Could not change stage access",
149
+ stageDisabled: "This guest link cannot join the stage.",
150
+ stageGrantNoEffect: "That guest stayed in the audience.",
151
+ stageOverflow: "+{count} more",
152
+ chatEveryone: "Everyone",
153
+ chatEdited: "Edited",
154
+ chatPinned: "Pinned message",
155
+ chatLoadOlder: "Load earlier messages",
156
+ chatRateLimited: "You are sending messages too quickly",
157
+ chatDelete: "Delete",
158
+ chatEdit: "Edit",
159
+ chatPin: "Pin message",
160
+ chatUnpin: "Unpin message",
161
+ chatSave: "Save",
162
+ waitingSkeleton: "Loading waiting room"
163
+ };
164
+
165
+ // src/livo/studio-labels.ts
166
+ var catalog = studio_labels_en_default;
167
+ function interpolateSesionarioStudioLabel(key, values) {
168
+ let text = catalog[key] ?? key;
169
+ if (values) {
170
+ for (const [name, value] of Object.entries(values)) {
171
+ text = text.replaceAll(`{${name}}`, value);
172
+ }
173
+ }
174
+ return text;
175
+ }
176
+ var sesionarioStudioLabelFn = interpolateSesionarioStudioLabel;
177
+ var sesionarioLobbyLabels = {
178
+ title: "Get ready to join",
179
+ hint: "Set your camera and microphone, then join when you are ready.",
180
+ name: "Your name",
181
+ join: "Join",
182
+ waitingForHost: "Waiting for the host to open the studio",
183
+ camera: "Camera",
184
+ mic: "Microphone",
185
+ joinError: "Could not join studio",
186
+ joinBusy: "Too many join attempts. Try again in a moment.",
187
+ endedTitle: "This studio session has ended"
188
+ };
189
+
190
+ // src/livo/embed-theme.ts
191
+ var FALLBACK = {
192
+ background: "oklch(1 0 0)",
193
+ foreground: "oklch(0.145 0 0)",
194
+ primary: "oklch(0.4824 0.1149 242.2039)",
195
+ radius: "0.625rem",
196
+ fontFamily: "ui-sans-serif, system-ui, sans-serif"
197
+ };
198
+ function cssVar(name, fallback) {
199
+ if (typeof document === "undefined") return fallback;
200
+ const value = getComputedStyle(document.documentElement).getPropertyValue(name).trim();
201
+ return value || fallback;
202
+ }
203
+ function sesionarioEmbedTheme() {
204
+ return {
205
+ background: cssVar("--background", FALLBACK.background),
206
+ foreground: cssVar("--foreground", FALLBACK.foreground),
207
+ primary: cssVar("--primary", FALLBACK.primary),
208
+ radius: cssVar("--radius", FALLBACK.radius),
209
+ fontFamily: cssVar("--font-sans", FALLBACK.fontFamily)
210
+ };
211
+ }
212
+
213
+ export { interpolateSesionarioStudioLabel, sesionarioEmbedTheme, sesionarioLobbyLabels, sesionarioStudioLabelFn };
214
+ //# sourceMappingURL=livo.js.map
215
+ //# sourceMappingURL=livo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/livo/studio-labels-en.json","../src/livo/studio-labels.ts","../src/livo/embed-theme.ts"],"names":[],"mappings":"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","file":"livo.js","sourcesContent":["{\n\t\"live\": \"LIVE\",\n\t\"preview\": \"Preview\",\n\t\"waiting\": \"Waiting to join\",\n\t\"waitingHost\": \"Waiting for the host to let you in\",\n\t\"admit\": \"Admit\",\n\t\"deny\": \"Deny\",\n\t\"denied\": \"Guest declined\",\n\t\"denyError\": \"Could not decline that guest\",\n\t\"rejectedTitle\": \"The host declined your request\",\n\t\"rejectedDescription\": \"You can ask to join again if the studio is still open.\",\n\t\"rejectedAction\": \"Ask to join again\",\n\t\"kick\": \"Remove\",\n\t\"camera\": \"Camera\",\n\t\"screen\": \"Screen\",\n\t\"mute\": \"Mute\",\n\t\"unmute\": \"Unmute\",\n\t\"copyLink\": \"Copy guest link\",\n\t\"shareLink\": \"Share guest link\",\n\t\"shareGuestText\": \"Join the studio for {title}\",\n\t\"shareFailed\": \"Could not share the guest link\",\n\t\"copied\": \"Guest link copied\",\n\t\"publish\": \"Go live\",\n\t\"publishTitle\": \"Go live?\",\n\t\"publishDescription\": \"Viewers will see this studio on the public player.\",\n\t\"publishConfirm\": \"Go live\",\n\t\"publishPending\": \"Going on air…\",\n\t\"stop\": \"Stop\",\n\t\"stopTitle\": \"Stop this broadcast?\",\n\t\"stopDescription\": \"Viewers will lose the live feed. Guests will be disconnected.\",\n\t\"stopConfirm\": \"Stop stream\",\n\t\"fullscreen\": \"Fullscreen\",\n\t\"publishError\": \"Could not go live\",\n\t\"stopError\": \"Could not stop the stream\",\n\t\"published\": \"Going live\",\n\t\"stopped\": \"Stream stopped\",\n\t\"cameraDevice\": \"Camera\",\n\t\"micDevice\": \"Microphone\",\n\t\"speakerDevice\": \"Speaker\",\n\t\"preflightCamera\": \"Camera\",\n\t\"preflightMic\": \"Microphone\",\n\t\"knock\": \"{name} is waiting to join\",\n\t\"egressLost\": \"Reconnect studio\",\n\t\"livestreamStarting\": \"Initializing…\",\n\t\"livestreamSending\": \"Initializing…\",\n\t\"livestreamInitializing\": \"Initializing…\",\n\t\"livestreamRetry\": \"Retry egress\",\n\t\"livestreamError\": \"Could not start RTMP egress\",\n\t\"screenBusy\": \"Someone else is already sharing their screen\",\n\t\"endedTitle\": \"This studio session has ended\",\n\t\"endedDescription\": \"The host stopped the stream.\",\n\t\"endedAction\": \"Back\",\n\t\"rejoin\": \"Rejoin studio\",\n\t\"duplicateTitle\": \"Studio is already open\",\n\t\"duplicateDescription\": \"This studio is already open in another window.\",\n\t\"duplicateDescriptionNoTakeover\": \"This studio is already open in another window. Close that window to continue here.\",\n\t\"duplicateAction\": \"Continue here\",\n\t\"duplicateTakenOver\": \"This session moved to another window.\",\n\t\"joinBusy\": \"Too many join attempts. Try again in a moment.\",\n\t\"cameraError\": \"Could not enable the camera\",\n\t\"screenError\": \"Could not share the screen\",\n\t\"leave\": \"Leave studio\",\n\t\"leaveTitle\": \"Leave this studio?\",\n\t\"leaveDescription\": \"You will disconnect from the host and other guests.\",\n\t\"leaveConfirm\": \"Leave\",\n\t\"chat\": \"Chat\",\n\t\"chatSend\": \"Send\",\n\t\"chatPlaceholder\": \"Message\",\n\t\"chatError\": \"Could not send the message\",\n\t\"settings\": \"Settings\",\n\t\"settingsTitle\": \"Settings\",\n\t\"settingsDescription\": \"Name, audio, and video settings\",\n\t\"guestName\": \"Your name\",\n\t\"displayNameSave\": \"Save\",\n\t\"displayNameSaved\": \"Display name updated\",\n\t\"displayNameError\": \"Could not update your display name\",\n\t\"testSpeaker\": \"Test\",\n\t\"testSpeakerError\": \"Could not play the speaker test\",\n\t\"cameraOff\": \"Camera is off\",\n\t\"micLevel\": \"Microphone level\",\n\t\"share\": \"Copy player link\",\n\t\"shareCopied\": \"Player link copied\",\n\t\"stopCamera\": \"Stop camera\",\n\t\"stopScreen\": \"Stop screen share\",\n\t\"hostMutedYou\": \"The host muted you\",\n\t\"hostStoppedYourCamera\": \"The host turned off your camera\",\n\t\"hostStoppedYourScreen\": \"The host stopped your screen share\",\n\t\"hostMediaError\": \"Could not change that guest's media\",\n\t\"tileMenu\": \"Guest controls\",\n\t\"openPip\": \"Picture-in-picture\",\n\t\"closePip\": \"Close picture-in-picture\",\n\t\"backToStudio\": \"Back to studio\",\n\t\"pipTitle\": \"Studio\",\n\t\"pipError\": \"Could not open picture-in-picture\",\n\t\"screenUnsupportedDevice\": \"Screen sharing is not available on this device\",\n\t\"screenNotAllowed\": \"You do not have permission to share your screen\",\n\t\"askToShare\": \"Ask to share\",\n\t\"shareRequested\": \"Requested\",\n\t\"cancelShareRequest\": \"Cancel request\",\n\t\"shareRequestSent\": \"Asked the host to share your screen\",\n\t\"shareRequestFrom\": \"{name} wants to share their screen\",\n\t\"approve\": \"Approve\",\n\t\"shareApproved\": \"The host approved your screen share\",\n\t\"shareDenied\": \"The host declined your screen share\",\n\t\"shareRequestError\": \"Could not ask the host to share\",\n\t\"shareRequestTimeout\": \"No response from the host\",\n\t\"shareRespondError\": \"Could not respond to that share request\",\n\t\"goOffAir\": \"Go off air\",\n\t\"goOnAir\": \"Go on air\",\n\t\"takeOffAir\": \"Take off air\",\n\t\"bringOnAir\": \"Bring on air\",\n\t\"offAir\": \"Off air\",\n\t\"offAirCount\": \"Off air ({count})\",\n\t\"offAirBanner\": \"You are off camera. Your microphone is still live.\",\n\t\"offAirLastVisible\": \"At least one participant must stay on air while you are live\",\n\t\"offAirHidden\": \"Taken off air\",\n\t\"offAirShown\": \"Back on air\",\n\t\"offAirError\": \"Could not change on-air state\",\n\t\"takeOffAirTitle\": \"Take this guest off air?\",\n\t\"takeOffAirDescription\": \"They stay in the studio but stop publishing camera, mic, and screen.\",\n\t\"takeOffAirConfirm\": \"Take off air\",\n\t\"admitAsPanelist\": \"Admit as panelist\",\n\t\"admitAsAudience\": \"Admit as audience\",\n\t\"admitAllPanelists\": \"Admit all as panelists\",\n\t\"admitAllAudience\": \"Admit all as audience\",\n\t\"askToGoOnAir\": \"Ask to go on air\",\n\t\"stageRequested\": \"Asked to go on air\",\n\t\"stageRequests\": \"Stage requests\",\n\t\"people\": \"People\",\n\t\"panelists\": \"Panelists\",\n\t\"audience\": \"Audience\",\n\t\"noWaiting\": \"No one is waiting\",\n\t\"noPanelists\": \"No panelists\",\n\t\"noAudience\": \"No audience\",\n\t\"closePanel\": \"Close\",\n\t\"muteChat\": \"Mute chat\",\n\t\"allowChat\": \"Allow chat\",\n\t\"pin\": \"Pin on stage\",\n\t\"unpin\": \"Unpin\",\n\t\"pinnedToast\": \"You are pinned on stage\",\n\t\"unpinnedToast\": \"You are no longer pinned\",\n\t\"pinError\": \"Could not pin that participant\",\n\t\"kickTitle\": \"Remove this guest from the studio?\",\n\t\"kickDescription\": \"They will be disconnected.\",\n\t\"kickConfirm\": \"Remove\",\n\t\"kickError\": \"Could not remove that guest\",\n\t\"stageError\": \"Could not change stage access\",\n\t\"stageDisabled\": \"This guest link cannot join the stage.\",\n\t\"stageGrantNoEffect\": \"That guest stayed in the audience.\",\n\t\"stageOverflow\": \"+{count} more\",\n\t\"chatEveryone\": \"Everyone\",\n\t\"chatEdited\": \"Edited\",\n\t\"chatPinned\": \"Pinned message\",\n\t\"chatLoadOlder\": \"Load earlier messages\",\n\t\"chatRateLimited\": \"You are sending messages too quickly\",\n\t\"chatDelete\": \"Delete\",\n\t\"chatEdit\": \"Edit\",\n\t\"chatPin\": \"Pin message\",\n\t\"chatUnpin\": \"Unpin message\",\n\t\"chatSave\": \"Save\",\n\t\"waitingSkeleton\": \"Loading waiting room\"\n}\n","import copy from \"./studio-labels-en.json\";\n\nconst catalog = copy as Record<string, string>;\n\nexport function interpolateSesionarioStudioLabel(\n\tkey: string,\n\tvalues?: Record<string, string>,\n): string {\n\tlet text = catalog[key] ?? key;\n\tif (values) {\n\t\tfor (const [name, value] of Object.entries(values)) {\n\t\t\ttext = text.replaceAll(`{${name}}`, value);\n\t\t}\n\t}\n\treturn text;\n}\n\n/** Alias used by unit tests and local copies in admin/app. */\nexport const interpolateStudioLabel = interpolateSesionarioStudioLabel;\n\n/**\n * Catalog interpolator for `@livo-tv/sdk/studio` `studioRoomLabels`.\n * Consuming apps wrap: `studioRoomLabels(sesionarioStudioLabelFn)`.\n */\nexport const sesionarioStudioLabelFn = interpolateSesionarioStudioLabel;\n\nexport function sesionarioStudioLabels() {\n\treturn interpolateSesionarioStudioLabel;\n}\n\nexport const sesionarioLobbyLabels = {\n\ttitle: \"Get ready to join\",\n\thint: \"Set your camera and microphone, then join when you are ready.\",\n\tname: \"Your name\",\n\tjoin: \"Join\",\n\twaitingForHost: \"Waiting for the host to open the studio\",\n\tcamera: \"Camera\",\n\tmic: \"Microphone\",\n\tjoinError: \"Could not join studio\",\n\tjoinBusy: \"Too many join attempts. Try again in a moment.\",\n\tendedTitle: \"This studio session has ended\",\n};\n","/**\n * Shared EmbedTheme for native `@livo-tv/sdk` surfaces (LivoPlayer, studio).\n * Built from Sesionario shadcn CSS variables so admin and app match the shell.\n * Host studio encodes this with `encodeEmbedTheme` (SDK expects a string token).\n */\nexport type SesionarioEmbedTheme = {\n\tprimary: string;\n\tbackground: string;\n\tforeground: string;\n\tradius: string;\n\tfontFamily: string;\n};\n\nconst FALLBACK: SesionarioEmbedTheme = {\n\tbackground: \"oklch(1 0 0)\",\n\tforeground: \"oklch(0.145 0 0)\",\n\tprimary: \"oklch(0.4824 0.1149 242.2039)\",\n\tradius: \"0.625rem\",\n\tfontFamily: \"ui-sans-serif, system-ui, sans-serif\",\n};\n\nfunction cssVar(name: string, fallback: string): string {\n\tif (typeof document === \"undefined\") return fallback;\n\tconst value = getComputedStyle(document.documentElement)\n\t\t.getPropertyValue(name)\n\t\t.trim();\n\treturn value || fallback;\n}\n\nexport function sesionarioEmbedTheme(): SesionarioEmbedTheme {\n\treturn {\n\t\tbackground: cssVar(\"--background\", FALLBACK.background),\n\t\tforeground: cssVar(\"--foreground\", FALLBACK.foreground),\n\t\tprimary: cssVar(\"--primary\", FALLBACK.primary),\n\t\tradius: cssVar(\"--radius\", FALLBACK.radius),\n\t\tfontFamily: cssVar(\"--font-sans\", FALLBACK.fontFamily),\n\t};\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sesionario/blocks",
3
- "version": "1.33.1",
3
+ "version": "1.34.0",
4
4
  "description": "Shared UI components for Sesionario applications",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -46,6 +46,16 @@
46
46
  "types": "./dist/charts.d.cts",
47
47
  "default": "./dist/charts.cjs"
48
48
  }
49
+ },
50
+ "./livo": {
51
+ "import": {
52
+ "types": "./dist/livo.d.ts",
53
+ "default": "./dist/livo.js"
54
+ },
55
+ "require": {
56
+ "types": "./dist/livo.d.cts",
57
+ "default": "./dist/livo.cjs"
58
+ }
49
59
  }
50
60
  },
51
61
  "files": [
@@ -94,8 +104,8 @@
94
104
  "access": "public"
95
105
  },
96
106
  "peerDependencies": {
107
+ "@livo-tv/sdk": ">=1.1.0",
97
108
  "framer-motion": ">=11.0.0",
98
- "hls.js": ">=1.5.0",
99
109
  "lucide-react": ">=0.400.0",
100
110
  "next-themes": ">=0.4.0",
101
111
  "pdfjs-dist": ">=4.0.0",
@@ -105,7 +115,7 @@
105
115
  "react-phone-number-input": ">=3.4.0"
106
116
  },
107
117
  "peerDependenciesMeta": {
108
- "hls.js": {
118
+ "@livo-tv/sdk": {
109
119
  "optional": true
110
120
  },
111
121
  "pdfjs-dist": {
@@ -147,6 +157,7 @@
147
157
  "vaul": "^1.1.2"
148
158
  },
149
159
  "devDependencies": {
160
+ "@livo-tv/sdk": "^1.1.0",
150
161
  "@commitlint/cli": "^19.8.1",
151
162
  "@commitlint/config-conventional": "^19.8.1",
152
163
  "@eslint/js": "^9.26.0",
@@ -170,7 +181,6 @@
170
181
  "eslint": "^9.26.0",
171
182
  "eslint-config-prettier": "^10.1.3",
172
183
  "framer-motion": "^12.26.2",
173
- "hls.js": "^1.6.16",
174
184
  "husky": "^9.1.7",
175
185
  "jsdom": "^26.1.0",
176
186
  "lucide-react": "^0.511.0",