@ray-js/components 0.3.29 → 0.3.30

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 (173) hide show
  1. package/lib/Button/Button.js +6 -50
  2. package/lib/Button/Button.web.js +6 -50
  3. package/lib/Button/index.md +10 -10
  4. package/lib/Checkbox/Checkbox.d.ts +0 -1
  5. package/lib/Checkbox/Checkbox.js +3 -29
  6. package/lib/Checkbox/Checkbox.web.js +3 -29
  7. package/lib/Checkbox/index.md +7 -6
  8. package/lib/CheckboxGroup/CheckboxGroup.js +45 -2
  9. package/lib/CheckboxGroup/CheckboxGroup.web.js +45 -2
  10. package/lib/CheckboxGroup/index.md +4 -4
  11. package/lib/CheckboxGroup/props.d.ts +3 -2
  12. package/lib/DatePicker/DatePicker.js +55 -4
  13. package/lib/DatePicker/DatePicker.web.js +55 -4
  14. package/lib/DatePicker/index.md +8 -8
  15. package/lib/DatePicker/props.d.ts +2 -0
  16. package/lib/Form/Form.android.js +1 -0
  17. package/lib/Form/Form.d.ts +4 -0
  18. package/lib/Form/Form.ios.js +1 -0
  19. package/lib/Form/Form.js +37 -0
  20. package/lib/Form/Form.native.d.ts +4 -0
  21. package/lib/Form/Form.tuya.d.ts +4 -0
  22. package/lib/Form/Form.tuya.js +8 -0
  23. package/lib/Form/Form.web.js +37 -0
  24. package/lib/Form/Form.wechat.d.ts +4 -0
  25. package/lib/Form/Form.wechat.js +33 -0
  26. package/lib/Form/index.android.js +1 -0
  27. package/lib/Form/index.d.ts +3 -0
  28. package/lib/Form/index.ios.js +1 -0
  29. package/lib/Form/index.js +3 -0
  30. package/lib/Form/index.md +30 -0
  31. package/lib/Form/index.tuya.js +3 -0
  32. package/lib/Form/index.web.js +3 -0
  33. package/lib/Form/index.wechat.js +3 -0
  34. package/lib/Form/props.android.js +1 -0
  35. package/lib/Form/props.d.ts +13 -0
  36. package/lib/Form/props.ios.js +1 -0
  37. package/lib/Form/props.js +1 -0
  38. package/lib/Form/props.tuya.js +1 -0
  39. package/lib/Form/props.web.js +1 -0
  40. package/lib/Form/props.wechat.js +1 -0
  41. package/lib/Icon/index.md +4 -4
  42. package/lib/Image/Image.js +33 -86
  43. package/lib/Image/Image.web.js +33 -86
  44. package/lib/Image/index.md +20 -20
  45. package/lib/Image/props.d.ts +1 -0
  46. package/lib/Input/Input.js +54 -78
  47. package/lib/Input/Input.web.js +54 -78
  48. package/lib/Input/index.md +14 -14
  49. package/lib/Label/Label.android.js +1 -1
  50. package/lib/Label/Label.ios.js +1 -1
  51. package/lib/Label/Label.js +8 -15
  52. package/lib/Label/Label.web.js +8 -15
  53. package/lib/Label/index.md +31 -0
  54. package/lib/Label/props.d.ts +7 -0
  55. package/lib/Motion/Fade/index.js +1 -1
  56. package/lib/Motion/Fade/index.web.js +1 -1
  57. package/lib/Motion/PullUp/index.js +1 -1
  58. package/lib/Motion/PullUp/index.web.js +1 -1
  59. package/lib/Motion/PushDown/index.js +1 -1
  60. package/lib/Motion/PushDown/index.web.js +1 -1
  61. package/lib/Motion/ScaleFadeIn/index.js +1 -1
  62. package/lib/Motion/ScaleFadeIn/index.web.js +1 -1
  63. package/lib/Motion/ScalePullDown/index.js +1 -1
  64. package/lib/Motion/ScalePullDown/index.web.js +1 -1
  65. package/lib/PageContainer/PageContainer.android.js +1 -1
  66. package/lib/PageContainer/PageContainer.d.ts +2 -4
  67. package/lib/PageContainer/PageContainer.ios.js +1 -1
  68. package/lib/PageContainer/PageContainer.js +1 -1
  69. package/lib/PageContainer/PageContainer.web.js +85 -5
  70. package/lib/PageContainer/index.md +19 -19
  71. package/lib/PageContainer/props.d.ts +12 -7
  72. package/lib/Picker/Picker.js +67 -4
  73. package/lib/Picker/Picker.web.js +67 -4
  74. package/lib/Picker/index.md +9 -9
  75. package/lib/Picker/props.d.ts +2 -0
  76. package/lib/PickerView/PickerView.js +69 -4
  77. package/lib/PickerView/PickerView.web.js +69 -4
  78. package/lib/PickerView/index.md +8 -7
  79. package/lib/PickerView/props.d.ts +3 -0
  80. package/lib/PickerViewColumn/PickerViewColumn.android.js +1 -0
  81. package/lib/PickerViewColumn/PickerViewColumn.d.ts +4 -0
  82. package/lib/PickerViewColumn/PickerViewColumn.ios.js +1 -0
  83. package/lib/PickerViewColumn/PickerViewColumn.js +14 -0
  84. package/lib/PickerViewColumn/PickerViewColumn.native.d.ts +31 -0
  85. package/lib/PickerViewColumn/PickerViewColumn.tuya.d.ts +4 -0
  86. package/lib/PickerViewColumn/PickerViewColumn.tuya.js +71 -0
  87. package/lib/PickerViewColumn/PickerViewColumn.web.js +14 -0
  88. package/lib/PickerViewColumn/PickerViewColumn.wechat.d.ts +4 -0
  89. package/lib/PickerViewColumn/PickerViewColumn.wechat.js +72 -0
  90. package/lib/PickerViewColumn/index.android.js +1 -0
  91. package/lib/PickerViewColumn/index.d.ts +3 -0
  92. package/lib/PickerViewColumn/index.ios.js +1 -0
  93. package/lib/PickerViewColumn/index.js +3 -0
  94. package/lib/PickerViewColumn/index.md +21 -0
  95. package/lib/PickerViewColumn/index.module.less +8 -0
  96. package/lib/PickerViewColumn/index.tuya.js +3 -0
  97. package/lib/PickerViewColumn/index.web.js +3 -0
  98. package/lib/PickerViewColumn/index.wechat.js +3 -0
  99. package/lib/PickerViewColumn/props.android.js +1 -0
  100. package/lib/PickerViewColumn/props.d.ts +16 -0
  101. package/lib/PickerViewColumn/props.ios.js +1 -0
  102. package/lib/PickerViewColumn/props.js +1 -0
  103. package/lib/PickerViewColumn/props.tuya.js +1 -0
  104. package/lib/PickerViewColumn/props.web.js +1 -0
  105. package/lib/PickerViewColumn/props.wechat.js +1 -0
  106. package/lib/Radio/Radio.js +3 -6
  107. package/lib/Radio/Radio.web.js +3 -6
  108. package/lib/Radio/index.md +5 -5
  109. package/lib/RadioGroup/RadioGroup.js +50 -2
  110. package/lib/RadioGroup/RadioGroup.web.js +50 -2
  111. package/lib/RadioGroup/index.md +7 -5
  112. package/lib/RadioGroup/props.d.ts +3 -1
  113. package/lib/RichText/RichText.android.js +1 -0
  114. package/lib/RichText/RichText.d.ts +3 -0
  115. package/lib/RichText/RichText.ios.js +1 -0
  116. package/lib/RichText/RichText.js +9 -0
  117. package/lib/RichText/RichText.tuya.js +9 -0
  118. package/lib/RichText/RichText.web.d.ts +4 -0
  119. package/lib/RichText/RichText.web.js +7 -0
  120. package/lib/RichText/RichText.wechat.js +9 -0
  121. package/lib/RichText/index.android.js +1 -0
  122. package/lib/RichText/index.d.ts +3 -0
  123. package/lib/RichText/index.ios.js +1 -0
  124. package/lib/RichText/index.js +3 -0
  125. package/lib/RichText/index.md +117 -0
  126. package/lib/RichText/index.tuya.js +3 -0
  127. package/lib/RichText/index.web.js +3 -0
  128. package/lib/RichText/index.wechat.js +3 -0
  129. package/lib/RichText/props.android.js +0 -0
  130. package/lib/RichText/props.d.ts +29 -0
  131. package/lib/RichText/props.ios.js +0 -0
  132. package/lib/RichText/props.js +1 -0
  133. package/lib/RichText/props.tuya.js +1 -0
  134. package/lib/RichText/props.web.js +1 -0
  135. package/lib/RichText/props.wechat.js +1 -0
  136. package/lib/ScrollView/ScrollView.d.ts +1 -1
  137. package/lib/ScrollView/ScrollView.js +40 -155
  138. package/lib/ScrollView/ScrollView.web.js +40 -155
  139. package/lib/ScrollView/index.md +11 -11
  140. package/lib/Slider/Slider.js +31 -12
  141. package/lib/Slider/Slider.web.js +31 -12
  142. package/lib/Slider/index.md +17 -17
  143. package/lib/Swiper/Swiper.js +61 -2
  144. package/lib/Swiper/Swiper.web.js +61 -2
  145. package/lib/Swiper/index.md +14 -14
  146. package/lib/Switch/Switch.js +20 -6
  147. package/lib/Switch/Switch.web.js +20 -6
  148. package/lib/Switch/index.md +6 -6
  149. package/lib/Text/Text.js +6 -34
  150. package/lib/Text/Text.web.js +6 -34
  151. package/lib/Text/index.md +6 -6
  152. package/lib/TimePicker/TimePicker.js +35 -4
  153. package/lib/TimePicker/TimePicker.web.js +35 -4
  154. package/lib/TimePicker/index.md +9 -9
  155. package/lib/TimePicker/props.d.ts +2 -0
  156. package/lib/View/View.js +6 -5
  157. package/lib/View/View.web.js +6 -5
  158. package/lib/View/index.md +10 -10
  159. package/lib/index.android.js +1 -1
  160. package/lib/index.d.ts +3 -0
  161. package/lib/index.ios.js +1 -1
  162. package/lib/index.js +3 -0
  163. package/lib/index.tuya.js +3 -0
  164. package/lib/index.web.js +3 -0
  165. package/lib/index.wechat.js +3 -0
  166. package/lib/utils/handleProps.android.js +1 -0
  167. package/lib/utils/handleProps.d.ts +5 -0
  168. package/lib/utils/handleProps.ios.js +1 -0
  169. package/lib/utils/handleProps.js +50 -0
  170. package/lib/utils/handleProps.tuya.js +50 -0
  171. package/lib/utils/handleProps.web.js +50 -0
  172. package/lib/utils/handleProps.wechat.js +50 -0
  173. package/package.json +7 -5
