@haklex/rich-renderer-video 0.0.65 → 0.0.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,38 +1,64 @@
1
1
  # @haklex/rich-renderer-video
2
2
 
3
- 视频播放器渲染器。
3
+ Video player renderer for embedded video content.
4
4
 
5
- ## 安装
5
+ ## Installation
6
6
 
7
7
  ```bash
8
- pnpm add @haklex/rich-renderer-video @haklex/rich-editor
8
+ pnpm add @haklex/rich-renderer-video
9
9
  ```
10
10
 
11
- ## 导出
11
+ ## Peer Dependencies
12
12
 
13
- ```ts
14
- export { VideoRenderer } from './VideoRenderer'
15
- export { VideoEditRenderer } from './VideoEditRenderer'
16
- ```
13
+ | Package | Version |
14
+ | --- | --- |
15
+ | `lexical` | `^0.41.0` |
16
+ | `@lexical/react` | `^0.41.0` |
17
+ | `react` | `>=19` |
18
+ | `react-dom` | `>=19` |
17
19
 
18
- ## 功能
20
+ ## Usage
19
21
 
20
- - 自定义控制栏
21
- - 进度条
22
- - 音量控制
23
- - 全屏
22
+ ```tsx
23
+ import { VideoRenderer } from '@haklex/rich-renderer-video/static'
24
24
 
25
- ## 使用
25
+ // Register in a static RendererConfig
26
+ const rendererConfig = {
27
+ // ...other renderers
28
+ Video: VideoRenderer,
29
+ }
30
+ ```
31
+
32
+ For edit mode:
26
33
 
27
34
  ```tsx
28
- import { VideoRenderer } from '@haklex/rich-renderer-video'
29
- import type { RendererConfig } from '@haklex/rich-editor'
35
+ import { VideoEditRenderer } from '@haklex/rich-renderer-video'
30
36
 
31
- const config: RendererConfig = {
32
- Video: VideoRenderer,
37
+ const editRendererConfig = {
38
+ // ...other renderers
39
+ Video: VideoEditRenderer,
33
40
  }
34
41
  ```
35
42
 
43
+ ## Exports
44
+
45
+ ### Components
46
+
47
+ - `VideoRenderer` — Static (read-only) video player renderer
48
+ - `VideoEditRenderer` — Edit (interactive) renderer with video controls
49
+
50
+ ### Sub-path Exports
51
+
52
+ | Path | Description |
53
+ | --- | --- |
54
+ | `@haklex/rich-renderer-video` | Full exports (edit + static) |
55
+ | `@haklex/rich-renderer-video/static` | Static-only renderer |
56
+ | `@haklex/rich-renderer-video/style.css` | Stylesheet |
57
+
58
+ ## Part of Haklex
59
+
60
+ This package is part of the [Haklex](../../README.md) rich editor ecosystem.
61
+
36
62
  ## License
37
63
 
38
64
  MIT
@@ -1,3 +1,3 @@
1
- import { VideoRendererProps } from '@haklex/rich-editor';
1
+ import { VideoRendererProps } from '@haklex/rich-editor/renderers';
2
2
  export declare function VideoEditRenderer(props: VideoRendererProps): import("react/jsx-runtime").JSX.Element;
3
3
  //# sourceMappingURL=VideoEditRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VideoEditRenderer.d.ts","sourceRoot":"","sources":["../src/VideoEditRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAW7D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,2CAQ1D"}
1
+ {"version":3,"file":"VideoEditRenderer.d.ts","sourceRoot":"","sources":["../src/VideoEditRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAkBxE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,2CAQ1D"}
@@ -2,7 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Slider } from "@base-ui/react/slider";
3
3
  import { Play, Pause, VolumeX, Volume2, Loader2, Download, Minimize, Maximize } from "lucide-react";
4
4
  import { useRef, useState, useMemo, useCallback, useEffect } from "react";
5
- var semanticClassNames = { root: "rr-video-root", player: "rr-video-player", element: "rr-video-element", indicator: "rr-video-indicator", controls: "rr-video-controls", button: "rr-video-btn", progress: "rr-video-progress", progressControl: "rr-video-progress-control", progressTrack: "rr-video-progress-track", progressRange: "rr-video-progress-range", progressThumb: "rr-video-progress-thumb", spin: "rr-video-spin", editTrigger: "rr-video-edit-trigger", editPreview: "rr-video-edit-preview", editVideo: "rr-video-edit-video", editOverlay: "rr-video-edit-overlay", editPlaceholder: "rr-video-edit-placeholder", editPanel: "rr-video-edit-panel", editField: "rr-video-edit-field", editFieldIcon: "rr-video-edit-field-icon", editInput: "rr-video-edit-input", editActions: "rr-video-edit-actions", editActionButton: "rr-video-edit-action-btn", editActionButtonEnd: "rr-video-edit-action-btn--end" };
5
+ var semanticClassNames = { root: "rr-video-root", player: "rr-video-player", element: "rr-video-element", indicator: "rr-video-indicator", controls: "rr-video-controls", button: "rr-video-btn", progress: "rr-video-progress", progressControl: "rr-video-progress-control", progressTrack: "rr-video-progress-track", progressRange: "rr-video-progress-range", progressThumb: "rr-video-progress-thumb", spin: "rr-video-spin", editTrigger: "rr-video-edit-trigger", editPreview: "rr-video-edit-preview", editVideo: "rr-video-edit-video", editOverlay: "rr-video-edit-overlay", editPlaceholder: "rr-video-edit-placeholder", editPanel: "rr-video-edit-panel", editField: "rr-video-edit-field", editFieldIcon: "rr-video-edit-field-icon", editInput: "rr-video-edit-input" };
6
6
  var root = "_1x2h1ol0";
