@xhsreds/reds-rn-next 0.9.1-feat-image-2202510231126 → 0.9.1-test.0

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 (51) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/coverage/.tmp/coverage-0.json +1 -1
  3. package/coverage/.tmp/coverage-1.json +1 -1
  4. package/coverage/.tmp/coverage-10.json +1 -1
  5. package/coverage/.tmp/coverage-11.json +1 -1
  6. package/coverage/.tmp/coverage-12.json +1 -1
  7. package/coverage/.tmp/coverage-13.json +1 -1
  8. package/coverage/.tmp/coverage-14.json +1 -1
  9. package/coverage/.tmp/coverage-15.json +1 -1
  10. package/coverage/.tmp/coverage-16.json +1 -1
  11. package/coverage/.tmp/coverage-17.json +1 -1
  12. package/coverage/.tmp/coverage-18.json +1 -1
  13. package/coverage/.tmp/coverage-19.json +1 -1
  14. package/coverage/.tmp/coverage-2.json +1 -1
  15. package/coverage/.tmp/coverage-20.json +1 -1
  16. package/coverage/.tmp/coverage-23.json +1 -1
  17. package/coverage/.tmp/coverage-24.json +1 -1
  18. package/coverage/.tmp/coverage-25.json +1 -1
  19. package/coverage/.tmp/coverage-26.json +1 -1
  20. package/coverage/.tmp/coverage-27.json +1 -1
  21. package/coverage/.tmp/coverage-29.json +1 -1
  22. package/coverage/.tmp/coverage-3.json +1 -1
  23. package/coverage/.tmp/coverage-30.json +1 -1
  24. package/coverage/.tmp/coverage-31.json +1 -1
  25. package/coverage/.tmp/coverage-32.json +1 -1
  26. package/coverage/.tmp/coverage-34.json +1 -1
  27. package/coverage/.tmp/coverage-35.json +1 -1
  28. package/coverage/.tmp/coverage-37.json +1 -1
  29. package/coverage/.tmp/coverage-38.json +1 -1
  30. package/coverage/.tmp/coverage-39.json +1 -1
  31. package/coverage/.tmp/coverage-4.json +1 -1
  32. package/coverage/.tmp/coverage-40.json +1 -1
  33. package/coverage/.tmp/coverage-41.json +1 -1
  34. package/coverage/.tmp/coverage-42.json +1 -1
  35. package/coverage/.tmp/coverage-43.json +1 -1
  36. package/coverage/.tmp/coverage-5.json +1 -1
  37. package/coverage/.tmp/coverage-6.json +1 -1
  38. package/coverage/.tmp/coverage-7.json +1 -1
  39. package/coverage/.tmp/coverage-8.json +1 -1
  40. package/coverage/.tmp/coverage-9.json +1 -1
  41. package/lib/cjs/components/Image/VisibilitySensor.js +76 -18
  42. package/lib/cjs/components/Image/VisibilitySensor.js.map +1 -1
  43. package/lib/cjs/components/Radio/Radio.js.map +1 -1
  44. package/lib/cjs/pvCount/pvData.js +1 -1
  45. package/lib/esm/components/Image/VisibilitySensor.js +78 -20
  46. package/lib/esm/components/Image/VisibilitySensor.js.map +1 -1
  47. package/lib/esm/components/Radio/Radio.js.map +1 -1
  48. package/lib/esm/pvCount/pvData.js +1 -1
  49. package/package.json +1 -1
  50. package/src/components/Image/VisibilitySensor.tsx +84 -30
  51. package/src/index.ts +1 -0