@@ -0,0 +1,117 @@
1
+ ---
2
+ nav:
3
+ title: 组件
4
+ path: /components
5
+ group:
6
+ title: 基础组件
7
+ ---
8
+
9
+ # RichText
10
+
11
+ 富文本。
12
+
13
+ ## 导入
14
+
15
+ ```js
16
+ import { RichText } from '@ray-js/components'
17
+ ```
18
+
19
+ ## 示例代码
20
+
21
+ <code src="./demos/basic.tsx" title="基本使用" background="#f2f4f6" height="500px" />
22
+
23
+ ## 属性说明
24
+
25
+ | 属性名 | 类型 | 默认值 | 必填 | 说明 | 支持平台 |
26
+ | ------ | ------------ | ------ | ---- | -------------------- | -------- |
27
+ | nodes | array/string | [] | 否 | 节点列表/HTML String | Web |
28
+
29
+ ### nodes
30
+
31
+ 现支持两种节点,通过 type 来区分,分别是元素节点和文本节点,默认是元素节点,在富文本区域里显示的 HTML 节点 \*元素节点:type = node\*\*
32
+
33
+ | 属性 | 说明 | 类型 | 必填 | 备注 |
34
+ | -------- | ---------- | ------ | ---- | ---------------------------------------- |
35
+ | name | 标签名 | string | 是 | 支持部分受信任的 HTML 节点 |
36
+ | attrs | 属性 | object | 否 | 支持部分受信任的属性,遵循 Pascal 命名法 |
37
+ | children | 子节点列表 | array | 否 | 结构和 nodes 一致 |
38
+
39
+ _文本节点:type = text_
40
+
41
+ | 属性 | 说明 | 类型 | 必填 | 备注 |
42
+ | ---- | ---- | ------ | ---- | ------------- |
43
+ | text | 文本 | string | 是 | 支持 entities |
44
+
45
+ ### 受信任的 HTML 节点及属性
46
+
47
+ 全局支持 class 和 style 属性,**不支持 id 属性**。
48
+
49
+ | 节点 | 属性 |
50
+ | :--------- | ------------------------------- |
51
+ | a | |
52
+ | abbr | |
53
+ | address | |
54
+ | article | |
55
+ | aside | |
56
+ | b | |
57
+ | bdi | |
58
+ | bdo | dir |
59
+ | big | |
60
+ | blockquote | |
61
+ | br | |
62
+ | caption | |
63
+ | center | |
64
+ | cite | |
65
+ | code | |
66
+ | col | span,width |
67
+ | colgroup | span,width |
68
+ | dd | |
69
+ | del | |
70
+ | div | |
71
+ | dl | |
72
+ | dt | |
73
+ | em | |
74
+ | fieldset | |
75
+ | font | |
76
+ | footer | |
77
+ | h1 | |
78
+ | h2 | |
79
+ | h3 | |
80
+ | h4 | |
81
+ | h5 | |
82
+ | h6 | |
83
+ | header | |
84
+ | hr | |
85
+ | i | |
86
+ | img | alt,src,height,width |
87
+ | ins | |
88
+ | label | |
89
+ | legend | |
90
+ | li | |
91
+ | mark | |
92
+ | nav | |
93
+ | ol | start,type |
94
+ | p | |
95
+ | pre | |
96
+ | q | |
97
+ | rt | |
98
+ | ruby | |
99
+ | s | |
100
+ | section | |
101
+ | small | |
102
+ | span | |
103
+ | strong | |
104
+ | sub | |
105
+ | sup | |
106
+ | table | width |
107
+ | tbody | |
108
+ | td | colspan,height,rowspan,width |
109
+ | tfoot | |
110
+ | th | colspan,height,rowspan,width |
111
+ | thead | |
112
+ | tr | colspan,height,rowspan,width |
113
+ | tt | |
114
+ | u | |
115
+ | ul | |
116
+ | iframe | |
117
+ | pre | |
@@ -0,0 +1,3 @@
1
+ import RichText from './RichText';
2
+ export * from './props';
3
+ export default RichText;
@@ -0,0 +1,3 @@
1
+ import RichText from './RichText';
2
+ export * from './props';
3
+ export default RichText;
@@ -0,0 +1,3 @@
1
+ import RichText from './RichText';
2
+ export * from './props';
3
+ export default RichText;
File without changes
@@ -0,0 +1,29 @@
1
+ export interface RichTextNode {
2
+ /**
3
+ * @description.en tagName
4
+ * @description.zh 标签名
5
+ * @default null
6
+ */
7
+ name?: string;
8
+ /**
9
+ * @description.en attribute
10
+ * @description.zh 属性
11
+ * @default null
12
+ */
13
+ attrs?: Record<string, any>;
14
+ /**
15
+ * @description.en Child node list
16
+ * @description.zh 子节点列表
17
+ * @default null
18
+ */
19
+ children?: RichTextNode[];
20
+ [k: string]: any;
21
+ }
22
+ export interface RichTextProps {
23
+ /**
24
+ * @description.en Node list /HTML String
25
+ * @description.zh 节点列表/HTML String
26
+ * @default null
27
+ */
28
+ nodes: string | RichTextNode[];
29
+ }
File without changes
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import { ScrollViewProps } from './props';
3
3
  declare const ScrollView: React.FC<ScrollViewProps>;
