feffery_utils_components 0.2.0-rc19 → 0.2.0-rc20

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 (55) hide show
  1. package/DESCRIPTION +1 -1
  2. package/NAMESPACE +3 -0
  3. package/Project.toml +2 -2
  4. package/README.md +1 -1
  5. package/feffery_utils_components/FefferyEventListener.py +65 -0
  6. package/feffery_utils_components/FefferyListenElementSize.py +59 -0
  7. package/feffery_utils_components/FefferyListenHover.py +56 -0
  8. package/feffery_utils_components/FefferyListenScroll.py +40 -5
  9. package/feffery_utils_components/_imports_.py +6 -0
  10. package/feffery_utils_components/alias.py +20 -8
  11. package/feffery_utils_components/async-feffery_animated_3d_background_p5.js +1 -1
  12. package/feffery_utils_components/async-feffery_animated_3d_background_three.js +1 -1
  13. package/feffery_utils_components/async-feffery_animated_image.js +1 -1
  14. package/feffery_utils_components/async-feffery_aplayer.js +1 -1
  15. package/feffery_utils_components/async-feffery_auto_animate.js +1 -1
  16. package/feffery_utils_components/async-feffery_auto_fit.js +2 -2
  17. package/feffery_utils_components/async-feffery_burger.js +1 -1
  18. package/feffery_utils_components/async-feffery_captcha.js +1 -1
  19. package/feffery_utils_components/async-feffery_color_pickers.js +1 -1
  20. package/feffery_utils_components/async-feffery_dom2image.js +1 -1
  21. package/feffery_utils_components/async-feffery_dplayer.js +1 -1
  22. package/feffery_utils_components/async-feffery_emoji_picker.js +1 -1
  23. package/feffery_utils_components/async-feffery_excel_preview.js +1 -1
  24. package/feffery_utils_components/async-feffery_extra_spinner.js +1 -1
  25. package/feffery_utils_components/async-feffery_fancy_button.js +1 -1
  26. package/feffery_utils_components/async-feffery_grid.js +1 -1
  27. package/feffery_utils_components/async-feffery_http_requests.js +1 -1
  28. package/feffery_utils_components/async-feffery_image_cropper.js +1 -1
  29. package/feffery_utils_components/async-feffery_json_viewer.js +1 -1
  30. package/feffery_utils_components/async-feffery_local_large_storage.js +1 -1
  31. package/feffery_utils_components/async-feffery_markdown_editor.js +2 -2
  32. package/feffery_utils_components/async-feffery_motion.js +1 -1
  33. package/feffery_utils_components/async-feffery_music_player.js +1 -1
  34. package/feffery_utils_components/async-feffery_photo_sphere_viewer.js +1 -1
  35. package/feffery_utils_components/async-feffery_resizable.js +1 -1
  36. package/feffery_utils_components/async-feffery_rich_text_editor.js +2 -2
  37. package/feffery_utils_components/async-feffery_rnd.js +1 -1
  38. package/feffery_utils_components/async-feffery_seamless_scroll.js +1 -1
  39. package/feffery_utils_components/async-feffery_shortcut_panel.js +1 -1
  40. package/feffery_utils_components/async-feffery_slider_captcha.js +1 -1
  41. package/feffery_utils_components/async-feffery_sortable.js +1 -1
  42. package/feffery_utils_components/async-feffery_vditor.js +1 -1
  43. package/feffery_utils_components/async-feffery_word_preview.js +1 -1
  44. package/feffery_utils_components/async-fuc-shared.js +3 -3
  45. package/feffery_utils_components/feffery_utils_components.min.js +7 -7
  46. package/feffery_utils_components/metadata.json +302 -1
  47. package/feffery_utils_components/package-info.json +1 -1
  48. package/package.json +1 -1
  49. package/src/lib/components/FefferyEventSource.react.js +2 -0
  50. package/src/lib/components/listeners/FefferyEventListener.react.js +97 -0
  51. package/src/lib/components/listeners/FefferyListenElementSize.react.js +86 -0
  52. package/src/lib/components/listeners/FefferyListenHover.js +75 -0
  53. package/src/lib/components/listeners/FefferyListenScroll.react.js +91 -10
  54. package/src/lib/index.js +7 -1
  55. package/usage.py +17 -29
