feffery_utils_components 0.2.0-rc11 → 0.2.0-rc13

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 (52) hide show
  1. package/DESCRIPTION +1 -1
  2. package/NAMESPACE +2 -0
  3. package/Project.toml +1 -1
  4. package/README.md +1 -1
  5. package/assets/demo.jpg +0 -0
  6. package/feffery_utils_components/FefferySetFavicon.py +45 -0
  7. package/feffery_utils_components/FefferySetTitle.py +7 -4
  8. package/feffery_utils_components/FefferySliderCaptcha.py +109 -0
  9. package/feffery_utils_components/__init__.py +2 -1
  10. package/feffery_utils_components/_imports_.py +4 -0
  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 +2 -2
  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 +1 -1
  17. package/feffery_utils_components/async-feffery_captcha.js +1 -1
  18. package/feffery_utils_components/async-feffery_color_pickers.js +1 -1
  19. package/feffery_utils_components/async-feffery_dom2image.js +1 -1
  20. package/feffery_utils_components/async-feffery_dplayer.js +1 -1
  21. package/feffery_utils_components/async-feffery_emoji_picker.js +1 -1
  22. package/feffery_utils_components/async-feffery_excel_preview.js +1 -1
  23. package/feffery_utils_components/async-feffery_extra_spinner.js +1 -1
  24. package/feffery_utils_components/async-feffery_fancy_button.js +1 -1
  25. package/feffery_utils_components/async-feffery_grid.js +1 -1
  26. package/feffery_utils_components/async-feffery_image_cropper.js +1 -1
  27. package/feffery_utils_components/async-feffery_json_viewer.js +1 -1
  28. package/feffery_utils_components/async-feffery_local_large_storage.js +1 -1
  29. package/feffery_utils_components/async-feffery_markdown_editor.js +2 -2
  30. package/feffery_utils_components/async-feffery_motion.js +1 -1
  31. package/feffery_utils_components/async-feffery_music_player.js +1 -1
  32. package/feffery_utils_components/async-feffery_photo_sphere_viewer.js +1 -1
  33. package/feffery_utils_components/async-feffery_resizable.js +1 -1
  34. package/feffery_utils_components/async-feffery_rich_text_editor.js +2 -2
  35. package/feffery_utils_components/async-feffery_rnd.js +1 -1
  36. package/feffery_utils_components/async-feffery_seamless_scroll.js +1 -1
  37. package/feffery_utils_components/async-feffery_shortcut_panel.js +1 -1
  38. package/feffery_utils_components/async-feffery_slider_captcha.js +1 -0
  39. package/feffery_utils_components/async-feffery_slider_captcha.js.LICENSE.txt +1 -0
  40. package/feffery_utils_components/async-feffery_sortable.js +1 -1
  41. package/feffery_utils_components/async-feffery_word_preview.js +1 -1
  42. package/feffery_utils_components/async-fuc-shared.js +2 -2
  43. package/feffery_utils_components/feffery_utils_components.min.js +2 -2
  44. package/feffery_utils_components/metadata.json +298 -1
  45. package/feffery_utils_components/package-info.json +3 -1
  46. package/package.json +3 -1
  47. package/src/lib/components/FefferySetFavicon.react.js +58 -0
  48. package/src/lib/components/FefferySetTitle.react.js +21 -6
  49. package/src/lib/components/FefferySliderCaptcha.react.js +160 -0
  50. package/src/lib/fragments/FefferySliderCaptcha.react.js +102 -0
  51. package/src/lib/index.js +5 -1
  52. package/usage.py +20 -48
@@ -0,0 +1,102 @@
1
+ import React, { useRef, useEffect } from 'react';
2
+ import SliderCaptcha from 'rc-slider-captcha';
3
+ import createPuzzle from 'create-puzzle';
4
+ import { propTypes, defaultProps } from '../components/FefferySliderCaptcha.react';
5
+
6
+ /**
7
+ * 滑块验证码组件FefferySliderCaptcha
8
+ */
9
+ const FefferySliderCaptcha = (props) => {
10
+ let {
11
+ id,
12
+ style,
13
+ className,
14
+ imgSrc,
15
+ xOffset,
16
+ imgWidth,
17
+ mode,
18
+ tipText,
19
+ showRefreshIcon,
20
+ autoRefreshOnError,
21
+ errorHoldDuration,
22
+ placement,
23
+ refresh,
24
+ setProps,
25
+ loading_state
26
+ } = props;
27
+
28
+ // 记录x轴动态偏移量
29
+ const offsetXRef = useRef(0);
30
+ // 手动刷新用
31
+ const actionRef = useRef();
32
+
33
+ // 手动刷新
34
+ useEffect(() => {
35
+ if (refresh) {
36
+ actionRef.current?.refresh()
37
+ setProps({ refresh: false })
38
+ }
39
+ }, [refresh])
40
+
41
+ return (
42
+ <SliderCaptcha
43
+ id={id}
44
+ style={style}
45
+ className={className}
46
+ actionRef={actionRef}
47
+ request={
48
+ () => createPuzzle(
49
+ imgSrc,
50
+ {
51
+ format: 'blob'
52
+ }
53
+ ).then((res) => {
54
+ // 更新x轴动态偏移量
55
+ offsetXRef.current = res.x;
56
+ return {
57
+ bgUrl: res.bgUrl,
58
+ puzzleUrl: res.puzzleUrl
59
+ };
60
+ })
61
+ }
62
+ onVerify={
63
+ async (data) => {
64
+ if (data.x >= offsetXRef.current - xOffset && data.x < offsetXRef.current + xOffset) {
65
+ // 验证成功
66
+ setProps({
67
+ verifyResult: {
68
+ status: 'success',
69
+ timestamp: Date.now()
70
+ }
71
+ })
72
+ return Promise.resolve();
73
+ }
74
+ // 验证失败
75
+ setProps({
76
+ verifyResult: {
77
+ status: 'error',
78
+ timestamp: Date.now()
79
+ }
80
+ })
81
+ return Promise.reject();
82
+ }
83
+ }
84
+ bgSize={{
85
+ width: imgWidth
86
+ }}
87
+ mode={mode}
88
+ tipText={tipText}
89
+ showRefreshIcon={showRefreshIcon}
90
+ autoRefreshOnError={autoRefreshOnError}
91
+ errorHoldDuration={errorHoldDuration}
92
+ placement={placement}
93
+ data-dash-is-loading={
94
+ (loading_state && loading_state.is_loading) || undefined
95
+ } />
96
+ );
97
+ }
98
+
99
+ export default FefferySliderCaptcha;
100
+
101
+ FefferySliderCaptcha.defaultProps = defaultProps;
102
+ FefferySliderCaptcha.propTypes = propTypes;
package/src/lib/index.js CHANGED
@@ -103,6 +103,8 @@ import FefferySortable from "./components/sortable/FefferySortable.react";
103
103
  import FefferyAnimatedImage from "./components/FefferyAnimatedImage.react";