4
4
  export default ScrollView;
@@ -1,168 +1,53 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
4
- var _excluded = ["scrollX", "scrollY", "scrollLeft", "scrollTop", "scrollIntoView", "scrollWithAnimation", "className", "style", "upperThreshold", "lowerThreshold", "onScroll", "onScrollToUpper", "onScrollToLower", "showScrollbar"];
5
- import * as React from 'react';
6
- import clsx from 'clsx';
7
- import { tween } from 'shifty';
8
- import View from '../View';
4
+ var _excluded = ["onScroll", "onScrollToUpper", "onScrollToLower"];
5
+ import React from 'react';
6
+ import { useEventListener } from 'ahooks';
9
7
  import { defaultScrollViewProps } from './props';
10
- import styles from './index.module.less';
8
+ import handleProps from '../utils/handleProps';
11
9
 
12
10
  var ScrollView = function (props) {
13
- // TODO 支持 scrollIntoView
14
- var scrollX = props.scrollX,
15
- scrollY = props.scrollY,
16
- scrollLeft = props.scrollLeft,
17
- scrollTop = props.scrollTop,
18
- scrollIntoView = props.scrollIntoView,
19
- scrollWithAnimation = props.scrollWithAnimation,
20
- className = props.className,
21
- style = props.style,
22
- _props$upperThreshold = props.upperThreshold,
23
- upperThreshold = _props$upperThreshold === void 0 ? 50 : _props$upperThreshold,
24
- _props$lowerThreshold = props.lowerThreshold,
25
- lowerThreshold = _props$lowerThreshold === void 0 ? 50 : _props$lowerThreshold,
26
- onScroll = props.onScroll,
11
+ var onScroll = props.onScroll,
27
12
  onScrollToUpper = props.onScrollToUpper,
28
13
  onScrollToLower = props.onScrollToLower,
29
- showScrollbar = props.showScrollbar,
30
14
  restProps = _objectWithoutProperties(props, _excluded);
31
15
 
32
- var internalStyle = {};
33
-
34
- if (scrollX) {
35
- internalStyle.overflowX = 'auto';
36
- internalStyle.overflowY = 'hidden';
37
- }
38
-
39
- if (scrollY) {
40
- internalStyle.overflowY = 'auto';
41
- internalStyle.overflowX = 'hidden';
42
- }
43
-
44
- var rootDom = React.useRef();
45
- var scrollLeftRecord = React.useRef(0);
46
- var scrollTopRecord = React.useRef(0);
47
- var beforeScrollDistance = 0;
48
- var direction = 'down';
49
- React.useEffect(function () {
50
- scrollX && doScrollLeft(scrollLeft);
51
- }, [scrollLeft]);
52
- React.useEffect(function () {
53
- scrollY && doScrollTop(scrollTop);
54
- }, [scrollTop]);
55
-
56
- function doScrollLeft() {
57
- var scrollLeft = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
58
-
59
- if (rootDom && rootDom.current && scrollLeft !== scrollLeftRecord.current) {
60
- if (scrollWithAnimation && scrollLeftRecord.current) {
61
- tween({
62
- from: {
63
- l: scrollLeftRecord.current
64
- },
65
- to: {
66
- l: scrollLeft
67
- },
68
- duration: 100,
69
- step: function step(_ref) {
70
- var l = _ref.l;
71
- rootDom.current.scrollLeft = l;
72
- }
73
- }).then(function () {
74
- rootDom.current.scrollLeft = scrollLeft;
75
- scrollLeftRecord.current = scrollLeft;
76
- });
77
- } else {
78
- scrollLeftRecord.current = scrollLeft;
79
- rootDom.current.scrollLeft = scrollLeft;
80
- }
81
- }
82
- }
83
-
84
- function doScrollTop() {
85
- var scrollTop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
86
-
87
- if (rootDom && rootDom.current && scrollTop !== scrollTopRecord.current) {
88
- if (scrollWithAnimation && scrollTopRecord.current) {
89
- tween({
90
- from: {
91
- l: scrollTopRecord.current
92
- },
93
- to: {
94
- l: scrollTop
95
- },
96
- duration: 100,
97
- step: function step(_ref2) {
98
- var l = _ref2.l;
99
- rootDom.current.scrollTop = l;
100
- }
101
- }).then(function () {
102
- rootDom.current.scrollTop = scrollTop;
103
- scrollTopRecord.current = scrollTop;
104
- });
105
- } else {
106
- scrollTopRecord.current = scrollTop;
107
- rootDom.current.scrollTop = scrollTop;
108
- }
109
- }
110
- }
111
-
112
- return /*#__PURE__*/React.createElement(View, _extends({
113
- ref: function ref(dom) {
114
- if (dom) {
115
- rootDom.current = dom;
116
- }
117
- },
118
- className: clsx('ray-scroll-view', styles.scrollView, className),
119
- onScroll: function handleOnScroll(e) {
120
- // TODO: 增加 event.detail
121
-
122
- /**
123
- * deltaX: 0
124
- * deltaY: -13
125
- * scrollHeight: 1320
126
- * scrollLeft: 0
127
- * scrollTop: 126
128
- * scrollWidth: 387
129
- */
130
- if (rootDom && rootDom.current) {
131
- e.detail = rootDom.current;
132
- var _rootDom$current = rootDom.current,
133
- offsetHeight = _rootDom$current.offsetHeight,
134
- _scrollTop = _rootDom$current.scrollTop,
135
- scrollHeight = _rootDom$current.scrollHeight,
136
- _scrollLeft = _rootDom$current.scrollLeft,
137
- offsetWidth = _rootDom$current.offsetWidth,
138
- scrollWidth = _rootDom$current.scrollWidth; // 记录手动滑的位置
139
-
140
- scrollLeftRecord.current = rootDom.current.scrollLeft;
141
- scrollTopRecord.current = rootDom.current.scrollTop;
142
-
143
- if (scrollY && beforeScrollDistance !== _scrollTop) {
144
- direction = beforeScrollDistance - _scrollTop > 0 ? 'up' : 'down';
145
- beforeScrollDistance = _scrollTop;
146
- }
147
-
148
- if (scrollX && beforeScrollDistance !== _scrollLeft) {
149
- direction = beforeScrollDistance - _scrollLeft > 0 ? 'left' : 'right';
150
- beforeScrollDistance = _scrollLeft;
151
- }
152
-
153
- if (scrollY && direction === 'down' && offsetHeight + _scrollTop + lowerThreshold >= scrollHeight || scrollX && direction === 'right' && offsetWidth + _scrollLeft + lowerThreshold >= scrollWidth) {
154
- onScrollToLower && onScrollToLower();
155
- }
156
-
157
- if (scrollY && direction === 'up' && _scrollTop <= upperThreshold || scrollX && direction === 'left' && _scrollLeft <= upperThreshold) {
158
- onScrollToUpper && onScrollToUpper();
159
- }
160
- }
161
-
162
- onScroll && onScroll(e);
163
- },
164
- style: _objectSpread(_objectSpread({}, internalStyle), style)
165
- }, restProps), props.children);
16
+ var currentNode = React.useRef(null);
17
+ useEventListener('scroll', function (e) {
18
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll(_objectSpread(_objectSpread({
19
+ type: 'scroll'
20
+ }, e.detail), {}, {
21
+ origin: e
22
+ }));
23
+ }, {
24
+ target: currentNode
25
+ });
26
+ useEventListener('scrolltoupper', function (e) {
27
+ onScrollToUpper === null || onScrollToUpper === void 0 ? void 0 : onScrollToUpper(_objectSpread(_objectSpread({
28
+ type: 'scrolltoupper'
29
+ }, e.detail), {}, {
30
+ origin: e
31
+ }));
32
+ }, {
33
+ target: currentNode
34
+ });
35
+ useEventListener('scrolltolower', function (e) {
36
+ onScrollToLower === null || onScrollToLower === void 0 ? void 0 : onScrollToLower(_objectSpread(_objectSpread({
37
+ type: 'scrolltolower'
38
+ }, e.detail), {}, {
39
+ origin: e
40
+ }));
41
+ }, {
42
+ target: currentNode
43
+ });
44
+ return (
45
+ /*#__PURE__*/
46
+ // @ts-ignore
47
+ React.createElement("ty-scroll-view", _extends({}, handleProps(restProps), {
48
+ ref: currentNode
49
+ }), props.children)
50
+ );
166
51
  };
