@realsee/live 0.1.1 → 0.2.0-alpha.1

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 (90) hide show
  1. package/README.md +51 -56
  2. package/docs/.nojekyll +1 -0
  3. package/docs/assets/custom.css +43 -0
  4. package/docs/assets/highlight.css +127 -0
  5. package/docs/assets/icons.css +1043 -0
  6. package/docs/assets/{images/icons.png → icons.png} +0 -0
  7. package/docs/assets/{images/icons@2x.png → icons@2x.png} +0 -0
  8. package/docs/assets/main.js +52 -0
  9. package/docs/assets/search.js +1 -0
  10. package/docs/assets/style.css +1388 -0
  11. package/docs/assets/{images/widgets.png → widgets.png} +0 -0
  12. package/docs/assets/{images/widgets@2x.png → widgets@2x.png} +0 -0
  13. package/docs/classes/RTCProtocol.RTCExample.html +62 -814
  14. package/docs/classes/RTCProtocol.VRWebViewRTC.html +60 -0
  15. package/docs/classes/shared_utils.Subscribe.html +55 -596
  16. package/docs/enums/RTCProtocol.RTCJoinedInfoCodeEnum.html +9 -0
  17. package/docs/enums/RTCProtocol.RTCType.html +1 -185
  18. package/docs/enums/live.BuiltinActionType.html +15 -325
  19. package/docs/enums/live.BuiltinEventType.html +7 -268
  20. package/docs/enums/live.Command.html +7 -346
  21. package/docs/enums/live.MemUserStatus.html +1 -307
  22. package/docs/enums/live.MicroStatus.html +3 -258
  23. package/docs/enums/live.UserStatus.html +9 -287
  24. package/docs/enums/live.WebSocketCloseError.html +19 -382
  25. package/docs/enums/live.WebSocketErrorType.html +1 -307
  26. package/docs/enums/live.WebSocketState.html +13 -325
  27. package/docs/index.html +327 -512
  28. package/docs/interfaces/RTCProtocol.GetVoiceSignReturnType.html +1 -0
  29. package/docs/interfaces/RTCProtocol.RTCJoinedInfo.html +1 -0
  30. package/docs/interfaces/RTCProtocol.RTCProtocol-1.html +60 -765
  31. package/docs/interfaces/RTCProtocol.VRWebViewRTCOptions.html +1 -0
  32. package/docs/interfaces/live.Live.html +119 -1302
  33. package/docs/interfaces/live.LiveOptions.html +22 -499
  34. package/docs/interfaces/live.LiveReact.html +52 -984
  35. package/docs/modules/RTCProtocol.html +17 -361
  36. package/docs/modules/live.html +103 -1219
  37. package/docs/modules/shared_utils.html +10 -248
  38. package/docs/modules.html +1 -125
  39. package/lib/RTC/BrowserRTC.d.ts +30 -0
  40. package/lib/RTC/BrowserRTC.js +163 -0
  41. package/lib/RTC/BrowserRTC.js.map +1 -0
  42. package/lib/RTC/VRWebViewRTC.d.ts +23 -0
  43. package/lib/RTC/VRWebViewRTC.js +124 -0
  44. package/lib/RTC/VRWebViewRTC.js.map +1 -0
  45. package/lib/RTC/index.d.ts +22 -0
  46. package/lib/{RTCProtocol → RTC}/index.js +3 -7
  47. package/lib/RTC/index.js.map +1 -0
  48. package/lib/createLive.d.ts +1 -1
  49. package/lib/createLive.js +53 -24
  50. package/lib/createLive.js.map +1 -1
  51. package/lib/createLiveReact.d.ts +12 -11
  52. package/lib/createLiveReact.js +9 -15
  53. package/lib/createLiveReact.js.map +1 -1
  54. package/lib/shared-utils/Subscribe.d.ts +1 -1
  55. package/lib/shared-utils/appendUri.js +1 -1
  56. package/lib/shared-utils/appendUri.js.map +1 -1
  57. package/lib/typings/EventType.d.ts +10 -0
  58. package/lib/typings/GetVoiceSign.d.ts +11 -0
  59. package/lib/typings/GetVoiceSign.js +3 -0
  60. package/lib/typings/GetVoiceSign.js.map +1 -0
  61. package/lib/typings/Live.d.ts +6 -4
  62. package/lib/typings/LiveMsg.d.ts +4 -0
  63. package/lib/typings/LiveMsg.js +5 -1
  64. package/lib/typings/LiveMsg.js.map +1 -1
  65. package/lib/typings/LiveOptions.d.ts +3 -7
  66. package/lib/typings/RTCEventType.d.ts +2 -14
  67. package/lib/typings/RTCEventType.js +0 -7
  68. package/lib/typings/RTCEventType.js.map +1 -1
  69. package/lib/typings/RTCJoinedInfo.d.ts +28 -0
  70. package/lib/typings/RTCJoinedInfo.js +23 -0
  71. package/lib/typings/RTCJoinedInfo.js.map +1 -0
  72. package/lib/{RTCProtocol/index.d.ts → typings/RTCProtocol.d.ts} +1 -19
  73. package/lib/typings/RTCProtocol.js +9 -0
  74. package/lib/typings/RTCProtocol.js.map +1 -0
  75. package/lib/typings/VRWebViewRTCOptions.d.ts +6 -0
  76. package/lib/typings/VRWebViewRTCOptions.js +3 -0
  77. package/lib/typings/VRWebViewRTCOptions.js.map +1 -0
  78. package/lib/typings/WebSocket.d.ts +2 -1
  79. package/lib/typings/WebSocket.js +1 -0
  80. package/lib/typings/WebSocket.js.map +1 -1
  81. package/package.json +8 -4
  82. package/umd/{RTCProtocol.046933a5.js → RTCProtocol.543610f0.js} +1 -1
  83. package/umd/createLive.1ecf7dd4.js +1 -0
  84. package/umd/createLiveReact.9075a8fd.js +1 -0
  85. package/docs/assets/css/main.css +0 -2787
  86. package/docs/assets/js/main.js +0 -248
  87. package/docs/assets/js/search.js +0 -1
  88. package/lib/RTCProtocol/index.js.map +0 -1
  89. package/umd/createLive.6845145e.js +0 -1
  90. package/umd/createLiveReact.406cf5a3.js +0 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 功能说明