104
104
  import FefferyDebugGuardian from "./components/security/FefferyDebugGuardian.react";
105
105
  import FefferyDom2Image from "./components/FefferyDom2Image.react";
106
+ import FefferySetFavicon from "./components/FefferySetFavicon.react";
107
+ import FefferySliderCaptcha from "./components/FefferySliderCaptcha.react";
106
108
  import './components/styles.css';
107
109
 
108
110
  // 自定义sessionStorage事件监听
@@ -230,5 +232,7 @@ export {
230
232
  FefferySortable,
231
233
  FefferyAnimatedImage,
232
234
  FefferyDebugGuardian,
233
- FefferyDom2Image
235
+ FefferyDom2Image,
236
+ FefferySetFavicon,
237
+ FefferySliderCaptcha
234
238
  };
package/usage.py CHANGED
@@ -8,70 +8,42 @@ app = dash.Dash(__name__)
8
8
 
9
9
  app.layout = html.Div(
10
10
  [
11
- # 测试元素
12
- fuc.FefferyDiv(
13
- '测试内容',
14
- id='demo-target',
15
- shadow='always-shadow-light',
16
- style={
17
- 'width': 300,
18
- 'height': 200,
19
- 'display': 'flex',
20
- 'justifyContent': 'center',
21
- 'alignItems': 'center',
22
- 'fontSize': 18,
23
- 'fontWeight': 'bold',
24
- 'color': 'white',
25
- 'background': 'linear-gradient(135deg,#17ead9,#6078ea)'
26
- }
27
- ),
28
- # 测试激活元素转图片
29
11
  html.Button(
30
- '打印',
31
- id='execute-screenshot'
12
+ '手动刷新',
13
+ id='manual-refresh'
32
14
  ),
33
- # 测试元素转图片组件
34
- fuc.FefferyDom2Image(
35
- id='demo-dom2image',
36
- scale=2
15
+ fuc.FefferySliderCaptcha(
16
+ id='demo-slider-captcha',
17
+ imgSrc='/assets/demo.jpg',
18
+ imgWidth=360
37
19
  ),
38
- html.Div(id='demo-dom2image-output')
20
+ html.Pre(id='demo-output')
39
21
  ],
40
22
  style={
41
- 'padding': '50px 50px 0 50px'
23
+ 'padding': '300px 100px'
42
24
  }
43
25
  )
44
26
 
45
27
 
46
28
  @app.callback(
47
- Output('demo-dom2image', 'targetSelector'),
48
- Input('execute-screenshot', 'n_clicks'),
29
+ Output('demo-slider-captcha', 'refresh'),
30
+ Input('manual-refresh', 'n_clicks'),
49
31
  prevent_initial_call=True
50
32
  )
51
- def demo(n_clicks):
52
-
53
- return '#demo-target'
33
+ def manual_refresh(n_clicks):
34
+ return True
54
35
 
55
36
 
56
37
  @app.callback(
57
- Output('demo-dom2image-output', 'children'),
58
- Input('demo-dom2image', 'screenshotResult'),
59
- prevent_initial_call=True
38
+ Output('demo-output', 'children'),
39
+ Input('demo-slider-captcha', 'verifyResult')
60
40
  )
61
- def update_result(screenshotResult):
62
-
63
- return [
64
- html.Pre(
65
- json.dumps(
66
- screenshotResult,
67
- ensure_ascii=False,
68
- indent=4
69
- )
70
- ),
71
- html.Img(
72
- src=screenshotResult['dataUrl']
73
- )
74
- ]
41
+ def update_output(verifyResult):
42
+ return json.dumps(
43
+ verifyResult,
44
+ indent=4,
45
+ ensure_ascii=False
46
+ )
75
47
 
76
48
 
77
49
  if __name__ == '__main__':