7
7
  var player = "_1x2h1ol1";
8
8
  var element = "_1x2h1ol2";
@@ -24,21 +24,12 @@ var editPanel = "_1x2h1olj";
24
24
  var editField = "_1x2h1olk";
25
25
  var editFieldIcon = "_1x2h1oll";
26
26
  var editInput = "_1x2h1olm";
27
- var editActions = "_1x2h1oln";
28
- var editActionButton = "_1x2h1olo";
29
- var editActionButtonEnd = "_1x2h1olp";
30
27
  const PlayIcon = ({ size = 20 }) => /* @__PURE__ */ jsx(Play, { size });
31
28
  const PauseIcon = ({ size = 20 }) => /* @__PURE__ */ jsx(Pause, { size });
32
29
  const VolumeIcon = () => /* @__PURE__ */ jsx(Volume2, { size: 20 });
33
30
  const VolumeMuteIcon = () => /* @__PURE__ */ jsx(VolumeX, { size: 20 });
34
31
  const DownloadIcon = () => /* @__PURE__ */ jsx(Download, { size: 20 });
35
- const LoadingIcon = () => /* @__PURE__ */ jsx(
36
- Loader2,
37
- {
38
- size: 20,
39
- className: `${spin} ${semanticClassNames.spin}`
40
- }
41
- );
32
+ const LoadingIcon = () => /* @__PURE__ */ jsx(Loader2, { className: `${spin} ${semanticClassNames.spin}`, size: 20 });
42
33
  const FullscreenIcon = () => /* @__PURE__ */ jsx(Maximize, { size: 20 });
43
34
  const ExitFullscreenIcon = () => /* @__PURE__ */ jsx(Minimize, { size: 20 });