@@ -1,35 +1,67 @@
1
1
  import { useEffect } from 'react';
2
- import { useScroll } from 'ahooks';
2
+ import { useScroll } from '@reactuses/core';
3
3
  import PropTypes from 'prop-types';
4
4
 
5
- // 定义滚动条监听组件FefferyListenScroll
5
+ /**
6
+ * 滚动条监听组件FefferyListenScroll
7
+ */
6
8
  const FefferyListenScroll = (props) => {
7
9
  let {
8
10
  target,
11
+ throttle,
12
+ idle,
13
+ offset,
9
14
  setProps,
10
15
  loading_state
11
16
  } = props;
12
17
 
13
- const position_ = useScroll(target ? document.getElementById(target) : document)
18
+ const [x, y, _isScrolling, _arrivedState, _directions] = useScroll(
19
+ () => target ? document.getElementById(target) : document,
20
+ {
21
+ throttle,
22
+ idle,
23
+ offset
24
+ }
25
+ );
14
26
 
15
27
  useEffect(() => {
16
- if (position_) {
17
- setProps({
18
- position: position_
19
- })
20
- }
21
- }, [position_])
28
+ setProps({
29
+ position: { left: x, top: y }
30
+ })
31
+ }, [x, y])
32
+
33
+ useEffect(() => {
34
+ setProps({
35
+ isScrolling: _isScrolling
36
+ })
37
+ }, [_isScrolling])
38
+
39
+ useEffect(() => {
40
+ setProps({
41
+ arrivedState: _arrivedState
42
+ })
43
+ }, [_arrivedState])
44
+
45
+ useEffect(() => {
46
+ setProps({
47
+ directions: _directions
48
+ })
49
+ }, [_directions])
22
50
 
23
51
  return <></>;
24
52
  }
25
53
 