6
6
 
7
- **Live** 是 [如视开发者中心VRTC服务](https://developers.realsee.com/docs/#/docs/live/README) 的核心客户端 Web SDK,搭配 Live Container
7
+ **Live** 是 [如视开发者中心 VRTC 服务](https://developers.realsee.com/docs/#/docs/live/README) 的核心客户端 Web SDK,搭配 Live Container
8
8
  SDKs(iOS/Android/微信小程序)和 Live API 可以快速实现实时同屏、实时语音、IM 等功能。
9
9
 
10
10
  ### 名词释义
@@ -26,7 +26,7 @@ SDKs(iOS/Android/微信小程序)和 Live API 可以快速实现实时同屏
26
26
 
27
27
  ### 安装 SDK
28
28
 
29
- 可以通过Node包管理工具 [npm](https://www.npmjs.com/) 或 [yarn](https://yarnpkg.com/) 安装**Live**:
29
+ 可以通过 Node 包管理工具 [npm](https://www.npmjs.com/) 或 [yarn](https://yarnpkg.com/) 安装**Live**:
30
30
 
31
31
  ```bash
32
32
  # npm
@@ -43,10 +43,11 @@ yarn add @realsee/live
43
43
  import { createLive } from '@realsee/live'
44
44
 
45
45
  const live = createLive({
46
- url: 'wss://ws-access.realsee.com/***/?=xxx', /* 连接 WebSocket 服务的 URL */
47
- getTicket: async () => {/* 获取带看"门票"的回调函数 */},
46
+ url: 'wss://ws-access.realsee.com/***/?=xxx' /* 连接 WebSocket 服务的 URL */,
47
+ getTicket: async () => {
48
+ /* 获取带看"门票"的回调函数 */
49
+ },
48
50
  })
49
-
50
51
  ```
51
52
 
52
53
  在创建 `live` 实例时配置了两个参数:
@@ -136,7 +137,7 @@ live.on('broadcast', (data /* 广播的数据 */) => {})
136
137
 
137
138
  ```ts
138
139
  live.on('ws.readyStateUpdate', (readyState: WebSocketState) => {
139
- console.log(readyState) // readyState 即是最新的 WebScoket 状态
140
+ console.log(readyState) // readyState 即是最新的 WebScoket 状态
140
141
  })
141
142
  ```
142
143
 
@@ -199,7 +200,7 @@ live.on('ws.readyStateUpdate', (readyState: WebSocketState) => {
199
200
 
200
201
  ```ts
201
202
  live.$RTC.on('userVolumes', (userVolumes: UserVolume[]) => {
202
- console.log(userVolumes) // userVolumes 正在说话的用户及其音量数据。
203
+ console.log(userVolumes) // userVolumes 正在说话的用户及其音量数据。
203
204
  })
204
205
  ```
205
206
 
@@ -222,17 +223,17 @@ live.$RTC.on('userVolumes', (userVolumes: UserVolume[]) => {
222
223
 
223
224
  与 WebSocket 通信的结构体`LiveMsg`格式如下:
224
225
 
225
- | 名称 | 类型 | 描述 |
226
- | --------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------- |
226
+ | 名称 | 类型 | 描述 |
227
+ | --------------- | ------------------- | ----------------------------------------------------------------------------------------------------- |
227
228
  | appId | string |
228
- | code | string | 返回码,详情参照[服务端 API Code 码表](https://developers.realsee.com/docs/#/docs/live/server/README) |
229
- | command | 指令 | WebSocket 通信指令类型,详情请查看[Live API](https://unpkg.com/@realsee/live/docs/index.html) 文档 |
230
- | data | Record<string, any> | 本条指令对应的业务数据 |
231
- | frontRequestId: | string | 前端的请求 ID,由 WS 服务原样透传回前端 |
232
- | message | string | 返回描述 |
233
- | requestId | string | 后端请求 ID |
234
- | roomCode | string | 带看房间号 |
235
- | triggerUserId | string | 触发指令的用户 ID |
229
+ | code | string | 返回码,详情参照[服务端 API Code 码表](https://developers.realsee.com/docs/#/docs/live/server/README) |
230
+ | command | 指令 | WebSocket 通信指令类型,详情请查看[Live API](https://unpkg.com/@realsee/live/docs/index.html) 文档 |
231
+ | data | Record<string, any> | 本条指令对应的业务数据 |
232
+ | frontRequestId: | string | 前端的请求 ID,由 WS 服务原样透传回前端 |
233
+ | message | string | 返回描述 |
234
+ | requestId | string | 后端请求 ID |
235
+ | roomCode | string | 带看房间号 |
236
+ | triggerUserId | string | 触发指令的用户 ID |
236
237
 
237
238
  当 WebSocket 推送的数据结构体不满足 `LiveMsg` 或者 `code` 值不为 `SUCCESS` 时会以 `error` 事件的形式抛出来。
238
239
 
@@ -244,33 +245,29 @@ live.$RTC.on('userVolumes', (userVolumes: UserVolume[]) => {
244
245
 
245
246
  语音能力需依赖 WebView/Browser 容器,即需要容器端实现 RTC 能力。
246
247
 
247
- 为了方便开发者接入,**如视开发者中心VRTC服务** 为主流平台提供 [容器SDK](https://developers.realsee.com/docs/#/docs/live/client/container/README )
248
+ 为了方便开发者接入,**如视开发者中心 VRTC 服务** 为主流平台提供 [容器 SDK](https://developers.realsee.com/docs/#/docs/live/client/container/README)
248
249
  和 [jsbridge-x](https://www.npmjs.com/package/@realsee/jsbridge-x) 。
249
250
 
250
- **Live** 通过 **jsbridge-x** 与 集成了**容器SDK** 的客户端应用或微信小程序应用程序桥接,实现原生能力的调用。这个 `jsbridge-x`
251
+ **Live** 通过 **jsbridge-x** 与 集成了**容器 SDK** 的客户端应用或微信小程序应用程序桥接,实现原生能力的调用。这个 `jsbridge-x`
251
252
  实例需作为配置参数提供给`createLive()`。
252
253
 
253
- 如果是 iOS/Android App(已接入如视VRTC容器SDK)
254
+ 如果是 iOS/Android App(已接入如视 VRTC 容器 SDK)
254
255
 
255
256
  ```js
256
- import AppBridge from '@realsee/jsbridge-x/lib/cjs/app'
257
+ import { JSBridgeApp } from '@realsee/jsbridge-x/lib/app'
257
258
  import { createLive } from '@realsee/live'
259
+ import { VRWebViewRTC } from '@realsee/live/RTC/VRWebViewRTC'
258
260
 
259
- const live = createLive({
260
- rtc: new AppBridge(),
261
- getTicket: async () => ''
262
- })
263
- ```
264
-
265
- 如果是 微信小程序(已接入如视VRTC容器SDK)
261
+ const jsBridgeInstance = new JSBridgeApp()
266
262
 
267
- ```js
268
- import MiniprogramBridge from '@realsee/jsbridge-x/lib/cjs/miniprogram'
269
- import { createLive } from '@realsee/live'
263
+ const rtcInstance = new VRWebViewRTC({
264
+ jsBridge,
265
+ getVoiceSign: () => {},
266
+ })
270
267
 
271
268
  const live = createLive({
272
- rtc: new MiniprogramBridge(),
273
- getTicket: async () => ''
269
+ rtc: rtcInstance,
270
+ getTicket: async () => '',
274
271
  })
275
272
  ```
276
273
 
@@ -295,30 +292,24 @@ live.$RTC.on('userVolumes', (userVolumes) => {})
295
292
  步骤一:新建文件 `LiveReact.ts` 并创建您自己的 `LiveReact` 实例。
296
293
 
297
294
  ```tsx
298
- import {createLiveReact} from '@realsee/live'
295
+ import { createLiveReact } from '@realsee/live'
299
296
 
300
297
  /** 定义帧数据快照结构 */
301
298
  interface Snapshot {
302
- /** 以 Five 状态快照为例 */
303
- five: {
304
- panoIndex: number,
305
- fov: number,
306
- mode: 'Panorama' | 'Model',
307
- latitude: number,
308
- longitude: number,
309
- }
310
- }
311
-
312
- /** 定义异步获取 `Ticket` 回调参数结构 */
313
- interface TicketArgs {
314
- /* 没有特殊参数 */
299
+ /** 以 Five 状态快照为例 */
300
+ five: {
301
+ panoIndex: number
302
+ fov: number
303
+ mode: 'Panorama' | 'Model'
304
+ latitude: number
305
+ longitude: number
306
+ }
315
307
  }
316
308
 
309
+ /** 通过 `createLiveReact()` 函数创建实例*/
317
310
 
318
- /** 通过 `createLiveReact()` 函数创建实例,注意必须提供 `getTicket` 配置参数 */
319
-
320
- const LiveReact = createLiveReact<Snapshot, TicketArgs>({
321
- getTicket: async () => '', /* 必须提供 */
311
+ const LiveReact = createLiveReact<Snapshot>({
312
+ getTicket: async () => '' /* 必须提供 */,
322
313
  })
323
314
 
324
315
  export default LiveReact
@@ -328,7 +319,6 @@ export const LiveProvider = LiveReact.LiveProvider
328
319
  export const useConnect = LiveReact.useConnect
329
320
  export const useKeyframe = LiveReact.useKeyframe
330
321
  // export ..
331
-
332
322
  ```
333
323
 
334
324
  步骤二:通过 `LiveProvider` 将 `live` 实例集成到 `React` 的 [Context](https://reactjs.org/docs/context.html) 上下文环境中。
@@ -336,7 +326,12 @@ export const useKeyframe = LiveReact.useKeyframe
336
326
  ```jsx
337
327
  import { LiveProvider } from './LiveReact'
338
328
 
339
- ReactDOM.render(<LiveProvider><RootApp/></LiveProvider>, containter)
329
+ ReactDOM.render(
330
+ <LiveProvider>
331
+ <RootApp />
332
+ </LiveProvider>,
333
+ containter
334
+ )
340
335
  ```
341
336
 
342
337
  步骤三:在您的 `React` 函数组件中使用相关 `Hooks` 函数。
@@ -344,7 +339,7 @@ ReactDOM.render(<LiveProvider><RootApp/></LiveProvider>, containter)
344
339
  ```jsx
345
340
  import { useConnect } from './LiveReact'
346
341
 
347
- function ReconnectBtn () {
342
+ function ReconnectBtn() {
348
343
  const connect = useConnect()
349
344
 
350
345
  return <button onClick={() => connect()}>重新连接</button>
@@ -359,5 +354,5 @@ function ReconnectBtn () {
359
354
  ## 相关文档链接
360
355
 
361
356
  - [@realsee/five](https://www.npmjs.com/package/@realsee/five)
362
- - [@realsee/jsbridge-x](https://www.npmjs.com/package/@realsee/jsbridge-x)
363
- - [如视开发者中心VRTC服务](https://developers.realsee.com/docs/#/docs/live/README)
357
+ - [@realsee/jsbridge](https://www.npmjs.com/package/@realsee/jsbridge)
358
+ - [如视开发者中心 VRTC 服务](https://developers.realsee.com/docs/#/docs/live/README)
package/docs/.nojekyll ADDED
@@ -0,0 +1 @@
1
+ TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
@@ -0,0 +1,43 @@
1
+ body {
2
+ font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
3
+ }
4
+ blockquote {
5
+ border-left: 4px solid rgb(128 128 128 / 50%);
6
+ color: rgb(0 0 0 / 60%);
7
+ line-height: 2;
8
+ font-size: 0.85rem;
9
+ padding: 3px 0px 3px 1em;
10
+ }
11
+
12
+ .tsd-typography {
13
+ font-size: 14px;
14
+ }
15
+
16
+ .tsd-typography h4 {
17
+ line-height: 2;
18
+ }
19
+
20
+ .hljs {
21
+ background-color: transparent;
22
+ font-family: monospace;
23
+ }
24
+ code {
25
+ font-size: 12px;
26
+ background-color: rgb(96 125 139 / 10%);
27
+ }
28
+
29
+ pre {
30
+ background-color: rgb(205 220 57 / 8%);
31
+ }
32
+
33
+ p {
34
+ line-height: 1.5;
35
+ }
36
+
37
+ a {
38
+ color: #3832cf;
39
+ }
40
+
41
+ a:hover {
42
+ color: darkred;
43
+ }
@@ -0,0 +1,127 @@
1
+ :root {
2
+ --light-hl-0: #008000;
3
+ --dark-hl-0: #6A9955;
4
+ --light-hl-1: #000000;
5
+ --dark-hl-1: #D4D4D4;
6
+ --light-hl-2: #AF00DB;
7
+ --dark-hl-2: #C586C0;
8
+ --light-hl-3: #001080;
9
+ --dark-hl-3: #9CDCFE;
10
+ --light-hl-4: #A31515;
11
+ --dark-hl-4: #CE9178;
12
+ --light-hl-5: #0000FF;
13
+ --dark-hl-5: #569CD6;
14
+ --light-hl-6: #0070C1;
15
+ --dark-hl-6: #4FC1FF;
16
+ --light-hl-7: #795E26;
17
+ --dark-hl-7: #DCDCAA;
18
+ --light-hl-8: #098658;
19
+ --dark-hl-8: #B5CEA8;
20
+ --light-hl-9: #267F99;
21
+ --dark-hl-9: #4EC9B0;
22
+ --light-hl-10: #800000;
23
+ --dark-hl-10: #808080;
24
+ --light-hl-11: #800000;
25
+ --dark-hl-11: #569CD6;
26
+ --light-hl-12: #FF0000;
27
+ --dark-hl-12: #9CDCFE;
28
+ --light-hl-13: #000000FF;
29
+ --dark-hl-13: #D4D4D4;
30
+ --light-hl-14: #000000;
31
+ --dark-hl-14: #C8C8C8;
32
+ --light-code-background: #FFFFFF;
33
+ --dark-code-background: #1E1E1E;
34
+ }
35
+
36
+ @media (prefers-color-scheme: light) { :root {
37
+ --hl-0: var(--light-hl-0);
38
+ --hl-1: var(--light-hl-1);
39
+ --hl-2: var(--light-hl-2);
40
+ --hl-3: var(--light-hl-3);
41
+ --hl-4: var(--light-hl-4);
42
+ --hl-5: var(--light-hl-5);
43
+ --hl-6: var(--light-hl-6);
44
+ --hl-7: var(--light-hl-7);
45
+ --hl-8: var(--light-hl-8);
46
+ --hl-9: var(--light-hl-9);
47
+ --hl-10: var(--light-hl-10);
48
+ --hl-11: var(--light-hl-11);
49
+ --hl-12: var(--light-hl-12);
50
+ --hl-13: var(--light-hl-13);
51
+ --hl-14: var(--light-hl-14);
52
+ --code-background: var(--light-code-background);
53
+ } }
54
+
55
+ @media (prefers-color-scheme: dark) { :root {
56
+ --hl-0: var(--dark-hl-0);
57
+ --hl-1: var(--dark-hl-1);
58
+ --hl-2: var(--dark-hl-2);
59
+ --hl-3: var(--dark-hl-3);
60
+ --hl-4: var(--dark-hl-4);
61
+ --hl-5: var(--dark-hl-5);
62
+ --hl-6: var(--dark-hl-6);
63
+ --hl-7: var(--dark-hl-7);
64
+ --hl-8: var(--dark-hl-8);
65
+ --hl-9: var(--dark-hl-9);
66
+ --hl-10: var(--dark-hl-10);
67
+ --hl-11: var(--dark-hl-11);
68
+ --hl-12: var(--dark-hl-12);
69
+ --hl-13: var(--dark-hl-13);
70
+ --hl-14: var(--dark-hl-14);
71
+ --code-background: var(--dark-code-background);
72
+ } }
73
+
74
+ body.light {
75
+ --hl-0: var(--light-hl-0);
76
+ --hl-1: var(--light-hl-1);
77
+ --hl-2: var(--light-hl-2);
78
+ --hl-3: var(--light-hl-3);
79
+ --hl-4: var(--light-hl-4);
80
+ --hl-5: var(--light-hl-5);
81
+ --hl-6: var(--light-hl-6);
82
+ --hl-7: var(--light-hl-7);
83
+ --hl-8: var(--light-hl-8);
84
+ --hl-9: var(--light-hl-9);
85
+ --hl-10: var(--light-hl-10);
86
+ --hl-11: var(--light-hl-11);
87
+ --hl-12: var(--light-hl-12);
88
+ --hl-13: var(--light-hl-13);
89
+ --hl-14: var(--light-hl-14);
90
+ --code-background: var(--light-code-background);
91
+ }
92
+
93
+ body.dark {
94
+ --hl-0: var(--dark-hl-0);
95
+ --hl-1: var(--dark-hl-1);
96
+ --hl-2: var(--dark-hl-2);
97
+ --hl-3: var(--dark-hl-3);
98
+ --hl-4: var(--dark-hl-4);
99
+ --hl-5: var(--dark-hl-5);
100
+ --hl-6: var(--dark-hl-6);
101
+ --hl-7: var(--dark-hl-7);
102
+ --hl-8: var(--dark-hl-8);
103
+ --hl-9: var(--dark-hl-9);
104
+ --hl-10: var(--dark-hl-10);
105
+ --hl-11: var(--dark-hl-11);
106
+ --hl-12: var(--dark-hl-12);
107
+ --hl-13: var(--dark-hl-13);
108
+ --hl-14: var(--dark-hl-14);
109
+ --code-background: var(--dark-code-background);
110
+ }
111
+
112
+ .hl-0 { color: var(--hl-0); }
113
+ .hl-1 { color: var(--hl-1); }
114
+ .hl-2 { color: var(--hl-2); }
115
+ .hl-3 { color: var(--hl-3); }
116
+ .hl-4 { color: var(--hl-4); }
117
+ .hl-5 { color: var(--hl-5); }
118
+ .hl-6 { color: var(--hl-6); }
119
+ .hl-7 { color: var(--hl-7); }
120
+ .hl-8 { color: var(--hl-8); }
121
+ .hl-9 { color: var(--hl-9); }
122
+ .hl-10 { color: var(--hl-10); }
123
+ .hl-11 { color: var(--hl-11); }
124
+ .hl-12 { color: var(--hl-12); }
125
+ .hl-13 { color: var(--hl-13); }
126
+ .hl-14 { color: var(--hl-14); }
127
+ pre, code { background: var(--code-background); }