167
52
 
168
53
  ScrollView.defaultProps = defaultScrollViewProps;
@@ -1,168 +1,53 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
4
- var _excluded = ["scrollX", "scrollY", "scrollLeft", "scrollTop", "scrollIntoView", "scrollWithAnimation", "className", "style", "upperThreshold", "lowerThreshold", "onScroll", "onScrollToUpper", "onScrollToLower", "showScrollbar"];
5
- import * as React from 'react';
6
- import clsx from 'clsx';
7
- import { tween } from 'shifty';
8
- import View from '../View';
4
+ var _excluded = ["onScroll", "onScrollToUpper", "onScrollToLower"];
5
+ import React from 'react';
6
+ import { useEventListener } from 'ahooks';
9
7
  import { defaultScrollViewProps } from './props';
10
- import styles from './index.module.less';
8
+ import handleProps from '../utils/handleProps';
11
9
 
12
10
  var ScrollView = function (props) {
13
- // TODO 支持 scrollIntoView
14
- var scrollX = props.scrollX,
15
- scrollY = props.scrollY,
16
- scrollLeft = props.scrollLeft,
17
- scrollTop = props.scrollTop,
18
- scrollIntoView = props.scrollIntoView,
19
- scrollWithAnimation = props.scrollWithAnimation,
20
- className = props.className,
21
- style = props.style,
22
- _props$upperThreshold = props.upperThreshold,
23
- upperThreshold = _props$upperThreshold === void 0 ? 50 : _props$upperThreshold,
24
- _props$lowerThreshold = props.lowerThreshold,
25
- lowerThreshold = _props$lowerThreshold === void 0 ? 50 : _props$lowerThreshold,
26
- onScroll = props.onScroll,
11
+ var onScroll = props.onScroll,
27
12
  onScrollToUpper = props.onScrollToUpper,
28
13
  onScrollToLower = props.onScrollToLower,
29
- showScrollbar = props.showScrollbar,
30
14
  restProps = _objectWithoutProperties(props, _excluded);
31
15
 
32
- var internalStyle = {};
33
-
34
- if (scrollX) {
35
- internalStyle.overflowX = 'auto';
36
- internalStyle.overflowY = 'hidden';
37
- }
38
-
39
- if (scrollY) {
40
- internalStyle.overflowY = 'auto';
41
- internalStyle.overflowX = 'hidden';
42
- }
43
-
44
- var rootDom = React.useRef();
45
- var scrollLeftRecord = React.useRef(0);
46
- var scrollTopRecord = React.useRef(0);
47
- var beforeScrollDistance = 0;
48
- var direction = 'down';
49
- React.useEffect(function () {
50
- scrollX && doScrollLeft(scrollLeft);
51
- }, [scrollLeft]);
52
- React.useEffect(function () {
53
- scrollY && doScrollTop(scrollTop);
54
- }, [scrollTop]);
55
-
56
- function doScrollLeft() {
57
- var scrollLeft = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
58
-
59
- if (rootDom && rootDom.current && scrollLeft !== scrollLeftRecord.current) {
60
- if (scrollWithAnimation && scrollLeftRecord.current) {
61
- tween({
62
- from: {
63
- l: scrollLeftRecord.current
64
- },
65
- to: {
66
- l: scrollLeft
67
- },
68
- duration: 100,
69
- step: function step(_ref) {
70
- var l = _ref.l;
71
- rootDom.current.scrollLeft = l;
72
- }
73
- }).then(function () {
74
- rootDom.current.scrollLeft = scrollLeft;
75
- scrollLeftRecord.current = scrollLeft;
76
- });
77
- } else {
78
- scrollLeftRecord.current = scrollLeft;
79
- rootDom.current.scrollLeft = scrollLeft;
80
- }
81
- }
82
- }
83
-
84
- function doScrollTop() {
85
- var scrollTop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
86
-
87
- if (rootDom && rootDom.current && scrollTop !== scrollTopRecord.current) {
88
- if (scrollWithAnimation && scrollTopRecord.current) {
89
- tween({
90
- from: {
91
- l: scrollTopRecord.current
92
- },
93
- to: {
94
- l: scrollTop
95
- },
96
- duration: 100,
97
- step: function step(_ref2) {
98
- var l = _ref2.l;
99
- rootDom.current.scrollTop = l;
100
- }
101
- }).then(function () {
102
- rootDom.current.scrollTop = scrollTop;
103
- scrollTopRecord.current = scrollTop;
104
- });
105
- } else {
106
- scrollTopRecord.current = scrollTop;
107
- rootDom.current.scrollTop = scrollTop;
108
- }
109
- }
110
- }
111
-
112
- return /*#__PURE__*/React.createElement(View, _extends({
113
- ref: function ref(dom) {
114
- if (dom) {
115
- rootDom.current = dom;
116
- }
117
- },
118
- className: clsx('ray-scroll-view', styles.scrollView, className),
119
- onScroll: function handleOnScroll(e) {
120
- // TODO: 增加 event.detail
121
-
122
- /**
123
- * deltaX: 0
124
- * deltaY: -13
125
- * scrollHeight: 1320
126
- * scrollLeft: 0
127
- * scrollTop: 126
128
- * scrollWidth: 387
129
- */
130
- if (rootDom && rootDom.current) {
131
- e.detail = rootDom.current;
132
- var _rootDom$current = rootDom.current,
133
- offsetHeight = _rootDom$current.offsetHeight,
134
- _scrollTop = _rootDom$current.scrollTop,
135
- scrollHeight = _rootDom$current.scrollHeight,
136
- _scrollLeft = _rootDom$current.scrollLeft,
137
- offsetWidth = _rootDom$current.offsetWidth,
138
- scrollWidth = _rootDom$current.scrollWidth; // 记录手动滑的位置
139
-
140
- scrollLeftRecord.current = rootDom.current.scrollLeft;
141
- scrollTopRecord.current = rootDom.current.scrollTop;
142
-
143
- if (scrollY && beforeScrollDistance !== _scrollTop) {
144
- direction = beforeScrollDistance - _scrollTop > 0 ? 'up' : 'down';
145
- beforeScrollDistance = _scrollTop;
146
- }
147
-
148
- if (scrollX && beforeScrollDistance !== _scrollLeft) {
149
- direction = beforeScrollDistance - _scrollLeft > 0 ? 'left' : 'right';
150
- beforeScrollDistance = _scrollLeft;
151
- }
152
-
153
- if (scrollY && direction === 'down' && offsetHeight + _scrollTop + lowerThreshold >= scrollHeight || scrollX && direction === 'right' && offsetWidth + _scrollLeft + lowerThreshold >= scrollWidth) {
154
- onScrollToLower && onScrollToLower();
155
- }
156
-
157
- if (scrollY && direction === 'up' && _scrollTop <= upperThreshold || scrollX && direction === 'left' && _scrollLeft <= upperThreshold) {
158
- onScrollToUpper && onScrollToUpper();
159
- }
160
- }
161
-
162
- onScroll && onScroll(e);
163
- },
164
- style: _objectSpread(_objectSpread({}, internalStyle), style)
165
- }, restProps), props.children);
16
+ var currentNode = React.useRef(null);
17
+ useEventListener('scroll', function (e) {
18
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll(_objectSpread(_objectSpread({
19
+ type: 'scroll'
20
+ }, e.detail), {}, {
21
+ origin: e
22
+ }));
23
+ }, {
24
+ target: currentNode
25
+ });
26
+ useEventListener('scrolltoupper', function (e) {
27
+ onScrollToUpper === null || onScrollToUpper === void 0 ? void 0 : onScrollToUpper(_objectSpread(_objectSpread({
28
+ type: 'scrolltoupper'
29
+ }, e.detail), {}, {
30
+ origin: e
31
+ }));
32
+ }, {
33
+ target: currentNode
34
+ });
35
+ useEventListener('scrolltolower', function (e) {
36
+ onScrollToLower === null || onScrollToLower === void 0 ? void 0 : onScrollToLower(_objectSpread(_objectSpread({
37
+ type: 'scrolltolower'
38
+ }, e.detail), {}, {
39
+ origin: e
40
+ }));
41
+ }, {
42
+ target: currentNode
43
+ });
44
+ return (
45
+ /*#__PURE__*/
46
+ // @ts-ignore
47
+ React.createElement("ty-scroll-view", _extends({}, handleProps(restProps), {
48
+ ref: currentNode
49
+ }), props.children)
50
+ );
166
51
  };