26
- // 定义参数或属性
27
54
  FefferyListenScroll.propTypes = {
28
55
  /**
29
56
  * 组件id
30
57
  */
31
58
  id: PropTypes.string,
32
59
 
60
+ /**
61
+ * 强制刷新用key值
62
+ */
63
+ key: PropTypes.string,
64
+
33
65
  /**
34
66
  * 设置滚动条监听目标元素id,默认为整个页面
35
67
  */
@@ -40,6 +72,55 @@ FefferyListenScroll.propTypes = {
40
72
  */
41
73
  position: PropTypes.object,
42
74
 
75
+ /**
76
+ * 监听目标滚动条是否正在滚动中
77
+ */
78
+ isScrolling: PropTypes.bool,
79
+
80
+ /**
81
+ * 监听目标滚动条的到达边界状态
82
+ */
83
+ arrivedState: PropTypes.object,
84
+
85
+ /**
86
+ * 监听目标滚动条的滚动方向
87
+ */
88
+ directions: PropTypes.object,
89
+
90
+ /**
91
+ * 滚动事件监听节流时长,单位:毫秒
92
+ * 默认:`0`
93
+ */
94
+ throttle: PropTypes.number,
95
+
96
+ /**
97
+ * 滚动结束行为的检查时长,单位:毫秒,当`throttle>0`时,检查时长将为`throttle+idle`
98
+ * 默认:`0`
99
+ */
100
+ idle: PropTypes.number,
101
+
102
+ /**
103
+ * 针对各个方向的到达边界状态,设置像素阈值
104
+ */
105
+ offset: PropTypes.shape({
106
+ /**
107
+ * 上顶端到达边界像素阈值
108
+ */
109
+ top: PropTypes.number,
110
+ /**
111
+ * 下底部到达边界像素阈值
112
+ */
113
+ bottom: PropTypes.number,
114
+ /**
115
+ * 左侧到达边界像素阈值
116
+ */
117
+ left: PropTypes.number,
118
+ /**
119
+ * 右侧到达边界像素阈值
120
+ */
121
+ right: PropTypes.number
122
+ }),
123
+
43
124
  /**
44
125
  * Dash-assigned callback that should be called to report property changes
45
126
  * to Dash, to make them available for callbacks.
package/src/lib/index.js CHANGED
@@ -110,6 +110,9 @@ import FefferyVditor from "./components/editor/FefferyVditor.react.js";
110
110
  import FefferyHttpRequests from "./components/FefferyHttpRequests.react.js";
111
111
  import FefferyBurger from './components/FefferyBurger.react';
112
112
  import FefferyEventSource from "./components/FefferyEventSource.react.js";
113
+ import FefferyEventListener from "./components/listeners/FefferyEventListener.react.js";
114
+ import FefferyListenHover from "./components/listeners/FefferyListenHover.js";
115
+ import FefferyListenElementSize from "./components/listeners/FefferyListenElementSize.react.js";
113
116
  import './components/styles.css';
114
117
 
115
118
  // 自定义sessionStorage事件监听
@@ -244,5 +247,8 @@ export {
244
247
  FefferyVditor,
245
248
  FefferyHttpRequests,
246
249
  FefferyBurger,
247
- FefferyEventSource
250
+ FefferyEventSource,
251
+ FefferyEventListener,
252
+ FefferyListenHover,
253
+ FefferyListenElementSize
248
254
  };
package/usage.py CHANGED
@@ -1,45 +1,33 @@
1
1
  import dash
2
- import time
3
- import random
4
2
  from dash import html
5
- from urllib.parse import unquote
6
3
  import feffery_utils_components as fuc
7
- from flask import request, Response
8
- from dash.dependencies import Input, Output, State
4
+ from dash.dependencies import Input, Output
9
5
 
10
6
  app = dash.Dash(__name__)
11
7
 
12
-
13
- @app.server.route('/stream-chat')
14
- def chatgpt():
15
- question = request.args.get('question', '')
16
- question = unquote(question).strip()
17
-
18
- def stream():
19
- for s in '测试问题回复结果' + '巴拉' * 1000:
20
- time.sleep(random.uniform(0.05, 0.25))
21
- yield 'data: %s\n\n' % s
22
-
23
- return Response(stream(), mimetype='text/event-stream')
24
-
25
-
26
8
  app.layout = html.Div(
27
9
  [
28
- fuc.FefferyEventSource(
29
- id='sse-demo',
30
- url='/stream-chat?question=%E4%BD%A0%E6%98%AF%E8%B0%81',
31
- autoReconnect=False,
10
+ html.Div(
11
+ id='target-element',
12
+ style={
13
+ 'width': '20vw',
14
+ 'height': '20vh',
15
+ 'border': '1px solid black',
16
+ },
17
+ ),
18
+ fuc.FefferyListenElementSize(
19
+ id='listen-element-size-demo',
20
+ target='target-element',
32
21
  ),
33
- html.Div('', id='sse-demo-output'),
34
22
  ],
35
- style={'padding': 50},
23
+ style={'padding': 50, 'height': 99999, 'width': 99999},
36
24
  )
37
25
 
38
26
  app.clientside_callback(
39
- """(data, children) => data ? children + data : ''""",
40
- Output('sse-demo-output', 'children'),
41
- Input('sse-demo', 'data'),
42
- State('sse-demo-output', 'children'),
27
+ """(width, height) => `width: ${width}px; height: ${height}px`""",
28
+ Output('target-element', 'children'),
29
+ Input('listen-element-size-demo', 'width'),
30
+ Input('listen-element-size-demo', 'height'),
43
31
  )
44
32
 
45
33
  if __name__ == '__main__':