@@ -1 +1 @@
1
- {"/builds/fe/infra/reds/packages/reds-rn/src/components/CheckBoxGroup/interface/index.ts":{"path":"/builds/fe/infra/reds/packages/reds-rn/src/components/CheckBoxGroup/interface/index.ts","statementMap":{"0":{"start":{"line":1,"column":49},"end":{"line":5,"column":29}},"1":{"start":{"line":2,"column":2},"end":{"line":2,"column":52}},"2":{"start":{"line":3,"column":2},"end":{"line":3,"column":48}},"3":{"start":{"line":4,"column":2},"end":{"line":4,"column":30}},"4":{"start":{"line":6,"column":47},"end":{"line":10,"column":27}},"5":{"start":{"line":7,"column":2},"end":{"line":7,"column":40}},"6":{"start":{"line":8,"column":2},"end":{"line":8,"column":38}},"7":{"start":{"line":9,"column":2},"end":{"line":9,"column":28}},"8":{"start":{"line":11,"column":47},"end":{"line":16,"column":27}},"9":{"start":{"line":12,"column":2},"end":{"line":12,"column":40}},"10":{"start":{"line":13,"column":2},"end":{"line":13,"column":42}},"11":{"start":{"line":14,"column":2},"end":{"line":14,"column":40}},"12":{"start":{"line":15,"column":2},"end":{"line":15,"column":28}},"13":{"start":{"line":17,"column":43},"end":{"line":22,"column":23}},"14":{"start":{"line":18,"column":2},"end":{"line":18,"column":34}},"15":{"start":{"line":19,"column":2},"end":{"line":19,"column":34}},"16":{"start":{"line":20,"column":2},"end":{"line":20,"column":34}},"17":{"start":{"line":21,"column":2},"end":{"line":21,"column":24}},"18":{"start":{"line":23,"column":41},"end":{"line":30,"column":1}},"19":{"start":{"line":31,"column":40},"end":{"line":37,"column":1}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":50},"end":{"line":1,"column":51}},"loc":{"start":{"line":1,"column":76},"end":{"line":5,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":6,"column":48},"end":{"line":6,"column":49}},"loc":{"start":{"line":6,"column":72},"end":{"line":10,"column":1}},"line":6},"2":{"name":"(anonymous_2)","decl":{"start":{"line":11,"column":48},"end":{"line":11,"column":49}},"loc":{"start":{"line":11,"column":72},"end":{"line":16,"column":1}},"line":11},"3":{"name":"(anonymous_3)","decl":{"start":{"line":17,"column":44},"end":{"line":17,"column":45}},"loc":{"start":{"line":17,"column":64},"end":{"line":22,"column":1}},"line":17}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":3},"end":{"line":5,"column":28}},"type":"binary-expr","locations":[{"start":{"line":5,"column":3},"end":{"line":5,"column":22}},{"start":{"line":5,"column":26},"end":{"line":5,"column":28}}],"line":5},"1":{"loc":{"start":{"line":10,"column":3},"end":{"line":10,"column":26}},"type":"binary-expr","locations":[{"start":{"line":10,"column":3},"end":{"line":10,"column":20}},{"start":{"line":10,"column":24},"end":{"line":10,"column":26}}],"line":10},"2":{"loc":{"start":{"line":16,"column":3},"end":{"line":16,"column":26}},"type":"binary-expr","locations":[{"start":{"line":16,"column":3},"end":{"line":16,"column":20}},{"start":{"line":16,"column":24},"end":{"line":16,"column":26}}],"line":16},"3":{"loc":{"start":{"line":22,"column":3},"end":{"line":22,"column":22}},"type":"binary-expr","locations":[{"start":{"line":22,"column":3},"end":{"line":22,"column":16}},{"start":{"line":22,"column":20},"end":{"line":22,"column":22}}],"line":22}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1},"f":{"0":1,"1":1,"2":1,"3":1},"b":{"0":[1,1],"1":[1,1],"2":[1,1],"3":[1,1]},"inputSourceMap":{"version":3,"sources":["/builds/fe/infra/reds/packages/reds-rn/src/components/CheckBoxGroup/interface/index.ts"],"sourcesContent":["import { ViewStyle, TextStyle } from \"react-native\";\nimport { ReactNode } from \"react\";\n\nexport interface CheckBoxGroupOption {\n label: string;\n value: string | number;\n}\n\nexport const enum CheckBoxGroupLayout {\n HORIZONTAL = \"horizontal\",\n VERTICAL = \"vertical\",\n}\n\nexport const enum CheckBoxPlacement {\n RIGHT = \"right\",\n LEFT = \"left\",\n}\n\nexport const enum CheckBoxGroupSize {\n SMALL = \"small\",\n MEDIUM = \"medium\",\n LARGE = \"large\",\n}\n\nexport const enum CheckedStatus {\n FULL = \"full\",\n HALF = \"half\",\n NONE = \"none\",\n}\nexport interface RedsCheckBoxGroup {\n value?: string[] | number[];\n options?: CheckBoxGroupOption[];\n disable?: boolean;\n full?: boolean;\n fullText?: string;\n fullContainerStyle?: ViewStyle;\n checkboxStyle?: ViewStyle;\n layout?: CheckBoxGroupLayout;\n size?: CheckBoxGroupSize;\n onChange?: (value: string[] | number[]) => void;\n children?: ReactNode[];\n}\n\nexport interface RedsCheckBoxGroupEvent {}\nexport const CheckBoxGroupDefaultProps = {\n value: [],\n options: [],\n disable: false,\n full: false,\n layout: CheckBoxGroupLayout.HORIZONTAL,\n size: CheckBoxGroupSize.LARGE,\n};\n\nexport interface RedsCheckBox {\n value: string | number;\n label?: string;\n placement?: CheckBoxPlacement;\n disable?: boolean;\n checked?: boolean;\n layout?: CheckBoxGroupLayout;\n style?: ViewStyle;\n size?: CheckBoxGroupSize;\n onChange?: (value: string | number, checked: boolean) => void;\n isControl?: boolean;\n labelStyle?: ViewStyle;\n labelTextStyle?: TextStyle;\n isGroup?: boolean;\n checkboxStyle?: ViewStyle;\n}\n\nexport const RedsCheckBoxDefaultProps = {\n placement: CheckBoxPlacement.RIGHT,\n layout: CheckBoxGroupLayout.HORIZONTAL,\n size: CheckBoxGroupSize.MEDIUM,\n isControl: true,\n isGroup: false,\n};\n\nexport interface ICheckBoxGroupContext {\n checkList: number[] | string[];\n}\n"],"mappings":"AAQO,WAAW,sBAAX,kBAAWA,yBAAX;AACL,EAAAA,qBAAA,gBAAa;AACb,EAAAA,qBAAA,cAAW;AAFK,SAAAA;AAAA,GAAA;AAKX,WAAW,oBAAX,kBAAWC,uBAAX;AACL,EAAAA,mBAAA,WAAQ;AACR,EAAAA,mBAAA,UAAO;AAFS,SAAAA;AAAA,GAAA;AAKX,WAAW,oBAAX,kBAAWC,uBAAX;AACL,EAAAA,mBAAA,WAAQ;AACR,EAAAA,mBAAA,YAAS;AACT,EAAAA,mBAAA,WAAQ;AAHQ,SAAAA;AAAA,GAAA;AAMX,WAAW,gBAAX,kBAAWC,mBAAX;AACL,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,UAAO;AAHS,SAAAA;AAAA,GAAA;AAoBX,aAAM,4BAA4B;AAAA,EACvC,OAAO,CAAC;AAAA,EACR,SAAS,CAAC;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AACR;AAmBO,aAAM,2BAA2B;AAAA,EACtC,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS;AACX;","names":["CheckBoxGroupLayout","CheckBoxPlacement","CheckBoxGroupSize","CheckedStatus"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"fc7c8b5a271c82ad6926938b49b00c3dfd14f542"}}
1
+ {"/builds/fe/infra/reds/packages/reds-rn/src/components/TabBar/interface/index.ts":{"path":"/builds/fe/infra/reds/packages/reds-rn/src/components/TabBar/interface/index.ts","statementMap":{"0":{"start":{"line":1,"column":34},"end":{"line":6,"column":1}}},"fnMap":{},"branchMap":{},"s":{"0":1},"f":{},"b":{},"inputSourceMap":{"version":3,"sources":["/builds/fe/infra/reds/packages/reds-rn/src/components/TabBar/interface/index.ts"],"sourcesContent":["import { GestureResponderEvent } from \"react-native\";\nimport { lightColor } from \"@xhs/reds-token-next\";\nimport { RedsIcon } from \"../../Icon/interface\";\nexport interface RedsTabBar {\n list: DataType[];\n customTabBar?: DataType;\n type: \"text\" | \"icon\";\n active: string;\n value?: boolean;\n badge?: boolean;\n containerStyles?: any;\n textStyles?: any;\n activeTextStyles?: any;\n onChange?: (value: string) => any;\n}\n\nexport interface RedsBadge {\n content?: number | string;\n color?: string;\n dot?: boolean;\n max?: number | string;\n offset?: [number | string, number | string];\n showZero?: boolean;\n position?: \"topLeft\" | \"centerLeft\" | \"centerRight\" | \"topCenter\" | \"centerCenter\";\n}\n\nexport interface DataType {\n text?: string;\n key: string;\n badgeProps?: RedsBadge;\n iconProps?: RedsIcon;\n activeIconProps?: RedsIcon;\n activeColor?: string;\n normalColor?: string;\n}\n\nexport interface RedsTabBarEvent {}\nexport const TabBarDefaultProps = {\n list: [] as DataType[],\n type: \"text\",\n value: undefined,\n badge: false,\n};\n"],"mappings":"AAqCO,aAAM,qBAAqB;AAAA,EAChC,MAAM,CAAC;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;","names":[]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"eab58c974e6c02ecedd61e0a549fb2ada34bba69"}}
@@ -6,17 +6,20 @@ var _rollupPluginBabelHelpers = require('../../_chunks/C9tZEm0t.js');
6
6
  var React = require('react');
7
7
  var reactNative = require('react-native');
8
8
 
9
- var _excluded = ["onChange", "disabled", "threshold", "children"];
9
+ var _excluded = ["onChange", "disabled", "triggerOnce", "delay", "threshold", "children"];
10
10
  var VisibilitySensor = /*#__PURE__*/React.forwardRef(function (props, ref) {
11
11
  var onChange = props.onChange,
12
12
  _props$disabled = props.disabled,
13
13
  disabled = _props$disabled === void 0 ? false : _props$disabled,
14
- _props$threshold = props.threshold,
14
+ _props$triggerOnce = props.triggerOnce,
15
+ triggerOnce = _props$triggerOnce === void 0 ? false : _props$triggerOnce;
16
+ props.delay;
17
+ var _props$threshold = props.threshold,
15
18
  threshold = _props$threshold === void 0 ? {} : _props$threshold,
16
19
  children = props.children,
17
20
  rest = _rollupPluginBabelHelpers._objectWithoutProperties(props, _excluded);
18
21
  var localRef = React.useRef(null);
19
- var measuredOnceRef = React.useRef(false);
22
+ var hasMountedRef = React.useRef(false);
20
23
  React.useImperativeHandle(ref, function () {
21
24
  return {
22
25
  getInnerRef: function getInnerRef() {
@@ -24,28 +27,83 @@ var VisibilitySensor = /*#__PURE__*/React.forwardRef(function (props, ref) {
24
27
  }
25
28
  };
26
29
  });
27
- var measureOnce = React.useCallback(function () {
30
+ var _useState = React.useState({
31
+ rectTop: 0,
32
+ rectBottom: 0,
33
+ rectLeft: 0,
34
+ rectRight: 0,
35
+ rectWidth: 0,
36
+ rectHeight: 0
37
+ }),
38
+ _useState2 = _rollupPluginBabelHelpers._slicedToArray(_useState, 2),
39
+ rectDimensions = _useState2[0],
40
+ setRectDimensions = _useState2[1];
41
+ var _useState3 = React.useState(void 0),
42
+ _useState4 = _rollupPluginBabelHelpers._slicedToArray(_useState3, 2),
43
+ lastValue = _useState4[0],
44
+ setLastValue = _useState4[1];
45
+ var _useState5 = React.useState(false),
46
+ _useState6 = _rollupPluginBabelHelpers._slicedToArray(_useState5, 2),
47
+ active = _useState6[0],
48
+ setActive = _useState6[1];
49
+ var measureInnerView = function measureInnerView() {
28
50
  var _localRef$current;
29
- if (disabled || measuredOnceRef.current) return;
30
- var win = reactNative.Dimensions.get("window");
31
- (_localRef$current = localRef.current) === null || _localRef$current === void 0 || _localRef$current.measure(function (_, __, width, height, pageX, pageY) {
32
- if (measuredOnceRef.current) return;
33
- var isVisible = pageY + (threshold.top || 0) <= win.height && pageY + height - (threshold.bottom || 0) >= 0 && pageX + (threshold.left || 0) <= win.width && pageX + width - (threshold.right || 0) >= 0;
34
- measuredOnceRef.current = true;
35
- onChange(isVisible);
51
+ if (!active) return;
52
+ (_localRef$current = localRef.current) === null || _localRef$current === void 0 || _localRef$current.measure(function (_x, _y, width, height, pageX, pageY) {
53
+ var dimensions = {
54
+ rectTop: pageY,
55
+ rectBottom: pageY + height,
56
+ rectLeft: pageX,
57
+ rectRight: pageX + width,
58
+ rectWidth: width,
59
+ rectHeight: height
60
+ };
61
+ if (rectDimensions.rectTop !== dimensions.rectTop || rectDimensions.rectBottom !== dimensions.rectBottom || rectDimensions.rectLeft !== dimensions.rectLeft || rectDimensions.rectRight !== dimensions.rectRight || rectDimensions.rectWidth !== dimensions.rectWidth || rectDimensions.rectHeight !== dimensions.rectHeight) {
62
+ setRectDimensions(dimensions);
63
+ }
36
64
  });
37
- }, [disabled, onChange, threshold]);
65
+ };
66
+ var startWatching = React.useCallback(function () {
67
+ if (!active) setActive(true);
68
+ }, [active]);
69
+ var stopWatching = React.useCallback(function () {
70
+ if (active) setActive(false);
71
+ }, [active]);
72
+ React.useEffect(function () {
73
+ if (!disabled) {
74
+ startWatching();
75
+ }
76
+ return function () {
77
+ stopWatching();
78
+ };
79
+ }, [disabled, startWatching, stopWatching]);
38
80
  React.useEffect(function () {
39
- if (!disabled && !measuredOnceRef.current) {
40
- requestAnimationFrame(function () {
41
- return measureOnce();
42
- });
81
+ if (!hasMountedRef.current) {
82
+ hasMountedRef.current = true;
83
+ return;
43
84
  }
44
- }, [disabled, measureOnce]);
85
+ var window = reactNative.Dimensions.get("window");
86
+ var isVisible = rectDimensions.rectTop + (threshold.top || 0) <= window.height &&
87
+ // Top edge is within the bottom of the window
88
+ rectDimensions.rectBottom - (threshold.bottom || 0) >= 0 &&
89
+ // Bottom edge is within the top of the window
90
+ rectDimensions.rectLeft + (threshold.left || 0) <= window.width &&
91
+ // Left edge is within the right of the window
92
+ rectDimensions.rectRight - (threshold.right || 0) >= 0;
93
+ if (lastValue !== isVisible) {
94
+ setLastValue(isVisible);
95
+ onChange(isVisible);
96
+ if (isVisible && triggerOnce) {
97
+ stopWatching();
98
+ }
99
+ }
100
+ }, [rectDimensions, lastValue]);
45
101
  return /* @__PURE__ */React.createElement(reactNative.View, _rollupPluginBabelHelpers._objectSpread2(_rollupPluginBabelHelpers._objectSpread2({
46
102
  ref: localRef
47
103
  }, rest), {}, {
48
- onLayout: measureOnce
104
+ onLayout: function onLayout() {
105
+ return measureInnerView();
106
+ }
49
107
  }), children);
50
108
  });
51
109
 
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilitySensor.js","sources":["../../../../src/components/Image/VisibilitySensor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, forwardRef, useImperativeHandle } from \"react\";\nimport { Dimensions, View } from \"react-native\";\nimport type { VisibilitySensorRef, VisibilitySensorProps } from \"./interface/visibilitySensor\";\n\n// Measure visibility once on first layout to avoid state-driven re-render loops\nconst VisibilitySensor = forwardRef<VisibilitySensorRef, VisibilitySensorProps>((props, ref) => {\n const { onChange, disabled = false, threshold = {}, children, ...rest } = props;\n const localRef = useRef<View>(null);\n const measuredOnceRef = useRef(false);\n\n useImperativeHandle(ref, () => ({\n getInnerRef: () => localRef.current,\n }));\n\n const measureOnce = useCallback(() => {\n if (disabled || measuredOnceRef.current) return;\n const win = Dimensions.get(\"window\");\n localRef.current?.measure((_, __, width: number, height: number, pageX: number, pageY: number) => {\n if (measuredOnceRef.current) return; // guard against double-calls in same frame\n const isVisible =\n pageY + (threshold.top || 0) <= win.height &&\n pageY + height - (threshold.bottom || 0) >= 0 &&\n pageX + (threshold.left || 0) <= win.width &&\n pageX + width - (threshold.right || 0) >= 0;\n measuredOnceRef.current = true;\n onChange(isVisible);\n });\n }, [disabled, onChange, threshold]);\n\n // If initially disabled, measure once when enabled later\n useEffect(() => {\n if (!disabled && !measuredOnceRef.current) {\n requestAnimationFrame(() => measureOnce());\n }\n }, [disabled, measureOnce]);\n\n return (\n <View ref={localRef} {...rest} onLayout={measureOnce}>\n {children}\n </View>\n );\n});\n\nexport default VisibilitySensor;\n"],"names":["VisibilitySensor","forwardRef","props","ref","onChange","_props$disabled","disabled","_props$threshold","threshold","children","rest","_objectWithoutProperties","_excluded","localRef","useRef","measuredOnceRef","useImperativeHandle","getInnerRef","current","measureOnce","useCallback","_localRef$current","win","Dimensions","get","measure","_","__","width","height","pageX","pageY","isVisible","top","bottom","left","right","useEffect","requestAnimationFrame","React","createElement","View","onLayout"],"mappings":";;;;;;;;;AAKMA,IAAAA,gBAAmB,gBAAAC,gBAAA,CAAuD,UAACC,KAAA,EAAOC,GAAQ,EAAA;AACxF,EAAA,IAAEC,QAAU,GAAwDF,KAAA,CAAlEE,QAAU;IAAAC,eAAA,GAAwDH,KAAA,CAAxDI,QAAA;AAAAA,IAAAA,QAAA,GAAAD,eAAA,KAAW,KAAA,CAAA,GAAA,KAAO,GAAAA,eAAA;IAAAE,gBAAA,GAAsCL,KAAA,CAAtCM,SAAA;AAAAA,IAAAA,SAAA,GAAAD,gBAAA,KAAA,KAAA,CAAA,GAAY,EAAI,GAAAA,gBAAA;IAAAE,QAAA,GAAsBP,KAAA,CAAtBO,QAAA;AAAaC,IAAAA,IAAA,GAAAC,kDAAA,CAAST,KAAA,EAAAU,SAAA,CAAA,CAAA;AACpE,EAAA,IAAAC,QAAA,GAAWC,aAAa,IAAI,CAAA,CAAA;AAC5B,EAAA,IAAAC,eAAA,GAAkBD,aAAO,KAAK,CAAA,CAAA;EAEpCE,yBAAA,CAAoBb,KAAK,YAAA;IAAA,OAAO;MAC9Bc,WAAA,EAAa,SAAbA,WAAAA,GAAA;QAAA,OAAmBJ,QAAS,CAAAK,OAAA,CAAA;AAAA,OAAA;KAC5B,CAAA;AAAA,GAAA,CAAA,CAAA;AAEI,EAAA,IAAAC,WAAA,GAAcC,kBAAY,YAAM;AAAA,IAAA,IAAAC,iBAAA,CAAA;AAChC,IAAA,IAAAf,QAAA,IAAYS,gBAAgBG,OAAS,EAAA,OAAA;AACnC,IAAA,IAAAI,GAAA,GAAMC,sBAAW,CAAAC,GAAA,CAAI,QAAQ,CAAA,CAAA;IAC1B,CAAAH,iBAAA,GAAAR,QAAA,CAAAK,OAAA,cAAAG,iBAAA,KAAA,KAAA,CAAA,IAAAA,iBAAA,CAASI,QAAQ,UAACC,CAAA,EAAGC,IAAIC,KAAe,EAAAC,MAAA,EAAgBC,OAAeC,KAAkB,EAAA;MAChG,IAAIhB,gBAAgBG,OAAS,EAAA,OAAA;MACvB,IAAAc,SAAA,GACJD,SAASvB,SAAU,CAAAyB,GAAA,IAAO,MAAMX,GAAI,CAAAO,MAAA,IACpCE,KAAQ,GAAAF,MAAA,IAAUrB,SAAU,CAAA0B,MAAA,IAAU,MAAM,CAC5C,IAAAJ,KAAA,IAAStB,SAAU,CAAA2B,IAAA,IAAQ,CAAM,CAAA,IAAAb,GAAA,CAAIM,SACrCE,KAAQ,GAAAF,KAAA,IAASpB,SAAU,CAAA4B,KAAA,IAAS,CAAM,CAAA,IAAA,CAAA,CAAA;MAC5CrB,eAAA,CAAgBG,OAAU,GAAA,IAAA,CAAA;MAC1Bd,QAAA,CAAS4B,SAAS,CAAA,CAAA;AACpB,KAAC,CAAA,CAAA;GACA,EAAA,CAAC1B,QAAU,EAAAF,QAAA,EAAUI,SAAS,CAAC,CAAA,CAAA;AAGlC6B,EAAAA,eAAA,CAAU,YAAM;AACd,IAAA,IAAI,CAAC/B,QAAA,IAAY,CAACS,eAAA,CAAgBG,OAAS,EAAA;AACnBoB,MAAAA,qBAAA,CAAA,YAAA;QAAA,OAAMnB,aAAa,CAAA;OAAA,CAAA,CAAA;AAC3C,KAAA;AACF,GAAG,EAAA,CAACb,QAAU,EAAAa,WAAW,CAAC,CAAA,CAAA;EAGxB,sBAAAoB,KAAA,CAAAC,aAAA,CAACC;AAAKtC,IAAAA,GAAK,EAAAU,QAAAA;AAAA,GAAA,EAAcH,IAAM,CAAA,EAAA,EAAA,EAAA;AAAAgC,IAAAA,QAAA,EAAUvB,WAAAA;MACtCV,QACH,CAAA,CAAA;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"VisibilitySensor.js","sources":["../../../../src/components/Image/VisibilitySensor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState, forwardRef, useImperativeHandle } from \"react\";\nimport { Dimensions, type ScaledSize, View } from \"react-native\";\nimport type { VisibilitySensorRef, VisibilitySensorProps, RectDimensionsState } from \"./interface/visibilitySensor\";\n// function useInterval(callback: () => void, delay: number | null) {\n// const savedCallback = useRef(callback);\n// useEffect(() => {\n// savedCallback.current = callback;\n// }, [callback]);\n// useEffect(() => {\n// if (delay === null || delay === undefined) {\n// return;\n// }\n// const id = setInterval(() => savedCallback.current(), delay);\n// return () => clearInterval(id);\n// }, [delay]);\n// }\nconst VisibilitySensor = forwardRef<VisibilitySensorRef, VisibilitySensorProps>((props, ref) => {\n const { onChange, disabled = false, triggerOnce = false, delay, threshold = {}, children, ...rest } = props;\n const localRef = useRef<View>(null);\n const hasMountedRef = useRef(false);\n useImperativeHandle(ref, () => ({\n getInnerRef: () => localRef.current,\n }));\n const [rectDimensions, setRectDimensions] = useState<RectDimensionsState>({\n rectTop: 0,\n rectBottom: 0,\n rectLeft: 0,\n rectRight: 0,\n rectWidth: 0,\n rectHeight: 0,\n });\n const [lastValue, setLastValue] = useState<boolean | undefined>(undefined);\n const [active, setActive] = useState<boolean>(false);\n const measureInnerView = () => {\n if (!active) return;\n localRef.current?.measure((_x: number, _y: number, width: number, height: number, pageX: number, pageY: number) => {\n const dimensions = {\n rectTop: pageY,\n rectBottom: pageY + height,\n rectLeft: pageX,\n rectRight: pageX + width,\n rectWidth: width,\n rectHeight: height,\n };\n if (\n rectDimensions.rectTop !== dimensions.rectTop ||\n rectDimensions.rectBottom !== dimensions.rectBottom ||\n rectDimensions.rectLeft !== dimensions.rectLeft ||\n rectDimensions.rectRight !== dimensions.rectRight ||\n rectDimensions.rectWidth !== dimensions.rectWidth ||\n rectDimensions.rectHeight !== dimensions.rectHeight\n ) {\n setRectDimensions(dimensions);\n }\n });\n };\n // useInterval(measureInnerView, delay || 100);\n const startWatching = useCallback(() => {\n if (!active) setActive(true);\n }, [active]);\n const stopWatching = useCallback(() => {\n if (active) setActive(false);\n }, [active]);\n useEffect(() => {\n if (!disabled) {\n startWatching();\n }\n return () => {\n stopWatching();\n };\n }, [disabled, startWatching, stopWatching]);\n useEffect(() => {\n if (!hasMountedRef.current) {\n hasMountedRef.current = true;\n return;\n }\n const window: ScaledSize = Dimensions.get(\"window\");\n const isVisible: boolean =\n rectDimensions.rectTop + (threshold.top || 0) <= window.height && // Top edge is within the bottom of the window\n rectDimensions.rectBottom - (threshold.bottom || 0) >= 0 && // Bottom edge is within the top of the window\n rectDimensions.rectLeft + (threshold.left || 0) <= window.width && // Left edge is within the right of the window\n rectDimensions.rectRight - (threshold.right || 0) >= 0; // Right edge is within the left of the window\n if (lastValue !== isVisible) {\n setLastValue(isVisible);\n onChange(isVisible);\n if (isVisible && triggerOnce) {\n stopWatching();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rectDimensions, lastValue]);\n return (\n <View ref={localRef} {...rest} onLayout={() => measureInnerView()}>\n {children}\n </View>\n );\n});\nexport default VisibilitySensor;\n"],"names":["VisibilitySensor","forwardRef","props","ref","onChange","_props$disabled","disabled","_props$triggerOnce","triggerOnce","delay","_props$threshold","threshold","children","rest","_excluded","localRef","useRef","hasMountedRef","useImperativeHandle","getInnerRef","current","_useState","useState","rectTop","rectBottom","rectLeft","rectRight","rectWidth","rectHeight","_useState2","_slicedToArray","rectDimensions","setRectDimensions","_useState3","_useState4","lastValue","setLastValue","_useState5","_useState6","active","setActive","measureInnerView","_localRef$current","measure","_x","_y","width","height","pageX","pageY","dimensions","startWatching","useCallback","stopWatching","useEffect","window","Dimensions","get","isVisible","top","bottom","left","right","React","createElement","View","_objectSpread","onLayout"],"mappings":"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"}