@ray-js/ipc-player-integration 0.0.35-beta.25 → 0.0.35-beta.27

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/lib/ctx/ctx.js CHANGED
@@ -205,7 +205,6 @@ export const createUseCtx = _ref => {
205
205
  fail: err => {
206
206
  IPCPlayerInstance.current.isMuted({
207
207
  success(res) {
208
- console.log('==== 当前静音状态 ====', res);
209
208
  updateAtom(mute, res);
210
209
  }
211
210
  });
@@ -3,8 +3,12 @@ import { UseCtx } from '../interface';
3
3
  type Props = {
4
4
  ctx: ReturnType<UseCtx>;
5
5
  children: React.ReactNode;
6
- /** 右下角组件占据的宽度(px),左下角通过该值约束自身可视宽度,避免与右下角重叠 */
7
- reservedRight?: number;
6
+ /**
7
+ * 右下角组件占据的宽度,左下角通过该值约束自身可视宽度避免与右下角重叠。
8
+ * - number: 视为 px
9
+ * - string: 视为合法的 CSS 长度(例如 "35%"),用于横屏按百分比预留
10
+ */
11
+ reservedRight?: number | string;
8
12
  canOpenSettings?: boolean;
9
13
  };
10
14
  declare const BottomLeftContent: ({ ctx, children, reservedRight, canOpenSettings }: Props) => React.JSX.Element;
@@ -58,12 +58,16 @@ const BottomLeftContent = _ref => {
58
58
  } = useTrialBadge(ctx.event, ctx.devId, trialRemainingSec);
59
59
  const paddingLeftPx = screenType === 'vertical' ? 0 : 25;
60
60
  const showBadge = showSmartImageQuality && showTrialBadge && canOpenSettings && gRawData && !isLowPhone && buttonState === 1 && trialRemainingSec > 0;
61
- const containerHeight = screenType === 'vertical' ? 48 : 83;
61
+ const coverHeight = screenType === 'vertical' ? 48 : 83;
62
+ const containerHeight = screenType === 'vertical' ? 48 : 58;
63
+
64
+ // reservedRight 兼容 number(px)与 string(任意 CSS 长度,例如 "35%")
65
+ const rightCss = typeof reservedRight === 'number' ? `${reservedRight}px` : reservedRight;
62
66
  return /*#__PURE__*/React.createElement(CoverView, {
63
67
  className: clsx('ipc-player-bottom-left-content-wrap'),
64
68
  style: {
65
- right: `${reservedRight}px`,
66
- height: showBadge ? `${containerHeight + 30}px` : `${containerHeight}px`,
69
+ right: rightCss,
70
+ height: showBadge ? `${coverHeight + 30}px` : `${coverHeight}px`,
67
71
  display: 'flex',
68
72
  flexDirection: 'column',
69
73
  justifyContent: 'center',
@@ -82,7 +86,7 @@ const BottomLeftContent = _ref => {
82
86
  onCountdownEnd: handleCountdownEnd
83
87
  })), /*#__PURE__*/React.createElement(View, {
84
88
  style: {
85
- paddingBottom: screenType === 'vertical' ? 0 : '32px',
89
+ paddingBottom: screenType === 'vertical' ? 0 : '25px',
86
90
  paddingLeft: `${paddingLeftPx}px`,
87
91
  paddingRight: '16px',
88
92
  width: '100%',
@@ -3,8 +3,12 @@ import { UseCtx } from '../interface';
3
3
  type Props = {
4
4
  ctx: ReturnType<UseCtx>;
5
5
  children: React.ReactNode;
6
- /** 由 ui.tsx 计算得到的右下角组件宽度(与左下角的 reservedRight 保持一致) */
7
- width?: number;
6
+ /**
7
+ * 由 ui.tsx 计算得到的右下角组件宽度(与左下角的 reservedRight 保持一致)
8
+ * - number: 视为 px
9
+ * - string: 视为合法的 CSS width 值(例如 "35%" / "20vw")
10
+ */
11
+ width?: number | string;
8
12
  };
9
13
  declare const BottomRightContent: ({ ctx, children, width }: Props) => React.JSX.Element;
10
14
  export default BottomRightContent;
@@ -17,18 +17,26 @@ const BottomRightContent = _ref => {
17
17
  playState: ctx.playState
18
18
  });
19
19
  const [shouldHide] = useComponentHideState();
20
- const containerHeight = screenType === 'vertical' ? 48 : 83;
20
+ const containerHeight = screenType === 'vertical' ? 48 : 58;
21
+
22
+ // 将 width 统一规范成 CSS 合法值。number → "${n}px",string → 原样透传。
23
+ // 0 / 空串视为「没有传宽度」,沿用默认布局(不设 width)。
24
+ const widthStyle = typeof width === 'number' && width > 0 ? {
25
+ width: `${width}px`,
26
+ boxSizing: 'border-box'
27
+ } : typeof width === 'string' && width ? {
28
+ width,
29
+ boxSizing: 'border-box'
30
+ } : null;
21
31
  return /*#__PURE__*/React.createElement(CoverView, {
22
32
  className: clsx('ipc-player-bottom-right-content-wrap'),
23
33
  style: _objectSpread({
24
34
  paddingLeft: screenType === 'vertical' ? '10px' : '0',
25
35
  height: screenType === 'vertical' ? shouldHide ? '49px' : '48px' : shouldHide ? '84px' : '83px'
26
- }, typeof width === 'number' && width > 0 ? {
27
- width: `${width}px`,
28
- boxSizing: 'border-box'
29
- } : null)
36
+ }, widthStyle)
30
37
  }, /*#__PURE__*/React.createElement(View, {
31
38
  style: {
39
+ paddingBottom: screenType === 'vertical' ? 0 : '25px',
32
40
  paddingRight: screenType === 'vertical' ? 0 : '25px',
33
41
  width: '100%',
34
42
  height: `${containerHeight}px`,
package/lib/ui/ui.js CHANGED
@@ -446,7 +446,7 @@ export const IPCPlayerIntegration = /*#__PURE__*/React.memo(props => {
446
446
  }, [brandColor, verticalMic]);
447
447
  const refreshSmartImageQuality = useMemoizedFn(async () => {
448
448
  const res = await getSmartImageQualityState(devId);
449
- if (res === undefined) return;
449
+ if (!res) return;
450
450
  // 调试时使用
451
451
  // res = {
452
452
  // isPurchase: false,
@@ -455,7 +455,6 @@ export const IPCPlayerIntegration = /*#__PURE__*/React.memo(props => {
455
455
  // canOpenSettings: true,
456
456
  // };
457
457
  const getNgRes = await getNgRawData();
458
- console.log('res===getNgRes111', res, getNgRes);
459
458
  updatePlayerWidgetProps(instance, 'bottomLeft', 'TryExperience', {
460
459
  isPurchase: res.isPurchase,
461
460
  buttonState: res.buttonState,
@@ -680,14 +679,18 @@ export const IPCPlayerIntegration = /*#__PURE__*/React.memo(props => {
680
679
 
681
680
  /**
682
681
  * 右下角可见按钮数 → 右下角组件宽度(左下角同时用作右侧预留宽度)
683
- * 1 个按钮: 115px / 2 个按钮: 132px / 0 个按钮: 0
682
+ * - 横屏: 固定 35%(用百分比,左下角自动按 100% - 35% = 65% 可视,溢出走横向滚动)
683
+ * - 竖屏: 1 个按钮 115px / 2+ 个按钮 132px / 0 个按钮 0
684
684
  */
685
685
  const bottomRightWidth = useMemo(() => {
686
+ if (screenType === 'full') {
687
+ return '35%';
688
+ }
686
689
  const visibleCount = (bottomRightContent || []).filter(item => !item.hidden).length;
687
690
  if (visibleCount <= 0) return 0;
688
691
  if (visibleCount === 1) return 115;
689
692
  return 132;
690
- }, [bottomRightContent]);
693
+ }, [bottomRightContent, screenType]);
691
694
 
692
695
  /**
693
696
  * 视频流加载状态封装
@@ -919,7 +922,7 @@ export const IPCPlayerIntegration = /*#__PURE__*/React.memo(props => {
919
922
  ,
920
923
  privateState: privateState,
921
924
  onPlayerTap: data => {
922
- console.log('sdhsajdhsahdsa=========');
925
+ console.log('playerTap event');
923
926
  if (disablePlayerTap.current) {
924
927
  console.log('playerTap 事件已禁止');
925
928
  return;
package/lib/ui/ui.less CHANGED
@@ -233,16 +233,16 @@
233
233
 
234
234
  // 左下角全屏子元素容器
235
235
  .bottom-left-item-full-container {
236
- padding: 0 12px !important;
236
+ padding: 0 24px !important;
237
237
  flex-shrink: 0;
238
238
  }
239
239
 
240
240
  .bottom-left-item-full-container:first-of-type {
241
- padding: 0 12px 0 16px !important;
241
+ padding: 0 24px 0 16px !important;
242
242
  }
243
243
 
244
244
  .bottom-left-item-full-container:last-of-type {
245
- padding: 0 0 0 12px !important;
245
+ padding: 0 0 0 24px !important;
246
246
  }
247
247
 
248
248
  .bottom-left-item-full-container:only-of-type {
@@ -4,7 +4,7 @@ export type SmartImageQualityResult = {
4
4
  trialRemainingSec: number;
5
5
  canOpenSettings: boolean;
6
6
  };
7
- export declare function getSmartImageQualityState(devId: string): Promise<SmartImageQualityResult>;
7
+ export declare function getSmartImageQualityState(devId: string): Promise<SmartImageQualityResult | null>;
8
8
  export type AIFrameFeatureScope = {
9
9
  inPreview: boolean;
10
10
  inMessage: boolean;
@@ -34,10 +34,8 @@ export type GetAIFrameFeatureResult = {
34
34
  localPath: string;
35
35
  thingFileUri: string;
36
36
  };
37
- export declare function getAIFrameFeature(devId: string): Promise<GetAIFrameFeatureResult>;
37
+ export declare function getAIFrameFeature(devId: string): Promise<GetAIFrameFeatureResult | null>;
38
38
  export declare function setAIFrameFeature(params: SetAIFrameFeatureParams): Promise<any>;
39
- export declare function getDeviceInfo(devId: string): Promise<unknown>;
40
- export declare function getCurrentHomeInfo(): Promise<unknown>;
41
39
  export declare function setTrailFinish(devId: string): Promise<unknown>;
42
- export declare function isLowPhone(): Promise<unknown>;
40
+ export declare function isLowPhone(): Promise<boolean>;
43
41
  export declare function getNgRawData(): Promise<unknown>;
package/lib/utils/ttt.js CHANGED
@@ -1,24 +1,37 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
2
  export function getSmartImageQualityState(devId) {
3
3
  return new Promise(resolve => {
4
+ var _ty$ipc;
5
+ const isSupport = typeof ((_ty$ipc = ty.ipc) === null || _ty$ipc === void 0 ? void 0 : _ty$ipc.getSmartImageQualityState) === 'function';
6
+ if (!isSupport) {
7
+ resolve(null);
8
+ return;
9
+ }
4
10
  try {
5
- ty.ipc.getSmartImageQualityState({
11
+ var _ty;
12
+ (_ty = ty) === null || _ty === void 0 || (_ty = _ty.ipc) === null || _ty === void 0 || _ty.getSmartImageQualityState({
6
13
  devId,
7
14
  scene: 'inPreview',
8
15
  success: data => {
9
16
  resolve(data);
10
17
  },
11
18
  fail: () => {
12
- resolve(undefined);
19
+ resolve(null);
13
20
  }
14
21
  });
15
22
  } catch (e) {
16
- resolve(undefined);
23
+ resolve(null);
17
24
  }
18
25
  });
19
26
  }
20
27
  export function getAIFrameFeature(devId) {
21
28
  return new Promise(resolve => {
29
+ var _ty$ipc2;
30
+ const isSupport = typeof ((_ty$ipc2 = ty.ipc) === null || _ty$ipc2 === void 0 ? void 0 : _ty$ipc2.getAIFrameFeature) === 'function';
31
+ if (!isSupport) {
32
+ resolve(null);
33
+ return;
34
+ }
22
35
  try {
23
36
  ty.ipc.getAIFrameFeature({
24
37
  devId,
@@ -28,16 +41,22 @@ export function getAIFrameFeature(devId) {
28
41
  },
29
42
  fail: e => {
30
43
  console.warn('res===getAIFrameFeature fail', e);
31
- resolve(undefined);
44
+ resolve(null);
32
45
  }
33
46
  });
34
47
  } catch (e) {
35
- resolve(undefined);
48
+ resolve(null);
36
49
  }
37
50
  });
38
51
  }
39
52
  export function setAIFrameFeature(params) {
40
53
  return new Promise(resolve => {
54
+ var _ty$ipc3;
55
+ const isSupport = typeof ((_ty$ipc3 = ty.ipc) === null || _ty$ipc3 === void 0 ? void 0 : _ty$ipc3.setAIFrameFeature) === 'function';
56
+ if (!isSupport) {
57
+ resolve(null);
58
+ return;
59
+ }
41
60
  try {
42
61
  ty.ipc.setAIFrameFeature(_objectSpread(_objectSpread({}, params), {}, {
43
62
  success: data => {
@@ -46,70 +65,50 @@ export function setAIFrameFeature(params) {
46
65
  },
47
66
  fail: e => {
48
67
  console.warn('res===setAIFrameFeature fail', e);
49
- resolve(undefined);
68
+ resolve(null);
50
69
  }
51
70
  }));
52
71
  } catch (e) {
53
- resolve(undefined);
54
- }
55
- });
56
- }
57
- export function getDeviceInfo(devId) {
58
- return new Promise(resolve => {
59
- try {
60
- ty.device.getDeviceInfo({
61
- deviceId: devId,
62
- success: res => {
63
- resolve(res);
64
- },
65
- fail: () => {
66
- resolve(undefined);
67
- }
68
- });
69
- } catch (e) {
70
- resolve(undefined);
71
- }
72
- });
73
- }
74
- export function getCurrentHomeInfo() {
75
- return new Promise(resolve => {
76
- try {
77
- ty.home.getCurrentHomeInfo({
78
- success: res => {
79
- resolve(res);
80
- },
81
- fail: () => {
82
- resolve(undefined);
83
- }
84
- });
85
- } catch (e) {
86
- resolve(undefined);
72
+ resolve(null);
87
73
  }
88
74
  });
89
75
  }
90
76
  export function setTrailFinish(devId) {
91
77
  return new Promise(resolve => {
78
+ var _ty$ipc4;
79
+ const isSupport = typeof ((_ty$ipc4 = ty.ipc) === null || _ty$ipc4 === void 0 ? void 0 : _ty$ipc4.setTrailFinish) === 'function';
80
+ if (!isSupport) {
81
+ resolve(null);
82
+ return;
83
+ }
92
84
  try {
93
- ty.ipc.setTrailFinish({
85
+ var _ty2;
86
+ (_ty2 = ty) === null || _ty2 === void 0 || (_ty2 = _ty2.ipc) === null || _ty2 === void 0 || _ty2.setTrailFinish({
94
87
  devId,
95
88
  success: res => {
96
89
  resolve(res);
97
90
  },
98
91
  fail: () => {
99
- resolve(undefined);
92
+ resolve(null);
100
93
  }
101
94
  });
102
95
  } catch (e) {
103
- resolve(undefined);
96
+ resolve(null);
104
97
  }
105
98
  });
106
99
  }
107
100
  export function isLowPhone() {
108
101
  return new Promise(resolve => {
102
+ var _ty$ipc5;
103
+ const isSupport = typeof ((_ty$ipc5 = ty.ipc) === null || _ty$ipc5 === void 0 ? void 0 : _ty$ipc5.isLowPhone) === 'function';
104
+ if (!isSupport) {
105
+ resolve(false);
106
+ return;
107
+ }
109
108
  try {
110
- ty.device.isLowPhone({
109
+ ty.ipc.isLowPhone({
111
110
  success: res => {
112
- resolve(res);
111
+ resolve(!!res);
113
112
  },
114
113
  fail: () => {
115
114
  resolve(false);
@@ -122,11 +121,17 @@ export function isLowPhone() {
122
121
  }
123
122
  export function getNgRawData() {
124
123
  return new Promise(resolve => {
124
+ var _ty3;
125
+ const isSupport = typeof ((_ty3 = ty) === null || _ty3 === void 0 ? void 0 : _ty3.getNgRawData) === 'function';
126
+ if (!isSupport) {
127
+ resolve(false);
128
+ return;
129
+ }
125
130
  try {
126
131
  ty.getNgRawData({
127
132
  rawKey: 'is_smart_image_quality',
128
133
  success: res => {
129
- resolve(res);
134
+ resolve((res === null || res === void 0 ? void 0 : res.rawData) === 'true');
130
135
  },
131
136
  fail: () => {
132
137
  resolve(false);
@@ -28,7 +28,6 @@ export const TrialBadge = _ref => {
28
28
  const startTimeRef = useRef(Date.now());
29
29
  const initialSecRef = useRef(Math.max(0, Math.floor(trialRemainingSec)));
30
30
  useEffect(() => {
31
- console.log('res===trialRemainingSec', trialRemainingSec);
32
31
  const sec = Math.max(0, Math.floor(trialRemainingSec));
33
32
  endedRef.current = false;
34
33
  initialSecRef.current = sec;
@@ -66,7 +66,6 @@ export const TryExperience = props => {
66
66
  updateImgSrc();
67
67
  }, [buttonState]);
68
68
  const updateImgSrc = useCallback(() => {
69
- console.log('res===updateImgSrc', buttonState, isLowPhone);
70
69
  if (isLowPhone) {
71
70
  setImgSrc(tryClose);
72
71
  return;
@@ -98,6 +97,7 @@ export const TryExperience = props => {
98
97
  lockRef.current = true;
99
98
  try {
100
99
  const getAI = await getAIFrameFeature(devId);
100
+ if (!getAI) return;
101
101
  if (buttonState === TryExperienceStatus.Open) {
102
102
  var _getAI$aiFrameFeature, _getAI$aiFrameFeature2, _getAI$aiFrameFeature3, _props$event;
103
103
  // 由开变关的时候,只关inPreview
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ray-js/ipc-player-integration",
3
- "version": "0.0.35-beta.25",
3
+ "version": "0.0.35-beta.27",
4
4
  "description": "IPC 融合播放器",
5
5
  "main": "lib/index",
6
6
  "files": [
@@ -37,7 +37,7 @@
37
37
  "dependencies": {
38
38
  "@ray-js/direction-control": "^0.0.8",
39
39
  "@ray-js/ipc-ptz-zoom": "^0.0.3",
40
- "@ray-js/ray-ipc-player": "2.1.1-beta.3",
40
+ "@ray-js/ray-ipc-player": "^2.1.1",
41
41
  "@ray-js/ray-ipc-utils": "^1.1.15",
42
42
  "@ray-js/svg": "0.2.0",
43
43
  "clsx": "^1.2.1",