@xiping/react-components 1.0.50 → 1.0.51
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/cjs/components/gradient-text/index.js +1 -1
- package/dist/cjs/components/message/Message.js +1 -1
- package/dist/cjs/components/subtitle-player/CurrentMode.d.ts +20 -0
- package/dist/cjs/components/subtitle-player/CurrentMode.js +2 -0
- package/dist/cjs/components/subtitle-player/LyricsMode.d.ts +26 -0
- package/dist/cjs/components/subtitle-player/LyricsMode.js +2 -0
- package/dist/cjs/components/subtitle-player/SubtitlePlayer.d.ts +3 -2
- package/dist/cjs/components/subtitle-player/SubtitlePlayer.js +1 -3
- package/dist/cjs/components/subtitle-player/utils.d.ts +28 -0
- package/dist/cjs/components/subtitle-player/utils.js +1 -0
- package/dist/cjs/components/text-animate/TextAnimate.js +1 -1
- package/dist/cjs/components/text-type/TextType.js +1 -1
- package/dist/cjs/components/txt-reader/TxtReader.js +1 -1
- package/dist/cjs/components/txt-reader/index.module.css.js +1 -1
- package/dist/cjs/components/variable-proximity/index.js +1 -1
- package/dist/cjs/components/video-subtitle-player/VideoSubtitlePlayer.js +1 -1
- package/dist/cjs/components/video-subtitle-player/useVideoSubtitleStore.js +1 -1
- package/dist/cjs/react-components.css +1 -1
- package/dist/es/components/gradient-text/index.js +8 -8
- package/dist/es/components/message/Message.js +72 -72
- package/dist/es/components/subtitle-player/CurrentMode.d.ts +20 -0
- package/dist/es/components/subtitle-player/CurrentMode.js +40 -0
- package/dist/es/components/subtitle-player/LyricsMode.d.ts +26 -0
- package/dist/es/components/subtitle-player/LyricsMode.js +67 -0
- package/dist/es/components/subtitle-player/SubtitlePlayer.d.ts +3 -2
- package/dist/es/components/subtitle-player/SubtitlePlayer.js +121 -238
- package/dist/es/components/subtitle-player/utils.d.ts +28 -0
- package/dist/es/components/subtitle-player/utils.js +72 -0
- package/dist/es/components/text-animate/TextAnimate.js +0 -1
- package/dist/es/components/text-type/TextType.js +31 -31
- package/dist/es/components/txt-reader/TxtReader.js +9 -9
- package/dist/es/components/txt-reader/index.module.css.js +7 -8
- package/dist/es/components/variable-proximity/index.js +8 -9
- package/dist/es/components/video-subtitle-player/VideoSubtitlePlayer.js +64 -64
- package/dist/es/components/video-subtitle-player/useVideoSubtitleStore.js +1 -1
- package/dist/es/react-components.css +1 -1
- package/package.json +13 -13
- package/dist/cjs/_virtual/_commonjsHelpers.js +0 -1
- package/dist/cjs/_virtual/delegate.js +0 -1
- package/dist/cjs/_virtual/download.js +0 -1
- package/dist/cjs/_virtual/download2.js +0 -1
- package/dist/cjs/_virtual/index.js +0 -1
- package/dist/cjs/_virtual/index2.js +0 -1
- package/dist/cjs/node_modules/.pnpm/delegate@3.2.0/node_modules/delegate/src/closest.js +0 -1
- package/dist/cjs/node_modules/.pnpm/delegate@3.2.0/node_modules/delegate/src/delegate.js +0 -1
- package/dist/cjs/node_modules/.pnpm/downloadjs@1.4.7/node_modules/downloadjs/download.js +0 -3
- package/dist/cjs/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/_virtual/_rollupPluginBabelHelpers.js +0 -2
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/constant.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/defaultConfig.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/error.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/events.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/index.umd.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/instManager.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/lang/en.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/lang/i18n.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/lang/zh-cn.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/mediaProxy.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/player.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/basePlugin.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/hooksDescriptor.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/plugin.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/pluginsManager.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/preset.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/resizeObserver.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/back.js +0 -5
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/download.js +0 -15
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/exitCssFull.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/exitFull.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/loading.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/pause.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/pipIcon.js +0 -5
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/pipIconExit.js +0 -8
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/play.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/playNext.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/replay.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/requestCssFull.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/requestFull.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/rotate.js +0 -12
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/seekicon.js +0 -7
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/volumeLarge.js +0 -5
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/volumeMuted.js +0 -5
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/volumeSmall.js +0 -5
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/common/iconPlugin.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/common/iconTools.js +0 -3
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/common/optionList.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/common/optionsIcon.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/common/thumbnail.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/controls/index.js +0 -9
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/cssFullScreen/index.js +0 -5
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/definition/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/download/index.js +0 -5
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/dynamicBg/index.js +0 -2
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/enter/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/error/index.js +0 -6
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/fpsDetect/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/fullscreen/backicon.js +0 -2
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/fullscreen/index.js +0 -5
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/gapJump/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/keyboard/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/loading/index.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/logger/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/miniScreen/index.js +0 -13
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/miniScreen/miniScreenIcon.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/mobile/index.js +0 -19
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/mobile/touch.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/pc/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/pip/index.js +0 -8
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/play/index.js +0 -5
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/playNext/index.js +0 -7
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/playbackRate/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/poster/index.js +0 -2
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/progress/index.js +0 -7
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/progress/innerList.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/progress/miniProgress.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/progressPreview/dotsApi.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/progressPreview/index.js +0 -11
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/prompt/index.js +0 -3
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/replay/index.js +0 -3
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/rotate/index.js +0 -6
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/screenShot/index.js +0 -6
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/start/index.js +0 -4
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/stats/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/testspeed/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/time/index.js +0 -6
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/time/timesegments.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/volume/index.js +0 -11
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/waitingTimeoutJump/index.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/presets/default.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/state.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/stateClassMap.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/database.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/debug.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/draggabilly.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/sniffer.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/util.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/xgplayerTimeRange.js +0 -1
- package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/version.js +0 -1
- package/dist/cjs/node_modules/.pnpm/zustand@5.0.9_@types_react@19.2.7_react@19.2.3_use-sync-external-store@1.6.0_react@19.2.3_/node_modules/zustand/esm/react.js +0 -1
- package/dist/cjs/node_modules/.pnpm/zustand@5.0.9_@types_react@19.2.7_react@19.2.3_use-sync-external-store@1.6.0_react@19.2.3_/node_modules/zustand/esm/vanilla.js +0 -1
- package/dist/es/_virtual/_commonjsHelpers.js +0 -6
- package/dist/es/_virtual/delegate.js +0 -7
- package/dist/es/_virtual/download.js +0 -7
- package/dist/es/_virtual/download2.js +0 -4
- package/dist/es/_virtual/index.js +0 -8
- package/dist/es/_virtual/index2.js +0 -4
- package/dist/es/node_modules/.pnpm/delegate@3.2.0/node_modules/delegate/src/closest.js +0 -21
- package/dist/es/node_modules/.pnpm/delegate@3.2.0/node_modules/delegate/src/delegate.js +0 -29
- package/dist/es/node_modules/.pnpm/downloadjs@1.4.7/node_modules/downloadjs/download.js +0 -77
- package/dist/es/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js +0 -111
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/_virtual/_rollupPluginBabelHelpers.js +0 -197
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/constant.js +0 -7
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/defaultConfig.js +0 -87
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/error.js +0 -64
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/events.js +0 -67
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/index.umd.js +0 -45
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/instManager.js +0 -101
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/lang/en.js +0 -79
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/lang/i18n.js +0 -75
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/lang/zh-cn.js +0 -79
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/mediaProxy.js +0 -466
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/player.js +0 -1240
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/basePlugin.js +0 -207
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/hooksDescriptor.js +0 -130
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/plugin.js +0 -366
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/pluginsManager.js +0 -204
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/preset.js +0 -14
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugin/resizeObserver.js +0 -81
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/back.js +0 -10
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/download.js +0 -20
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/exitCssFull.js +0 -9
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/exitFull.js +0 -9
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/loading.js +0 -9
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/pause.js +0 -9
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/pipIcon.js +0 -10
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/pipIconExit.js +0 -13
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/play.js +0 -9
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/playNext.js +0 -9
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/replay.js +0 -9
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/requestCssFull.js +0 -9
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/requestFull.js +0 -9
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/rotate.js +0 -17
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/seekicon.js +0 -12
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/volumeLarge.js +0 -10
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/volumeMuted.js +0 -10
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/assets/volumeSmall.js +0 -10
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/common/iconPlugin.js +0 -35
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/common/iconTools.js +0 -12
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/common/optionList.js +0 -79
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/common/optionsIcon.js +0 -193
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/common/thumbnail.js +0 -141
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/controls/index.js +0 -171
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/cssFullScreen/index.js +0 -105
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/definition/index.js +0 -110
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/download/index.js +0 -83
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/dynamicBg/index.js +0 -232
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/enter/index.js +0 -42
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/error/index.js +0 -68
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/fpsDetect/index.js +0 -116
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/fullscreen/backicon.js +0 -68
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/fullscreen/index.js +0 -150
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/gapJump/index.js +0 -96
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/keyboard/index.js +0 -299
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/loading/index.js +0 -46
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/logger/index.js +0 -171
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/miniScreen/index.js +0 -169
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/miniScreen/miniScreenIcon.js +0 -55
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/mobile/index.js +0 -448
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/mobile/touch.js +0 -138
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/pc/index.js +0 -122
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/pip/index.js +0 -216
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/play/index.js +0 -102
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/playNext/index.js +0 -78
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/playbackRate/index.js +0 -100
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/poster/index.js +0 -119
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/progress/index.js +0 -431
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/progress/innerList.js +0 -215
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/progress/miniProgress.js +0 -93
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/progressPreview/dotsApi.js +0 -175
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/progressPreview/index.js +0 -292
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/prompt/index.js +0 -86
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/replay/index.js +0 -92
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/rotate/index.js +0 -106
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/screenShot/index.js +0 -134
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/start/index.js +0 -222
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/stats/index.js +0 -152
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/testspeed/index.js +0 -134
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/time/index.js +0 -164
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/time/timesegments.js +0 -146
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/volume/index.js +0 -206
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/plugins/waitingTimeoutJump/index.js +0 -53
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/presets/default.js +0 -61
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/state.js +0 -13
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/stateClassMap.js +0 -34
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/database.js +0 -83
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/debug.js +0 -34
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/draggabilly.js +0 -271
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/sniffer.js +0 -111
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/util.js +0 -517
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/utils/xgplayerTimeRange.js +0 -25
- package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/es/version.js +0 -4
- package/dist/es/node_modules/.pnpm/zustand@5.0.9_@types_react@19.2.7_react@19.2.3_use-sync-external-store@1.6.0_react@19.2.3_/node_modules/zustand/esm/react.js +0 -19
- package/dist/es/node_modules/.pnpm/zustand@5.0.9_@types_react@19.2.7_react@19.2.3_use-sync-external-store@1.6.0_react@19.2.3_/node_modules/zustand/esm/vanilla.js +0 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime");;/* empty css */function a({children:i,className:n="",colors:r=["#40ffaa","#4079ff","#40ffaa","#4079ff","#40ffaa"],animationSpeed:s=8,showBorder:d=!1}){const t={backgroundImage:`linear-gradient(to right, ${r.join(", ")})`,animationDuration:`${s}s`};return e.jsxs("div",{className:`
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime");;/* empty css */function a({children:i,className:n="",colors:r=["#40ffaa","#4079ff","#40ffaa","#4079ff","#40ffaa"],animationSpeed:s=8,showBorder:d=!1}){const t={backgroundImage:`linear-gradient(to right, ${r.join(", ")})`,animationDuration:`${s}s`};return e.jsxs("div",{className:`xiping-gradient-text ${n}`,children:[d&&e.jsx("div",{className:"xiping-gradient-text__overlay",style:t}),e.jsx("div",{className:"xiping-gradient-text__content",style:t,children:i})]})}exports.GradientText=a;exports.default=a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),f=require("react"),r=require("react-markdown");;/* empty css */const C=({id:b,content:l,sender:i,timestamp:o,isThinking:d=!1,isLoading:L=!1,className:y="",style:M={},showTimestamp:c=!0,avatarUser:g,avatarAssistant:x,thinkingText:S="思考中...",customThinkingComponent:h,customUserMessageComponent:m,customAssistantMessageComponent:p,parseContent:V=!1,parsedContent:_,thinkContent:t,knowledgeSources:a})=>{const[n,u]=f.useState(!0),[q,j]=f.useState("idle");console.log(b,"id");const v=s=>s.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),B=async()=>{try{await navigator.clipboard.writeText(l),j("copied"),setTimeout(()=>j("idle"),2e3)}catch(s){console.error("复制失败:",s)}},k=()=>h||e.jsxs("div",{className:"xiping-message__thinking",children:[e.jsxs("div",{className:"xiping-message__thinking-dots",children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]}),e.jsx("span",{className:"xiping-message__thinking-text",children:S})]}),H=()=>e.jsx("div",{className:"xiping-message__loading",children:e.jsx("div",{className:"xiping-message__loading-spinner"})}),N=()=>!a||a.length===0?null:e.jsxs("div",{className:"xiping-message__knowledge-sources",children:[e.jsx("div",{className:"xiping-message__knowledge-sources-header",children:"知识来源:"}),e.jsx("ul",{className:"xiping-message__knowledge-sources-list",children:a.map((s,W)=>e.jsxs("li",{className:"xiping-message__knowledge-source-item",children:[s.url?e.jsx("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",children:s.title}):e.jsx("span",{children:s.title}),s.description&&e.jsx("div",{className:"xiping-message__knowledge-source-description",children:s.description})]},W))})]}),w=()=>i==="user"?null:e.jsxs("button",{className:"xiping-message__copy-button",onClick:B,"aria-label":"Copy message",title:"Copy message",children:[e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsx("path",{d:"M13.3333 6H7.33333C6.59695 6 6 6.59695 6 7.33333V13.3333C6 14.0697 6.59695 14.6667 7.33333 14.6667H13.3333C14.0697 14.6667 14.6667 14.0697 14.6667 13.3333V7.33333C14.6667 6.59695 14.0697 6 13.3333 6Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("path",{d:"M3.33333 10H2.66667C2.31305 10 1.97391 9.85953 1.72386 9.60948C1.47381 9.35943 1.33334 9.02029 1.33334 8.66667V2.66667C1.33334 2.31305 1.47381 1.97391 1.72386 1.72386C1.97391 1.47381 2.31305 1.33334 2.66667 1.33334H8.66667C9.02029 1.33334 9.35943 1.47381 9.60948 1.72386C9.85953 1.97391 10 2.31305 10 2.66667V3.33334",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),q==="copied"&&e.jsx("span",{className:"xiping-message__copy-tooltip",children:"Copied"})]});return i==="user"&&m?m:i==="assistant"&&p?p:e.jsxs("div",{className:`xiping-message ${i==="user"?"user":"assistant"} ${y}`,style:M,children:[i==="user"&&g||i==="assistant"&&x?e.jsx("div",{className:"xiping-message__avatar",children:i==="user"?g:x}):null,e.jsx("div",{className:"xiping-message__content",children:L?H():V&&i==="assistant"?e.jsxs(e.Fragment,{children:[t&&e.jsxs("div",{className:"xiping-message__think",children:[e.jsxs("div",{className:"xiping-message__think-header",children:["思考过程:",e.jsx("button",{className:"xiping-message__think-toggle",onClick:()=>u(!n),"aria-label":n?"隐藏思考过程":"显示思考过程",children:e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{transform:n?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.3s ease"},children:e.jsx("path",{d:"M2 4L6 8L10 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),e.jsx("div",{className:`xiping-message__think-content ${n?"visible":"hidden"}`,children:e.jsx(r,{children:t})})]}),d&&k(),_&&e.jsxs("div",{className:"xiping-message__text-container",children:[e.jsx("div",{className:"xiping-message__text",children:e.jsx(r,{children:_})}),w()]}),N(),c&&e.jsx("div",{className:"xiping-message__timestamp",children:v(o)})]}):e.jsxs(e.Fragment,{children:[t&&e.jsxs("div",{className:"xiping-message__think",children:[e.jsxs("div",{className:"xiping-message__think-header",children:["思考过程:",e.jsx("button",{className:"xiping-message__think-toggle",onClick:()=>u(!n),"aria-label":n?"隐藏思考过程":"显示思考过程",children:e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{transform:n?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.3s ease"},children:e.jsx("path",{d:"M2 4L6 8L10 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),e.jsx("div",{className:`xiping-message__think-content ${n?"visible":"hidden"}`,children:e.jsx(r,{children:t})})]}),e.jsxs("div",{className:"xiping-message__text-container",children:[e.jsx("div",{className:"xiping-message__text",children:e.jsx(r,{children:l})}),w()]}),d&&k(),N(),c&&e.jsx("div",{className:"xiping-message__timestamp",children:v(o)})]})})]})};exports.Message=C;exports.default=C;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { SubtitleEntry } from '@xiping/subtitle';
|
|
3
|
+
import { WordHoverHandlerFactory } from './utils.tsx';
|
|
4
|
+
export interface CurrentModeProps {
|
|
5
|
+
/** 当前字幕条目 */
|
|
6
|
+
currentEntries: Array<{
|
|
7
|
+
entry: SubtitleEntry | null;
|
|
8
|
+
label?: string;
|
|
9
|
+
}>;
|
|
10
|
+
/** 单词悬停处理器工厂函数 */
|
|
11
|
+
wordHoverFactory: (entry: SubtitleEntry, label?: string) => WordHoverHandlerFactory;
|
|
12
|
+
/** 是否启用单词悬停功能 */
|
|
13
|
+
enableWordHover: boolean;
|
|
14
|
+
/** 悬停覆盖层节点 */
|
|
15
|
+
overlayNode: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 当前模式组件:只显示当前时间对应的字幕
|
|
19
|
+
*/
|
|
20
|
+
export declare const CurrentMode: React.FC<CurrentModeProps>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),p=require("./utils.js"),x=({currentEntries:r,wordHoverFactory:d,enableWordHover:l,overlayNode:o})=>r.some(({entry:e})=>e!==null)?s.jsxs(s.Fragment,{children:[r.map(({entry:e,label:i},c)=>e?s.jsxs("div",{className:"xiping-subtitle-player__item","data-label":i||void 0,children:[i&&s.jsx("span",{className:"xiping-subtitle-player__label",children:i}),s.jsx("div",{className:"xiping-subtitle-player__text",children:(()=>{let n=0;return e.text.split(`
|
|
2
|
+
`).map((u,t)=>{if(!e.words||e.words.length===0)return s.jsx("div",{className:"xiping-subtitle-player__line",children:u},t);const a=p.renderTextWithWords(u,e.words,n,t,l?d(e,i):void 0);return n=a.nextWordIndex,s.jsx("div",{className:"xiping-subtitle-player__line",children:a.nodes},t)})})()})]},c):null),l&&s.jsx("div",{className:"xiping-subtitle-player__hover-layer",children:o})]}):null;exports.CurrentMode=x;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { SubtitleEntry } from '@xiping/subtitle';
|
|
3
|
+
import { WordHoverHandlerFactory } from './utils.tsx';
|
|
4
|
+
export interface LyricsModeProps {
|
|
5
|
+
/** 按时间分组的字幕条目 */
|
|
6
|
+
groupedEntriesByTime: Array<Array<{
|
|
7
|
+
entry: SubtitleEntry;
|
|
8
|
+
label?: string;
|
|
9
|
+
startTime: number;
|
|
10
|
+
endTime: number;
|
|
11
|
+
}>>;
|
|
12
|
+
/** 当前播放时间(秒数) */
|
|
13
|
+
currentTime: number;
|
|
14
|
+
/** 单词悬停处理器工厂函数 */
|
|
15
|
+
wordHoverFactory: (entry: SubtitleEntry, label?: string) => WordHoverHandlerFactory;
|
|
16
|
+
/** 是否启用单词悬停功能 */
|
|
17
|
+
enableWordHover: boolean;
|
|
18
|
+
/** 悬停覆盖层节点 */
|
|
19
|
+
overlayNode: React.ReactNode;
|
|
20
|
+
/** 容器引用,用于滚动 */
|
|
21
|
+
containerRef: React.RefObject<HTMLDivElement | null>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 歌词模式组件:显示全部字幕并高亮当前字幕
|
|
25
|
+
*/
|
|
26
|
+
export declare const LyricsMode: React.FC<LyricsModeProps>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),v=require("react"),q=require("clsx"),b=require("./utils.js"),w=({groupedEntriesByTime:j,currentTime:l,wordHoverFactory:y,enableWordHover:u,overlayNode:f,containerRef:n})=>{const c=v.useRef(null);return v.useEffect(()=>{if(c.current&&n.current){const i=n.current,r=c.current,o=r.offsetTop,a=i.clientHeight,e=r.clientHeight,s=o-a/2+e/2;i.scrollTo({top:s,behavior:"smooth"})}},[l,n]),t.jsxs(t.Fragment,{children:[j.map((i,r)=>{const o=i[0]?.startTime??0,a=b.secondsToTimeString(o);return t.jsx("div",{className:"xiping-subtitle-player__group",children:i.map(({entry:e,label:s,startTime:N,endTime:d},m)=>{const x=l>=N&&l<=d,S=l>d,T=m===0;let g=0;return t.jsxs("div",{ref:x?c:null,className:q("xiping-subtitle-player__item",{"xiping-subtitle-player__item--active":x,"xiping-subtitle-player__item--past":S}),"data-label":s||void 0,children:[T&&t.jsx("span",{className:"xiping-subtitle-player__time",children:a}),s&&t.jsx("span",{className:"xiping-subtitle-player__label",children:s}),t.jsx("div",{className:"xiping-subtitle-player__text",children:e.text.split(`
|
|
2
|
+
`).map((_,p)=>{if(!e.words||e.words.length===0)return t.jsx("div",{className:"xiping-subtitle-player__line",children:_},p);const h=b.renderTextWithWords(_,e.words,g,p,u?y(e,s):void 0);return g=h.nextWordIndex,t.jsx("div",{className:"xiping-subtitle-player__line",children:h.nodes},p)})})]},`${r}-${m}`)})},r)}),u&&t.jsx("div",{className:"xiping-subtitle-player__hover-layer",children:f})]})};exports.LyricsMode=w;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { SubtitleEntry, SubtitleLanguage } from '@xiping/subtitle';
|
|
3
|
-
export type SubtitleType =
|
|
3
|
+
export type SubtitleType = "srt" | "vtt";
|
|
4
4
|
export interface SubtitleData {
|
|
5
5
|
/** 字幕类型 */
|
|
6
6
|
type: SubtitleType;
|
|
@@ -11,7 +11,7 @@ export interface SubtitleData {
|
|
|
11
11
|
/** 字幕语言类型,用于分词,默认为中文 */
|
|
12
12
|
language?: SubtitleLanguage;
|
|
13
13
|
}
|
|
14
|
-
export type SubtitleDisplayMode =
|
|
14
|
+
export type SubtitleDisplayMode = "current" | "lyrics";
|
|
15
15
|
export interface SubtitlePlayerProps {
|
|
16
16
|
/** 字幕数据,可以是单个字幕或多个字幕(用于对照) */
|
|
17
17
|
subtitles: SubtitleData | SubtitleData[];
|
|
@@ -41,6 +41,7 @@ export interface HoverTarget {
|
|
|
41
41
|
entry: SubtitleEntry;
|
|
42
42
|
label?: string;
|
|
43
43
|
rect: DOMRect;
|
|
44
|
+
element: HTMLElement;
|
|
44
45
|
}
|
|
45
46
|
/**
|
|
46
47
|
* 字幕播放组件
|
|
@@ -1,3 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
2
|
-
`).map((o,S)=>{if(!s.words||s.words.length===0)return l.jsx("div",{className:"subtitle-player-line",children:o},S);const j=F(o,s.words,r,S,d||c?q(s,t):void 0);return r=j.nextWordIndex,l.jsx("div",{className:"subtitle-player-line",children:j.nodes},S)})})()})]},e):null),(d||c)&&l.jsx("div",{className:"subtitle-player-hover-layer",children:I})]}):null:l.jsxs("div",{ref:m,className:`subtitle-player subtitle-player--lyrics ${h}`,style:b,children:[W.map((n,s)=>{const t=n[0]?.startTime??0,e=_(t);return l.jsx("div",{className:"subtitle-player-group",children:n.map(({entry:r,label:o,startTime:S,endTime:j},V)=>{const A=i>=S&&i<=j,C=i>j,O=V===0;let L=0;return l.jsxs("div",{ref:A?N:null,className:`subtitle-player-item ${A?"subtitle-player-item--active":""} ${C?"subtitle-player-item--past":""}`,"data-label":o||void 0,children:[O&&l.jsx("span",{className:"subtitle-player-time",children:e}),o&&l.jsx("span",{className:"subtitle-player-label",children:o}),l.jsx("div",{className:"subtitle-player-text",children:r.text.split(`
|
|
3
|
-
`).map((k,$)=>{if(!r.words||r.words.length===0)return l.jsx("div",{className:"subtitle-player-line",children:k},$);const z=F(k,r.words,L,$,d||c?q(r,o):void 0);return L=z.nextWordIndex,l.jsx("div",{className:"subtitle-player-line",children:z.nodes},$)})})]},`${s}-${V}`)})},s)}),(d||c)&&l.jsx("div",{className:"subtitle-player-hover-layer",children:I})]})};exports.SubtitlePlayer=J;exports.default=J;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const h=require("react/jsx-runtime"),c=require("react"),l=require("../../packages/subtitle/lib/src/parser.js"),j=require("../../packages/subtitle/lib/src/json-converter.js"),_=require("clsx"),k=require("./CurrentMode.js"),A=require("./LyricsMode.js"),S=require("./utils.js");;/* empty css */const w=({subtitles:p,currentTime:d,mode:g="current",className:C="",style:P,onWordHoverChange:i,renderWordOverlay:T})=>{const u=c.useMemo(()=>Array.isArray(p)?p:[p],[p]),m=c.useRef(null),[a,M]=c.useState(null),[f,v]=c.useState([]);c.useEffect(()=>{let r=!0;async function o(){try{const t=await Promise.all(u.map(async e=>{try{const n=e.language||"zh",s=e.type==="srt"?await j.srtToJson(e.content,n):await j.vttToJson(e.content,n);return{entries:JSON.parse(s),label:e.label}}catch(n){return console.error("字幕解析失败:",n),{entries:e.type==="srt"?l.parseSRT(e.content):l.parseVTT(e.content),label:e.label}}}));r&&v(t)}catch(t){if(console.error("加载字幕失败:",t),r){const e=u.map(n=>{try{return{entries:n.type==="srt"?l.parseSRT(n.content):l.parseVTT(n.content),label:n.label}}catch(s){return console.error("字幕解析失败:",s),{entries:[],label:n.label}}});v(e)}}}return o(),()=>{r=!1}},[u]);const y=c.useMemo(()=>f.length>0?f:u.map(r=>{try{return{entries:r.type==="srt"?l.parseSRT(r.content):l.parseVTT(r.content),label:r.label}}catch(o){return console.error("字幕解析失败:",o),{entries:[],label:r.label}}}),[f,u]),L=c.useMemo(()=>y.map(({entries:r,label:o})=>({entry:S.getCurrentSubtitleEntry(r,d),label:o,entries:r})),[y,d]),N=c.useMemo(()=>{const r=[];y.forEach(({entries:e,label:n})=>{e.forEach(s=>{r.push({entry:s,label:n,startTime:S.timeStringToSeconds(s.startTime),endTime:S.timeStringToSeconds(s.endTime)})})}),r.sort((e,n)=>e.startTime-n.startTime);const o=[];let t=[];for(const e of r)if(t.length===0)t.push(e);else{const n=t[t.length-1];e.startTime<=n.endTime?t.push(e):(o.push(t),t=[e])}return t.length>0&&o.push(t),o},[y]),R=c.useCallback((r,o)=>{const t=r.currentTarget.getBoundingClientRect(),e=m.current?.getBoundingClientRect(),n=e!==void 0?new DOMRect(t.left-e.left,t.top-e.top,t.width,t.height):t,s={...o,rect:n,element:r.currentTarget};M(s),i?.(s)},[i]),b=c.useCallback(()=>{M(null),i?.(null)},[i]),x=c.useCallback((r,o)=>(t,e,n)=>({onMouseEnter:s=>R(s,{word:t,wordIndex:e,lineIndex:n,entry:r,label:o}),onMouseLeave:b}),[R,b]),q=T&&a?h.jsx("div",{className:"xiping-subtitle-player__hover-overlay",style:{left:a.rect.x+a.rect.width/2,top:a.rect.y+a.rect.height},children:T(a)}):null,E=!!(T||i);return h.jsxs("div",{ref:m,className:_("xiping-subtitle-player",g==="lyrics"?"xiping-subtitle-player--lyrics":"xiping-subtitle-player--current",C),style:P,children:[g==="current"&&h.jsx(k.CurrentMode,{currentEntries:L,wordHoverFactory:x,enableWordHover:E,overlayNode:q}),g==="lyrics"&&h.jsx(A.LyricsMode,{groupedEntriesByTime:N,currentTime:d,wordHoverFactory:x,enableWordHover:E,overlayNode:q,containerRef:m})]})};exports.SubtitlePlayer=w;exports.default=w;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { SubtitleEntry } from '@xiping/subtitle';
|
|
3
|
+
/**
|
|
4
|
+
* 将时间字符串(HH:MM:SS,mmm 或 HH:MM:SS.mmm)转换为秒数
|
|
5
|
+
*/
|
|
6
|
+
export declare function timeStringToSeconds(timeString: string): number;
|
|
7
|
+
/**
|
|
8
|
+
* 将秒数转换为时间字符串(MM:SS 或 HH:MM:SS)
|
|
9
|
+
*/
|
|
10
|
+
export declare function secondsToTimeString(seconds: number): string;
|
|
11
|
+
/**
|
|
12
|
+
* 根据当前时间获取应该显示的字幕条目
|
|
13
|
+
*/
|
|
14
|
+
export declare function getCurrentSubtitleEntry(entries: SubtitleEntry[], currentTime: number): SubtitleEntry | null;
|
|
15
|
+
/**
|
|
16
|
+
* 单词悬停处理器工厂函数类型
|
|
17
|
+
*/
|
|
18
|
+
export type WordHoverHandlerFactory = (word: string, wordIndex: number, lineIndex: number) => {
|
|
19
|
+
onMouseEnter: React.MouseEventHandler<HTMLSpanElement>;
|
|
20
|
+
onMouseLeave: React.MouseEventHandler<HTMLSpanElement>;
|
|
21
|
+
} | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* 将文本按照分词结果分割并渲染,并返回消耗到的分词下标
|
|
24
|
+
*/
|
|
25
|
+
export declare function renderTextWithWords(text: string, words: string[] | undefined, startWordIndex: number, lineIndex: number, createHoverHandlers?: WordHoverHandlerFactory): {
|
|
26
|
+
nodes: React.ReactNode;
|
|
27
|
+
nextWordIndex: number;
|
|
28
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react/jsx-runtime");function l(t){const n=t.replace(",",".").split(":");if(n.length!==3)return 0;const r=parseInt(n[0],10)||0,a=parseInt(n[1],10)||0,s=parseFloat(n[2])||0;return r*3600+a*60+s}function p(t){const e=Math.floor(t/3600),n=Math.floor(t%3600/60),r=Math.floor(t%60);return e>0?`${e.toString().padStart(2,"0")}:${n.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`:`${n.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`}function S(t,e){for(const n of t){const r=l(n.startTime),a=l(n.endTime);if(e>=r&&e<=a)return n}return null}function m(t,e,n,r,a){if(!e||e.length===0)return{nodes:t,nextWordIndex:n};const s=[];let i=0;for(let o=n;o<e.length;o++){const u=e[o],g=t.substring(i).indexOf(u);if(g===-1)return{nodes:s.length>0?s:t,nextWordIndex:o};const c=i+g;if(c>i){const h=t.substring(i,c);h&&s.push(d.jsx("span",{className:"xiping-subtitle-word-before",children:h},`before-${r}-${o}`))}const f=a?.(u,o,r);if(s.push(d.jsx("span",{className:"xiping-subtitle-word","data-word":u,onMouseEnter:f?.onMouseEnter,onMouseLeave:f?.onMouseLeave,children:u},`word-${r}-${o}`)),i=c+u.length,i>=t.length)return{nodes:s,nextWordIndex:o+1}}if(i<t.length){const o=t.substring(i);o&&s.push(d.jsx("span",{className:"xiping-subtitle-word-after",children:o},`after-${r}`))}return{nodes:s.length>0?s:t,nextWordIndex:e.length}}exports.getCurrentSubtitleEntry=S;exports.renderTextWithWords=m;exports.secondsToTimeString=p;exports.timeStringToSeconds=l;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),u=require("../../utils/utils.js"),s=require("motion/react"),c={text:.06,word:.05,character:.03,line:.06},i={hidden:{opacity:1},show:{opacity:1,transition:{staggerChildren:.05}},exit:{opacity:0,transition:{staggerChildren:.05,staggerDirection:-1}}},g={hidden:{opacity:0},show:{opacity:1},exit:{opacity:0}},o={fadeIn:{container:i,item:{hidden:{opacity:0,y:20},show:t=>({opacity:1,y:0,transition:{delay:t,duration:.3}}),exit:{opacity:0,y:20,transition:{duration:.3}}}},blurIn:{container:i,item:{hidden:{opacity:0,filter:"blur(10px)"},show:t=>({opacity:1,filter:"blur(0px)",transition:{delay:t*.1,duration:.3}}),exit:{opacity:0,filter:"blur(10px)",transition:{duration:.3}}}},blurInUp:{container:i,item:{hidden:{opacity:0,filter:"blur(10px)",y:20},show:t=>({opacity:1,filter:"blur(0px)",y:0,transition:{y:{duration:.3},opacity:{duration:.4},filter:{duration:.3}}}),exit:{opacity:0,filter:"blur(10px)",y:20,transition:{y:{duration:.3},opacity:{duration:.4},filter:{duration:.3}}}}},blurInDown:{container:i,item:{hidden:{opacity:0,filter:"blur(10px)",y:-20},show:t=>({opacity:1,filter:"blur(0px)",y:0,transition:{y:{duration:.3},opacity:{duration:.4},filter:{duration:.3}}})}},slideUp:{container:i,item:{hidden:{y:20,opacity:0},show:t=>({y:0,opacity:1,transition:{delay:t,duration:.3}}),exit:{y:-20,opacity:0,transition:{duration:.3}}}},slideDown:{container:i,item:{hidden:{y:-20,opacity:0},show:{y:0,opacity:1,transition:{duration:.3}},exit:{y:20,opacity:0,transition:{duration:.3}}}},slideLeft:{container:i,item:{hidden:{x:20,opacity:0},show:{x:0,opacity:1,transition:{duration:.3}},exit:{x:-20,opacity:0,transition:{duration:.3}}}},slideRight:{container:i,item:{hidden:{x:-20,opacity:0},show:{x:0,opacity:1,transition:{duration:.3}},exit:{x:20,opacity:0,transition:{duration:.3}}}},scaleUp:{container:i,item:{hidden:{scale:.5,opacity:0},show:{scale:1,opacity:1,transition:{duration:.3,scale:{type:"spring",damping:15,stiffness:300}}},exit:{scale:.5,opacity:0,transition:{duration:.3}}}},scaleDown:{container:i,item:{hidden:{scale:1.5,opacity:0},show:t=>({scale:1,opacity:1,transition:{delay:t,duration:.3,scale:{type:"spring",damping:15,stiffness:300}}}),exit:{scale:1.5,opacity:0,transition:{duration:.3}}}}};function b({children:t,delay:I=0,duration:k=.3,variants:v,className:h,segmentClassName:x,as:m="p",startOnView:d=!0,once:C=!1,by:n="word",animation:a="fadeIn",...w}){const f=s.motion.create(m),p=a?{container:{...o[a].container,show:{...o[a].container.show,transition:{staggerChildren:c[n]}},exit:{...o[a].container.exit,transition:{staggerChildren:c[n],staggerDirection:-1}}},item:o[a].item}:{container:i,item:g};let e=[];switch(n){case"word":e=t.split(/(\s+)/);break;case"character":e=t.split("");break;case"line":e=t.split(`
|
|
2
|
-
`);break;
|
|
2
|
+
`);break;default:e=[t];break}return r.jsx(s.AnimatePresence,{mode:"popLayout",children:r.jsx(f,{variants:p.container,initial:"hidden",whileInView:d?"show":void 0,animate:d?void 0:"show",exit:"exit",className:u.cn("whitespace-pre-wrap",h),...w,children:e.map((l,y)=>r.jsx(s.motion.span,{variants:p.item,custom:y*c[n],className:u.cn(n==="line"?"block":"inline-block whitespace-pre",x),children:l},`${n}-${l}-${y}`))})})}exports.TextAnimate=b;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("react/jsx-runtime"),e=require("react"),v=require("gsap");;/* empty css */const L=({text:o,as:C="div",typingSpeed:l=50,initialDelay:
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("react/jsx-runtime"),e=require("react"),v=require("gsap");;/* empty css */const L=({text:o,as:C="div",typingSpeed:l=50,initialDelay:I=0,pauseDuration:m=2e3,deletingSpeed:_=30,loop:R=!0,className:H="",showCursor:T=!0,hideCursorWhileTyping:O=!1,cursorCharacter:P="|",cursorClassName:k="",cursorBlinkDuration:j=.5,textColors:h=[],variableSpeed:c,onSentenceComplete:d,startOnVisible:y=!1,reverseMode:E=!1,...w})=>{const[a,q]=e.useState(""),[i,A]=e.useState(0),[f,M]=e.useState(!1),[s,z]=e.useState(0),[N,F]=e.useState(!y),x=e.useRef(null),p=e.useRef(null),r=e.useMemo(()=>Array.isArray(o)?o:[o],[o]),G=e.useCallback(()=>{if(!c)return l;const{min:t,max:u}=c;return Math.random()*(u-t)+t},[c,l]),J=()=>{if(h.length!==0)return h[s%h.length]};e.useEffect(()=>{if(!y||!p.current)return;const t=new IntersectionObserver(u=>{u.forEach(g=>{g.isIntersecting&&F(!0)})},{threshold:.1});return t.observe(p.current),()=>t.disconnect()},[y]),e.useEffect(()=>{T&&x.current&&(v.gsap.set(x.current,{opacity:1}),v.gsap.to(x.current,{opacity:0,duration:j,repeat:-1,yoyo:!0,ease:"power2.inOut"}))},[T,j]),e.useEffect(()=>{if(!N)return;let t;const u=r[s],g=E?u.split("").reverse().join(""):u,$=()=>{if(f)if(a===""){if(M(!1),s===r.length-1&&!R)return;d&&d(r[s],s),z(n=>(n+1)%r.length),A(0),t=setTimeout(()=>{},m)}else t=setTimeout(()=>{q(n=>n.slice(0,-1))},_);else i<g.length?t=setTimeout(()=>{q(n=>n+g[i]),A(n=>n+1)},c?G():l):r.length>1&&(t=setTimeout(()=>{M(!0)},m))};return i===0&&!f&&a===""?t=setTimeout($,I):$(),()=>clearTimeout(t)},[i,a,f,l,_,m,r,s,R,I,N,E,c,d]);const K=O&&(i<r[s].length||f);return e.createElement(C,{ref:p,className:`xiping-text-type ${H}`,...w},b.jsx("span",{className:"xiping-text-type__content",style:{color:J()||"inherit"},children:a}),T&&b.jsx("span",{ref:x,className:`xiping-text-type__cursor ${k} ${K?"xiping-text-type__cursor--hidden":""}`,children:P}))};exports.default=L;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),l=require("react"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),l=require("react"),r=require("clsx"),t=require("motion/react"),n=require("./index.module.css.js"),F=16,h=1.5,v="normal",a=({content:u,lineHeight:d=h,fontSize:x=F,fontWeight:g=v,className:f="",style:m={},onProgressChange:p,initialScrollPosition:S,cacheKey:q,showTopProgress:T=!0,topProgressClassName:_,showBottomProgress:N=!0,bottomProgressClassName:R})=>{const s=l.useRef(null),o=l.useRef(null),{scrollYProgress:i}=t.useScroll({container:s,target:o}),c=t.useTransform(()=>(i.get()*100).toFixed(2).replace(/\.0*$/,"")),j=t.useMotionTemplate`${c}%`;return c.on("change",E=>{p?.(Number(E))}),e.jsxs(e.Fragment,{children:[T&&e.jsx(t.motion.div,{id:"scroll-indicator",className:r(n.default["xiping-top-progress"],_),style:{scaleX:i,originX:0}}),e.jsx("div",{className:r(n.default["xiping-container"],n.default["xiping-text-content"]),ref:s,children:e.jsx("div",{ref:o,className:r(n.default["xiping-content"],f),style:{fontSize:`${x}px`,lineHeight:d,fontWeight:g,...m},children:u})}),N&&e.jsx(t.motion.div,{id:"scroll-present",className:r(n.default["xiping-bottom-progress"],R),children:j})]})};exports.TxtReader=a;exports.default=a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t={"xiping-top-progress":"_xiping-top-progress_rkm9f_23","xiping-container":"_xiping-container_rkm9f_33","xiping-content":"_xiping-content_rkm9f_41","xiping-bottom-progress":"_xiping-bottom-progress_rkm9f_48","xiping-text-content":"_xiping-text-content_rkm9f_63"};exports.default=t;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const w=require("react/jsx-runtime"),f=require("react"),D=require("motion/react");;/* empty css */const l={robotoFlex:!1,notoSansSC:!1,loading:!1};function P(n){if(typeof document>"u")return!1;try{return document.fonts.check(`1em "${n}"`)}catch{return!0}}function O(){if(l.loading||l.robotoFlex&&l.notoSansSC)return;l.loading=!0;const n=P("Roboto Flex"),r=P("Noto Sans SC");if(n&&(l.robotoFlex=!0),r&&(l.notoSansSC=!0),n&&r){l.loading=!1;return}const i=(t,s)=>{if(document.querySelector(`link[href="${t}"]`)){s?.();return}const c=document.createElement("link");c.rel="stylesheet",c.href=t,c.onload=()=>s?.(),document.head.appendChild(c)},d=[{roboto:"https://fonts.loli.net/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap",noto:"https://fonts.loli.net/css2?family=Noto+Sans+SC:wght@100..900&display=swap"},{roboto:"https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap",noto:"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@100..900&display=swap"}],m=t=>{if(t>=d.length){l.loading=!1;return}const s=d[t];let p=0;const c=()=>{p++,p===2&&(l.loading=!1)};n?c():i(s.roboto,()=>{l.robotoFlex=!0,c()}),r?c():i(s.noto,()=>{l.notoSansSC=!0,c()}),setTimeout(()=>{(!l.robotoFlex||!l.notoSansSC)&&m(t+1)},3e3)};m(0)}function U(n=!0){f.useEffect(()=>{n&&typeof document<"u"&&O()},[n])}function G(n){f.useEffect(()=>{let r;const i=()=>{n(),r=requestAnimationFrame(i)};return r=requestAnimationFrame(i),()=>cancelAnimationFrame(r)},[n])}function H(n){const r=f.useRef({x:0,y:0});return f.useEffect(()=>{const i=(t,s)=>{if(n?.current){const p=n.current.getBoundingClientRect();r.current={x:t-p.left,y:s-p.top}}else r.current={x:t,y:s}},d=t=>i(t.clientX,t.clientY),m=t=>{const s=t.touches[0];i(s.clientX,s.clientY)};return window.addEventListener("mousemove",d),window.addEventListener("touchmove",m),()=>{window.removeEventListener("mousemove",d),window.removeEventListener("touchmove",m)}},[n]),r}const b=f.forwardRef((n,r)=>{const{label:i,fromFontVariationSettings:d,toFontVariationSettings:m,containerRef:t,radius:s=50,falloff:p="linear",className:c="",onClick:V,style:C,fontFamily:y,autoLoadFonts:k=!0,...q}=n;U(k&&!y);const R=f.useRef([]),v=f.useRef([]),S=H(t),x=f.useRef({x:null,y:null}),N=f.useMemo(()=>{const e=o=>new Map(o.split(",").map(g=>g.trim()).map(g=>{const[h,F]=g.split(" ");return[h.replace(/['"]/g,""),parseFloat(F)]})),a=e(d),u=e(m);return Array.from(a.entries()).map(([o,g])=>({axis:o,fromValue:g,toValue:u.get(o)??g}))},[d,m]),j=(e,a,u,o)=>Math.sqrt((u-e)**2+(o-a)**2),A=e=>{const a=Math.min(Math.max(1-e/s,0),1);switch(p){case"exponential":return a**2;case"gaussian":return Math.exp(-((e/(s/2))**2)/2);
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const w=require("react/jsx-runtime"),f=require("react"),D=require("motion/react");;/* empty css */const l={robotoFlex:!1,notoSansSC:!1,loading:!1};function P(n){if(typeof document>"u")return!1;try{return document.fonts.check(`1em "${n}"`)}catch{return!0}}function O(){if(l.loading||l.robotoFlex&&l.notoSansSC)return;l.loading=!0;const n=P("Roboto Flex"),r=P("Noto Sans SC");if(n&&(l.robotoFlex=!0),r&&(l.notoSansSC=!0),n&&r){l.loading=!1;return}const i=(t,s)=>{if(document.querySelector(`link[href="${t}"]`)){s?.();return}const c=document.createElement("link");c.rel="stylesheet",c.href=t,c.onload=()=>s?.(),document.head.appendChild(c)},d=[{roboto:"https://fonts.loli.net/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap",noto:"https://fonts.loli.net/css2?family=Noto+Sans+SC:wght@100..900&display=swap"},{roboto:"https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap",noto:"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@100..900&display=swap"}],m=t=>{if(t>=d.length){l.loading=!1;return}const s=d[t];let p=0;const c=()=>{p++,p===2&&(l.loading=!1)};n?c():i(s.roboto,()=>{l.robotoFlex=!0,c()}),r?c():i(s.noto,()=>{l.notoSansSC=!0,c()}),setTimeout(()=>{(!l.robotoFlex||!l.notoSansSC)&&m(t+1)},3e3)};m(0)}function U(n=!0){f.useEffect(()=>{n&&typeof document<"u"&&O()},[n])}function G(n){f.useEffect(()=>{let r;const i=()=>{n(),r=requestAnimationFrame(i)};return r=requestAnimationFrame(i),()=>cancelAnimationFrame(r)},[n])}function H(n){const r=f.useRef({x:0,y:0});return f.useEffect(()=>{const i=(t,s)=>{if(n?.current){const p=n.current.getBoundingClientRect();r.current={x:t-p.left,y:s-p.top}}else r.current={x:t,y:s}},d=t=>i(t.clientX,t.clientY),m=t=>{const s=t.touches[0];i(s.clientX,s.clientY)};return window.addEventListener("mousemove",d),window.addEventListener("touchmove",m),()=>{window.removeEventListener("mousemove",d),window.removeEventListener("touchmove",m)}},[n]),r}const b=f.forwardRef((n,r)=>{const{label:i,fromFontVariationSettings:d,toFontVariationSettings:m,containerRef:t,radius:s=50,falloff:p="linear",className:c="",onClick:V,style:C,fontFamily:y,autoLoadFonts:k=!0,...q}=n;U(k&&!y);const R=f.useRef([]),v=f.useRef([]),S=H(t),x=f.useRef({x:null,y:null}),N=f.useMemo(()=>{const e=o=>new Map(o.split(",").map(g=>g.trim()).map(g=>{const[h,F]=g.split(" ");return[h.replace(/['"]/g,""),parseFloat(F)]})),a=e(d),u=e(m);return Array.from(a.entries()).map(([o,g])=>({axis:o,fromValue:g,toValue:u.get(o)??g}))},[d,m]),j=(e,a,u,o)=>Math.sqrt((u-e)**2+(o-a)**2),A=e=>{const a=Math.min(Math.max(1-e/s,0),1);switch(p){case"exponential":return a**2;case"gaussian":return Math.exp(-((e/(s/2))**2)/2);default:return a}};G(()=>{if(!t?.current)return;const{x:e,y:a}=S.current;if(x.current.x===e&&x.current.y===a)return;x.current={x:e,y:a};const u=t.current.getBoundingClientRect();R.current.forEach((o,g)=>{if(!o)return;const h=o.getBoundingClientRect(),F=h.left+h.width/2-u.left,T=h.top+h.height/2-u.top,M=j(S.current.x,S.current.y,F,T);if(M>=s){o.style.fontVariationSettings=d;return}const X=A(M),L=N.map(({axis:Y,fromValue:E,toValue:z})=>{const _=E+(z-E)*X;return`'${Y}' ${_}`}).join(", ");v.current[g]=L,o.style.fontVariationSettings=L})});const $=/[\u4e00-\u9fa5]/.test(i)?i.split(""):i.split(" ").flatMap((e,a,u)=>{const o=e.split("");return a<u.length-1?[...o," "]:o});let I=0;const B=f.useMemo(()=>{const e={display:"inline",...C};return y&&(e.fontFamily=y),e},[y,C]);return w.jsxs("span",{ref:r,className:`${c} xiping-variable-proximity`,onClick:V,style:B,...q,children:[$.map((e,a)=>{const u=I++;return w.jsx(D.motion.span,{ref:o=>{R.current[u]=o},style:{display:e===" "?"inline":"inline-block",fontVariationSettings:v.current[u]},"aria-hidden":"true",children:e},a)}),w.jsx("span",{className:"sr-only",children:i})]})});b.displayName="VariableProximity";exports.VariableProximity=b;exports.default=b;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),a=require("react");;/* empty css */const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),a=require("react"),q=require("xgplayer");;/* empty css */const w=require("../subtitle-player/SubtitlePlayer.js"),T=require("./useVideoSubtitleStore.js");;/* empty css */const h=({videoUrl:u,subtitles:c,poster:p,className:g="",style:j,onFetchDetail:o})=>{const s=a.useRef(null),n=a.useRef(null),{currentTime:d,isPlaying:R,setCurrentTime:x,setIsPlaying:r,setSubtitles:v,currentDetail:l,isLoadingDetail:N,fetchDetail:_}=T.useVideoSubtitleStore();a.useEffect(()=>{v(c)},[c,v]),a.useEffect(()=>{if(!s.current)return;const t=`xiping-video-subtitle-player-${Date.now()}`;s.current&&(s.current.id=t);const i=new q({id:t,url:u,poster:p,autoplay:!1,fluid:!0,width:"100%",height:"100%",controls:!0});n.current=i;const y=()=>{const P=i.currentTime||0;x(P)},m=()=>{r(!0)},b=()=>{r(!1)},f=()=>{r(!1)};return i.on("timeupdate",y),i.on("play",m),i.on("pause",b),i.on("ended",f),()=>{i.off("timeupdate",y),i.off("play",m),i.off("pause",b),i.off("ended",f),i.destroy(),n.current=null}},[u,p,x,r]),a.useEffect(()=>{if(n.current){const t=n.current;Math.abs(t.currentTime-d)>.5&&(t.currentTime=d)}},[d]);const S=a.useCallback(async t=>{o?await o(t):await _(t)},[o,_]);return e.jsxs("div",{className:`xiping-video-subtitle-player ${g}`,style:j,children:[e.jsxs("div",{className:"xiping-video-subtitle-player__left",children:[e.jsx("div",{className:"xiping-video-subtitle-player__video-container",children:e.jsx("div",{ref:s,className:"xiping-video-subtitle-player__video"})}),e.jsx("div",{className:"xiping-video-subtitle-player__subtitle-container",children:e.jsx(w.SubtitlePlayer,{subtitles:c,currentTime:d,mode:"current",onWordHoverChange:S})})]}),e.jsx("div",{className:"xiping-video-subtitle-player__right",children:e.jsx("div",{className:"xiping-video-subtitle-player__detail",children:N?e.jsxs("div",{className:"xiping-video-subtitle-player__detail-loading",children:[e.jsx("div",{className:"xiping-video-subtitle-player__detail-loading-spinner"}),e.jsx("span",{children:"加载中..."})]}):l?e.jsxs("div",{className:"xiping-video-subtitle-player__detail-content",children:[e.jsx("div",{className:"xiping-video-subtitle-player__detail-word",children:l.word}),l.pronunciation&&e.jsx("div",{className:"xiping-video-subtitle-player__detail-pronunciation",children:l.pronunciation}),l.partOfSpeech&&e.jsx("div",{className:"xiping-video-subtitle-player__detail-pos",children:l.partOfSpeech}),l.translation&&e.jsxs("div",{className:"xiping-video-subtitle-player__detail-translation",children:[e.jsx("div",{className:"xiping-video-subtitle-player__detail-label",children:"中文翻译"}),e.jsx("div",{className:"xiping-video-subtitle-player__detail-text",children:l.translation})]}),l.definition&&e.jsxs("div",{className:"xiping-video-subtitle-player__detail-definition",children:[e.jsx("div",{className:"xiping-video-subtitle-player__detail-label",children:"英文解释"}),e.jsx("div",{className:"xiping-video-subtitle-player__detail-text",children:l.definition})]}),l.examples&&l.examples.length>0&&e.jsxs("div",{className:"xiping-video-subtitle-player__detail-examples",children:[e.jsx("div",{className:"xiping-video-subtitle-player__detail-label",children:"例句"}),l.examples.map((t,i)=>e.jsxs("div",{className:"xiping-video-subtitle-player__detail-example",children:[e.jsx("div",{className:"xiping-video-subtitle-player__detail-example-en",children:t.sentence}),e.jsx("div",{className:"xiping-video-subtitle-player__detail-example-zh",children:t.translation})]},i))]})]}):e.jsxs("div",{className:"xiping-video-subtitle-player__detail-empty",children:[e.jsx("div",{className:"xiping-video-subtitle-player__detail-empty-icon",children:"📖"}),e.jsx("div",{className:"xiping-video-subtitle-player__detail-empty-text",children:"将鼠标悬停在字幕单词上查看详情"})]})})})]})};exports.VideoSubtitlePlayer=h;exports.default=h;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("zustand"),n={currentTime:0,isPlaying:!1,subtitles:[],currentDetail:null,isLoadingDetail:!1},o=a.create((i,l)=>({...n,setCurrentTime:e=>{i({currentTime:e})},setIsPlaying:e=>{i({isPlaying:e})},setSubtitles:e=>{i({subtitles:e})},setCurrentDetail:e=>{i({currentDetail:e})},setIsLoadingDetail:e=>{i({isLoadingDetail:e})},fetchDetail:async e=>{if(!e){i({currentDetail:null,isLoadingDetail:!1});return}i({isLoadingDetail:!0});try{await new Promise(r=>setTimeout(r,300));const t={word:e.word,pronunciation:`/${e.word.toLowerCase()}/`,translation:`${e.word}的中文翻译`,definition:`Definition of ${e.word}`,examples:[{sentence:`This is an example sentence with ${e.word}.`,translation:`这是一个包含${e.word}的例句。`}],partOfSpeech:"noun"};i({currentDetail:t,isLoadingDetail:!1})}catch(t){console.error("获取详情失败:",t),i({currentDetail:null,isLoadingDetail:!1})}},reset:()=>{i(n)}}));exports.useVideoSubtitleStore=o;
|