@yimou6/common-ui 1.12.3 → 1.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/cdn/index.cdn.js +15 -15
  2. package/cdn/index.cdn.js.map +1 -1
  3. package/cdn/index.cdn.mjs +15 -15
  4. package/cdn/index.cdn.mjs.map +1 -1
  5. package/cdn/index.css +1 -1
  6. package/es/components/image-verification/index.mjs.map +1 -1
  7. package/es/components/index.d.ts +22 -21
  8. package/es/components/index.mjs +1 -0
  9. package/es/components/index.mjs.map +1 -1
  10. package/es/components/monitor-playback/index.d.ts +573 -0
  11. package/es/components/monitor-playback/index.mjs +8 -0
  12. package/es/components/monitor-playback/index.mjs.map +1 -0
  13. package/es/components/monitor-playback/src/monitor-playback.d.ts +30 -0
  14. package/es/components/monitor-playback/src/monitor-playback.mjs +44 -0
  15. package/es/components/monitor-playback/src/monitor-playback.mjs.map +1 -0
  16. package/es/components/monitor-playback/src/monitor-playback.vue.d.ts +573 -0
  17. package/es/components/monitor-playback/src/monitor-playback.vue.mjs +6 -0
  18. package/es/components/monitor-playback/src/monitor-playback.vue.mjs.map +1 -0
  19. package/es/components/monitor-playback/src/monitor-playback.vue2.mjs +202 -0
  20. package/es/components/monitor-playback/src/monitor-playback.vue2.mjs.map +1 -0
  21. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.d.ts +25 -0
  22. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.mjs +26 -0
  23. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.mjs.map +1 -0
  24. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.d.ts +104 -0
  25. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.mjs +6 -0
  26. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.mjs.map +1 -0
  27. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.mjs +507 -0
  28. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.mjs.map +1 -0
  29. package/es/components/page-header/src/page-header.d.ts +2 -2
  30. package/es/components/page-header/src/page-header.mjs.map +1 -1
  31. package/es/components/tzj-player/src/easyPlayer.vue2.mjs +2 -10
  32. package/es/components/tzj-player/src/easyPlayer.vue2.mjs.map +1 -1
  33. package/es/index.mjs +1 -0
  34. package/es/index.mjs.map +1 -1
  35. package/es/installer.mjs +2 -0
  36. package/es/installer.mjs.map +1 -1
  37. package/global.d.ts +2 -0
  38. package/lib/components/image-verification/index.js.map +1 -1
  39. package/lib/components/index.d.ts +22 -21
  40. package/lib/components/index.js +23 -21
  41. package/lib/components/index.js.map +1 -1
  42. package/lib/components/monitor-playback/index.d.ts +573 -0
  43. package/lib/components/monitor-playback/index.js +13 -0
  44. package/lib/components/monitor-playback/index.js.map +1 -0
  45. package/lib/components/monitor-playback/src/monitor-playback.d.ts +30 -0
  46. package/lib/components/monitor-playback/src/monitor-playback.js +46 -0
  47. package/lib/components/monitor-playback/src/monitor-playback.js.map +1 -0
  48. package/lib/components/monitor-playback/src/monitor-playback.vue.d.ts +573 -0
  49. package/lib/components/monitor-playback/src/monitor-playback.vue.js +10 -0
  50. package/lib/components/monitor-playback/src/monitor-playback.vue.js.map +1 -0
  51. package/lib/components/monitor-playback/src/monitor-playback.vue2.js +206 -0
  52. package/lib/components/monitor-playback/src/monitor-playback.vue2.js.map +1 -0
  53. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.d.ts +25 -0
  54. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.js +28 -0
  55. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.js.map +1 -0
  56. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.d.ts +104 -0
  57. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.js +10 -0
  58. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.js.map +1 -0
  59. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.js +511 -0
  60. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.js.map +1 -0
  61. package/lib/components/page-header/src/page-header.d.ts +2 -2
  62. package/lib/components/page-header/src/page-header.js.map +1 -1
  63. package/lib/components/tzj-player/src/easyPlayer.vue2.js +2 -10
  64. package/lib/components/tzj-player/src/easyPlayer.vue2.js.map +1 -1
  65. package/lib/index.js +27 -25
  66. package/lib/index.js.map +1 -1
  67. package/lib/installer.js +6 -4
  68. package/lib/installer.js.map +1 -1
  69. package/package.json +1 -1
  70. package/theme-default/i-monitor-playback.css +1 -0
  71. package/theme-default/index.css +1 -1