44
35
  const VideoRenderer = ({
@@ -190,12 +181,12 @@ const VideoRenderer = ({
190
181
  /* @__PURE__ */ jsx(
191
182
  "video",
192
183
  {
193
- ref: videoRef,
184
+ playsInline: true,
194
185
  className: `${element} ${semanticClassNames.element}`,
195
- src,
196
186
  poster,
197
187
  preload: "metadata",
198
- playsInline: true,
188
+ ref: videoRef,
189
+ src,
199
190
  onClick: togglePlay,
200
191
  onDoubleClick: toggleFullscreen
201
192
  }
@@ -203,8 +194,8 @@ const VideoRenderer = ({
203
194
  indicator$1 && /* @__PURE__ */ jsx(
204
195
  "span",
205
196
  {
206
- className: `${indicator} ${semanticClassNames.indicator}`,
207
197
  "aria-hidden": true,
198
+ className: `${indicator} ${semanticClassNames.indicator}`,
208
199
  children: indicator$1.type === "play" ? /* @__PURE__ */ jsx(PlayIcon, { size: 32 }) : /* @__PURE__ */ jsx(PauseIcon, { size: 32 })
209
200
  },
210
201
  indicator$1.key
@@ -218,9 +209,9 @@ const VideoRenderer = ({
218
209
  /* @__PURE__ */ jsx(
219
210
  "button",
220
211
  {
221
- type: "button",
222
- className: `${button} ${semanticClassNames.button}`,
223
212
  "aria-label": playing ? "Pause" : "Play",
213
+ className: `${button} ${semanticClassNames.button}`,
214
+ type: "button",
224
215
  onClick: togglePlay,
225
216
  children: playing ? /* @__PURE__ */ jsx(PauseIcon, {}) : /* @__PURE__ */ jsx(PlayIcon, {})
226
217
  }
@@ -229,8 +220,8 @@ const VideoRenderer = ({
229
220
  Slider.Root,
230
221
  {
231
222
  className: `${progress} ${semanticClassNames.progress}`,
232
- min: 0,
233
223
  max: duration || 0,
224
+ min: 0,
234
225
  step: 0.01,
235
226
  value: timelineValue,
236
227
  onValueChange: (value) => {
@@ -266,8 +257,8 @@ const VideoRenderer = ({
266
257
  /* @__PURE__ */ jsx(
267
258
  Slider.Thumb,
268
259
  {
269
- className: `${progressThumb} ${semanticClassNames.progressThumb}`,
270
- "aria-label": "Playback progress"
260
+ "aria-label": "Playback progress",
261
+ className: `${progressThumb} ${semanticClassNames.progressThumb}`
271
262
  }
272
263
  )
273
264
  ]
@@ -280,9 +271,9 @@ const VideoRenderer = ({
280
271
  /* @__PURE__ */ jsx(
281
272
  "button",
282
273
  {
283
- type: "button",
284
- className: `${button} ${semanticClassNames.button}`,
285
274
  "aria-label": muted ? "Unmute" : "Mute",
275
+ className: `${button} ${semanticClassNames.button}`,
276
+ type: "button",
286
277
  onClick: toggleMute,
287
278
  children: muted ? /* @__PURE__ */ jsx(VolumeMuteIcon, {}) : /* @__PURE__ */ jsx(VolumeIcon, {})
288
279
  }
@@ -290,9 +281,9 @@ const VideoRenderer = ({
290
281
  /* @__PURE__ */ jsx(
291
282
  "button",
292
283
  {
293
- type: "button",
294
- className: `${button} ${semanticClassNames.button}`,
295
284
  "aria-label": "Download",
285
+ className: `${button} ${semanticClassNames.button}`,
286
+ type: "button",
296
287
  onClick: downloadVideo,
297
288
  children: isDownloading ? /* @__PURE__ */ jsx(LoadingIcon, {}) : /* @__PURE__ */ jsx(DownloadIcon, {})
298
289
  }
@@ -300,9 +291,9 @@ const VideoRenderer = ({
300
291
  /* @__PURE__ */ jsx(
301
292
  "button",
302
293
  {
303
- type: "button",
304
- className: `${button} ${semanticClassNames.button}`,
305
294
  "aria-label": isFullscreen ? "Exit fullscreen" : "Fullscreen",
295
+ className: `${button} ${semanticClassNames.button}`,
296
+ type: "button",
306
297
  onClick: toggleFullscreen,
307
298
  children: isFullscreen ? /* @__PURE__ */ jsx(ExitFullscreenIcon, {}) : /* @__PURE__ */ jsx(FullscreenIcon, {})
308
299
  }
@@ -325,9 +316,6 @@ export {
325
316
  editField as g,
326
317
  editFieldIcon as h,
327
318
  editInput as i,
328
- editActions as j,
329
- editActionButton as k,
330
- editActionButtonEnd as l,
331
319
  root as r,
332
320
  semanticClassNames as s
333
321
  };
@@ -1,4 +1,4 @@
1
- import { VideoRendererProps } from '@haklex/rich-editor';
1
+ import { VideoRendererProps } from '@haklex/rich-editor/renderers';
2
2
  import { ComponentType } from 'react';
3
3
  export declare const VideoRenderer: ComponentType<VideoRendererProps>;
4
4
  //# sourceMappingURL=VideoRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VideoRenderer.d.ts","sourceRoot":"","sources":["../src/VideoRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAW7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAmB1C,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,kBAAkB,CA6R3D,CAAA"}
1
+ {"version":3,"file":"VideoRenderer.d.ts","sourceRoot":"","sources":["../src/VideoRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAgB3C,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,kBAAkB,CAyR3D,CAAC"}
package/dist/index.mjs CHANGED
@@ -1,11 +1,12 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useRendererMode } from "@haklex/rich-editor";
3
- import { Popover, PopoverTrigger, PopoverPanel } from "@haklex/rich-editor-ui";
3
+ import { Popover, PopoverTrigger, PopoverPanel, ActionBar, ActionButton } from "@haklex/rich-editor-ui";
4
4
  import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
5
5
  import { $getNearestNodeFromDOMNode } from "lexical";
6
6
  import { Video, ImageIcon, ExternalLink, Trash2 } from "lucide-react";
7
7
  import { useRef, useState, useEffect, useCallback } from "react";
8
- import { V as VideoRenderer, r as root, s as semanticClassNames, e as editPreview, a as editVideo, b as editOverlay, c as editPlaceholder, d as editTrigger, f as editPanel, g as editField, h as editFieldIcon, i as editInput, j as editActions, k as editActionButton, l as editActionButtonEnd } from "./VideoRenderer-B3RM54FU.js";
8
+ import { V as VideoRenderer, r as root, s as semanticClassNames, e as editPreview, a as editVideo, b as editOverlay, c as editPlaceholder, d as editTrigger, f as editPanel, g as editField, h as editFieldIcon, i as editInput } from "./VideoRenderer-1dPzqoJZ.js";
9
+ const UNSAFE_VIDEO_URL_RE = /^(?:javascript\s*:|vbscript\s*:|data\s*:(?!video\/))/i;
9
10
  function VideoEditRenderer(props) {
10
11
  const mode = useRendererMode();
11
12
  if (mode !== "editor") {
@@ -13,12 +14,7 @@ function VideoEditRenderer(props) {
13
14
  }
14
15
  return /* @__PURE__ */ jsx(VideoEditRendererInner, { ...props });
15
16
  }
16
- function VideoEditRendererInner({
17
- src,
18
- poster,
19
- width,
20
- height
21
- }) {
17
+ function VideoEditRendererInner({ src, poster, width, height }) {
22
18
  const [editor] = useLexicalComposerContext();
23
19
  const editable = editor.isEditable();
24
20
  const wrapperRef = useRef(null);
@@ -41,8 +37,7 @@ function VideoEditRendererInner({
41
37
  const commitChanges = useCallback(() => {
42
38
  const trimmedSrc = editSrc.trim();
43
39
  if (!trimmedSrc) return;
44
- if (/^(?:javascript\s*:|vbscript\s*:|data\s*:(?!video\/))/i.test(trimmedSrc))
45
- return;
40
+ if (UNSAFE_VIDEO_URL_RE.test(trimmedSrc)) return;
46
41
  if (!wrapperRef.current) return;
47
42
  editor.update(() => {
48
43
  const node = $getNearestNodeFromDOMNode(wrapperRef.current);
@@ -79,7 +74,7 @@ function VideoEditRendererInner({
79
74
  [commitChanges, src, poster]
80
75
  );
81
76
  if (!editable) {
82
- return /* @__PURE__ */ jsx(VideoRenderer, { src, poster, width, height });
77
+ return /* @__PURE__ */ jsx(VideoRenderer, { height, poster, src, width });
83
78
  }
84
79
  const aspectRatio = width && height && width > 0 && height > 0 ? `${width} / ${height}` : "16 / 9";
85
80
  return /* @__PURE__ */ jsxs(
@@ -101,148 +96,96 @@ function VideoEditRendererInner({
101
96
  render: /* @__PURE__ */ jsx(
102
97
  "div",
103
98
  {
104
- ref: wrapperRef,
105
- className: `${editTrigger} ${semanticClassNames.editTrigger}`
99
+ className: `${editTrigger} ${semanticClassNames.editTrigger}`,
100
+ ref: wrapperRef
106
101
  }
107
102
  ),
108
- children: src ? /* @__PURE__ */ jsx(
109
- "figure",
110
- {
111
- className: `${root} ${semanticClassNames.root}`,
112
- children: /* @__PURE__ */ jsxs(
113
- "div",
114
- {
115
- className: `${editPreview} ${semanticClassNames.editPreview}`,
116
- style: {
117
- aspectRatio,
118
- backgroundImage: poster ? `url(${poster})` : void 0
119
- },
120
- children: [
121
- /* @__PURE__ */ jsx(
122
- "video",
123
- {
124
- className: `${editVideo} ${semanticClassNames.editVideo}`,
125
- src,
126
- poster,
127
- preload: "metadata"
128
- }
129
- ),
130
- /* @__PURE__ */ jsx(
131
- "span",
132
- {
133
- className: `${editOverlay} ${semanticClassNames.editOverlay}`,
134
- children: /* @__PURE__ */ jsx(Video, { size: 32 })
135
- }
136
- )
137
- ]
138
- }
139
- )
140
- }
141
- ) : /* @__PURE__ */ jsxs(
103
+ children: src ? /* @__PURE__ */ jsx("figure", { className: `${root} ${semanticClassNames.root}`, children: /* @__PURE__ */ jsxs(
142
104
  "div",
143
105
  {
144
- className: `${editPlaceholder} ${semanticClassNames.editPlaceholder}`,
106
+ className: `${editPreview} ${semanticClassNames.editPreview}`,
107
+ style: {
108
+ aspectRatio,
109
+ backgroundImage: poster ? `url(${poster})` : void 0
110
+ },
145
111
  children: [
146
- /* @__PURE__ */ jsx(Video, { size: 24 }),
147
- /* @__PURE__ */ jsx("span", { children: "Click to add video" })
112
+ /* @__PURE__ */ jsx(
113
+ "video",
114
+ {
115
+ className: `${editVideo} ${semanticClassNames.editVideo}`,
116
+ poster,
117
+ preload: "metadata",
118
+ src
119
+ }
120
+ ),
121
+ /* @__PURE__ */ jsx("span", { className: `${editOverlay} ${semanticClassNames.editOverlay}`, children: /* @__PURE__ */ jsx(Video, { size: 32 }) })
148
122
  ]
149
123
  }
150
- )
124
+ ) }) : /* @__PURE__ */ jsxs("div", { className: `${editPlaceholder} ${semanticClassNames.editPlaceholder}`, children: [
125
+ /* @__PURE__ */ jsx(Video, { size: 24 }),
126
+ /* @__PURE__ */ jsx("span", { children: "Click to add video" })
127
+ ] })
151
128
  }
152
129
  ),
153
130
  /* @__PURE__ */ jsxs(
154
131
  PopoverPanel,
155
132
  {
133
+ className: `${editPanel} ${semanticClassNames.editPanel}`,
156
134
  side: "bottom",
157
135
  sideOffset: 8,
158
- className: `${editPanel} ${semanticClassNames.editPanel}`,
159
136
  children: [
160
- /* @__PURE__ */ jsxs(
161
- "div",
162
- {
163
- className: `${editField} ${semanticClassNames.editField}`,
164
- children: [
165
- /* @__PURE__ */ jsx(
166
- Video,
167
- {
168
- className: `${editFieldIcon} ${semanticClassNames.editFieldIcon}`,
169
- size: 14
170
- }
171
- ),
172
- /* @__PURE__ */ jsx(
173
- "input",
174
- {
175
- ref: srcInputRef,
176
- className: `${editInput} ${semanticClassNames.editInput}`,
177
- type: "url",
178
- value: editSrc,
179
- onChange: (e) => setEditSrc(e.target.value),
180
- onKeyDown: handleKeyDown,
181
- placeholder: "Video URL"
182
- }
183
- )
184
- ]
185
- }
186
- ),
187
- /* @__PURE__ */ jsxs(
188
- "div",
189
- {
190
- className: `${editField} ${semanticClassNames.editField}`,
191
- children: [
192
- /* @__PURE__ */ jsx(
193
- ImageIcon,
194
- {
195
- className: `${editFieldIcon} ${semanticClassNames.editFieldIcon}`,
196
- size: 14
197
- }
198
- ),
199
- /* @__PURE__ */ jsx(
200
- "input",
201
- {
202
- className: `${editInput} ${semanticClassNames.editInput}`,
203
- type: "url",
204
- value: editPoster,
205
- onChange: (e) => setEditPoster(e.target.value),
206
- onBlur: commitChanges,
207
- onKeyDown: handleKeyDown,
208
- placeholder: "Poster URL (optional)"
209
- }
210
- )
211
- ]
212
- }
213
- ),
214
- /* @__PURE__ */ jsxs(
215
- "div",
216
- {
217
- className: `${editActions} ${semanticClassNames.editActions}`,
218
- children: [
219
- /* @__PURE__ */ jsxs(
220
- "button",
221
- {
222
- className: `${editActionButton} ${semanticClassNames.editActionButton}`,
223
- type: "button",
224
- onClick: handleOpen,
225
- children: [
226
- /* @__PURE__ */ jsx(ExternalLink, { size: 14 }),
227
- "Open"
228
- ]
229
- }
230
- ),
231
- /* @__PURE__ */ jsxs(
232
- "button",
233
- {
234
- className: `${editActionButton} ${semanticClassNames.editActionButton} ${editActionButtonEnd} ${semanticClassNames.editActionButtonEnd}`,
235
- type: "button",
236
- onClick: handleDelete,
237
- children: [
238
- /* @__PURE__ */ jsx(Trash2, { size: 14 }),
239
- "Remove"
240
- ]
241
- }
242
- )
243
- ]
244
- }
245
- )
137
+ /* @__PURE__ */ jsxs("div", { className: `${editField} ${semanticClassNames.editField}`, children: [
138
+ /* @__PURE__ */ jsx(
139
+ Video,
140
+ {
141
+ className: `${editFieldIcon} ${semanticClassNames.editFieldIcon}`,
142
+ size: 14
143
+ }
144
+ ),
145
+ /* @__PURE__ */ jsx(
146
+ "input",
147
+ {
148
+ className: `${editInput} ${semanticClassNames.editInput}`,
149
+ placeholder: "Video URL",
150
+ ref: srcInputRef,
151
+ type: "url",
152
+ value: editSrc,
153
+ onChange: (e) => setEditSrc(e.target.value),
154
+ onKeyDown: handleKeyDown
155
+ }
156
+ )
157
+ ] }),
158
+ /* @__PURE__ */ jsxs("div", { className: `${editField} ${semanticClassNames.editField}`, children: [
159
+ /* @__PURE__ */ jsx(
160
+ ImageIcon,
161
+ {
162
+ className: `${editFieldIcon} ${semanticClassNames.editFieldIcon}`,
163
+ size: 14
164
+ }
165
+ ),
166
+ /* @__PURE__ */ jsx(
167
+ "input",
168
+ {
169
+ className: `${editInput} ${semanticClassNames.editInput}`,
170
+ placeholder: "Poster URL (optional)",
171
+ type: "url",
172
+ value: editPoster,
173
+ onBlur: commitChanges,
174
+ onChange: (e) => setEditPoster(e.target.value),
175
+ onKeyDown: handleKeyDown
176
+ }
177
+ )
178
+ ] }),
179
+ /* @__PURE__ */ jsxs(ActionBar, { children: [
180
+ /* @__PURE__ */ jsxs(ActionButton, { onClick: handleOpen, children: [
181
+ /* @__PURE__ */ jsx(ExternalLink, { size: 14 }),
182
+ "Open"
183
+ ] }),
184
+ /* @__PURE__ */ jsxs(ActionButton, { danger: true, onClick: handleDelete, children: [
185
+ /* @__PURE__ */ jsx(Trash2, { size: 14 }),
186
+ "Remove"
187
+ ] })
188
+ ] })
246
189
  ]
247
190
  }
248
191
  )
@@ -1 +1 @@
1
- :root{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}:root.dark{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-fill: #2a2a2f;--rc-fill-secondary: #222226;--rc-fill-tertiary: #1b1b1f;--rc-fill-quaternary: #131316;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._1ju0cb20{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._1ju0cb21{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.8;--rc-line-height-tight: 1.4;--rc-font-family: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._1ju0cb22{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #a1a1aa;--rc-quote-bg: #fafafa;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: none;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 2px;--rc-space-sm: 4px;--rc-space-md: 10px;--rc-space-lg: 16px;--rc-space-xl: 20px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 14px;--rc-font-size-small: 12px;--rc-line-height: 1.5;--rc-line-height-tight: 1.3;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 3px;--rc-radius-md: 6px;--rc-radius-lg: 8px}.dark ._1ju0cb20,[data-theme=dark] ._1ju0cb20,.dark._1ju0cb20,[data-theme=dark]._1ju0cb20,.dark ._1ju0cb21,[data-theme=dark] ._1ju0cb21,.dark._1ju0cb21,[data-theme=dark]._1ju0cb21,.dark ._1ju0cb22,[data-theme=dark] ._1ju0cb22,.dark._1ju0cb22,[data-theme=dark]._1ju0cb22{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-fill: #2a2a2f;--rc-fill-secondary: #222226;--rc-fill-tertiary: #1b1b1f;--rc-fill-quaternary: #131316;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4)}@keyframes _1x2h1ol3{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.3)}}@keyframes _1x2h1olc{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._1x2h1ol0{margin:1.25rem 0}._1x2h1ol1{position:relative;width:100%;background:#000;border-radius:.75rem;overflow:hidden}._1x2h1ol2{width:100%;height:100%;display:block;object-fit:contain;background:#000;cursor:pointer}._1x2h1ol4{position:absolute;inset:0;margin:auto;width:5rem;height:5rem;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:#000000b3;color:#fff;pointer-events:none;animation:_1x2h1ol3 .5s ease forwards}._1x2h1ol5{position:absolute;left:2rem;right:2rem;bottom:.5rem;height:2.5rem;border-radius:999px;border:1px solid color-mix(in srgb,var(--rc-border) 20%,transparent);background:color-mix(in srgb,var(--rc-bg-secondary) 90%,transparent);backdrop-filter:blur(24px) saturate(180%);color:var(--rc-text);display:flex;align-items:center;gap:.75rem;padding:0 1rem;max-width:80vw;margin:0 auto;opacity:0;transform:translateY(4px);transition:opacity .2s ease,transform .2s ease}._1x2h1ol1:hover ._1x2h1ol5,._1x2h1ol1:focus-within ._1x2h1ol5{opacity:1;transform:translateY(0)}._1x2h1ol6{appearance:none;border:none;background:none;color:inherit;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:.125rem;line-height:1;flex-shrink:0;transition:transform .15s ease}._1x2h1ol6:hover{transform:scale(1.1)}._1x2h1ol6:active{transform:scale(.93)}._1x2h1ol6:focus-visible{outline:2px solid currentColor;outline-offset:2px;border-radius:4px}._1x2h1ol6:disabled{opacity:.5;pointer-events:none}._1x2h1ol7{flex:1;height:100%}._1x2h1ol8{position:relative;display:flex;align-items:center;width:100%;height:100%;touch-action:none;user-select:none}._1x2h1ol9{position:relative;flex:1;height:.25rem;border-radius:999px;background:var(--rc-bg)}._1x2h1ola{position:absolute;height:100%;border-radius:999px;background:color-mix(in srgb,var(--rc-text-secondary) 40%,transparent)}._1x2h1olb{display:block;height:.75rem;width:3px;border-radius:1px;border:none;background:var(--rc-text-secondary)}._1x2h1old{animation:_1x2h1olc .8s linear infinite}._1x2h1ole{display:block;cursor:pointer}._1x2h1olf{position:relative;width:100%;border-radius:.75rem;overflow:hidden;background:#000;background-size:cover;background-position:center;cursor:pointer}._1x2h1olg{width:100%;height:100%;display:block;object-fit:contain;pointer-events:none}._1x2h1olh{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#00000059;color:#fff;transition:background .2s}._1x2h1ole:hover ._1x2h1olh{background:#00000080}._1x2h1oli{display:flex;align-items:center;justify-content:center;gap:8px;padding:2rem;border:2px dashed var(--rc-border);border-radius:var(--rc-radius-md);color:var(--rc-text-secondary);font-size:var(--rc-font-size-md);cursor:pointer;transition:border-color .2s,color .2s}._1x2h1oli:hover{border-color:var(--rc-accent);color:var(--rc-text)}._1x2h1olj{display:flex;flex-direction:column;gap:8px;width:340px;padding:12px;font-family:var(--rc-font-family-sans)}._1x2h1olk{display:flex;align-items:center;gap:8px;padding:6px 10px;background-color:var(--rc-bg-secondary);border-radius:6px;min-width:0}._1x2h1oll{flex-shrink:0;color:var(--rc-text-secondary)}._1x2h1olm{flex:1;appearance:none;border:none;background-color:transparent;color:inherit;font-size:var(--rc-font-size-sm);padding:0;outline:none;min-width:0}._1x2h1olm::placeholder{color:var(--rc-text-secondary)}._1x2h1oln{display:flex;align-items:center;gap:4px}._1x2h1olo{display:inline-flex;align-items:center;gap:6px;appearance:none;border:none;background:none;color:inherit;font-size:var(--rc-font-size-sm);font-weight:500;cursor:pointer;padding:4px 8px;border-radius:4px;transition:color .15s ease,background-color .15s ease;white-space:nowrap}._1x2h1olo:hover{background-color:var(--rc-fill-secondary)}._1x2h1olp{margin-left:auto}@media(max-width:768px){._1x2h1ol5{left:.75rem;right:.75rem;opacity:1;transform:none;gap:.5rem;padding:0 .75rem}}
1
+ :root{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}:root.dark{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-fill: #2a2a2f;--rc-fill-secondary: #222226;--rc-fill-tertiary: #1b1b1f;--rc-fill-quaternary: #131316;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._1ju0cb20{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._1ju0cb21{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.8;--rc-line-height-tight: 1.4;--rc-font-family: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._1ju0cb22{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #a1a1aa;--rc-quote-bg: #fafafa;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: none;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 2px;--rc-space-sm: 4px;--rc-space-md: 10px;--rc-space-lg: 16px;--rc-space-xl: 20px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 14px;--rc-font-size-small: 12px;--rc-line-height: 1.5;--rc-line-height-tight: 1.3;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 3px;--rc-radius-md: 6px;--rc-radius-lg: 8px}.dark ._1ju0cb20,[data-theme=dark] ._1ju0cb20,.dark._1ju0cb20,[data-theme=dark]._1ju0cb20,.dark ._1ju0cb21,[data-theme=dark] ._1ju0cb21,.dark._1ju0cb21,[data-theme=dark]._1ju0cb21,.dark ._1ju0cb22,[data-theme=dark] ._1ju0cb22,.dark._1ju0cb22,[data-theme=dark]._1ju0cb22{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-fill: #2a2a2f;--rc-fill-secondary: #222226;--rc-fill-tertiary: #1b1b1f;--rc-fill-quaternary: #131316;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4)}@keyframes _1x2h1ol3{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.3)}}@keyframes _1x2h1olc{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._1x2h1ol0{margin:1.25rem 0}._1x2h1ol1{position:relative;width:100%;background:#000;border-radius:.75rem;overflow:hidden}._1x2h1ol2{width:100%;height:100%;display:block;object-fit:contain;background:#000;cursor:pointer}._1x2h1ol4{position:absolute;inset:0;margin:auto;width:5rem;height:5rem;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:#000000b3;color:#fff;pointer-events:none;animation:_1x2h1ol3 .5s ease forwards}._1x2h1ol5{position:absolute;left:2rem;right:2rem;bottom:.5rem;height:2.5rem;border-radius:999px;border:1px solid color-mix(in srgb,var(--rc-border) 20%,transparent);background:color-mix(in srgb,var(--rc-bg-secondary) 90%,transparent);backdrop-filter:blur(24px) saturate(180%);color:var(--rc-text);display:flex;align-items:center;gap:.75rem;padding:0 1rem;max-width:80vw;margin:0 auto;opacity:0;transform:translateY(4px);transition:opacity .2s ease,transform .2s ease}._1x2h1ol1:hover ._1x2h1ol5,._1x2h1ol1:focus-within ._1x2h1ol5{opacity:1;transform:translateY(0)}._1x2h1ol6{appearance:none;border:none;background:none;color:inherit;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:.125rem;line-height:1;flex-shrink:0;transition:transform .15s ease}._1x2h1ol6:hover{transform:scale(1.1)}._1x2h1ol6:active{transform:scale(.93)}._1x2h1ol6:focus-visible{outline:2px solid currentColor;outline-offset:2px;border-radius:4px}._1x2h1ol6:disabled{opacity:.5;pointer-events:none}._1x2h1ol7{flex:1;height:100%}._1x2h1ol8{position:relative;display:flex;align-items:center;width:100%;height:100%;touch-action:none;user-select:none}._1x2h1ol9{position:relative;flex:1;height:.25rem;border-radius:999px;background:var(--rc-bg)}._1x2h1ola{position:absolute;height:100%;border-radius:999px;background:color-mix(in srgb,var(--rc-text-secondary) 40%,transparent)}._1x2h1olb{display:block;height:.75rem;width:3px;border-radius:1px;border:none;background:var(--rc-text-secondary)}._1x2h1old{animation:_1x2h1olc .8s linear infinite}._1x2h1ole{display:block;cursor:pointer}._1x2h1olf{position:relative;width:100%;border-radius:.75rem;overflow:hidden;background:#000;background-size:cover;background-position:center;cursor:pointer}._1x2h1olg{width:100%;height:100%;display:block;object-fit:contain;pointer-events:none}._1x2h1olh{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#00000059;color:#fff;transition:background .2s}._1x2h1ole:hover ._1x2h1olh{background:#00000080}._1x2h1oli{display:flex;align-items:center;justify-content:center;gap:8px;padding:2rem;border:2px dashed var(--rc-border);border-radius:var(--rc-radius-md);color:var(--rc-text-secondary);font-size:var(--rc-font-size-md);cursor:pointer;transition:border-color .2s,color .2s}._1x2h1oli:hover{border-color:var(--rc-accent);color:var(--rc-text)}._1x2h1olj{display:flex;flex-direction:column;gap:8px;width:340px;padding:12px;font-family:var(--rc-font-family-sans)}._1x2h1olk{display:flex;align-items:center;gap:8px;padding:6px 10px;background-color:var(--rc-bg-secondary);border-radius:6px;min-width:0}._1x2h1oll{flex-shrink:0;color:var(--rc-text-secondary)}._1x2h1olm{flex:1;appearance:none;border:none;background-color:transparent;color:inherit;font-size:var(--rc-font-size-sm);padding:0;outline:none;min-width:0}._1x2h1olm::placeholder{color:var(--rc-text-secondary)}@media(max-width:768px){._1x2h1ol5{left:.75rem;right:.75rem;opacity:1;transform:none;gap:.5rem;padding:0 .75rem}}
package/dist/static.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { V } from "./VideoRenderer-B3RM54FU.js";
1
+ import { V } from "./VideoRenderer-1dPzqoJZ.js";
2
2
  export {
3
3
  V as VideoRenderer
4
4
  };
@@ -20,9 +20,6 @@ export declare const semanticClassNames: {
20
20
  readonly editField: "rr-video-edit-field";
21
21
  readonly editFieldIcon: "rr-video-edit-field-icon";
22
22
  readonly editInput: "rr-video-edit-input";
23
- readonly editActions: "rr-video-edit-actions";
24
- readonly editActionButton: "rr-video-edit-action-btn";
25
- readonly editActionButtonEnd: "rr-video-edit-action-btn--end";
26
23
  };
27
24
  export declare const root: string;
28
25
  export declare const player: string;
@@ -45,7 +42,4 @@ export declare const editPanel: string;
45
42
  export declare const editField: string;
46
43
  export declare const editFieldIcon: string;
47
44
  export declare const editInput: string;
48
- export declare const editActions: string;
49
- export declare const editActionButton: string;
50
- export declare const editActionButtonEnd: string;
51
45
  //# sourceMappingURL=styles.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../src/styles.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;CAyBrB,CAAA;AAEV,eAAO,MAAM,IAAI,QAAiC,CAAA;AAElD,eAAO,MAAM,MAAM,QAMjB,CAAA;AAEF,eAAO,MAAM,OAAO,QAOlB,CAAA;AAOF,eAAO,MAAM,SAAS,QAcpB,CAAA;AAEF,eAAO,MAAM,QAAQ,QAoCnB,CAAA;AAEF,eAAO,MAAM,MAAM,QAuBjB,CAAA;AAEF,eAAO,MAAM,QAAQ,QAAqC,CAAA;AAE1D,eAAO,MAAM,eAAe,QAQ1B,CAAA;AAEF,eAAO,MAAM,aAAa,QAMxB,CAAA;AAEF,eAAO,MAAM,aAAa,QAKxB,CAAA;AAEF,eAAO,MAAM,aAAa,QAOxB,CAAA;AAOF,eAAO,MAAM,IAAI,QAEf,CAAA;AAEF,eAAO,MAAM,WAAW,QAGtB,CAAA;AAEF,eAAO,MAAM,WAAW,QAStB,CAAA;AAEF,eAAO,MAAM,SAAS,QAMpB,CAAA;AAEF,eAAO,MAAM,WAAW,QActB,CAAA;AAEF,eAAO,MAAM,eAAe,QAkB1B,CAAA;AAEF,eAAO,MAAM,SAAS,QAQpB,CAAA;AAEF,eAAO,MAAM,SAAS,QAQpB,CAAA;AAEF,eAAO,MAAM,aAAa,QAGxB,CAAA;AAEF,eAAO,MAAM,SAAS,QAepB,CAAA;AAEF,eAAO,MAAM,WAAW,QAItB,CAAA;AAEF,eAAO,MAAM,gBAAgB,QAoB3B,CAAA;AAEF,eAAO,MAAM,mBAAmB,QAAgC,CAAA"}
1
+ {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../src/styles.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;CAsBrB,CAAA;AAEV,eAAO,MAAM,IAAI,QAAiC,CAAA;AAElD,eAAO,MAAM,MAAM,QAMjB,CAAA;AAEF,eAAO,MAAM,OAAO,QAOlB,CAAA;AAOF,eAAO,MAAM,SAAS,QAcpB,CAAA;AAEF,eAAO,MAAM,QAAQ,QAoCnB,CAAA;AAEF,eAAO,MAAM,MAAM,QAuBjB,CAAA;AAEF,eAAO,MAAM,QAAQ,QAAqC,CAAA;AAE1D,eAAO,MAAM,eAAe,QAQ1B,CAAA;AAEF,eAAO,MAAM,aAAa,QAMxB,CAAA;AAEF,eAAO,MAAM,aAAa,QAKxB,CAAA;AAEF,eAAO,MAAM,aAAa,QAOxB,CAAA;AAOF,eAAO,MAAM,IAAI,QAEf,CAAA;AAEF,eAAO,MAAM,WAAW,QAGtB,CAAA;AAEF,eAAO,MAAM,WAAW,QAStB,CAAA;AAEF,eAAO,MAAM,SAAS,QAMpB,CAAA;AAEF,eAAO,MAAM,WAAW,QActB,CAAA;AAEF,eAAO,MAAM,eAAe,QAkB1B,CAAA;AAEF,eAAO,MAAM,SAAS,QAQpB,CAAA;AAEF,eAAO,MAAM,SAAS,QAQpB,CAAA;AAEF,eAAO,MAAM,aAAa,QAGxB,CAAA;AAEF,eAAO,MAAM,SAAS,QAepB,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@haklex/rich-renderer-video",
3
3
  "type": "module",
4
- "version": "0.0.65",
4
+ "version": "0.0.66",
5
5
  "description": "Video player renderer",
6
6
  "license": "MIT",
7
7
  "exports": {
@@ -28,9 +28,9 @@
28
28
  "dependencies": {
29
29
  "@base-ui/react": "^1.2.0",
30
30
  "lucide-react": "^0.577.0",
31
- "@haklex/rich-editor": "0.0.65",
32
- "@haklex/rich-style-token": "0.0.65",
33
- "@haklex/rich-editor-ui": "0.0.65"
31
+ "@haklex/rich-editor": "0.0.66",
32
+ "@haklex/rich-style-token": "0.0.66",
33
+ "@haklex/rich-editor-ui": "0.0.66"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@lexical/react": "^0.41.0",
@@ -48,6 +48,11 @@
48
48
  "publishConfig": {
49
49
  "access": "public"
50
50
  },
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "https://github.com/Innei/haklex.git",
54
+ "directory": "packages/rich-renderer-video"
55
+ },
51
56
  "scripts": {
52
57
  "build": "vite build",
53
58
  "dev:build": "vite build --watch"