167
52
 
168
53
  ScrollView.defaultProps = defaultScrollViewProps;
@@ -18,20 +18,20 @@ group:
18
18
  ## 导入
19
19
 
20
20
  ```js
21
- import { ScrollView } from '@ray-js/components';
21
+ import { ScrollView } from '@ray-js/components'
22
22
  ```
23
23
 
24
24
  ## Props
25
25
 
26
26
  | 属性 | 类型 | 默认值 | 说明 | 支持平台 |
27
27
  | --- | --- | --- | --- | --- |
28
- | scrollX | boolean | false | 允许横向滚动 | 涂鸦、微信、RN |
29
- | scrollY | boolean | false | 允许纵向滚动 | 涂鸦、微信、RN |
30
- | scrollTop | number | | 设置竖向滚动条位置 | 涂鸦、微信、RN |
31
- | scrollLeft | number | | 设置横向滚动条位置 | 涂鸦、微信、RN |
32
- | scrollWithAnimation | boolean | | 在设置滚动条位置时使用动画过渡 | 涂鸦、微信、RN |
33
- | upperThreshold | number | 50 | 距顶部/左边多远时,触发 onScrollToUpper 事件 | 涂鸦、微信、RN |
34
- | lowerThreshold | number | 50 | 距底部/右边多远时,触发 onScrollToLower 事件 | 涂鸦、微信、RN |
35
- | onScrollToUpper | func(event: { type: 'scrolltoupper'; direction: 'top' or'left'; origin: any }) | | 滚动到顶部/左边时触发 | 涂鸦、微信、RN |
36
- | onScrollToLower | func(event: { type: 'scrolltolower'; direction: 'bottom' or 'right'; origin: any }) | | 滚动到底部/右边时触发 | 涂鸦、微信、RN |
37
- | onScroll | func(vent: { type: 'scroll'; scrollLeft: number; scrollTop: number; scrollHeight: number; scrollWidth: number; deltaX: number; deltaY: number; origin: any }) | | 滚动时触发 | 涂鸦、微信、RN |
28
+ | scrollX | boolean | false | 允许横向滚动 | 涂鸦、微信、RN、Web |
29
+ | scrollY | boolean | false | 允许纵向滚动 | 涂鸦、微信、RN、Web |
30
+ | scrollTop | number | | 设置竖向滚动条位置 | 涂鸦、微信、RN、Web |
31
+ | scrollLeft | number | | 设置横向滚动条位置 | 涂鸦、微信、RN、Web |
32
+ | scrollWithAnimation | boolean | | 在设置滚动条位置时使用动画过渡 | 涂鸦、微信、RN、Web |
33
+ | upperThreshold | number | 50 | 距顶部/左边多远时,触发 onScrollToUpper 事件 | 涂鸦、微信、RN、Web |
34
+ | lowerThreshold | number | 50 | 距底部/右边多远时,触发 onScrollToLower 事件 | 涂鸦、微信、RN、Web |
35
+ | onScrollToUpper | func(event: { type: 'scrolltoupper'; direction: 'top' or'left'; origin: any }) | | 滚动到顶部/左边时触发 | 涂鸦、微信、RN、Web |
36
+ | onScrollToLower | func(event: { type: 'scrolltolower'; direction: 'bottom' or 'right'; origin: any }) | | 滚动到底部/右边时触发 | 涂鸦、微信、RN、Web |
37
+ | onScroll | func(vent: { type: 'scroll'; scrollLeft: number; scrollTop: number; scrollHeight: number; scrollWidth: number; deltaX: number; deltaY: number; origin: any }) | | 滚动时触发 | 涂鸦、微信、RN、Web |