@@ -0,0 +1,206 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var vue = require('vue');
6
+ require('../timeline-ruler/src/timeline-ruler.vue.js');
7
+ var monitorPlayback = require('./monitor-playback.js');
8
+ var timelineRuler_vue_vue_type_script_setup_true_lang = require('../timeline-ruler/src/timeline-ruler.vue2.js');
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
12
+ const _hoisted_1 = { class: "replay-page" };
13
+ const _hoisted_2 = { class: "player-wrap" };
14
+ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
15
+ ...{
16
+ name: "IMonitorPlayback"
17
+ },
18
+ __name: "monitor-playback",
19
+ props: monitorPlayback.MonitorPlaybackProps,
20
+ setup(__props) {
21
+ const props = __props;
22
+ const videoRef = vue.ref(null);
23
+ const timelineRef = vue.ref(null);
24
+ const kbpsInfo = vue.ref("-- KB/s");
25
+ const overlayTimeText = vue.ref("2026-05-02 15:02:17");
26
+ let mpegts = null;
27
+ let player = null;
28
+ const currentUrl = vue.ref(
29
+ props.url || "ws://cms.abaixun.com/websocket/0402b0580060f0df/0000000001.flv?starttime=20260502T150217&duration=3600&uuid=s1vwaoh0rse31rpgars33u1d68384buc"
30
+ );
31
+ let playTimerId = null;
32
+ function pad(n) {
33
+ return String(n).padStart(2, "0");
34
+ }
35
+ __name(pad, "pad");
36
+ function syncStartTimeToUrl(unixSec) {
37
+ const d = new Date(unixSec * 1e3);
38
+ const val = `${pad(d.getFullYear()) + pad(d.getMonth() + 1) + pad(d.getDate())}T${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;
39
+ currentUrl.value = currentUrl.value.replace(
40
+ /starttime=\d{8}T\d{6}/i,
41
+ `starttime=${val}`
42
+ );
43
+ }
44
+ __name(syncStartTimeToUrl, "syncStartTimeToUrl");
45
+ function commitWithTime(sec) {
46
+ syncStartTimeToUrl(sec);
47
+ playStream(currentUrl.value);
48
+ }
49
+ __name(commitWithTime, "commitWithTime");
50
+ function fmtTF(s) {
51
+ const d = new Date(s * 1e3);
52
+ return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
53
+ }
54
+ __name(fmtTF, "fmtTF");
55
+ function fmtD(s) {
56
+ const d = new Date(s * 1e3);
57
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
58
+ }
59
+ __name(fmtD, "fmtD");
60
+ function parseStartTime(url) {
61
+ const m = url.match(/starttime=(\d{8}T\d{6})/i);
62
+ if (m)
63
+ return new Date(
64
+ m[1].replace(
65
+ /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})/,
66
+ "$1-$2-$3T$4:$5:$6"
67
+ )
68
+ );
69
+ const dm = url.match(/duration=(\d+)/i);
70
+ if (dm) return parseInt(dm[1]);
71
+ return null;
72
+ }
73
+ __name(parseStartTime, "parseStartTime");
74
+ function playStream(url) {
75
+ if (!url) return;
76
+ if (!mpegts || !mpegts.isSupported()) return;
77
+ destroyPlayer();
78
+ const st = parseStartTime(url);
79
+ let dur = 3600;
80
+ const dm = url.match(/duration=(\d+)/i);
81
+ if (dm) dur = parseInt(dm[1]);
82
+ if (st && timelineRef.value) {
83
+ timelineRef.value.initRuler(st, dur);
84
+ }
85
+ player = mpegts.createPlayer(
86
+ { type: "flv", isLive: false, hasAudio: false, url },
87
+ {
88
+ enableStashBuffer: false,
89
+ stashInitialSize: 128,
90
+ lazyLoadMaxDuration: 1800,
91
+ seekType: "range"
92
+ }
93
+ );
94
+ player.attachMediaElement(videoRef.value);
95
+ player.on(mpegts.Events.ERROR, () => {
96
+ });
97
+ player.on(mpegts.Events.LOADING_COMPLETE, () => {
98
+ });
99
+ player.on(mpegts.Events.MEDIA_INFO, (_e) => {
100
+ });
101
+ player.on(mpegts.Events.STATISTICS_INFO, (s) => {
102
+ kbpsInfo.value = `${Math.round(s.speed / 1024)}KB/s`;
103
+ });
104
+ player.load();
105
+ videoRef.value.play().catch(() => {
106
+ });
107
+ }
108
+ __name(playStream, "playStream");
109
+ function destroyPlayer() {
110
+ if (!player) return;
111
+ try {
112
+ player.pause();
113
+ player.unload();
114
+ player.detachMediaElement();
115
+ player.destroy();
116
+ } catch (_e) {
117
+ }
118
+ player = null;
119
+ }
120
+ __name(destroyPlayer, "destroyPlayer");
121
+ function onTimelineSeek(sec) {
122
+ commitWithTime(sec);
123
+ }
124
+ __name(onTimelineSeek, "onTimelineSeek");
125
+ const win = window;
126
+ vue.onMounted(async () => {
127
+ if (typeof window !== "undefined" && !win.mpegts) {
128
+ const script = document.createElement("script");
129
+ script.src = "https://cdn.jsdelivr.net/npm/mpegts.js@1.7.3/dist/mpegts.min.js";
130
+ script.onload = () => {
131
+ mpegts = win.mpegts;
132
+ playStream(currentUrl.value);
133
+ startPlayTimer();
134
+ };
135
+ script.onerror = () => {
136
+ };
137
+ document.head.appendChild(script);
138
+ } else {
139
+ mpegts = win.mpegts;
140
+ playStream(currentUrl.value);
141
+ startPlayTimer();
142
+ }
143
+ });
144
+ function startPlayTimer() {
145
+ playTimerId = setInterval(() => {
146
+ if (!player || !videoRef.value || videoRef.value.paused || !timelineRef.value)
147
+ return;
148
+ const baseMatch = currentUrl.value.match(/starttime=(\d{8}T\d{6})/i);
149
+ if (baseMatch && baseMatch[1]) {
150
+ const base = new Date(
151
+ baseMatch[1].replace(
152
+ /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})/,
153
+ "$1-$2-$3T$4:$5:$6"
154
+ )
155
+ );
156
+ const timeMs = base.getTime() + videoRef.value.currentTime * (videoRef.value.playbackRate || 1) * 1e3;
157
+ timelineRef.value.updateRulerTime(timeMs);
158
+ timelineRef.value.autoFollow();
159
+ overlayTimeText.value = `${fmtD(timeMs / 1e3)} ${fmtTF(timeMs / 1e3)}`;
160
+ }
161
+ }, 250);
162
+ }
163
+ __name(startPlayTimer, "startPlayTimer");
164
+ vue.onBeforeUnmount(() => {
165
+ if (playTimerId) clearInterval(playTimerId);
166
+ destroyPlayer();
167
+ });
168
+ return (_ctx, _cache) => {
169
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
170
+ vue.createCommentVNode(" \u64AD\u653E\u5668 "),
171
+ vue.createElementVNode("div", _hoisted_2, [
172
+ vue.createElementVNode(
173
+ "video",
174
+ {
175
+ id: "player",
176
+ ref_key: "videoRef",
177
+ ref: videoRef,
178
+ muted: "",
179
+ controls: "",
180
+ onClick: _cache[0] || (_cache[0] = vue.withModifiers(() => {
181
+ }, ["prevent"]))
182
+ },
183
+ null,
184
+ 512
185
+ /* NEED_PATCH */
186
+ )
187
+ ]),
188
+ vue.createCommentVNode(" \u523B\u5EA6\u5C3A\u65F6\u95F4\u8F74 "),
189
+ vue.createVNode(
190
+ timelineRuler_vue_vue_type_script_setup_true_lang.default,
191
+ {
192
+ ref_key: "timelineRef",
193
+ ref: timelineRef,
194
+ onSeek: onTimelineSeek
195
+ },
196
+ null,
197
+ 512
198
+ /* NEED_PATCH */
199
+ )
200
+ ]);
201
+ };
202
+ }
203
+ });
204
+
205
+ exports.default = _sfc_main;
206
+ //# sourceMappingURL=monitor-playback.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-playback.vue2.js","sources":["../../../../../../../packages/components/monitor-playback/src/monitor-playback.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from \"vue\";\nimport ITimelineRuler from \"../timeline-ruler/src/timeline-ruler.vue\";\nimport { MonitorPlaybackProps } from \"./monitor-playback\";\n\ndefineOptions({\n name: \"IMonitorPlayback\",\n});\n\n// ==================== Props / State ====================\nconst props = defineProps(MonitorPlaybackProps);\n\n// ==================== DOM Refs ====================\nconst videoRef = ref<HTMLVideoElement | null>(null);\nconst timelineRef = ref<InstanceType<typeof ITimelineRuler> | null>(null);\n\n// ==================== UI State ====================\nconst kbpsInfo = ref(\"-- KB/s\");\nconst overlayTimeText = ref(\"2026-05-02 15:02:17\");\n\n// ==================== Player State ====================\nlet mpegts: any = null;\nlet player: any = null;\nconst currentUrl = ref(\n props.url ||\n \"ws://cms.abaixun.com/websocket/0402b0580060f0df/0000000001.flv?starttime=20260502T150217&duration=3600&uuid=s1vwaoh0rse31rpgars33u1d68384buc\",\n);\n\n// Timer ref\nlet playTimerId: ReturnType<typeof setInterval> | null = null;\n\n// ==================== Utils ====================\nfunction pad(n: number) {\n return String(n).padStart(2, \"0\");\n}\n\nfunction syncStartTimeToUrl(unixSec: number) {\n const d = new Date(unixSec * 1000);\n const val = `${\n pad(d.getFullYear()) + pad(d.getMonth() + 1) + pad(d.getDate())\n }T${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;\n currentUrl.value = currentUrl.value.replace(\n /starttime=\\d{8}T\\d{6}/i,\n `starttime=${val}`,\n );\n}\n\nfunction commitWithTime(sec: number) {\n syncStartTimeToUrl(sec);\n playStream(currentUrl.value);\n}\n\nfunction fmtTF(s: number) {\n const d = new Date(s * 1000);\n return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;\n}\n\nfunction fmtD(s: number) {\n const d = new Date(s * 1000);\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\n}\n\n// ==================== Player Functions ====================\nfunction parseStartTime(url: string): Date | number | null {\n const m = url.match(/starttime=(\\d{8}T\\d{6})/i);\n if (m)\n return new Date(\n m[1].replace(\n /^(\\d{4})(\\d{2})(\\d{2})T(\\d{2})(\\d{2})(\\d{2})/,\n \"$1-$2-$3T$4:$5:$6\",\n ),\n );\n const dm = url.match(/duration=(\\d+)/i);\n if (dm) return parseInt(dm[1]);\n return null;\n}\n\nfunction playStream(url: string) {\n if (!url) return;\n if (!mpegts || !mpegts.isSupported()) return;\n\n destroyPlayer();\n\n const st = parseStartTime(url);\n let dur = 3600;\n const dm = url.match(/duration=(\\d+)/i);\n if (dm) dur = parseInt(dm[1]);\n\n if (st && timelineRef.value) {\n timelineRef.value.initRuler(st as Date, dur);\n }\n\n player = mpegts.createPlayer(\n { type: \"flv\", isLive: false, hasAudio: false, url },\n {\n enableStashBuffer: false,\n stashInitialSize: 128,\n lazyLoadMaxDuration: 1800,\n seekType: \"range\",\n },\n );\n player.attachMediaElement(videoRef.value!);\n\n player.on(mpegts.Events.ERROR, () => {});\n player.on(mpegts.Events.LOADING_COMPLETE, () => {});\n player.on(mpegts.Events.MEDIA_INFO, (_e: unknown) => {});\n player.on(mpegts.Events.STATISTICS_INFO, (s: any) => {\n kbpsInfo.value = `${Math.round(s.speed / 1024)}KB/s`;\n });\n\n player.load();\n videoRef.value!.play().catch(() => {});\n}\n\nfunction destroyPlayer() {\n if (!player) return;\n try {\n player.pause();\n player.unload();\n player.detachMediaElement();\n player.destroy();\n } catch (_e) {}\n player = null;\n}\n\n/** 时间轴 seek 跳转 */\nfunction onTimelineSeek(sec: number) {\n commitWithTime(sec);\n}\n\n// ==================== Lifecycle ====================\n// mpegts is loaded dynamically via script tag\nconst win = window as any;\nonMounted(async () => {\n // 加载 mpegts.js\n if (typeof window !== \"undefined\" && !win.mpegts) {\n const script = document.createElement(\"script\");\n script.src =\n \"https://cdn.jsdelivr.net/npm/mpegts.js@1.7.3/dist/mpegts.min.js\";\n script.onload = () => {\n mpegts = win.mpegts;\n playStream(currentUrl.value);\n startPlayTimer();\n };\n script.onerror = () => {};\n document.head.appendChild(script);\n } else {\n mpegts = win.mpegts;\n playStream(currentUrl.value);\n startPlayTimer();\n }\n});\n\n/** 定时同步播放进度到时间轴 */\nfunction startPlayTimer() {\n playTimerId = setInterval(() => {\n if (\n !player ||\n !videoRef.value ||\n videoRef.value.paused ||\n !timelineRef.value\n )\n return;\n const baseMatch = currentUrl.value.match(/starttime=(\\d{8}T\\d{6})/i);\n if (baseMatch && baseMatch[1]) {\n const base = new Date(\n baseMatch[1].replace(\n /^(\\d{4})(\\d{2})(\\d{2})T(\\d{2})(\\d{2})(\\d{2})/,\n \"$1-$2-$3T$4:$5:$6\",\n ),\n );\n const timeMs =\n base.getTime() +\n videoRef.value!.currentTime *\n (videoRef.value!.playbackRate || 1) *\n 1000;\n timelineRef.value.updateRulerTime(timeMs);\n timelineRef.value.autoFollow();\n\n // 更新叠加时间\n overlayTimeText.value = `${fmtD(timeMs / 1000)} ${fmtTF(timeMs / 1000)}`;\n }\n }, 250);\n}\n\nonBeforeUnmount(() => {\n if (playTimerId) clearInterval(playTimerId);\n destroyPlayer();\n});\n</script>\n\n<template>\n <div class=\"replay-page\">\n <!-- 播放器 -->\n <div class=\"player-wrap\">\n <video id=\"player\" ref=\"videoRef\" muted controls @click.prevent />\n </div>\n\n <!-- 刻度尺时间轴 -->\n <ITimelineRuler ref=\"timelineRef\" @seek=\"onTimelineSeek\" />\n </div>\n</template>\n"],"names":["ref","onMounted","onBeforeUnmount","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_createVNode","ITimelineRuler"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { ExtractPropTypes } from "vue";
2
+ import type TimelineRuler from "./timeline-ruler.vue";
3
+ export declare const TimelineRulerProps: {
4
+ startTime: {
5
+ type: DateConstructor;
6
+ default: null;
7
+ };
8
+ duration: {
9
+ type: NumberConstructor;
10
+ default: number;
11
+ };
12
+ currentTimeMs: {
13
+ type: NumberConstructor;
14
+ default: null;
15
+ };
16
+ };
17
+ export type TimelineRulerPropsType = ExtractPropTypes<typeof TimelineRulerProps>;
18
+ export type TimelineRulerInstance = InstanceType<typeof TimelineRuler>;
19
+ export interface TickCfg {
20
+ iv: number;
21
+ h: number;
22
+ w: number;
23
+ c: string;
24
+ lbl?: boolean;
25
+ }
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ const TimelineRulerProps = {
4
+ /**
5
+ * 起始时间(Date 对象)
6
+ */
7
+ startTime: {
8
+ type: Date,
9
+ default: null
10
+ },
11
+ /**
12
+ * 持续时长(秒)
13
+ */
14
+ duration: {
15
+ type: Number,
16
+ default: 3600
17
+ },
18
+ /**
19
+ * 当前播放位置(毫秒时间戳),由外部同步
20
+ */
21
+ currentTimeMs: {
22
+ type: Number,
23
+ default: null
24
+ }
25
+ };
26
+
27
+ exports.TimelineRulerProps = TimelineRulerProps;
28
+ //# sourceMappingURL=timeline-ruler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-ruler.js","sources":["../../../../../../../../packages/components/monitor-playback/timeline-ruler/src/timeline-ruler.ts"],"sourcesContent":["import type { ExtractPropTypes } from \"vue\";\n\nimport type TimelineRuler from \"./timeline-ruler.vue\";\n\nexport const TimelineRulerProps = {\n /**\n * 起始时间(Date 对象)\n */\n startTime: {\n type: Date,\n default: null,\n },\n /**\n * 持续时长(秒)\n */\n duration: {\n type: Number,\n default: 3600,\n },\n /**\n * 当前播放位置(毫秒时间戳),由外部同步\n */\n currentTimeMs: {\n type: Number,\n default: null,\n },\n};\n\nexport type TimelineRulerPropsType = ExtractPropTypes<\n typeof TimelineRulerProps\n>;\nexport type TimelineRulerInstance = InstanceType<typeof TimelineRuler>;\n\n/** 刻度配置项 */\nexport interface TickCfg {\n iv: number;\n h: number;\n w: number;\n c: string;\n lbl?: boolean;\n}\n"],"names":[],"mappings":";;AAIO,MAAM,kBAAqB,GAAA;AAAA;AAAA;AAAA;AAAA,EAIhC,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,IAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,aAAe,EAAA;AAAA,IACb,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA;AAEb;;;;"}
@@ -0,0 +1,104 @@
1
+ import type { TickCfg } from "./timeline-ruler";
2
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
+ startTime: {
4
+ type: DateConstructor;
5
+ default: null;
6
+ };
7
+ duration: {
8
+ type: NumberConstructor;
9
+ default: number;
10
+ };
11
+ currentTimeMs: {
12
+ type: NumberConstructor;
13
+ default: null;
14
+ };
15
+ }>, {
16
+ props: import("@vue/shared").LooseRequired<Readonly<import("vue").ExtractPropTypes<{
17
+ startTime: {
18
+ type: DateConstructor;
19
+ default: null;
20
+ };
21
+ duration: {
22
+ type: NumberConstructor;
23
+ default: number;
24
+ };
25
+ currentTimeMs: {
26
+ type: NumberConstructor;
27
+ default: null;
28
+ };
29
+ }>> & Readonly<{
30
+ onSeek?: ((...args: any[]) => any) | undefined;
31
+ }> & {}>;
32
+ emit: (event: "seek", ...args: any[]) => void;
33
+ canvasRef: import("vue").Ref<HTMLCanvasElement | null, HTMLCanvasElement | null>;
34
+ rulerAreaRef: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
35
+ recTrackRef: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
36
+ timeBigHtml: import("vue").Ref<string, string>;
37
+ timeDateText: import("vue").Ref<string, string>;
38
+ tipShow: import("vue").Ref<boolean, boolean>;
39
+ tipText: import("vue").Ref<string, string>;
40
+ tipElProxy: Element | null;
41
+ tipStyle: import("vue").Ref<Record<string, string>, Record<string, string>>;
42
+ zoomTagText: import("vue").Ref<string, string>;
43
+ RH: number;
44
+ BASE_Y: number;
45
+ FRIC: number;
46
+ BASE_TIME: number | null;
47
+ pph: number;
48
+ tPph: number;
49
+ offX: number;
50
+ dragging: boolean;
51
+ dragSX: number;
52
+ dragSO: number;
53
+ vel: number;
54
+ lpX: number;
55
+ lpT: number;
56
+ mX: number;
57
+ mIn: boolean;
58
+ _startTime: Date | null;
59
+ _durationSec: number;
60
+ _currentPlayMs: number | null;
61
+ cvs: HTMLCanvasElement | null;
62
+ cx: CanvasRenderingContext2D | null;
63
+ dpr: number;
64
+ rafId: number | null;
65
+ pad: (n: number) => string;
66
+ fmtT: (s: number) => string;
67
+ fmtTF: (s: number) => string;
68
+ fmtD: (s: number) => string;
69
+ dateToSec: (dt: Date) => number;
70
+ t2x: (t: number) => number;
71
+ x2t: (x: number) => number;
72
+ resize: () => void;
73
+ tCfg: () => Record<string, TickCfg>;
74
+ draw: () => void;
75
+ renderRecSegs: (w?: number) => void;
76
+ loop: () => void;
77
+ gx: (e: MouseEvent | TouchEvent) => number;
78
+ onDown: (e: MouseEvent | TouchEvent) => void;
79
+ onMove: (e: MouseEvent | TouchEvent) => void;
80
+ onUp: () => void;
81
+ initRuler: (startTimeDate: Date, durationSeconds?: number) => void;
82
+ updateRulerTime: (timeMs: number) => void;
83
+ autoFollow: () => void;
84
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "seek"[], "seek", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
85
+ startTime: {
86
+ type: DateConstructor;
87
+ default: null;
88
+ };
89
+ duration: {
90
+ type: NumberConstructor;
91
+ default: number;
92
+ };
93
+ currentTimeMs: {
94
+ type: NumberConstructor;
95
+ default: null;
96
+ };
97
+ }>> & Readonly<{
98
+ onSeek?: ((...args: any[]) => any) | undefined;
99
+ }>, {
100
+ duration: number;
101
+ startTime: Date;
102
+ currentTimeMs: number;
103
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
104
+ export default _default;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var timelineRuler_vue_vue_type_script_setup_true_lang = require('./timeline-ruler.vue2.js');
6
+
7
+
8
+
9
+ exports.default = timelineRuler_vue_vue_type_script_setup_true_lang.default;
10
+ //# sourceMappingURL=timeline-ruler.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-ruler.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}