From ce6a719bc2955f511e432f8f6eabf4eb57c54dc2 Mon Sep 17 00:00:00 2001 From: haishan <710328466@qq.com> Date: Tue, 11 Jun 2024 20:25:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(zhst/biz):=20=E6=B7=BB=E5=8A=A0=E5=A4=A7?= =?UTF-8?q?=E5=9B=BE=E7=BB=84=E4=BB=B6v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .fatherrc.ts | 12 +- package.json | 1 + packages/biz/.fatherrc.ts | 9 +- packages/biz/package.json | 1 + packages/biz/src/BigImage/BigImage.tsx | 304 ++++++++++++++++++ .../components/CombineImage/index.less | 3 + .../components/CombineImage/index.tsx | 82 +++++ .../BigImage/components/navigation/index.less | 44 +++ .../BigImage/components/navigation/index.tsx | 40 +++ .../photo-1503185912284-5271ff81b9a8.webp | Bin 0 -> 146018 bytes packages/biz/src/BigImage/demo/index.tsx | 71 ++++ packages/biz/src/BigImage/demo/oldData.tsx | 128 ++++++++ packages/biz/src/BigImage/demo/withEdit.tsx | 89 +++++ .../src/BigImage/demo/withRelatedImage.tsx | 78 +++++ .../biz/src/BigImage/images/emptyImage.png | Bin 0 -> 5786 bytes .../BigImage/images/percent_background.png | Bin 0 -> 514 bytes packages/biz/src/BigImage/index.less | 132 ++++++++ packages/biz/src/BigImage/index.md | 96 ++++++ packages/biz/src/BigImage/index.tsx | 5 + packages/biz/src/BigImage/interface.ts | 84 +++++ packages/biz/src/BigImage/mock.ts | 292 +++++++++++++++++ .../BigImage/util/bigImageModalAdapter.tsx | 195 +++++++++++ packages/biz/src/BigImage/util/interface.ts | 36 +++ packages/biz/src/index.tsx | 2 + packages/hooks/es/useSocket/index.d.ts | 1 - packages/hooks/lib/useSocket/index.d.ts | 1 - packages/icon/.fatherrc.ts | 9 +- packages/icon/es/index.less | 3 - packages/map/.fatherrc.ts | 9 +- packages/map/src/drawControl/DrawControl.tsx | 20 +- .../drawControl/{ => demo}/Draw/constants.js | 0 .../{ => demo}/Draw/doubleClickZoom.js | 0 .../{ => demo}/Draw/drawCircleMode.draw.js | 0 .../{ => demo}/Draw/drawDirectMode.draw.js | 0 .../Draw/drawLineSelectMode.draw.js | 0 .../{ => demo}/Draw/drawRectMode.draw.js | 0 .../Draw/drawSimpleSelectMode.draw.js | 0 .../{ => demo}/Draw/drawStaticMode.draw.js | 0 .../src/drawControl/{ => demo}/Draw/index.ts | 0 .../src/drawControl/mode/doubleClickZoom.js | 24 ++ .../drawControl/mode/drawCircleMode.draw.js | 69 ++++ packages/material/.fatherrc.ts | 9 +- packages/meta/.fatherrc.ts | 9 +- .../components/BtnGroup/index.less | 51 --- packages/meta/es/BigImagePreview/index.less | 54 ---- packages/meta/es/CompareImage/CompareImage.js | 19 +- .../components/CornerScore/index.less | 21 -- packages/meta/es/CompareImage/index.less | 144 --------- .../VideoPlayer/components/Loading/index.less | 53 --- .../components/Progress/index.less | 49 --- packages/meta/es/VideoPlayer/index.less | 73 ----- packages/meta/es/index.js | 1 + .../meta/src/CompareImage/CompareImage.tsx | 21 +- .../components/CornerScore/index.less | 2 +- .../components/CornerScore/index.tsx | 2 +- packages/meta/src/CompareImage/index.less | 31 +- .../meta/src/cropperImage/CropperImage.tsx | 4 +- packages/meta/src/progress/index.zh-CN.md | 2 - .../relatedCarousel/RelatedCarousel.tsx | 2 +- packages/slave/lib/index.js | 2 + tsconfig.json | 3 +- 61 files changed, 1876 insertions(+), 516 deletions(-) create mode 100644 packages/biz/src/BigImage/BigImage.tsx create mode 100644 packages/biz/src/BigImage/components/CombineImage/index.less create mode 100644 packages/biz/src/BigImage/components/CombineImage/index.tsx create mode 100644 packages/biz/src/BigImage/components/navigation/index.less create mode 100644 packages/biz/src/BigImage/components/navigation/index.tsx create mode 100644 packages/biz/src/BigImage/demo/imgs/photo-1503185912284-5271ff81b9a8.webp create mode 100644 packages/biz/src/BigImage/demo/index.tsx create mode 100644 packages/biz/src/BigImage/demo/oldData.tsx create mode 100644 packages/biz/src/BigImage/demo/withEdit.tsx create mode 100644 packages/biz/src/BigImage/demo/withRelatedImage.tsx create mode 100644 packages/biz/src/BigImage/images/emptyImage.png create mode 100644 packages/biz/src/BigImage/images/percent_background.png create mode 100644 packages/biz/src/BigImage/index.less create mode 100644 packages/biz/src/BigImage/index.md create mode 100644 packages/biz/src/BigImage/index.tsx create mode 100644 packages/biz/src/BigImage/interface.ts create mode 100644 packages/biz/src/BigImage/mock.ts create mode 100644 packages/biz/src/BigImage/util/bigImageModalAdapter.tsx create mode 100644 packages/biz/src/BigImage/util/interface.ts delete mode 100644 packages/icon/es/index.less rename packages/map/src/drawControl/{ => demo}/Draw/constants.js (100%) rename packages/map/src/drawControl/{ => demo}/Draw/doubleClickZoom.js (100%) rename packages/map/src/drawControl/{ => demo}/Draw/drawCircleMode.draw.js (100%) rename packages/map/src/drawControl/{ => demo}/Draw/drawDirectMode.draw.js (100%) rename packages/map/src/drawControl/{ => demo}/Draw/drawLineSelectMode.draw.js (100%) rename packages/map/src/drawControl/{ => demo}/Draw/drawRectMode.draw.js (100%) rename packages/map/src/drawControl/{ => demo}/Draw/drawSimpleSelectMode.draw.js (100%) rename packages/map/src/drawControl/{ => demo}/Draw/drawStaticMode.draw.js (100%) rename packages/map/src/drawControl/{ => demo}/Draw/index.ts (100%) create mode 100644 packages/map/src/drawControl/mode/doubleClickZoom.js create mode 100644 packages/map/src/drawControl/mode/drawCircleMode.draw.js delete mode 100644 packages/meta/es/BigImagePreview/components/BtnGroup/index.less delete mode 100644 packages/meta/es/BigImagePreview/index.less delete mode 100644 packages/meta/es/CompareImage/components/CornerScore/index.less delete mode 100644 packages/meta/es/CompareImage/index.less delete mode 100644 packages/meta/es/VideoPlayer/components/Loading/index.less delete mode 100644 packages/meta/es/VideoPlayer/components/Progress/index.less delete mode 100644 packages/meta/es/VideoPlayer/index.less diff --git a/.fatherrc.ts b/.fatherrc.ts index db700bd..fd064d8 100644 --- a/.fatherrc.ts +++ b/.fatherrc.ts @@ -1,5 +1,15 @@ -import { defineConfig } from 'father'; +import { defineConfig } from 'father-plugin-less'; export default defineConfig({ // more father config: https://github.com/umijs/father/blob/master/docs/config.md + esm: { + output: 'es', + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', + }, + cjs: { + output: 'lib', + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', + }, }); diff --git a/package.json b/package.json index 63dc05d..f844aff 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "dumi": "^2.2.13", "eslint": "^8.23.0", "father": "^4.1.0", + "father-plugin-less": "^0.0.2", "husky": "^8.0.1", "lerna": "^8.0.0", "lint-staged": "^13.0.3", diff --git a/packages/biz/.fatherrc.ts b/packages/biz/.fatherrc.ts index 447d06b..b0341a2 100644 --- a/packages/biz/.fatherrc.ts +++ b/packages/biz/.fatherrc.ts @@ -1,13 +1,16 @@ -import { defineConfig } from 'father'; +import { defineConfig } from 'father-plugin-less'; export default defineConfig({ // more father config: https://github.com/umijs/father/blob/master/docs/config.md esm: { output: 'es', - ignores: ['**/demo/*', 'src/**/demo/*'] + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', }, cjs: { output: 'lib', - ignores: ['**/demo/*', 'src/**/demo/*'] + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', }, + plugins: ['father-plugin-less'], }); diff --git a/packages/biz/package.json b/packages/biz/package.json index 89fd91f..5346957 100644 --- a/packages/biz/package.json +++ b/packages/biz/package.json @@ -35,6 +35,7 @@ "registry": "http://10.0.0.77:4874" }, "devDependencies": { + "@swc/core": "^1.3.9", "@zhst/types": "workspace:^" }, "dependencies": { diff --git a/packages/biz/src/BigImage/BigImage.tsx b/packages/biz/src/BigImage/BigImage.tsx new file mode 100644 index 0000000..e4eb4cd --- /dev/null +++ b/packages/biz/src/BigImage/BigImage.tsx @@ -0,0 +1,304 @@ +import React, { forwardRef, useImperativeHandle, useRef } from 'react' +import { + ConfigProvider, + Descriptions, + CropperImage, + AttachImage, + VideoPlayer, + RelatedImage, + Radio, + Tooltip, + Button, + Tabs +} from '@zhst/meta'; +import classNames from 'classnames' +import { IconFont } from '@zhst/icon' +import { BigImageProps, BigImageRef } from './interface' +import CombineImage from './components/CombineImage' +import './index.less' + +const DescriptionsItem = Descriptions.Item + +export const componentPrefix = 'zhst-big-image' + +const initialStyle ={ + fontSize: '12px' +} + +const BigImage = forwardRef((props, ref) => { + const { + // ------------ 通用配置 ------------------- + type, + viewHeight, + width = '100%', + children, + // ------------ 顶部按钮 ----------------- + topButtonRender, + // ------------ 描述 ----------------- + descriptionList = [], + showDescription, + // ------------- tab 导航 ---------------- + customTabBarExtraContent, + tabProps, + onTabChange, + // ------------- 场景图 ------------- + cropperImageProps = { + cropButtonList: [] + }, + // ----------------- 对比图 --------------------- + combineImageProps, + // ------------ 视频模式 ----------------- + videoProps, + // ------------ view 操作按钮 ----------------- + showModeChange, + modeButtonGroupProps, + viewTopModeButtonList = [ + { + key: 'image', + label: '图片' + }, + { + key: 'video', + label: '视频' + } + ], + // ------------------ 翻页 ---------------------- + showNavigation, + prevButtonProps, + onPrevButtonClick, + onNextButtonClick, + nextButtonProps, + // ------------------ 人脸碰撞模型 ----------------- + relatedImageProps, + isRelated = false, + theme, + } = props + const combineImageRef = useRef(null) + const videoPlayerRef = useRef(null) + const cropperImageRef = useRef(null) + + cropperImageProps.cropButtonList = cropperImageProps?.cropButtonList || [ + { + key: 'auto', + icon: , + label: '智能框选', + }, + { + key: 'custom', + icon: , + label: '手动框选', + } + ]; + + // ------------------- 初始化模式 ---------------------- + const initMode = (type: BigImageProps['type'] = 'normal') => { + switch (type) { + case 'compater': + return ( + + ) + case 'normal': + return ( +
+ + {/* // ------------ 显示条件:当不为编辑状态,并且有图片值 ----------------- */} + {!cropperImageProps?.editAble && cropperImageProps?.attachImageData && ( + <> + +
{`人脸质量分:${(Number(cropperImageProps?.score) as number).toFixed(2)}`}
+ + )} + {/* // ------------ 场景图绘制工具栏 ----------------- */} + {cropperImageProps?.showEditTools && ( +
+ + {cropperImageProps?.cropButtonList?.map(btn => ( + + {/* @ts-ignore */} +
{btn.icon} {btn.label}
+
+ ))} +
+
+ )} +
+
+ ) + case 'video': + return ( + // @ts-ignore + + ) + } + } + + // 暴露 ref 实例 + useImperativeHandle(ref, () => ({ + // @ts-ignore + cropperImageRef: cropperImageRef?.current, + videoPlayerRef: videoPlayerRef?.current, + combineImageRef: combineImageRef?.current, + })); + + return ( +
+
+ {topButtonRender} +
+ {showDescription && ( +
+ + {descriptionList.map(descriptions => ( + + {descriptions?.children?.map(item => ( + {item.children} + ))} + + ))} + +
+ )} + +
+ {/* ---------------- view 视图左上角导航按钮 ------------------ */} + {showModeChange && ( +
+ + {viewTopModeButtonList?.map(btn => ( + + {/* @ts-ignore */} + {btn.icon} {btn.label} + + ))} + +
+ )} + {/* --------------------------------- 视频播放模式 --------------------------------- */} + {initMode(type)} + {/* 切换按钮组件 */} + {/* ----------------------------------- 上一张按钮 ---------------------------------- */} + {showNavigation && ( +
+ {/* ----------------------------------- 人脸碰撞组件 ---------------------------------- */} + {isRelated && ( + // @ts-ignore + + )} + {children} +
+ ) +}) + +export default BigImage diff --git a/packages/biz/src/BigImage/components/CombineImage/index.less b/packages/biz/src/BigImage/components/CombineImage/index.less new file mode 100644 index 0000000..3768471 --- /dev/null +++ b/packages/biz/src/BigImage/components/CombineImage/index.less @@ -0,0 +1,3 @@ +.zhst-big-image-combime-image { + background-color: #f7f7f7; +} diff --git a/packages/biz/src/BigImage/components/CombineImage/index.tsx b/packages/biz/src/BigImage/components/CombineImage/index.tsx new file mode 100644 index 0000000..aaef71c --- /dev/null +++ b/packages/biz/src/BigImage/components/CombineImage/index.tsx @@ -0,0 +1,82 @@ + +import React, { FC, useRef, forwardRef, useImperativeHandle } from 'react'; +import { CompareImage, Flex, Progress, ProgressProps, CompareImageProps } from '@zhst/meta' +import './index.less' + +export interface ComBineImageProps { + height?: string | number + data: { + imgSummary: string; + compaterImage: string; + imageKey: string; + score: number; + } + prevDisable?: boolean; + nextDisable?: boolean; + onPre?: () => void; + onNext?: () => void; + openRoll?: boolean + targetImageProps?: CompareImageProps + sourceImageProps?: CompareImageProps +} + +const conicColors: ProgressProps['strokeColor'] = { + '0%': '#42E2AC', + '50%': '#DFAF2E', + '100%': '#F95C55', +}; + +const componentName = 'zhst-big-image-combime-image' + +const ComBineImage: FC = forwardRef((props, ref) => { + const { + height, + data, + prevDisable, + nextDisable, + onNext, + onPre, + openRoll + } = props + const { imgSummary, compaterImage, score } = data + const targetImageRef = useRef(null) + const compareImageRef = useRef(null) + + useImperativeHandle(ref, () => ({ + compareImageRef, + targetImageRef + })); + + return ( + + + + + + ) +}) + +export default ComBineImage diff --git a/packages/biz/src/BigImage/components/navigation/index.less b/packages/biz/src/BigImage/components/navigation/index.less new file mode 100644 index 0000000..46fe9e5 --- /dev/null +++ b/packages/biz/src/BigImage/components/navigation/index.less @@ -0,0 +1,44 @@ +.zhst-image__nav { + position: absolute; + display: flex; + width: 48px; + height: 100%; + flex-shrink: 0; + align-items: center; + justify-content: center; + cursor: pointer; + font-size: 0; + + &>button { + & span { + display: flex; + } + } + + :global { + i:hover { + color: #fff !important; + } + } + + &--disable { + :global { + i { + color: #f0f0f0; + cursor: not-allowed !important; + } + } + } + + &--hide { + display: none; + } + + &-prev { + left: 12px; + } + + &-next { + right: 12px; + } +} diff --git a/packages/biz/src/BigImage/components/navigation/index.tsx b/packages/biz/src/BigImage/components/navigation/index.tsx new file mode 100644 index 0000000..43589fc --- /dev/null +++ b/packages/biz/src/BigImage/components/navigation/index.tsx @@ -0,0 +1,40 @@ +// !! 已废弃 +import * as React from 'react'; +import classnames from 'classnames'; +import { Button } from '@zhst/meta'; +import { IconFont } from '@zhst/icon' +import './index.less'; + +const componentName = `zhst-image__nav`; + +const Navigation: React.FC<{ + show?: boolean; + onClick?: React.MouseEventHandler; + prev?: boolean; + next?: boolean; + disabled?: boolean; + className?: string; + color?: string; + hoverColor?: string; +}> = (props) => { + const { show, prev, next, disabled, onClick, className, color } = props; + + return ( +
+ +
+ ); +}; + +export default Navigation; diff --git a/packages/biz/src/BigImage/demo/imgs/photo-1503185912284-5271ff81b9a8.webp b/packages/biz/src/BigImage/demo/imgs/photo-1503185912284-5271ff81b9a8.webp new file mode 100644 index 0000000000000000000000000000000000000000..c628fe93743c8eacbb56d027e49a7505942b244d GIT binary patch literal 146018 zcmbTd1#Dc+(ylu*W@e0;A!cTZnHghdW~SJVnVDjU?U*rUW{w$SW@g4Y{{AiPz3-LI zxmTy9S$ewqt?BCOTGCq68Wm{?2_0S#KvP^)NkfTS3myOfkbHcCApqh~0BJEXB`L&@ zE&x$V&dS~agbD!I*}FQcNQ#nZY3q={OaMRtH~=(&1pqKIadDJal~DUfEiEoa;_@N- zhyT;=7XZM2db12tN+cxzvH$-fG!sW>R{#L0^r2=mHFGif;E)ft^>B6k$A0<2n8r5$ zFbMJ=cK!(PgK__1i+}Ow|Iz%5h5unwJA2a)%|9_an%bHE!~Gu|?(Syx!4PsE9O`am z=JCOEA53BEW@q)mj~|R_XJ+IA06_ke9ST=76Uz@~{$NCBH5IWB<_7>^5iS0UjsJ^X z%{)Ki1OUVw9KD>aEG%6~XiR8HSa^82Nub>uNyHrN9F6R~0Dyn3 z`5!L;`aiiP`A9M+3lAqJ11sZ4`v2YjkAweK{h#5Vz5SQsM)`mC42V7cAKQO?|6_Cb z2>@{4edH$oKQ`kG0HEnR0D$}VKQ@Xy001Qf0BD^2uk~R6Q!kdTu8zD+OdcK{j8Yz2P$w|~5NG26NDKr3gkH|a2=L$gCI_bh_~*{kBtH08-GA`M`2Sr09~V&E zM;GK`WkK?fSxiNZ#Kg_n{U83gC;quW0pI~B089WLfCxYipaC!dSOHuBK7cSl93TTw z1gHVD0r~(FfF-~V;0*8p_yWEGLIF{Lct8pu6Oaoi1e5}*0Cj*SKs%rZFbEg}OabNr zD}YVF9^eFU3AhKm0D(XlAQBJ*hzBGFQUd9LtUzv{AW$4A2UG!S0}X)|KzpDY&=(jC zi~=SCGlBWQQeZ8x1=s@|0Zs##fm^^M;5G0W1OY+>VS)%jR3Ii0H%J5|3sM7p1zCWc zK;EDbP%J1N^b=G8Y6SIw#z6C+P0$JG4gvsy0D%ob3c&!u4Iu`h2%!UE4&e;p4-pBG z3h@)73ZfNa2x1mu6XF!&2@)C-1Cj)i0g?|=3Q`@?1kwr8A2J#;6S4%d5wah07IF*n z67n4i35o!U9*P%A8cGYw0?Gp_6e<F`zX1MsWxHwXv_WC%P6$_Q2nfe7gcH3-89TL@2x=!kTPVu*T(Ziumn#faUA%ZN8f zNJvyj!bmzuu1K*+rAU29>qw8t7|4vs(#WRB0mxa%jmR^|=O}O}lqe!7`Y7HgsVKiu zCQ(jN;ZUhi#ZZk<{ZX?}TTmBK@6a&NSkM&F?9igo%Fss84$)!IsnEsIP0>Tp3()(} zcQ7C@$T7q)OfZ5m3NZ#S_AsF_sWGK7tudo8D={Z9FR{?E*s(OQJh8H{IH8r+2AGMHQ}w{ zL*monE8~0M=im?EpMJvp#P`YMQ{<<*Pk#wO1at%{1U>`>1mgsEghYgrgpPz6gnfjk zMA$^aMAk&fM4d!O#2Cba#8$+~#9hS4Bv>ROB(@~!B>g0pqy(f=q;917q!XksWYlEp zWI<%rWNYN`?xxyIBWDM?>eA z&YiBfZi?=n9*172-ojVvuby8=^zrp=^*anu42%qZ8$uas8kQNp8Yvq6G`cgEHqJJ_ zG!ZjNGdVF8Hcd7?G7~UMG&?XCFi$i;v=FdJvN*C7vP`u+wGy++w7RmEvd*=Buu-%r zwgKB}+E&}a+8Nrl*rVIq*!MdSIe0ouJJLIbI&M1gI;A*WI?Fo$asj%0b!m3R{CJoe zccXFp?zZJF=$_^N=%L~9+Y`;x-gDfG&MU&}z+1w*$OqEL#HZJn)c2e3mY;}UzCY04 z*uOV`JRl@sFHkbD<-|kB+s7{?2qlyxq9uAK z?j*@4H71iJM<(B<7^IA(vZv;z!Kb;UZKlhmH)l{}#Am!_T4v5?iDp%26J$qZKm0KL zF_R;lQ(`0d#?T!G57e;ZPBGQRy%IUs1o_itURxOH@kw zOSwu*%LvNi%0cCBwT86|b+UE6zqx-`)l=4I zH()eGHUb;H8ZVnHn>L%Zo2Of3T6$agS{vFJ+lt#s+p{{bI^sIvJ3~6bUEW=H-HzR- zJr+GXy#~E2eOi5U{mT6l1F{3dgA#*%Ln1?6!ve$YBfKLmquirSW1M4+;~e7+e>na$ zOmI##PI65)Pw`B(PV-N9&Irx)%zl|2oRgj#n^%~hUQl0HTGU(ITryocT((`l`s@Dp zWhHPGYBh2VbuD$BVEyL??MC$`=Vr&&m#y(_)$NrXlbw@Ym)+OBkbR{6)C1y!(nHq6 z_9Ka-sbk&ay%Wcim($QQw6pAUn)CV#;fwK0t;@YD=PU4a^bOuk@h$sp@14@!`n}!# z%R}TN-ebuV_tVg`=JUae$1BWh`Wx+A>$~jxD%cJT{&>S6Ib{F=9Mj-_0O>*?B%lPP z$zsKS{-mKPYN3>k>G6O#%foZW_$31-t7z0s3GrOlUdIi1^R4?4>W%(gvZng> zLOS5F%b^p_|MI!{eexZA|FCZH{&1ew?r@cR9bhZ8`Wghb1%Cq1uF!*Vz~EOQc<^r5 zIT#GixFmh!dfNcUS>?V7wG&?nsswa^SKt1ETdsLtqCNyDV8uX`x7-gOU!?#5c>crG z)C^-UIrWq?FU3WVZ0T;b=~|Z05^e$-d`SkR;%|7 zq65s{AzlyOCU1l~0>nSQhv!N29OWQ)Bwz|G@Lq6VzRPr7y}xlB&N@EZ<0VOpEIAm6s|10N|de`i6hoJsy3Cn7Bk?n@F{m%e)0WwzF5cJh`o7= z7vB0*k~YLML!6TwJ%01gUpt$^ z&r^Ea(Qwm24T~8l;y?bL@4`2$DokSZc2atoAq*Agxg65SP96BzaY4z6R}Z0d-bu z1L_oM{wP&@osQln^IBC78#*UXFLtnY-sGL3>)~Fh*rvMmsV{)0$-9yfX41WhX>eCL z_4maKM8Kp&Gl)#*qHqPAFT*anD`e$wJs2Yy-+o?tzS2lmTSDt@vZ1H8G(~%nxz~P6 zPeLL=k-6!)GERiZCD)=~2C87es9Z-V6(rsKm4O-;nZf}x^B6gJD9YmDFL(7iiYXiU zDJ1UNy01{*+EIjnH7g6FnuO+)UT15An3(wC%iq6DPoTP+#k_Mmj}>O-l+CQ?$h_05 z!)zdU+S(n}CK{wwUSZqiU18D^a%7{z@&4)EyZ16gJX${LJ&gK1g0b@K*1eBNDG3{lU3{~WcSYuCwymUl3+i< zp5a_9itfSXYgBlC$>q|P#W-MvAGAw^DD~M48`-dlcq$I6=|?G2^78(Z5v~^UUS)9( zW+8>5hIvKgf^2%ist)LT2j?}SfLJGO#$nk3>7U0afZ;~|7ninW=|YBs#65XJ_iS2b0|?y;Xq2ehJyxErVx zjrYOoY?}PAN4z)VJ8GiA?=*jb>dB0iT@B6|d5d6@s zt}@4T-MaewcVX}s?rof&&85St8=64W6sHTTT^-tTi{B!K1s**K~rzUui z>x^5JVLdDxgx*iVes{Bp5QnpX(M>U<`;k~Aa18V7(XtF@m5bo;;wk-v!m#PUs=lR` zw-2|{62m7J3&wz;;+$XQ@1vYHRV50TOAiWG3#j@&wCGAieuwpcFr-#3#eESk%_aZp#G#~L+= zgp$9DUE3C}=706P7!Cq2zSFLW^40}f$TtHWq;eDbtetWobU%q4X^Qk-piz*rigE>-XzOpiztS}*1wZA#}U;d)`~vX zh}%V-ER&yeEzeI?3_N>Qjgg#oO$>{dd1V7aRq^g21|)NwE=FgqwYNPcK}65qT)(^T zWS}{@7S4vztGvqi6WX)w3gWYb!#8w@fO(9S9yJ$x+{~jwg2pYd$krHM?s(zv%@}5j z$>5u8lr(Ytl>8nEgun3K37DbL{N`kOQOXeR^Z>?k`wwnm<(^&%R!xMSCn?wWm-oH? zMvL+i?&G<+wf2#SX$e_Ne#Tv3DiQrtt1!)^FFH9paQvJb{7P4~jeH%J$$Ec(y%>8e zePrPj%w<;%QAiT|!}J7xln~+>QwC%xhjQ8Y`$VeIlX~<@xJP!uB(E*33`SQ%k@=GV z#(9PTsdN_H@0-dQ&OrztpEsuvle?D=#ri^wHEvWmtcsIAoGN8NTjLi0$xH3h87z1tH|N$U^=@xPl8Br5 z-ab<1j3yNl_4{u)fv4eMuu&8|uZcReKSf04PA6sSklhdl9Jz+pOiArnH1gtG;at#| zA8p4jYaQPCW0Rpcdk(D|S7v#b=UjvUiIfDhHx?UYBXa`Uiylzo+;I0Ln}y+I7QRHP zt;r~;OWF%gcYj~e|A;E@fk)QN{WPPx$ln>Y$}U_124VkKz8<19GJ$O~$%W=OD$A2n zKHZ?Dv#c16^J1Z16j-Va(P81xVOSQ^K07EHT z_ezKeDG|2Wb@9vuPVs$uy3tS0x{6#{Rd12gkZRk9FO^r)q3z*JAR-wQx(kg=gi@Vz zPTJtjV)jY3+JeoV7m+-#t5Gc7u{(c;(`()aS8g{S)sgl^%ddC+7pGiV;-tz93&w4N z{a;0$5R+(h`oDj&7=zjpsGL2K9zd)G7E!X|K>hLWA{G%4dmd`bU=J0Te&Q+kEyUIp z1p^!T2RiNqcP32TLmdYk&i671ZO{$rS#V#-_wDy`yyT4GMQ_*fN@pI4-9YA#QA7XU z1k#(7s4AH&Pd-QZL?qm6t6?~YnbkFC#O<`;<1Dw};(IKE3)Nir1ksUEMOP~=Oa;7` zvz{kpkpg&zVXLhf*Yfz;YNk&2y?}0&E@u^JckNdkZkFY(1&6B4j21O_)=H4i#6*~V zczP0bmxvqgak`@Y`462qisQcs*q{9$e;Vm>)3FH6>xO6z6OGI^_5WcjAH3Mf2pb?2 zXe--Up(K06U|2?4^uRdin?b=EY$4g36?O5+mo*`W;6M=>sMsp11iBGDaxXcvroz_5 zWo~0%j%jS)>UjoAmY3Q+WWSXafluC48DIMfc)>L==y=}ZvnJBN+7on`iy5@#L@6S9 zeko-Fdf?^hRkGrrY)hX%V^x_6Ak2-;MCol6`6~HQ^mu0iC@pOGBgwr{ z9UunXnhyh)7u(2fSz+_u`gDkHBY(!zibg@rB_D8LF1$=FKJ|A{-Dn~|?aMiH);YN% zP}ESHn4n0j`t>^+Zt1!Y?RTj7@N7zaW{T3&YOFapAE^D}ZrnMM`d*20gTvlP)3zaI zx;XUqcZ5j>IY%V$~Bno7b!Ir}!+{knh z`gfgGF=t2`^U7F_5-wtb2%n}-#s{p?+%ViU!iyI_(>7N4y`>jbev~=PR!(8N+wKxN z!C2ubXaYj=7K3cj$P*tM46^e}U8DGwudO_zjQ!Em-Fbz1!^af)bVqZ=q>?9H#>q{v z{2|iKA{6B27joHhj3iMbXhmziCVXaC}fpW){h&M1s< z^X7uZ;2eK5ok*TViaFI`fOX#!j=Yw+8!6+R%sH`qKYb0$B|PMV%h%Ad#4Sz2A%m?5 z5y=`Q)emj`00MJIpH=?CPHQ|6}6-k(}KMPKlwRai=5>i(gfUt zg}p4m*R`_aIskYq2K}fv2AZY*UQpS@5`P@BwLz6cAlSccP=|;O_>5MmG&_tXw3&sn z9q!1st~vDkZcC4|k8ER^VhAdldT=k6M}v)|`s8n%*;mfO^ko}+i-(qRWUn*FawX~h z82$wozr9M!(B3-iKek|%A|=W-$I8;yX(#lLaRcM`FVoQuH3 z&=XOW2cns8gLz93Gk|m z`UV3zqdR6CX9G7LU91)Gnqu>+G1f=c)h2u+=m&W2mI|Jb+uV~{J_aW#FcF0!i+tS; zI3#C^YwO}}!%BJrgUpEK8OZSB38bB}ajLG6bZ#&@!c-|UKR9dBx4Ci?Y}h=ov^=hK zHxIRDm?%-iR5-E13kJAaq5ZW#4pX1-)%cagMnn34^iA1MTfStvAV(X8)Y^ z{oO&RxPToAa1#!?r-1^Dr8_t!&@W7;tGybUL2eS>gwCTGd)$91{K=DTpF#lNAMP$B zah`Ou%sf;5h+V-Mr+-OF>HrpM0IkSWA$2gtI}VTXb9GK8F4@!|+v1lk^51a~ElcU2q?8re&-TF40PGS}@)*l!#C3D`Xdvn60BiFtioM)G7$4XX9Mis+lmc;v;Yq99& z(a=1yeXgzdD+gOYKoOwbQj}@?u$VCl3y>a_R}J zQUr&g>sVK>P4w&>d-%sN)*z@?wdxKBk9dH$xG`%8;Ms z8D5NZa1NnIi#718j=D12{q71~t|It#%kaVy1P@A6P$~L&S-oFvCyiUx>YL3#%j5t? z|Kn&64U}O6c8ALhjg(eB4$z~3vIK_hic$o0xlecyIVjwZpVmIW19HV!%A`ERSs)v( z0mq2T#asYe7st&DN^j9{_a@)iJ9_)!&|W7nxz3fG_?91l})uQgp&K?kSF7)I`axz?}^9Tm%6Djb&vX*k8Q zk1qeU%236%r3^(?=L_g03)&|xLjb+JIW$X#8JWz4=B3D_JrpI9#Id-K%*JF{TSpIE37V+eRfTy3*9Bnq8#jfN{AzNVo0wa~0=hfOUM6zEkwTE*A%`;ail zMx#a9hROV>#m~_-Dj2uGj>?CUK&#q5295PlC(9@Y%(CwwUWwfm{T7ad=I2XGra0lG zAyJ1S={kAWszK}?MJrVx$uil<$T1BLSV^T7Cw(tqL+LWDd%PCiCp)}m3H25 zj5Gfd8RTxX8&pTg*4H%^{6lj>ia3LQ$)ql!ca3qz3~OL67?n!R?cG77?W;7@pIuHC zvcC;e-xa>(D#BJUq3iv{z@MJuVkOGK$Ru#&sqIS?Xe_owG##cH5*J@eo6I+h*6M_V zu`ko%f;W>+zY^6V{p1loB43RAJne|0d6p)K}sc7aYx@b$DF(R?u~Qwuos z%|Fd&p0T%ja(Sv<2{*CNX1t~s!OtH(u0yvPuVgA6eavX@E6wGA$Pdd_5%VaVVs8K7 zvv1ADu`vYRU3#DSgyx#}VM1x1^UCF>8JX{@gCv=+g}v|Ky9UsA$D14faEe@Yl#xns zt`1mu^Why?v##UA0>U2H#+&$WXTo6@pk`!^C7^7j0vODtc)!(!=pOsm)X7G3;N zh$1!%Ys*1FhJqAI_v^JW)OL=rLtsQy2sd_d%=mHS=88%yVJO2@7|`wB^AyDA z?y~&6-mqF_JpBeOX_K3CVaf&s1Eh;cYqra2p3~p6bQNuh70@TBGF+)B_5GT$_grJ} zWY-bOx99!4=R6a%8J&3h_h;a2Ua6Tve0x9)DxvHg_8^lSwvI-89-{z8v{#hi&tGojX6lsStYFdTB!3`Ouj)V4a5@8K?WKMDA2%CxU{!nRSl7nf4i<5GgM_ArlWzrEl$v~_=Z#ga=&SRJT~J3iPQmaK~lD6sful2pD#)B zVr+#TLsBI3NHT2>*2;ET@Eu03?tzOtRTyvDA=9)s3Vb4-X=0_Ci;=zu(o=?+7l?VybT zTf0}fs+&0Gd_Ckax9h!~!bPuWZ)&E_AqR2c)_xLnq6p@8YA`ZH=Lo9FgV@;`2xa*e zU{CZT;M&VQcdIN~Ecn*w;+@}5-dclBQG+|;j2u}PxkQOXNL^Q-SnArha`)bcXISbk z-Q>G!b$A>k`}SqYF-O`x=qqNyPp<^DHnqHXzIR6ZCoFBCE$~Q3TSbH_vMOnwhYzLqRFQ zujAghlxxFIa(iux47!!zPYT668AyM(L|p;bsmbsY&ChYczUuMvmD7l=f|Rp0Y&z;3 z-WVJT_u!_vloxKSw_g`@beXL$r&~3aeV<9*nQd0Ni>nFyzX*U(F+4ug{=$cLAq%s? z#(4kJ6RV%mE3h*||8Xdi<+$@iv`@_NGMju~iZ-eUE&6d%ne;OzpA|Zw|6C!HyPyX+ zv9!%9Af=+M(5yWILzA&~ts!_#uP1INwefDRLu$WD%i1NNkHSHk;7iJJ(CB;YlJluF zu#;|kJ!QVIl;=Bj(|2KG1cUKqQnR5D7CMMd$In#)to~o_Sv8$Zw8xgHpzW8@{@MW* zk7zx{{M{ot5+#dZkx2`PgmD~k#HUu*e=`d;lCjr^t;x_1qv7$Eu!ZsMeE0dQl4bwfnp_y&dFGVmVsV1_!{8EAMw?fpA7YDQy zda-8aXMtNa)PbhVKk7TOr$lo0@aSoElrRW>JRaqW6^HVh*RF-{%RNC!H{_qenpH1P zuji#HhL-GPT^>tJi%>%^hZo(o(!%`}GO*n1N@cbXNZvjm{T1k^W&EcQWCqA}7F^{S zf$r&cZpUuzFGRxuotP@{n!j(iirK+Z@Rzp1(Rt6_j(FM)*Z0)>Ribw z1Z#}WLpTGD%nJG;QxgnT)Vsl@3@$L6v#W0KoDLb4d_gGZP zFB{9>FwjWm8FKhJhbDR5(ADYb_=_MZQ#V8F2mJvurFH|o0h*ju$w78eXtwR)5>6z-mJR2Aim(S z!F8aMP$if*$rYMi#5VKOVP-K>JJ@d7)+L)$Kh;GyN$RCtgPzKwJFyy{B2N~qErdH1XD$FD%D9vKcjWeBVu#bl~%l1kBXb^@M;#-@98;}zJg zhd4sQH>XYe%Gxh4(cSGQNUedIWXCNSU1(x#RxI|Ip6QdnRIL)oo>7|y1p4TV z!?|h$Y7Q<+OrPvmJaK*{%=hUR&I`vNlNTrjbQG|^b=%wWAnX57IcC^q5U#)G6&IDW&R{#k-xXJLiF8$JTndr^lyw+Dccf?Z!Q)kg?Zm7j6+4 z2vJcf#q8arg_v*ga+n*2f223as!yW|`bQBgoItDMC6fTdNXN$8SzzBFhqEwEypymp z9PAe0USs?2W3Rsdb>KBKHe_E|m97fEbHmC;MS(@Z^vA2$d^4xDOyA;_E~?^TX4afH zb0=0~;DYvdubt#1gnkc`Jh8n?ya8hNq zBerw-#ma9bTe0=Zf1&vWL{HUe{H_tKMdgI~)c*-@B_8n|#@?x`0qIYJCNcgWB+>=# z-`U2^_LDA=GqOpulPbNQv&!x!rXtF^l_|2QD6ultPpAZ1e_?pa%HH`{^5{6euv4YG z9<(7utqMVYzWtSyWW`V zhe7lpvmY0HVKK?g>-IU2OYAus_1m@rOt>w1M%hU`q5*E;Qe%ZzSq+0$rW%GtTBJs( znOFGSk%RnwnWYyEvOVWJ+tnTIB)jKwgblQX1%w*jgcnS5MsHp3}X z@Q&9+8p8PfoqlaZBM?@GLQJ_~UPy!7j?>#?536DkbebFIbN8SCyFS6*pg1~iohTuo zkU#P?OW^W0;rc6dSm_L>)>}bFH3>pv74m`lNo9QAK$c)=sHnq(ieJ|0?~-uykdD|; z-QN|p6rz@_3d!}WLh1I1aWed0gotH#1`vQd#I(8@T73M|cDuQ>spUY*<$pkZf2p{mDoH;aVfh(|+R) zq%mj)M#}{;{E!hnx(La6C-Uqb{PalUd=bve%$5>^7(M+oqSrf*-QQ3G1%M;$&M;H$ z-a^`{)#);AM>-1;IyK|(?&g2b8j1UERwbg$y?tv|b1nLfIsS~X_;(16BSV!BTWN&?uo)q`LgonbhN;}QgbMFV z4ACa%UgnuEYx0xzYS0jK;O8wmG;O~gGV@-^0eS<-Ft_UGz3F)ZqQ!D%^I{nmJAo+O zK5u0C(v+MpgQnGb`eISMQ4*~@AVVtZLK0CPom06N2&=bp;N5-F0_9_c))#-qwfeO;fD~o;SmK}raf3K z&Q@HgOg|8-Hpne~=az7jxnhc%2ARN$sE%mMXG50u)jSH|)ajU~?}a@s@4K!kGtqGi zAqWCGnYd%;TL-$wxTzgyKj<2@Wr(z#59&io&sZ?6;8kvGw3aPhC+9AV%?*nNScZ&K zVAWZ=gdemiOt>Ka`1rTaEW7e58Z%KP*dWgw4L+JMQRc6XSZ)=^qXs2s3*1XU-gR#j2uY82gv)WUXxsu_y`dGb z8VP=+i&?cPARP2MK8ji*Gv!^3eAPNj45z1O;3-7r+BP5(m#bvBQ!mGj`qTJyx-#M5 zPpX?t)A!*6ICv5toucn-~MY%B4YFVLr zMo&4`{Vl;@YA+JjA~9C@yF=|&?#MCf3&8G-kgTn5DSc?#w#`*z9YF?d_GvPM6P{#M z#zY~w_c&wAkRXzP%>jJ~5Ol!F$>ydolaQLdC_6r)e*gZIc147EbaDxJA#?f8d=!(n zy`4nNHfj0N53P%t_P&o9c-&90gEG^2F+0$#bZgb6!+lB>Fgr?T*rkVs?FZZ81!a_h zy&q!RzG6%3wTd55>I=ODkKkC3?aHUgV1zI8dYOh1ha44h6M!Dv0%_P)opg#zc!>5W za5pSLUAkKH-Dg2De1<7?eAa5@0RZW!*K9KbA9tovgnuHBI~VmELIvc0O&T|rN$Icx z@v7gb?46NH!4A3R6<5!@4?p?yl{JQ5tukX``zz|_`0drkiNDqE9r&_#_}?}>2-q#J zKA~ycnwk%+Xtl8LP%B4m$xa3a{b4SaU%%rBpw&8yQrhyx@Gd!*yfB+@v^kYSZZ z5kq8glsXUZOuZ2vIjh~6EJjTj1YyjRvGdDUj2W`eCID;FY(~Nx?O-{QW1ky$w{$yl z3O?SU>~LDJ5oA3$vlyh|JlcLqp&#aXlS~@S}0%WTr#CVRUf@EEY^Jy-m5;yFL0IN8W zKjho^70XXm9>=x;>3c<(&)WTw?6%tL+DjM6-4X`aRnAa>7z(3?59!L{?nw&f;b#+88;Iui&<| zKQcd@u9Ew1*D#d|Sxq3K2||xrt6QXF^Gk;sHxheaqS-yGyfQ5(CtzAShMUww6B_u| zdh7qxqOv5l>}sx&fuk$l)!a8zqosy)eVh#!%n(;9cwgOQhE>Ay?WS9HGvU)?5&rbV zP~Bi1Pt6G;MUeRGrf-QSj$9K!%)|9Q#O#wQ;x&8 zwa;V!&o8>#KV)QbgAa@TDUu+P_qFKO-6_Xrm^keWPm*o&QH~V$Y&Y9c$v+3lU%WZ563FJaL5@_nl&d>8OguQ6_ zEoHah8yxmxavOB6=v#RPUs>Dq(3nYN*tuGwW`pTGn zy01&7C5!9tv-V6(44jn9eYb2G#?TJ{m$#0l8613Ba%)(>c#}G{(t56ZIj1CHWJm9o zmzGn#)j2;^1PH4?!$zGY2Ae@BC!4!Q4WjLbaliv`I{3W2n7bN?T+O?d?z4@Fvn&_QS~y!Ci$ zo;i`&c*0P+YX{O5C#{|wmdf45px{ST9=S#ADxi>ZOZ!MJy;dN%2m~#>2ledXQt@eALYVMijr9FtU=!7E zg`TUZLGV3W=ODiaizy=tm$pkDU33(Rtp0+jFu(2xj4|Cf>3LKb94oQUWajI+cE3W6 zi&v0e`Np;dMg4CgVhuBwJojhksh;Dl5y0t6J1|Oqp545YS4*$auLnr;*n8`W1c%xk zWlPm6M!+T%Pz$yL1W#*Cn8Q%7L(ynCwpn6#sjL!0;IRZ%&U-gY@M}YFlt4jo8A?do zVs9P!_&SsU)MUfVFc9Rjrc`d{Su>c<4;jV(eC;S)T;<1)2%;>BFmY{`f)5McYaf16 zBf-9yp@&J-ude2SGiEZDiOTj$vd5$T5}cTbv-Al%T8#TUDUQDRoad|{44_kPTbZf| z3n8pm6a%|M)1PVfK>JQ2?HWJp$+1@cYh&m8l@3aU3a3u2HD^%U`-7tgw0V^`=5W}Q z#&|eeAKF+;RwY$XW)u3kodm912E?d=oD>>G;?Vs&Otz!6%Sb)G246ym9@ifLD)TZ; zYEYu!IaYbDRG4VdoJKI*@vLP#RTRA2?P`&y+ADs7cm-?8U0Xu7k^U|FjorlPAgR{G zT?)C>FLG2?->EImYpAwrPXRd-L24qsM+C${l^HnS18@Np1#D|)Y7LKFl9?yss)1{0 z6#_+D7Q_fWGP)^OmSdw7z`eWkJ0z2!YpWIG648|azt`-up!AVOJrhj|x%HP?H2K_i z#FyG!La0Fzvq>_?csGB?$8!tmQ{8MREkMhffoVU%twhjw$>QQ`#uu^L_kjp~OrWO**`>#{e zIvQFVQ%zqw)D2#WTn)Pev+ye}moB;jeTS7#R%c!JKHcatvA@Dri0q4dWMwHp02gNU z-xgxMSlP{-4q?1bBQ8>qj$X+5Uk#2z%{kd0Z^qTp56lj-#NQVT{wygJbLN0OQ zqUisIW~9JS-hZ)84ZKZGv2nR%+9x3GLltFH`b(lvKVi zpm45c#K3O?X%TY4aq97e1h02}r9*8p5W{!(muTpAX!K1QzMFsfrR*;SyY8 z$fG#C*MF{qGkwR!wTI`CQlHIjTi=RQK+#5}oi(ku^7Ay_I=EuWVGV&Veu(6tC5vZ) z6t*`Ij$lfEVeB%~4tF_SV6Y*!M4V^Tq+ThjBx0fief@1xT|=$5(bMZ?MU?hU7Fvu`z(``~t5hk-4$;4S4-3DO>UYl}5fBijALZ#Q=r&w;A$1)Df1+nQ@Rl^Q9I-vj?XMob~eg6&dqD7Ntj}h2_z?P zGrm+=!L=IKT5$;zx!7CBuW-AQ!s1lZ&Qa>v2;t%UrOa|jBn1+(%ycJOvs&S>&8_v6 zefptF=f%~XSoB0Y4+greZxi#d%U{!!iL5kgza=^+<12Aw{z-2s%Qp^eQxOo%zW&ll z!%Y*BgOm%V;wB>AB~!<&?U&(Gr$!8D@-jK!A~xzPN4E7QoBNuwfTD*L9o^7 z`Nd|*YGbhIu6oz&-Em4O+sM1jtek`Bcl4(~nDEPi2FfAz=}(+Idn@Adlgof;cTYDz zd$}B;*84!en~*8-fof+Pm{zsmNJ@7|U2G`9v&Z>GFE2KunXKRSzm!ToUpb0!n`eKTu*t;$(!chPI~fV@7(14^K|ENrfLHuc8_{GBEOc_(oQF5v(9YAaq{UKhzHW z7ItcE!6;$OjLxlnUJeAPO;^*@1O}9UDmK{(cGLXji9QEmpd&slU)Teg*-mbd+aYl! zDKj;F@#`yLaIgq=os?vL#4oF)U;5Q~IyA~~Z&tB)5M1L(go0k;CzfS+h8DHSKmE`V zRzDSBr~XB{R#D`7Rf_>i_WMZ!$|BEl*l=SD9D< z`g#4gxfYAsTCPS0RFfL}B1eUEMoLgl4?Xa@Ns6{L7~zQTxnHA3^b8??JRIxShS8F3 z+eWB39NL(~sT2GIGcxW>=2zBIi5H`K-;E9Cx^q=w6grl^hx{{yHbA0k``N!e<2)iZ zD!Q&6h+VHKCDP2?U%^8Sse^i9iXZ7nJ6ISn2D_Z<=0)+XD)M``*x}|)8!hrnUE2Pa zcpNy0Lna9entY6%{EJTcK!)B4*kwBGOP5ltUa2DB7=BL1ppfZuEVLt$&pCY-yefBH zK(_kWW|8X5X0v*`im76+kUajH=HMQbku82{_f^`wRdGz12&VJ(HcN{XjJ`0ov7AP~ zXH7`>(vp!xW|?lDa##wgjSvcLb#i#ydsmoa?8m=a3fMQ~(bi<2q=vMDujxhN*dA8P30dw z+KZ;)E<+{z!iYfEcB(l*-P6~e1eVQcl0f24_?ok4He7x(hXUNVo-NSTbWJ1JkCoRJE*uupEHEm-MHcwovcVpE|S#1^SxFa zxeY6VFsv$AlC7HTn!{?bRfrrrG$*5@XyMtAdP8tFwX|g096~E&ve9xwrd2!f>T%_s z*hM_k2%t-Hu)GAC;9?+ZqE3(-hVY9Cs@ocpcl{z#(;@1r&RK98J=GJRovBiNPgKpN z$gIQkJpA-MvrVkaQO3Odd#I=`rKnWUQBG#>(J{JG>(L0My$N~POh@FK`{%w~y{kE@ zcR(U1Jo+?Rzh0TyA3`7hF90h*)W3hgwDn72)LlDmxph;MuIj%3#n>M1ZPJCchk{vR zg&t0~{fiRZV<(7m@tWi=B%UI8wt_!jnVSbQ5NQCLUq4QVJMA50MvUZftg4bY(cYbh$}*LggG|5 zEc;6U*j06XA6k^;rMmo8E%^=#-L76J_TrL=$%`jzP;05TF&R_nE)c&?o8r|@aB}-i z_%=&7&mmBAKBIj&&MeiRSy|nFxK`_wF+pNe%R=2e=T6^C4m%DZrgHABzR(+rBoJF% z0$5VH9B+aX0eVrZ;l9Up7)ktJ%pDK;hWti)%zxIgp6uzRYz!Vl{^q~KX+ya);YWoq z*0?*XB1R;jK&Cnpy`8gyJ#N+Zli~~)R&Vs?;mj?lZPBjKC&VQ9GNDjxLaZq8t*e85 zv$cl|Z39k_6iAsCPZMi*wws+*3KPTxb>#Ki)QHAH8dFp#;UtpS(UdPwg9Y7Mq?}@K za5m->)Y9!~-7}K0U6p^`&^_0`15xaxMPt!`+fE$z(x_7~-6 zQG3hPupk0V?2EgWGUWALxPU&%(s}qtl<+YMdo&TL;7B2<<&qewf_d0FhT7(6?U+dt znT|}|{lHzWRf!j=Y{TIt=A=?3bgyE4t}^1EU@g%!quMk%<@Wr0o}`5q*-Km}Kr5Qg z7~nh3??bhNK1SqDG;Tko+MS?&cedCf-(f!{&Vfq7hFAVKxkjvn5C8A5rJ0t1^zj}h z7a=8NIJ%-tL^KCL8Q4%pWpL-WGm|G?aMj2j|8&W21x=zIMa_2D&U(8zsqoL$0cYjqVG@5lxHX|7m?{3UN{kkxMZ zj?l-__DY4qJoB>7sT*x3S4p9WkX3EK@Pu~W@;KOZZ@b^mz-ZAm5vp~AAgsQ)X6Bj9 z2m!V(anD(bTTUm=AqNcL&_oruTbkZN1MCH6HASw*B&Nz$5$sW_7f1HgBV# z*-HkD7Ooh9L}GrNBJ|5QN?<^cI%jxEHGY%OxTKsn7~%yxZgf%7f6jb^^?FTe#)Th_ zvvq3zxk}Y7ZXfoj#=Q_94m-U+OXbalgs53@pzZ9tYJ!zm*8v`QuWXUz&2u0-aTETD zg7rMVUI8k|@-8Q^U5oqN{%ddOIwZ}+8jc-Lz#zYf6{4*4DJskGWRVhm8Ae6lF+P(A zTfXr${M5nV6|Z@eT^2BlII0lf%vEhSQXDR!`#||i@<=8?gQkKJa<2#W>->EIP%3!w zWg;A}_v5G`Z!M;N&mp2vU#i6i-fby31U5_#zgGP|DN0Tl`b$ z5GwG)Fd4zr8GiBPS`*<)7W)Eh0-e$_KyFrI9;K#NB~jfdvvE2Ry`K7b&(dIt%TCjX z=1sfzs(E$%j+X0`%wFuTcDWLWVY7$v$Y$_(r39cW;gyShoHS^k&1GRd3j8(>ANi?1 zhiKt$o^A2Zbx%2%mcU)!%IrJC`D;boo2AMX6?4ZMkQ%@9-+;8B+qJ3)o{Q-QB}^YJ z&6mwzMfz_N1O!IZ3>$r-=dU`Ka@3hhRjp394?m*FLNX*an}zM(H;0`2v+4!9f4bZy z>w9{$7bi20TV}glE{5FZS=UAth{U?>6DF9Lg~qOgudM2O!geK8pd?l)i$rt@;eyBh zL2;9=*|gUjXQ=J6q(mY1Q}N)-cq`Oh*oX=}uX0FSym}qzBOj++ z;}17-^BrJ*Ke|o4DmauV=MsJ=(7Sjew!e@gKtdIBGX1~by##s}=LZMTa;5qHJ%T0~ zcURHktrmcWC+FO$igsJgQoBzN0e&wDaIQk6h&6VYXZ&o&y@HMbJ;Hmv z@g4rZ(b?6=;z{axTE*F_k3lr)?+q?aGP{ToWH1_l*iVqG`b9a5=ivn?B$C!SOse>& z<6+{r7w(rFB^tAoxWAYh!3fkvB8%-uy5a3r{ebmgSWkeea_n76S@KKseCRC zbr_}$d;Ssz1L1)Lvl5OJizV{I5LtY&4cqOS8@I(nrjoVhRP64brvilChy7@-G?*>i zqUO{#tlt+kT%%z~kOTp?FEC2?`!3yjUcl-QS3GQnYZtM(Az$r;+j-BT^q+xJIY^z~w!-=HEiEEBd|$ z&6Moeo=zWuBicLhAkSL(Ea1q_5XNfK9}v83%NYnw86`QaiV19RSK0Qr7pTNW^$u+? zW%B?)>kKi7JfZ(^%Z>o95@oYp3GsaBK5#MYD}kP$wyf$K6M=D>Y7uMwtVW;lzyDMI zT<$qQb=LVrg(w*D;#IypIvJlV4iBYQg>~ig^8AvbmROLB%^?8;*j`T~!X%o6bX|<1 zt|aT0wCGJ$w7ad4l0e!JrmCxD|7|-GxHl=Cz+bo)%(J2&CJ?atZ&OpXamcuE=!biTuJMU(&Rf&zJubpNo|8Q0s*t}7L%baKv z`~=CAD;T=>16l)Am)+VQ&AhA%AKzbG^K_psH;2TPHL;k z(I}cW!D1=ya#DqWSb%|{;e*x&^LBo4^o)IJ{;4vvz`>u@o~I?n$`&&E0C23Rv-tV& z{HFS{*or{Cj8ZzziSSef-KH_Nqe@Le769O}Os3*IHKog)_VS>L7~Lm@1-v}91I zH)=Yy3i@tq&6YW}*sZV6IGh6L4wob`AI>Xx^&Ep7tu%gA>uj@=h1f;2{|w2~W8{m(;Bi1WJ{;Sb&1QeRfx|UV@ zHtpAGxk>m5L8;p^FB4>IU_$1w5hcMLwbj%mj-Rt{$LjFAYp4zHC4RN%>CEL_Em@xG z>yLp8>#{^~AYwkRe9wX78a?jvv^gv;0PNGzmA2dieq~7kIILpoc@X+RmWkTaV>?cw z>TDRF_ljv%kbS|p-6>gn7AxlMstY*Vzj0>Vak8Hsj$q(47Xm0xf_(u)u*FfzHN33g z@m5fFQ(tYv#r|moR+U?>`>KgqM=?Vnd?=@E{)cvUgFA|NPt$@=!UK8LqJz(i_Rbe& zx(mx(0i=QQhnF82LN1cYQr!ykl$5;=y1 zc+t7Yd3+cP_nsI`zY#9ln3?B{;a1L9v`J_%SM*p4gLz}i7U=hejiGjh<(IbJvsU+r z9%RQUZOb9o+#X5|?p9Q;1s;ofp5s>_^5FwxL!trok-N*VcUtdc40y%C9f} zJ!S~?HBK*2Dy%f zT#z_dH2n1f@}XVawJDJK9RwD<3&=BggodEwePzKMrhwFyw6On-Hq2$f@9kR?v6$}m zf~n~oVS64H=pRuW@#HimEAdbhEEhcNufor<$9E>w#W2d?&xowO7h;$zTFOQTJRk{@irmGiBweD zKyBX0gN~urpz);64q8&Z_Kh2E0@p<7cT#G>cM(bA#Fx0)gR-7HPC#_KPHOf00Y-vz zr_q`dsOxSRABC6Qgron0TUv{mpr7ngI~X2+$Er`Z~eX=ui#hYty*@dzICrj+CgN z=M~cvU+owVGysl@`ZS65l}#$t$7wUv*~6+N=4?nUfilg@;I#f-)2dOS)uXwG^t~E4 zb3aG^$LoA|8x6_Z^()un09?Lru z<2M+YB?V-)ktHF3m^^|J=gv+j011RbEL2`eR`@(gT69^ge>`_mUt+=7P^XWks<8`dDzI z>;DCL{2^C+PWVPS@4o390#D=n+}@L#bIg4_ODW3ZSrf2;crQS3su|KI&XJxE%|yFl!yUhNrV^Y zo$6Wn(i+*e01Lnfyi<5J=+#|Dc)`)|>8Ik`W(MFKWTaa!7(v5Ydj`a#$3y z0CXHeiqv9AQh{pS?4&Q=;SA@*^kw$_H6o#1!ZSU8S9T%M*QDLUUd5+jwpmYGF?$<^ zR%2v**hoVjoEh%HKGLU?xN;yY#fZxSpV@P-@2L{lMNFr7LYK(#b(!{H1a%zI_bw1@ z2z(=*9uK-3w9T4qQ!1@=;ZFM<5SpGlwWS!e#pp?fLQfmfa9M3>ksqw z1MX(3M(A3vtc_jH6DpgeL9@`+Vgd~HXn6L!u>?O(7)`^@x(vhTn8cK7A61AC5#U39nrICk^%l9V=(T=m+2Tpp&3$s`K3rLNAs>D3aL~M8`!eUKh55B=>EHAXr}(=kYU5 z_IQcj)JyP^m=}l>?AP4df_!f5$bVDr-qf8N*L*KE2o$KGjrk!+Z=H{Z_cSS=OW zzX@BSw`IfQ(sp!JeF!xCwRMDXP;^nZCFroiAN>DeVW#zy^Un5Sm@#SwHsBg55+GGZ zrRq2PsYcAEf0T6)s0r=E+8SHSi*-fB0sYQNhai8(guS|vG!wcWyLk;%TxYA0qBl_h zKYf*a!FXEdX(5g$J!q)^enLUX-j&NV3jRXa0%ihlfDyf^z!`Q5AP$8XB6aUX>G#de8X}O)GjtdVz!@k#hDgr{X2^9+uWzC~lf6B&;A8(inI9dnOc^|%W|LY^jTq9ud zH;96%O%!Hb#TE1ip!eSr$Yg(LwVSaMeecCR79nJdPNrBM{Zv|AYFAtRpP;bgz8;U;Sa z8y6LpH5E^hq!c*(v)8HowHmZ0U+=NDyHAp1AqwBXB+43^S`7cWY1l&6RWs5;r?C4F zA>uHQomL z{oG2waGZtvl}W_$2BFtL@Fa+2jUyA^6xIYOrXFm&kdW%&L*L?PFqWBLFIeE$XyDLl zBcTZqzrT9ExwMq>Wkt+hOpIf{@I+FWi9i>|-1sj;VwWdFU2#8To=^l35!>)zJ2ppw zDc`MKz|}lFl`qDTZd+z!8v6;#u|iexm_7qGqyWaoOK>ETk>a@o*r%@nLyD=Gqp6Ly z1T6l4GL{%P7bR1$P`r4lOkpC#s2!W#PG#V=-P7TfLl@uH6VDrh9%=E%Un`qGoLHn@ z^vCG+s42R_KkDFQBmo_v2s<&5BXh$vQYdVz8*yQNxW@Rll(xC?z!93`(w_cqFT}1& zE1D4;c7Gs}2O3Lx1C#7OAgd8M(@;rry`?rU_@{S}N{{1Aun&@Z4T2j0Ld;8;)pEzx zsyIhUbo6Fe%N`UzYaFCWsoa^e#RUQ;o7(n`HJm-ltPpvu4+tGR14S=@2wVc`jpf+! zs<9WRn4p1-{F1`U3`y3+Z%)a&^}x}_1gI&cI&uo}HghRkcS}X~!x|o(3hiy49M>j9 z@0aX!xqk@nn9!U=8zJ}DG37{L4E`6RwgrcSj=zYMc7dXRTNFHi^j8m{F_!6W{`#%oFQ$Kg#!-r;4R&P?iE`QHpb+ zd_QHMiS@rf(n6|VKpbv0ujGpVAapB_)?!kT%4#f#q$MYev=PBmwzDF;emRBMtSongtCNb3S8d7Ovbp$Y zy*KDqJk5V4m|Eb1k~jeWS)%gOUxLXAY2w`IMABe)xQL$*m$iWFFZj+_-85?#G~P?E zFI`u_l8g@LCXn7`7~bGStQ#NGcwzBCn_4lRv_Or~!P@L-ZC63LPT9D+`w|?AgtxEz z?2mtH6Nq0+aiD3n)aHp-MoHr-MP4 zUUyyv`ZFG<=f$Dv7~W_1(b0$MSjb0wNixREHPnCCD8!YNw-_PzE!(^}$T#?Wu=9jz ziMY@b*{tuopMSVpy#~bZ`V{blC$#?2D>B^;H}WExWhhoZ z6N)lwq)LMI-8@F;sAhs{dxyU>1D>tXAW4c4#YpoU`&Gd%qF=F9a$7;L3-owHhuKE_ zi6CW2+a<@YIS(^N@X9GC`11ZGH*rSI_*fKn*-y{R+A`$yK%AFhR8(hoHDr>JMM-G zCyy+@5{R9&%x)kF0Vgnh%^_5<*_fx=;Y>H<~0ZfJgX~zAONs} z7z%O0sBM2T%Mh)aWlLS-zhSdJ$BxpXj(XqqJMH(9_;D+Nl7zyj_-0Meq(MFtBzX%o4*D=i?*4ne&n|=)b-3WI#C(cQ7q^O|f32|bCLKy~J<>15%W5Dljd>z~~lIYahwY;W?n%?uy{%aqX z*vK{u7ULel!Z8GO5}y1E1ml1OKH-q*qEPYIY%Os)DQe@e(Q`~=EkJr~#uJA(%8{)? z7gJ9?GnUhT%9PgF;cM9k`M_hADk#l6Gh(LrmOSGCg8UYAXCE%$3Yl6LJ`a7j-N@oo zl(GRGG%3Wh^DJZP0uu@H324;I8&BSmVUcm1_o@J=7RI~qIPKPr+$(~&qkaSm&YKn)o1@jeaD1rZ-owW@+xVE)pA*u@wwO zl%rJaJucEENU3E0RCy?)c1a&}hvsg%^#A0>AV=}nCm}={90O4nKw}sLXwtPkinQqI zuTzL-lM><&Aiqp!Vm(x%p8_5JphB0RVbQ=u5#t&`d=Vcd_(-f+OudGa=HM>sUnU!GH&?5vDX7X9v@FvI!Fk`zq`QkuoC;V$OkUbJi=W7`m5vQ zgU-6)+?qYaicuEc1w`;^D?ToOf(gni;E}Q`MhPj;kKK=R!0x}@@N@Zw2scW7f@MXn zmA4)7=ZopIcOMmE?m0>zWL52_O|4@7<{oGOv~@5U2N?F2@lle`IsoLbZsEeLSu9C9 z&;Pg%lwnoD8G~eOiEy@z#2f^i`HGff^w4f8RBsBlJ$dKR2S>w2H;Fm$P_fM%I`@F? z?r1ktsvO?On{6pGBP1CN`F;a!!klBTfNP>5bD9#`aICS0D)1@vY8{imAm$7~0HejE z;T3A_cC7PlaCh}ZaACL^f+U(j(Zm=&hIpbK$>AC_`iV_`F<2`Klh4!CmCC*!QvQJ$ z|E1@A7~A{V^H0vV2NDFj-w_cxJavWXzKq%?wVA(ob@AbhVY}X^cS`e6N~npJpH#+4 z=FtPz2KwfVj)r7LoFRb@i7YCh;_A|5oDpBzD}G6M&rk1P2L-7?^7=*?%59^urO+?# zqO3EJU+}3DzwuD%o;!0~3kLJ|Tv54l2**rTyB7nD)Q^^6{nfX+Wr4W19;Mb9UWD3O z!|oaDdw(>yc(Z@89}wAo2~eJlf|laVwX_6Nq35dmPw_3(6uT^2inR2BVoCL3cQGE9 zID$D07xnFY(M4bTfaP2jlnWpaThLEVmpHYTAKHB~i!oQ>0<@q7e{AKU5!mazt*lE2 zU0s*!N1)n*RFLW2e4v1pmE;M1;&=g_sl9%s%Z8?8h#L!Yb=<_W$7u)=PESdokIJIc zek?em+TBS=Y}n7s$BfF3d_9;BlF&yoc=rBX+)y2BMrRp}t^k#i{cOZZj*Qq%_t~`` zjYw_Z;Hc4*u?Hboq;y}oelM%lg*aMaj~OZ0d&@Oi+wPxHi?oa#zY3uWGDxG8-%LlV zzLA}`j>acG;Wh`ToSg3G)RZL3OIK^8&jb4K5OZz>Gk>b&?}|n7m9-d|kRwWDP~>TU zy%g<;eGSA)08o9?pw2_li*_A?PaGoLlM%WbWxpE#G=L3!CtJ3oh6XgQ%_+_K9TCwd z+_(lWwl6Ymx%F|R@L1rO1TMS|@P;rKS}7s)qp^7dFF= z=~$JdQTs-axa^Hw^2S%;t8b)oG>D8{#2`<>8AW0nSg6b;+WLYK0uI7V_KsXNNAvGT zlvLeLG^IZdaI$`D^1-xWLlWp=CfAiQqsqju%DF4M4L+KEnHv)8gR;a4c8XD0wEWV| zn&izo-d&FS1TM+|E=0Xur%=%uk?QmBaN!mjDMOu6koBm^?NP%FU$@={Cg48YksiwE z-S0`$o!Soy>c}{P1L1cWgK;Z$_XBwrjN>0IAn+2jL&`)^G`#)Z zj{v1z45F>fG*lK?qBd-cnu(*nv73(2Pb5HuY;C$ni5LD(-(Tt03goQqX z8a`*I;cEs7v+@SEQ!a@-a-rukGRS&bg@TQ@vE{z7E1t`j&sL-q%F&y_YH%J)&BI`Q zImM4&PkGwX!z~n*w{6=u>x{`()_I6GSe|sf030oT2w~WS& zX*j2xciqzYTTB{o40hgk!<^q5g_@H%FBGSZe>*P>_WmyUag z0}BY^=T31w|J{gP-H7Z5?Cs2Ud#Y=vFeVk%^evtRA#+MedG*;wlyig;WWC+|fAJmP z?)T?pS+EM2F_44Hg1}A|DZF!MpjF%1ANq!brN5(tbrA#^R++cmg%Yuwo!%P=Bxpkg zPO`sdh?%vdk+yS^{)MCz(;gUs#1HM8>D2Fw`VB!SCZAh-!;Z>}bpVbv6U2|*8>gD) zE-b}j1Y|eqA11Ol^~e`SLNt&Qmm;%M7xYV^+%B=L${c=yLIhWV8g_Hie|6xNE!{3efz+$!cUb0^_T*F_g9zsSA8Q&TJ%@^5-w@8Qi2^YI(-5-0STm+(+; zG1FQRca~&%3o~d8ur}^%#Or=5lKV||j(HZfc^BBa05s)|yET9T4Pzz1Hgy2R z)`2x9x|YZ?E&TUWH#ZhT-v_-M{5;mTTA4Ge>s@;O&_*$0L1Gl4g;=$WG-8utb0ide zK*dcSG{GqmFP5rF^@kZa4wFc9E#1LiZ2qbVSp!^w8|kAVxhi9iGNGim))BC`O-bxZ z@Jn)-^7V&q&`>emRs%F1hrO`wBONA8$SA79hk=(kcrF53qPGHY7$BB)MlNGXoq4qMiz{p>8#~oF7qa$2z|hrERM}?Sp{Nd z3tItJfyxum&5?w0O;*e4I>`bY>h~h%&06Yr9=_XhzU@QMQr+IDJe8(xi|o%238yI$ z3c@S$u^PxV$XPg>9?(kSJmYGGx`HK(&lJB?f$Jb0CMPPJLZEzl(CKku2dZ5X8I5Qi z=z|eA^V#4M4Vu#kY$J^+JE5EU^A%;rT4l&Rj~^`(P&Nv;upd*W;RR@zdmGQzDrgO8 zl0ls_%hDh5Fk${P?=Jrt^L9V-!PKf;O%~YkG2senCrGPxkSH6bvo}}mVe8;%Y^RaE{s*3uqLSC)juWxzt}tMs zY`Y~kZ}vEOK~O%mGgH63zry-LZ-? zMjVLY;$uuU=SJ< z2}lA=j%1eiU+OWX9gH}rQ>(deuJi(EwE}j=as)l>2XbI^A2@@U7sAkH@#wNjb`Ix*U2s<> ziw%5;cqb)>4gUoNk#r(|G7AepgZk(|DMeM6zcH3I@wt48^;wqtyVb0;#-tK3V~rbG zzx!E?H*3?ndKoW$2-&wY?6E#PC{TuDL|INP&tlG*Uq4feGX%@{AhifD8o^bIa2pcB z7c!A=k9W%rBXn_QR_!7DO&WND9Ce<&M+#1dc0Q{|D~g??7$6uQ{}u#m6PVYLZk!#g zoAaNEQj_BP_33Nuw9nzD^AGYc8G6*$jx}fQ{GitmGjyLJe7-0n^T>p*r`5|^NcK6T zM9dqaRAl5F(+;NDaM+|A9575)>hbp_xS>KJMX`(5bTRzhV zS zu6w_;0#LW<^JBS8CngP{Kn+y2?=)1!<6feD}v7BtmtDYM} z+W;;UQe*z+)yd=TS6627q-WpCX-Vd?KoceH3bxf8KD6_K#M>~j@eyuUU{TC1l|Duo zC*0G+Xtok{Y5PlpB(IhGdYMGXQ;Tj*CGj?FIFV=hDC}9!o(w7-Zn|2zis`;DD;<-< zlSp-A8FI2QFr-VZyNJaG0t!h1Y`a*3tn&oh^aYRGq@!kcwV?7;h-kR>)vmenMX;Lj zsb_AsXA_Z4*$PtiM1Rr@VCg8VYCE@JTA^t;pf1m>uHW4m*za{PJ+Qu|rCAF+_M zuLT*=ri{rh_9+#{f#f{`x!pUDX7T(s#gcx^cB?|mL7g3(+mkYqfs)Hp`E%$ z-**I$r!G5ieF~(^R=({Ocgl6Yx6pV0!%8h;aMz(cV<9BmWEzZ8TV)$SwT%r$wEc$E zLyF=CotCsy5s%!=>nDSs7#ojuo4c_w<1TNy5#Xy?jN~)Vw#i0gO~X*YH){ryP{N7S zUmJ^OsZa*VPnjebA3l7TY3Pc&EZg#ZcxhS20*}GEJ6-g zbb~7%M9c&u(Oj_s=2eP(jKqqiAi3}9c$hFNLdV6AN8ZA|)95ESyA5%Rh+bat+wbre zvhAnj4|akQ%}6L@qg!;BMmBG_t7P|%LgSK!=;fL0yZW`o;bDw|L&6rzF=9rfiMv#3 zg?&qAUKHG5w-%)k0C6;|jvo%Y?UH`^Z|&s;()b=f`7XzU4j9K~By&%d4xxCt6P08v zXD6;6=^`j6CHqGG@x~l`hROvs)x4&f)M9OV*h}w!(fVL7H2C^>@sNg&S$Sz^FnL&) zo`qMtHVbZNb=~KCcbT;>jo{%4mI#qjj!z*MXI#rxU~bY^ZA_+}eObv32^xpGy+KV_ zLg(YBBy<`^Y)t%`-qf^(NdQOW7`&S9=a%+!bC{gJ<^32n)5n31($x2#(_M%bdRnyU z?qux*R*Z>wqPM7ujv5zTr_&_SjpkMFBI+)Enm7Gn4$!mS6Y~!1*;`WBf>68}2v5@- zO~Ienf_R&a4kKu@j-5cjmOr&f)38IBHYo!DEC8kk?Can$oy+QUS)$Rp-1~8SLOAO448>85jn|=JSMvk;{KWmm7Ur~9B&Pb9Zo&vB{?n$se z7DBHOL)WFNK+qnd)3ZydI2)JdJ8=zrz1GPr*Gu1#+Izw5nH_*dC0LO~a!_-(fqhN{ z�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 literal 0 HcmV?d00001 diff --git a/packages/biz/src/BigImage/demo/index.tsx b/packages/biz/src/BigImage/demo/index.tsx new file mode 100644 index 0000000..45c37ed --- /dev/null +++ b/packages/biz/src/BigImage/demo/index.tsx @@ -0,0 +1,71 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { BigImage } from '@zhst/biz' +import { Space, Switch } from '@zhst/meta' +import { pick, get } from '@zhst/func' +import { BIG_IMAGE_DATA, attributeList } from '../mock' +import Img from './imgs/photo-1503185912284-5271ff81b9a8.webp' + +const BigModal = (props: any) => { + const { + } = props + const [dataSource, setDataSource] = useState(BIG_IMAGE_DATA) + const [showDesc, setShowDesc] = useState(true) + const [type, setType] = useState('normal') + const modalRef = useRef(null) + + return ( +
+ + 显示属性: setShowDesc(pre => !pre)} /> + + setType(newVal === '1'? 'normal': 'compater')} + // ------------ 属性列表 ----------------- + showDescription={showDesc} + descriptionList={attributeList} + // ------------ 图片/视频切换 ----------------- + viewTopModeButtonList={[ + { + key: 'image', + label: '图片' + }, + { + key: 'video', + label: '视频' + } + ]} + modeButtonGroupProps={{ + defaultValue: 'image', + onChange: e => console.log('模式切换', e) + }} + // ------------ 导航功能 ----------------- + showNavigation + onPrevButtonClick={val => console.log('pre', val)} + onNextButtonClick={val => console.log('next', val)} + // ------------ 场景图功能 ----------------- + cropperImageProps={{ + url: Img, + score: 50, + odList: get(dataSource, 'odRect', []), + attachImageData: get(dataSource, 'attachImg', []), + }} + // ------------ 对比图模式 ----------------- + combineImageProps={{ + data: pick(dataSource, 'compaterImage', 'imgSummary', 'imageKey', 'score'), + }} + // ------------ 视频模块 ----------------- + videoProps={{ + url: get(dataSource, 'flvUrl', '') + }} + > + +
+ ) +} + +export default BigModal diff --git a/packages/biz/src/BigImage/demo/oldData.tsx b/packages/biz/src/BigImage/demo/oldData.tsx new file mode 100644 index 0000000..364345e --- /dev/null +++ b/packages/biz/src/BigImage/demo/oldData.tsx @@ -0,0 +1,128 @@ +// @ts-nocheck +import React, { useState } from 'react'; +import { BigImageModal } from '@zhst/biz' +import { Button, DescriptionsProps } from '@zhst/meta' +import { IMAGE_DATA, BIG_IMAGE_DATA } from '../mock' +import bigImageModalAdapter from '../util/bigImageModalAdapter' +import { get } from '@zhst/func'; + +const descriptionList: DescriptionsProps['items'] = [ + { + title: '人员属性', + children: [ + { + key: '1', + label: '性别', + children: '男', + }, + { + key: '2', + label: '年龄', + children: '成年', + }, + { + key: '3', + label: '帽子', + children: '无', + }, + { + key: '4', + label: '上身颜色', + children: '灰', + }, + { + key: '5', + label: '下身颜色', + children: '蓝色', + }, + { + key: '6', + label: '附着物', + children: '无', + }, + { + key: '7', + label: '骑行', + children: '否', + }, + ] + } +]; + +// 适配器,适配老接口 +const NewImageModal = bigImageModalAdapter(BigImageModal, { + oldMode: true +}) + +const BigModal = (props) => { + const { + onClose, + isArchiveDetail = false, + specialTitle = '对比图2', + transformPropFunc, + screenshotButtonRender, + showLowFaceTip = false + } = props + const [visible, setVisible] = useState(false) + const [selectIndex, setSelectIndex] = useState(0) + const [dataSource, setDataSource] = useState(IMAGE_DATA.dataSource) + const [dataSources, setDataSources] = useState(IMAGE_DATA.dataSource) + const [selectItem, setSelectItem] = useState({}) + + return ( +
+ + onClose} + descriptionConfig={{ data: descriptionList }} + visible={visible} + isArchiveDetail={isArchiveDetail} + ToolProps={{ + // renderLeft: leftOperateBar({ disableBtn, onActionClick: onBigImageActionClick }), + // renderRight: rightOperateBar({ + // disableBtn, + // onActionClick: onBigImageActionClick, + // isArchiveDetail, + // }), + // renderVideoBtn: !disableBtn.includes(OPT['PLAY_VIDEO']), + // disableVideo: disableVideo, + }} + selectIndex={selectIndex} + onSelectIndexChange={(index: number) => { + index > 0 && index < dataSources.length && setSelectIndex(index); + }} + // tabsFilter={tabsFilter} + specialTitle={specialTitle} + transformPropFunc={async (item: any) => { + let bigImageInfo = !!transformPropFunc && (await transformPropFunc(item)); + setSelectItem({ ...bigImageInfo }); + return { ...bigImageInfo }; + }} + screenshotButtonRender={screenshotButtonRender} + //@ts-ignore + transformVideoPropFunc={async (item) => { + const { maxDuration: duration = 20 } = item || {}; + const time = get(item, 'timestamp'); + const cameraId = get(item, 'cameraId'); + const { url: flvUrl } = { + url: 'url', + downloadUrl: 'url', + }; + return { + flvUrl, + maxDuration: duration, + }; + }} + nullDialogProp={{ + emptyText: showLowFaceTip ? '目标图人脸质量较低,暂无聚类数据' : '暂无数据', + }} + /> +
+ ) +} + +export default BigModal diff --git a/packages/biz/src/BigImage/demo/withEdit.tsx b/packages/biz/src/BigImage/demo/withEdit.tsx new file mode 100644 index 0000000..0c0bb4d --- /dev/null +++ b/packages/biz/src/BigImage/demo/withEdit.tsx @@ -0,0 +1,89 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { BigImage } from '@zhst/biz' +import { Space, Switch, Button } from '@zhst/meta' +import { pick, get } from '@zhst/func' +import { BIG_IMAGE_DATA, attributeList } from '../mock' +import Img from './imgs/photo-1503185912284-5271ff81b9a8.webp' + +const testOd = [ + { + "id": "456", + "x": 0.58543766, + "y": 0.3203356, + "w": 0.052037954, + "h": 0.2664015 + } +] + +const BigModal = (props: any) => { + const { + } = props + const [dataSource, setDataSource] = useState(BIG_IMAGE_DATA) + const [showDesc, setShowDesc] = useState(true) + const [editAble, setEditAble] = useState(false) + const [odList, setOdList] = useState(get(dataSource, 'odRect', [])) + const [type, setType] = useState('normal') + const bigImageRef = useRef(null) + + return ( +
+ + 显示属性: setShowDesc(pre => !pre)} /> + 打开编辑模式: setEditAble(pre => !pre)} /> + + + setType(newVal === '1'? 'normal': 'compater')} + // ------------ 属性列表 ----------------- + showDescription={showDesc} + descriptionList={attributeList} + // ------------ 图片/视频切换 ----------------- + viewTopModeButtonList={[ + { + key: 'image', + label: '图片' + }, + { + key: 'video', + label: '视频' + } + ]} + modeButtonGroupProps={{ + defaultValue: 'image', + onChange: e => console.log('模式切换', e) + }} + // ------------ 导航功能 ----------------- + showNavigation + onPrevButtonClick={val => console.log('pre', val)} + onNextButtonClick={val => console.log('next', val)} + // ------------ 场景图功能 ----------------- + cropperImageProps={{ + editAble, + url: Img, + score: 50, + odList: odList, + showEditTools: editAble, + attachImageData: get(dataSource, 'attachImg', []), + onCropperTypeChange: v => console.log('框选模式', v), + onExitEdit: () => setEditAble(pre => !pre) + }} + // ------------ 对比图模式 ----------------- + combineImageProps={{ + data: pick(dataSource, 'compaterImage', 'imgSummary', 'imageKey', 'score'), + }} + // ------------ 视频模块 ----------------- + videoProps={{ + url: get(dataSource, 'flvUrl', '') + }} + > + +
+ ) +} + +export default BigModal diff --git a/packages/biz/src/BigImage/demo/withRelatedImage.tsx b/packages/biz/src/BigImage/demo/withRelatedImage.tsx new file mode 100644 index 0000000..7f9b2d1 --- /dev/null +++ b/packages/biz/src/BigImage/demo/withRelatedImage.tsx @@ -0,0 +1,78 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { BigImage } from '@zhst/biz' +import { Button, Space, Switch } from '@zhst/meta' +import { pick, get } from '@zhst/func' +import { BIG_IMAGE_DATA, attributeList, RELATED_IMAGES } from '../mock' + +const BigModal = (props: any) => { + const { + } = props + const [visible, setVisible] = useState(true) + const [dataSource, setDataSource] = useState(BIG_IMAGE_DATA) + const [selectedItemKey, setSelectedItemKey] = useState() + const [showFaceModel, setShowFaceModel] = useState(true) + const [type, setType] = useState('normal') + const modalRef = useRef(null) + + return ( +
+ + 显示人脸碰撞模型: setShowFaceModel(pre => !pre)} /> + + setVisible(false)} + showModeChange + onTabChange={(newVal, oldVal) => setType(newVal === '1'? 'normal': 'compater')} + // ------------ 图片/视频切换 ----------------- + viewTopModeButtonList={[ + { + key: 'image', + label: '图片' + }, + { + key: 'video', + label: '视频' + } + ]} + modeButtonGroupProps={{ + defaultValue: 'image', + onChange: e => console.log('模式切换', e) + }} + // ------------ 场景图功能 ----------------- + cropperImageProps={{ + url: "https://gw.alipayobjects.com/zos/antfincdn/LlvErxo8H9/photo-1503185912284-5271ff81b9a8.webp", + score: 50, + odList: get(dataSource, 'odRect', []), + attachImageData: get(dataSource, 'attachImg', []), + }} + // ------------ 对比图模式 ----------------- + combineImageProps={{ + data: pick(dataSource, 'compaterImage', 'imgSummary', 'imageKey', 'score'), + }} + // ------------ 视频模块 ----------------- + videoProps={{ + url: get(dataSource, 'flvUrl', '') + }} + // ------------ 人脸碰撞模型 ----------------- + isRelated={showFaceModel} + relatedImageProps={{ + activeTab: 'related', + selectedItemKey, + data: RELATED_IMAGES, + onCancel: () => console.log('取消关联'), + onConnect: () => console.log('关联'), + onTabChange: (newVal, oldVal) => console.log('tab切换', newVal, oldVal), + onItemSelected: (item) => setSelectedItemKey(item.key) + }} + > + +
+ ) +} + +export default BigModal diff --git a/packages/biz/src/BigImage/images/emptyImage.png b/packages/biz/src/BigImage/images/emptyImage.png new file mode 100644 index 0000000000000000000000000000000000000000..97629573a5196529f63a8365baeeadab76209c1a GIT binary patch literal 5786 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 YKZ_v3%v7MbF#rGn07*qoM6N<$g4h-+kpKVy literal 0 HcmV?d00001 diff --git a/packages/biz/src/BigImage/images/percent_background.png b/packages/biz/src/BigImage/images/percent_background.png new file mode 100644 index 0000000000000000000000000000000000000000..ebde317c473fda46d686dce6ffba98db676f331e GIT binary patch literal 514 zcmeAS@N?(olHy`uVBq!ia0vp^1wgFB!3HGvuCY1Jz`%IY)5S5QBJS-RYky`#ffjXL z-6Hmn8Q4;CoAn~}k_ zgW(?Yj*eGfxmGY134fY$J=J!{$wg8RvLC#BaB-8+1Kx)0+#eg)F`bBcXZz`uXaHkP zhUL6}d}8k$87D|j?{9sbwY!$pLG5MvHtUET%B%<68GLRT^KfY}?0dT9sDodH(C3%j z_VYxH4H$aQhcZYV4co!x(7MWPHe-fJ^g}HM(N$8pYzqQ&T30iKtjO9T+2FQObRAQ` z!c`a3uqzH@PT6XzebLB=D}*_v_|#_2Z#x91h;EwFq$(<@#=0t9p?l^fp|mD<^QjEM zXHrQ%!{C#rY{sXUB^51Ds zIdG$NO36ay9Xn^w*y730@V1)ce=Kw5p+k}7MiGCy`Jd}IFq;2R{v>>$L0aa{GSdmO yCvVbutton { + display: flex; + align-items: center; + color: #fff !important; + } + + &--disabled { + opacity: 0.3; + + &>button { + color: #fff !important; + } + } + } + + &__nav:hover { + background: #09f; + color: #fff !important; + } + // ------------ 导航 ----------------- + &-nav { + position: absolute; + top: 50%; + transform: translateY(-50%); + background-color: rgba(255, 255, 255, 0.8); + &:hover { + opacity: 0.8; + background-color: rgba(255, 255, 255, 0.8)!important; + } + &_left { + left: 8px; + } + &_right { + right: 8px; + } + } + } + // ------------ 场景图 ----------------- + &-cropper-btn { + position: absolute; + top: 4px; + right: 4px; + &_close { + margin-left: 4px; + vertical-align: top; + } + &-group { + .zhst-radio-button-wrapper { + display: inline-flex; + font-size: 12px; + color: #191919; + background-color: rgba(255, 255, 255, 0.8) + } + &-radio { + display: inline-flex; + align-items: center; + .anticon { + margin-right: 4px; + } + } + } + } + } +} + diff --git a/packages/biz/src/BigImage/index.md b/packages/biz/src/BigImage/index.md new file mode 100644 index 0000000..35f72a4 --- /dev/null +++ b/packages/biz/src/BigImage/index.md @@ -0,0 +1,96 @@ +--- +group: 进阶组件 +category: Components +subtitle: 大图组件 +toc: content +title: BigImage 大图组件 +--- + +## 大图弹框 + +基本 +人脸碰撞模型 +编辑模式 + +### API + +| 参数 | 说明 | 类型 | 默认值 | 版本 | +| --- | --- | --- | --- | --- | +| type | 当前模式 | 'compater'、'normal'、'video' | - | | +| viewHeight | 视图高度 | string、number | - | | +| width | 宽度 | string、number | - | | +| showDescription | 描述列表显示\隐藏 | boolean | false | | +| descriptionsProps | 描述列表透传 | | antd - DescriptionsProps | | +| descriptionList | 描述列表数据(见下文) | | IDescriptionList | | +| topButtonRender | 顶部按钮 | | ReactNode、string | | +| customTabBarExtraContent | 自定义tab尾部导航插槽 | | ReactNode、 string | | +| onTabChange | tab事件监听 | | antd - TabsProps['onChange'] | | +| tabProps | tab透传 | | antd - TabsProps | | +| showModeChange | 是否显示模式切换按钮 | | boolean | | +| viewTopModeButtonList | 模式切换按钮列表 | | TypeRadio[] | | +| modeButtonGroupProps | 模式切换按钮组透传 | RadioGroupProps | - | | +| isRelated | 人脸碰撞模型显示\隐藏 | boolean | | | +| relatedImageProps | 人脸碰撞模型透传 | zhst/meta - RelatedImageProps | | | +| cropperImageProps | 场景图模式透传 | ICropperImageProps | | | +| combineImageProps | 对比图模式透传 | ComBineImageProps | | | +| videoProps | 视频模式透传 | videoProps | | | +| showNavigation | 是否展示导航 | boolean | | | +| prevButtonProps | 前翻箭头透传 | prevButtonProps | | | +| onPrevButtonClick | 前翻箭头点击事件 | () => void; | | | +| nextButtonProps | 下翻箭头透传 | () => void; | | | +| onNextButtonClick | 下翻箭头点击事件 | () => void; | | | +| children | | ReactNode | | | + +### IDescriptionList + +```ts +interface IDescriptionList { + title: string; + showTitle?: boolean; + props?: DescriptionsProps + children: DescriptionsProps['items'] +}[] +``` + +### + +```ts +interface ICropperImageProps extends CropperImageProps { + showEditTools?: boolean // 是否展示编辑按钮 + editAble?: boolean // 是否开启编辑模式 + score?: string | number // 分数 + btnGroupProps?: BtnGroupProps; // crop 场景图模式下的按钮拓展 + cropButtonList?: TypeRadio[] // 编辑按钮列表 + onCropperTypeChange?: (type: RadioProps['onChange']) => void + onExitEdit?: ButtonProps['onClick'] // 退出编辑模式 + attachImageData?: AttachImageProps['data'] // 左下角预览图 + attachImageProps?: AttachImageProps // 左下角预览图透传 +} +``` + +## 设计方案 + +结合当下的业务场景,目前大图组件有三种模式 + +1. 场景图模式 + - +2. 对比图模式 +3. 视频模式 + +场景图和视频模式,支持用户编辑圈选 + +三种模式状态下,都会有外层模块的嵌套,目前有以下几种: + +1. 描述模块 +2. 顶部拓展 + - 目前仅支持自定义 + - 默认下边间距 16px +3. tabs 切换 + - 默认下间距:16px + - 支持自定义文案 + - 支持自定义数量 + - 支持后方插槽 +4. 人脸碰撞模型 + - 支持用户自定义传入数据 + +本来想通过插件的形式按需加载 diff --git a/packages/biz/src/BigImage/index.tsx b/packages/biz/src/BigImage/index.tsx new file mode 100644 index 0000000..0175f85 --- /dev/null +++ b/packages/biz/src/BigImage/index.tsx @@ -0,0 +1,5 @@ +import BigImage from "./BigImage"; + +export type { BigImageProps, BigImageRef } from './BigImage' + +export default BigImage diff --git a/packages/biz/src/BigImage/interface.ts b/packages/biz/src/BigImage/interface.ts new file mode 100644 index 0000000..c98d3cc --- /dev/null +++ b/packages/biz/src/BigImage/interface.ts @@ -0,0 +1,84 @@ +import { ReactNode } from 'react' +import { + ButtonProps, + RadioProps, + RadioGroupProps, + VideoViewProps, + DescriptionsProps, + TabsProps, + RelatedImageProps, + BtnGroupProps, + CropperImageProps, + VideoViewRef, + AttachImageProps +} from '@zhst/meta' +import { ComBineImageProps } from './components/CombineImage' + +export type TypeRadio = { + label?: string; + key: string; + tooltipTxt?: string; + onClick?: ButtonProps['onClick'] + icon?: ReactNode | string; + props?: ButtonProps +} + +type TypePlugin = 'compater' | 'normal' | 'video' | 'faceMode' + +export interface BigImageProps { + type?: TypePlugin // 当前 tab + viewHeight?: string | number; + width?: string | number + typePlugins?: TypePlugin[] // TODO: 开启插件类型 + // ------------ 描述列表 ----------------- + showDescription?: boolean; + descriptionsProps?: DescriptionsProps + descriptionList?: { + title: string; + showTitle?: boolean; + props?: DescriptionsProps + children: DescriptionsProps['items'] + }[] + // ------------------ 顶部按钮列表 + topButtonRender?: ReactNode | string + // ---------------- Tabs 导航 ------------------ + customTabBarExtraContent?: string | ReactNode + onTabChange?: TabsProps['onChange'] + tabProps?: TabsProps + // ------------ 图片 | 视频切换导航 ----------------- + showModeChange?: boolean + viewTopModeButtonList?: TypeRadio[] + modeButtonGroupProps?: RadioGroupProps + // ----------------- 人脸碰转 ----------------- + isRelated?: boolean // 人脸碰撞功能打开 + relatedImageProps?: RelatedImageProps + // -------------------------- crop 场景图模式 ----------------------- + cropperImageProps?: CropperImageProps & { + showEditTools?: boolean + editAble?: boolean + score?: string | number + btnGroupProps?: BtnGroupProps; // crop 场景图模式下的按钮拓展 + cropButtonList?: TypeRadio[] + onCropperTypeChange?: (type: RadioProps['onChange']) => void + onExitEdit?: ButtonProps['onClick'] + attachImageData?: AttachImageProps['data'] + attachImageProps?: AttachImageProps + } + // -------------------- 对比图模式 ------------------------- + combineImageProps?: ComBineImageProps + // ------------ 导航 ----------------- + showNavigation?: boolean // 是否展示导航箭头 + prevButtonProps?: any; + onPrevButtonClick?: () => void; + nextButtonProps?: any + onNextButtonClick?: () => void; + theme?: any + children?: React.ReactNode + // ------------ 视频模式 ----------------- + videoProps?: VideoViewProps +} + +export interface BigImageRef { + videoPlayerRef: VideoViewRef + combineImageRef: any +} diff --git a/packages/biz/src/BigImage/mock.ts b/packages/biz/src/BigImage/mock.ts new file mode 100644 index 0000000..1d31763 --- /dev/null +++ b/packages/biz/src/BigImage/mock.ts @@ -0,0 +1,292 @@ +import imageUrl from './demo/imgs/photo-1503185912284-5271ff81b9a8.webp' + +export const IMAGE_DATA = { + "enAbleDeleteFeature": true, + "tabsFilter": [ + "COMPATER", + "NORMAL" + ], + "selectIndex": 4, + "disableBtn": [ + 0, + 1, + 4, + 20 + ], + "dataSource": { + "objectId": "1742110565582518272", + "condition": { + "featureInfo": null, + "featureData": "AAAAAAAAAAAAAAAAAAAAAAA==", + "imageData": "", + "alg": "VERSION_REID_HEAD_ATTR", + "rect": { + "x": 0.271875, + "y": 0.32222223, + "w": 0.2859375, + "h": 0.67777777 + }, + "objectImageUrl": "singer-20240102/1/129529/1742047651878156288.jpg", + "srcImageUrl": "singer-20240102/1/129529/1742047652511496192.jpg" + }, + "score": 0.7163062, + "timestamp": 1704186491979, + "deviceId": "129533", + "id": "129533", + "name": "4楼门口过道人脸", + "dirid": "0", + "status": "1", + "longitude": 120.125, + "latitude": 30.280500411987305, + "caseId": "0", + "caseGroup": "", + "isDeleted": "DEVICEMANAGER_BOOL_DEFAULT", + "objectIndex": { + "objectId": "1742110565582518272", + "solutionId": "1", + "deviceId": "129533", + "fragmentId": "0" + }, + "objectType": "OBJECT_TYPE_PEDESTRAIN", + "isObjectTrack": true, + "pathId": "1742110532019697664", + "frameInfo": { + "frameId": "0", + "frameTimestamp": "1704186491979", + "width": 0, + "height": 0, + "originWidth": 1920, + "originHeight": 1080, + "offsetTime": "24714687", + "skipNumber": "0" + }, + "level": 1, + "bboxInFrame": { + "x": 0.603125, + "y": 0.3314815, + "w": 0.0578125, + "h": 0.2712963 + }, + "bboxExtInFrame": { + "x": 0.546875, + "y": 0.2638889, + "w": 0.17135416, + "h": 0.40648147 + }, + "objectImageKey": "", + "objectExtImageKey": "http://10.0.0.7:30003/file/singer-20240102/1/129533/1742110565582518272.jpg", + "frameImageKey": "http://10.0.0.7:30003/file/singer-20240102/1/129533/1742110565603489792.jpg", + "confidence": 0.817271, + "sourceObjectId": "1742110565603489792", + "storeTimestamp": "0", + "gbNumber": "", + "qualityScore": 0, + "subObjectCount": 1, + "subObjectType": [ + "OBJECT_TYPE_FACE" + ], + "subObjectIds": [ + "1742110532015503360" + ], + "solutionId": "1", + "fragmentId": "0", + "contrastKey": "singer-20240102/1/129533/1742110565582518272.jpg", + "compaterImages": [ + "http://10.0.0.7:30003/file/singer-20240102/1/129529/1742047651878156288.jpg" + ], + "imgSummary": "singer-20240102/1/129533/1742110565582518272.jpg", + "imageKey": "http://10.0.0.7:30003/file/singer-20240102/1/129533/1742110565582518272.jpg", + "srcImageUrl": "http://10.0.0.7:30003/file/singer-20240102/1/129533/1742110565603489792.jpg", + "algorithmVersion": "VERSION_REID_HEAD_ATTR", + "cameraId": "129533", + "cameraName": "4楼门口过道人脸" + }, + "isArchiveDetail": false, + "ToolProps": { + "renderVideoBtn": true, + "disableVideo": false + }, + "specialTitle": "" +} + +export const RELATED_IMAGES = [ + { key: '123', url: imageUrl }, + { key: '22', url: imageUrl }, + { key: '22122333', url: imageUrl }, + { key: '2212243', url: imageUrl }, + { key: '224523433', url: imageUrl }, + { key: '224235453', url: imageUrl }, + { key: '245423', url: imageUrl }, + { key: '224233543', url: imageUrl }, + { key: '22452343', url: imageUrl }, + { key: '22323243', url: imageUrl }, + { key: '2236456', url: imageUrl }, + { key: '224563', url: imageUrl }, + { key: '24565423', url: imageUrl }, + { key: '245645623', url: imageUrl }, + { key: '2456435623', url: imageUrl }, + { key: '2323', url: imageUrl } +] + +export const BIG_IMAGE_DATA = { + imageKey: imageUrl, + imgSummary: imageUrl, + flvUrl: 'ws://10.0.0.120:9033/flv/HaikangNvr/45.flv?ip=10.0.2.103&stime=1712539148&etime=1712539168', + compaterImage: imageUrl, + odRect: [ + { + id: '123', + "x":0.5445312, + "y":0.19166666, + "w":0.08671875, + "h":0.40138888 + }, + { + "id": "123", + "x": 0.5519352, + "y": 0.2965385, + "w": 0.05185461, + "h": 0.24698898, + }, + { + "id": "456", + "x": 0.58543766, + "y": 0.3203356, + "w": 0.052037954, + "h": 0.2664015 + } + ], + attachImg: [ + { + "url": imageUrl, + "label": "形体" + },{ + "url": imageUrl, + "label": "人脸" + } + ], + score: 60, // 人脸质量分 + showScore: true, // 人脸质量分 + cameraPosition: 'string', // 摄像头位置 + time: '2022-01-01', // 摄像头拍摄时间 + objects: [ + { + "objectIndex": { + "objectId": "1746832189053474816", + "solutionId": "0", + "deviceId": "0", + "fragmentId": "0" + }, + "objectType": "OBJECT_TYPE_PEDESTRAIN", + "sourceObjectId": "0", + "level": 0, + "confidence": 0.881164, + "frameInfo": { + "frameId": "0", + "frameTimestamp": "1705312223057", + "width": 0, + "height": 0, + "originWidth": 0, + "originHeight": 0, + "offsetTime": "0", + "skipNumber": "0" + }, + "infoOnSource": { + "bboxInFrame": { + "bboxRatio": { + "x": 0.61418945, + "y": 0.34309354, + "w": 0.067661405, + "h": 0.34659258 + }, + }, + "countInSource": 0, + "indexInSource": 0 + }, + "qualityScore": 0, + } + ] +} + +export const attributeList = [ + { + title: '人员属性', + children: [ + { + key: '1', + label: '性别', + children: '男', + }, + { + key: '2', + label: '年龄', + children: '成年', + }, + { + key: '3', + label: '帽子', + children: '无', + }, + { + key: '4', + label: '上身颜色', + children: '灰', + }, + { + key: '5', + label: '下身颜色', + children: '蓝色', + }, + { + key: '6', + label: '附着物', + children: '无', + }, + { + key: '7', + label: '骑行', + children: '否', + }, + ] + }, + { + title: '社区规范', + children: [ + { + key: '1', + label: '性别', + children: '男', + }, + { + key: '2', + label: '年龄', + children: '成年', + }, + { + key: '3', + label: '帽子', + children: '无', + }, + { + key: '4', + label: '上身颜色', + children: '灰', + }, + { + key: '5', + label: '下身颜色', + children: '蓝色', + }, + { + key: '6', + label: '附着物', + children: '无', + }, + { + key: '7', + label: '骑行', + children: '否', + }, + ] + } +]; diff --git a/packages/biz/src/BigImage/util/bigImageModalAdapter.tsx b/packages/biz/src/BigImage/util/bigImageModalAdapter.tsx new file mode 100644 index 0000000..c341455 --- /dev/null +++ b/packages/biz/src/BigImage/util/bigImageModalAdapter.tsx @@ -0,0 +1,195 @@ +/** + * 适配老的大屏组件数据格式传入 + */ +import React, { } from 'react'; +import { AlgorithmVersionStr, HumanProperty, ObjectType, Rect, IScreenshotButtonProp } from '@zhst/types' +import { VideoViewProps, ImgViewProps, VideoViewRef, ImgViewRef } from '@zhst/meta' + +export type TAB_TYPE = 'COMPATER' | 'NORMAL' | 'TRACK'; +export type MODEL_TYPE = 'VIDEO' | 'IMAGE'; + +export interface CarouselProps { + hasPre?: boolean; + hasNext?: boolean; + selectIndex: number; + setSelectIndex: React.Dispatch>; + dataSource: Array<{ + key: string; + url: string; + }>; +} + +export type ISelectItem = Partial> & + Partial>; + +/** + * 描述列表 description + */ +export interface HeaderProps { + value: TAB_TYPE; + onChange: (type: TAB_TYPE) => void; + tabsFilter: TAB_TYPE[]; +} + +export interface ParamProps { + tab: string; + selectItem: ISelectItem; + imgViewRef: React.MutableRefObject; + VideoViewRef: React.MutableRefObject; + model: MODEL_TYPE; + setModel: React.Dispatch>; + /* 可观测值 */ + scale$: number; + showCrop$: boolean; +} + +/** + * 工具栏 + */ +export interface ToolProps { + renderRight?: (props: ParamProps) => React.ReactNode; + renderLeft?: (props: ParamProps) => React.ReactNode; + renderVideoBtn?: boolean; + param: ParamProps; + disableVideo: boolean; +} + + +export interface BigImageData { + //imageKey 小图 + extendRectList: (Rect & { algorithmVersion: AlgorithmVersionStr; imageKey: string })[]; + rectList: (Rect & { algorithmVersion: AlgorithmVersionStr; imageKey: string })[]; + attachImg: { url: string; label: '形体' | '人脸' }[]; + odRect: Rect; + compaterImages: string[] // 目标图列表 + constractKey: string; // 当前比较中的目标图 + frameImageKey: string; // 场景图 + imageKey?: string; // 大图 + imgSummary: string; // 摘要图 + objectExtImageKey: string; //比对到的目标图扩展图 === imgSummary + + attributeList: { label: string; list: any[] }[]; + archiveImages?: any; + spaceName: string; + + objectIndex?: { + deviceId: string; + fragmentId: string; + objectId: string; + solutionId: string; + } + + objectType: ObjectType; + objectId: string; //这张摘要本身的Id + bodyObjectId?: string; + faceObjectId?: string; //这张摘要下的人脸Id(如果有) + sourceObjectId?: string; //这张摘要上游的形体Id(如果有) + cameraId: string; + cameraName: string; + selectIndex: number; + humanProperty: HumanProperty; + qualityScore?: number; //人脸质量分 + score: number; // 相似度 + timestamp: string; + bodyImageUrl: string; + faceImageUrl: string; + algorithmVersion: AlgorithmVersionStr; + + bodySpaceName: string; + faceSpaceName: string; + position: { + lat: number + lng: number + } + + solutionId?: string; + [index: string]: any; +} + + +interface IOldImageData { + visible?: boolean; // 显示隐藏弹框 + defaultModel?: MODEL_TYPE; // 视频模式 | 图片模式 + onClose?: () => void; // 关闭弹框 + isLoading?: boolean; // 是否加载中 + hasPre?: boolean; // 向前翻页 + hasNext?: boolean; // 向后翻页 + selectIndex?: number; // 选中的数据(dataSource为数组情况下) + onSelectIndexChange?: (i: number) => void; // 修改当前下标 + dataSource: BigImageData[]; // 数据1 + dataSources: BigImageData[]; // 数据2 + relatedData?: BigImageData[]; // 数据3 + transformPropFunc: (item: any) => ISelectItem; // 格式化数据方法 + transformVideoPropFunc: ( + item: ISelectItem + ) => Promise>; // 视频模式格式化数据方法 + screenshotButtonRender?: (screenshotButtonProp: IScreenshotButtonProp) => React.ReactElement; + showTool?: boolean; // 是否显示底部菜单 + showCarousel?: boolean; // + imgViewProp?: Partial; // 图片模式的配置 + videoViewProp?: Partial; // 视频模式的配置 + ToolProps?: Partial; // 底部菜单的配置 + nullDialogProp?: { + emptyText?: string; + }; // 暂无数据的配置 + showHeader?: boolean; // 是否显示 description + tabsFilter?: TAB_TYPE[]; // tabs 过滤 + useVirtual?: boolean; // 是否显示虚拟 + loadNext?: (i: number) => Promise; // 下一个 + loadPre?: (i: number) => Promise; // 前一个 + children: React.ReactNode; // 子元素 + title?: string; // 标题 + specialTitle?: string; // 对比图模式下标题 + isRelated?: boolean; + carouselProp?: Partial; +} + + +export interface ImageModalDataProps { + targetData: BigImageData[] + compactData: BigImageData[] +} + +export interface ModalAdapterConfigProps { + oldMode?: boolean; // 是否是老模式 +} + +/** + * 兼容老数据格式 + * @param _data 老数据格式 + * @returns newData + */ +const translateOldImageData = (_data: IOldImageData) => { + return { + ..._data, + open: _data.visible, + onCancel: _data.onClose + } +} + +/** + * 大图组件适配器,兼容老接口 + * @param Cmp 大图组件 + * @param config 额外配置 + * @returns 大图组件 + */ +const adapter = (Cmp: any, config: ModalAdapterConfigProps): any => { + const { oldMode = false } = config + + return (props: IOldImageData) => { + const newProps = oldMode ? translateOldImageData(props) : props + console.log('adapter----适配数据', props, newProps) + + // 该属性已经废弃 + delete newProps.visible + + return ( + + ) + } +} + + +export default adapter diff --git a/packages/biz/src/BigImage/util/interface.ts b/packages/biz/src/BigImage/util/interface.ts new file mode 100644 index 0000000..393119f --- /dev/null +++ b/packages/biz/src/BigImage/util/interface.ts @@ -0,0 +1,36 @@ +export interface IBigImageModalData { + imageKey?: string // 目标图 + imgSummary?: string // 大图 + flvUrl?: string // 视频链接 + compaterImages?: string[] // 对比图 + odRect?: { // od 框数据 + "x": number + "y": number + "w": number + "h": number + [key: string]: string | number; // 拓展参数 + }[], + attachImg?: { // 小图,只有在场景图模式生效(人脸、形体) + "url": string + "label": string + [key: string]: string + }[], + score?: number | string // 人脸质量分 + showScore?: boolean // 人脸质量分 + cameraPosition?: string // 摄像头位置 + time?: string // 摄像头拍摄时间 + objects: { // 拓展参数、可以自由支配 + objectIndex: { + [key: string]: any + }, + objectType: string + sourceObjectId: string + level: number + confidence: number + infoOnSource: { + [key: string]: any + }, + qualityScore: number + [key: string]: any + }[] +} diff --git a/packages/biz/src/index.tsx b/packages/biz/src/index.tsx index a07df83..b880f8e 100644 --- a/packages/biz/src/index.tsx +++ b/packages/biz/src/index.tsx @@ -1,5 +1,7 @@ export { default as BigImageModal } from './BigImageModal' export type { BigImageModalProps } from './BigImageModal' +export { default as BigImage } from './BigImage' +export type { BigImageProps, BigImageRef } from './BigImage' export { default as BoxSelectTree } from './boxSelectTree' export type { BoxSelectTreeProps } from './boxSelectTree' export { default as Tree } from './tree' diff --git a/packages/hooks/es/useSocket/index.d.ts b/packages/hooks/es/useSocket/index.d.ts index cb0ff5c..e69de29 100644 --- a/packages/hooks/es/useSocket/index.d.ts +++ b/packages/hooks/es/useSocket/index.d.ts @@ -1 +0,0 @@ -export {}; diff --git a/packages/hooks/lib/useSocket/index.d.ts b/packages/hooks/lib/useSocket/index.d.ts index cb0ff5c..e69de29 100644 --- a/packages/hooks/lib/useSocket/index.d.ts +++ b/packages/hooks/lib/useSocket/index.d.ts @@ -1 +0,0 @@ -export {}; diff --git a/packages/icon/.fatherrc.ts b/packages/icon/.fatherrc.ts index 447d06b..b0341a2 100644 --- a/packages/icon/.fatherrc.ts +++ b/packages/icon/.fatherrc.ts @@ -1,13 +1,16 @@ -import { defineConfig } from 'father'; +import { defineConfig } from 'father-plugin-less'; export default defineConfig({ // more father config: https://github.com/umijs/father/blob/master/docs/config.md esm: { output: 'es', - ignores: ['**/demo/*', 'src/**/demo/*'] + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', }, cjs: { output: 'lib', - ignores: ['**/demo/*', 'src/**/demo/*'] + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', }, + plugins: ['father-plugin-less'], }); diff --git a/packages/icon/es/index.less b/packages/icon/es/index.less deleted file mode 100644 index 23f5dce..0000000 --- a/packages/icon/es/index.less +++ /dev/null @@ -1,3 +0,0 @@ -.icon:hover { - color: #6accca !important; -} diff --git a/packages/map/.fatherrc.ts b/packages/map/.fatherrc.ts index 447d06b..b0341a2 100644 --- a/packages/map/.fatherrc.ts +++ b/packages/map/.fatherrc.ts @@ -1,13 +1,16 @@ -import { defineConfig } from 'father'; +import { defineConfig } from 'father-plugin-less'; export default defineConfig({ // more father config: https://github.com/umijs/father/blob/master/docs/config.md esm: { output: 'es', - ignores: ['**/demo/*', 'src/**/demo/*'] + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', }, cjs: { output: 'lib', - ignores: ['**/demo/*', 'src/**/demo/*'] + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', }, + plugins: ['father-plugin-less'], }); diff --git a/packages/map/src/drawControl/DrawControl.tsx b/packages/map/src/drawControl/DrawControl.tsx index 7e2bbfe..2cbcf3e 100644 --- a/packages/map/src/drawControl/DrawControl.tsx +++ b/packages/map/src/drawControl/DrawControl.tsx @@ -1,7 +1,7 @@ /** * Created by jiangzhixiong on 2024/05/21 */ -import { forwardRef, useImperativeHandle, useRef, } from 'react' +import { forwardRef, useImperativeHandle, useRef, } from 'react' import MapboxDraw from '@mapbox/mapbox-gl-draw'; import { DragCircleMode, @@ -14,12 +14,11 @@ import drawRectMode from 'mapbox-gl-draw-rectangle-mode' // @ts-ignore import drawStaticMode from '@mapbox/mapbox-gl-draw-static-mode' // @ts-ignore -import drawCircleMode from './Draw/drawCircleMode.draw.js' +import drawCircleMode from './mode/drawCircleMode.draw.js' import { useControl } from 'react-map-gl'; import type { ControlPosition } from 'react-map-gl'; -import { MapContextValue } from 'react-map-gl/dist/esm/components/map'; -export type DrawControlProps = ConstructorParameters[0] & { +export interface DrawControlProps extends MapboxDraw { position?: ControlPosition; onCreate?: (evt: {features: object[]}) => void; onUpdate?: (evt: {features: object[]; action: string}) => void; @@ -38,6 +37,7 @@ export interface DrawControlRefProps { } } +// @ts-ignore const DrawControl = forwardRef((props, ref) => { const drawRef = useRef(null) @@ -45,12 +45,13 @@ const DrawControl = forwardRef((props, re () => { let draw = new MapboxDraw( { + // @ts-ignore modes: { ...MapboxDraw.modes, // draw_line_select: drawLineSelectMode, draw_rect: drawRectMode, drag_circle: DragCircleMode, - draw_circle : drawCircleMode, + draw_circle: drawCircleMode, direct_select: DirectMode, simple_select: SimpleSelectMode, static: drawStaticMode, @@ -62,7 +63,7 @@ const DrawControl = forwardRef((props, re drawRef.current = draw return draw }, - (context: MapContextValue) => { + (context: any) => { const { map } = context map.on('draw.create', e => props.onCreate?.(e)); map.on('draw.update', e => props.onUpdate?.(e)); @@ -98,11 +99,4 @@ const DrawControl = forwardRef((props, re return null; }) -DrawControl.defaultProps = { - onCreate: () => {}, - onUpdate: () => {}, - onDelete: () => {}, - -}; - export default DrawControl diff --git a/packages/map/src/drawControl/Draw/constants.js b/packages/map/src/drawControl/demo/Draw/constants.js similarity index 100% rename from packages/map/src/drawControl/Draw/constants.js rename to packages/map/src/drawControl/demo/Draw/constants.js diff --git a/packages/map/src/drawControl/Draw/doubleClickZoom.js b/packages/map/src/drawControl/demo/Draw/doubleClickZoom.js similarity index 100% rename from packages/map/src/drawControl/Draw/doubleClickZoom.js rename to packages/map/src/drawControl/demo/Draw/doubleClickZoom.js diff --git a/packages/map/src/drawControl/Draw/drawCircleMode.draw.js b/packages/map/src/drawControl/demo/Draw/drawCircleMode.draw.js similarity index 100% rename from packages/map/src/drawControl/Draw/drawCircleMode.draw.js rename to packages/map/src/drawControl/demo/Draw/drawCircleMode.draw.js diff --git a/packages/map/src/drawControl/Draw/drawDirectMode.draw.js b/packages/map/src/drawControl/demo/Draw/drawDirectMode.draw.js similarity index 100% rename from packages/map/src/drawControl/Draw/drawDirectMode.draw.js rename to packages/map/src/drawControl/demo/Draw/drawDirectMode.draw.js diff --git a/packages/map/src/drawControl/Draw/drawLineSelectMode.draw.js b/packages/map/src/drawControl/demo/Draw/drawLineSelectMode.draw.js similarity index 100% rename from packages/map/src/drawControl/Draw/drawLineSelectMode.draw.js rename to packages/map/src/drawControl/demo/Draw/drawLineSelectMode.draw.js diff --git a/packages/map/src/drawControl/Draw/drawRectMode.draw.js b/packages/map/src/drawControl/demo/Draw/drawRectMode.draw.js similarity index 100% rename from packages/map/src/drawControl/Draw/drawRectMode.draw.js rename to packages/map/src/drawControl/demo/Draw/drawRectMode.draw.js diff --git a/packages/map/src/drawControl/Draw/drawSimpleSelectMode.draw.js b/packages/map/src/drawControl/demo/Draw/drawSimpleSelectMode.draw.js similarity index 100% rename from packages/map/src/drawControl/Draw/drawSimpleSelectMode.draw.js rename to packages/map/src/drawControl/demo/Draw/drawSimpleSelectMode.draw.js diff --git a/packages/map/src/drawControl/Draw/drawStaticMode.draw.js b/packages/map/src/drawControl/demo/Draw/drawStaticMode.draw.js similarity index 100% rename from packages/map/src/drawControl/Draw/drawStaticMode.draw.js rename to packages/map/src/drawControl/demo/Draw/drawStaticMode.draw.js diff --git a/packages/map/src/drawControl/Draw/index.ts b/packages/map/src/drawControl/demo/Draw/index.ts similarity index 100% rename from packages/map/src/drawControl/Draw/index.ts rename to packages/map/src/drawControl/demo/Draw/index.ts diff --git a/packages/map/src/drawControl/mode/doubleClickZoom.js b/packages/map/src/drawControl/mode/doubleClickZoom.js new file mode 100644 index 0000000..4e747e1 --- /dev/null +++ b/packages/map/src/drawControl/mode/doubleClickZoom.js @@ -0,0 +1,24 @@ +const doubleClickZoom = { + enable(ctx) { + setTimeout(() => { + if ( + !ctx.map || + !ctx.map.doubleClickZoom || + !ctx._ctx || + !ctx._ctx.store || + !ctx._ctx.store.getInitialConfigValue + ) + return; + if (!ctx._ctx.store.getInitialConfigValue('doubleClickZoom')) return; + ctx.map.doubleClickZoom.enable(); + }, 0); + }, + disable(ctx) { + setTimeout(() => { + if (!ctx.map || !ctx.map.doubleClickZoom) return; + ctx.map.doubleClickZoom.disable(); + }, 0); + }, +}; + +export default doubleClickZoom; diff --git a/packages/map/src/drawControl/mode/drawCircleMode.draw.js b/packages/map/src/drawControl/mode/drawCircleMode.draw.js new file mode 100644 index 0000000..fca766e --- /dev/null +++ b/packages/map/src/drawControl/mode/drawCircleMode.draw.js @@ -0,0 +1,69 @@ +import MapboxDraw from '@mapbox/mapbox-gl-draw'; +import doubleClickZoom from './doubleClickZoom'; +import * as turf from '@turf/turf'; +const { circle, distance, helpers: turfHelpers } = turf; +const drawCircleMode = { ...MapboxDraw.modes.draw_polygon }; +drawCircleMode.onSetup = function () { + const polygon = this.newFeature({ + type: 'Feature', + properties: { + isCircle: true, + center: [], + }, + geometry: { + type: 'Polygon', + coordinates: [], + }, + }); + + this.addFeature(polygon); + + this.clearSelectedFeatures(); + doubleClickZoom.disable(this); + // dragPan.disable(this); + this.updateUIClasses({ mouse: 'add' }); + this.activateUIButton('Polygon'); + this.setActionableState({ + trash: true, + }); + + return { + polygon, + currentVertexPosition: 0, + }; +}; +drawCircleMode.onClick = drawCircleMode.onTap = function (state, e) { + const currentCenter = state.polygon.properties.center; + if (currentCenter.length === 0) { + // dragPan.disable(this) + state.polygon.properties.center = [e.lngLat.lng, e.lngLat.lat]; + } else { + // dragPan.enable(this); + return this.changeMode('simple_select', { featureIds: [state.polygon.id] }); + } +}; +drawCircleMode.onDrag = drawCircleMode.onMouseMove = function (state, e) { + const center = state.polygon.properties.center; + if (center.length > 0) { + const distanceInKm = distance( + turfHelpers.point(center), + turfHelpers.point([e.lngLat.lng, e.lngLat.lat]), + { + units: 'kilometers', + } + ); + const circleFeature = circle(center, distanceInKm); + state.polygon.incomingCoords(circleFeature.geometry.coordinates); + state.polygon.properties.radiusInKm = distanceInKm; + state.polygon.properties.lastClickCoord = [e.lngLat.lng, e.lngLat.lat]; + } +}; +//它决定当前 Drew 数据存储中的哪些特性将在地图上呈现。 +//所有传递给“显示”的特性都将被渲染,因此可以为每个内部特性传递多个显示特性。 +//有关如何制作显示特性的建议,请参阅‘ styling-pull’in‘ API.md’ +drawCircleMode.toDisplayFeatures = function (state, geojson, display) { + const isActivePolygon = geojson.properties.id === state.polygon.id; + geojson.properties.active = isActivePolygon ? 'true' : 'false'; + display(geojson); +}; +export default drawCircleMode; diff --git a/packages/material/.fatherrc.ts b/packages/material/.fatherrc.ts index 447d06b..b0341a2 100644 --- a/packages/material/.fatherrc.ts +++ b/packages/material/.fatherrc.ts @@ -1,13 +1,16 @@ -import { defineConfig } from 'father'; +import { defineConfig } from 'father-plugin-less'; export default defineConfig({ // more father config: https://github.com/umijs/father/blob/master/docs/config.md esm: { output: 'es', - ignores: ['**/demo/*', 'src/**/demo/*'] + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', }, cjs: { output: 'lib', - ignores: ['**/demo/*', 'src/**/demo/*'] + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', }, + plugins: ['father-plugin-less'], }); diff --git a/packages/meta/.fatherrc.ts b/packages/meta/.fatherrc.ts index 447d06b..b0341a2 100644 --- a/packages/meta/.fatherrc.ts +++ b/packages/meta/.fatherrc.ts @@ -1,13 +1,16 @@ -import { defineConfig } from 'father'; +import { defineConfig } from 'father-plugin-less'; export default defineConfig({ // more father config: https://github.com/umijs/father/blob/master/docs/config.md esm: { output: 'es', - ignores: ['**/demo/*', 'src/**/demo/*'] + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', }, cjs: { output: 'lib', - ignores: ['**/demo/*', 'src/**/demo/*'] + ignores: ['**/demo/*', 'src/**/demo/*'], + transformer: 'babel', }, + plugins: ['father-plugin-less'], }); diff --git a/packages/meta/es/BigImagePreview/components/BtnGroup/index.less b/packages/meta/es/BigImagePreview/components/BtnGroup/index.less deleted file mode 100644 index db03187..0000000 --- a/packages/meta/es/BigImagePreview/components/BtnGroup/index.less +++ /dev/null @@ -1,51 +0,0 @@ -.zhst-image__btn-group { - // display: flex; - width: 30px; - box-shadow: 0 2px 6px 0 rgb(0 0 0 / 40%); - - &__item { - display: flex; - width: 30px; - height: 30px; - align-items: center; - justify-content: center; - background: #000; - - &>button { - padding: 0; - color: #fff; - - &:hover { - color: #09f; - } - - &:active { - color: #09f; - } - - &:focus { - color: #fff; - } - - &>span { - display: flex; - } - } - - &--active { - &>button { - color: #09f; - } - } - } - - &--circle { - background-color: none; - box-shadow: none; - } - - &--circle &__item { - margin-bottom: 4px; - border-radius: 50%; - } -} diff --git a/packages/meta/es/BigImagePreview/index.less b/packages/meta/es/BigImagePreview/index.less deleted file mode 100644 index 5a940fe..0000000 --- a/packages/meta/es/BigImagePreview/index.less +++ /dev/null @@ -1,54 +0,0 @@ -.zhst-image__img-view { - position: relative; - width: calc(100%); - height: 100%; - font-size: 0; - - &__face-score { - position: absolute; - right: 20px; - bottom: 80px; - color: red; - font-family: 'Microsoft YaHei'; - font-size: 19px; - font-weight: bold; - } - - &-opt { - position: absolute; - z-index: 99; - top: 0; - } - - &-crop-opt { - position: absolute; - z-index: 99; - top: 0; - right: 0; - } - - &-align { - position: absolute; - top: 0; - left: 0; - pointer-events: none; - } - - &-main { - width: 100%; - height: 100%; - font-size: 0; - - &--cursor { - & canvas { - min-height: 320px; - cursor: pointer; - } - } - } - - &-screenshot { - position: absolute; - z-index: 10; - } -} diff --git a/packages/meta/es/CompareImage/CompareImage.js b/packages/meta/es/CompareImage/CompareImage.js index e0357b8..479c247 100644 --- a/packages/meta/es/CompareImage/CompareImage.js +++ b/packages/meta/es/CompareImage/CompareImage.js @@ -16,8 +16,12 @@ var CompareImage = /*#__PURE__*/forwardRef(function (props, ref) { var customizePrefixCls = props.prefixCls, _props$label = props.label, label = _props$label === void 0 ? '标题' : _props$label, + _props$width = props.width, + width = _props$width === void 0 ? '400' : _props$width, + height = props.height, _props$openRoll = props.openRoll, openRoll = _props$openRoll === void 0 ? true : _props$openRoll, + labelColor = props.labelColor, _props$url = props.url, url = _props$url === void 0 ? '' : _props$url, _props$score = props.score, @@ -33,6 +37,7 @@ var CompareImage = /*#__PURE__*/forwardRef(function (props, ref) { getPrefixCls = _useContext.getPrefixCls; var componentName = getPrefixCls('image__compater-view', customizePrefixCls); var imgContainerRef = useRef(null); + var containerRef = useRef(null); var imgInsRef = useRef(null); var _useState = useState(0), _useState2 = _slicedToArray(_useState, 2), @@ -47,8 +52,10 @@ var CompareImage = /*#__PURE__*/forwardRef(function (props, ref) { setScale(get(data, 'scale', 0)); }); if (generateImg(url)) { + console.log('containerRef', containerRef); imgInsRef.current = new Viewer(imgContainerRef.current, { - image: generateImg(url) + image: generateImg(url), + height: parseInt(height) }); } return function () { @@ -74,9 +81,15 @@ var CompareImage = /*#__PURE__*/forwardRef(function (props, ref) { }; }); return /*#__PURE__*/React.createElement("div", { - className: classNames("".concat(componentName, "__container")) + className: classNames("".concat(componentName, "__container")), + style: { + width: "".concat(parseInt(width), "px") + } }, label && /*#__PURE__*/React.createElement("div", { - className: classNames("".concat(componentName, "__label")) + className: classNames("".concat(componentName, "__label")), + style: { + backgroundColor: labelColor + } }, label), !url ? /*#__PURE__*/React.createElement("div", { className: classNames("".concat(componentName, "__empty")) }, /*#__PURE__*/React.createElement("img", { diff --git a/packages/meta/es/CompareImage/components/CornerScore/index.less b/packages/meta/es/CompareImage/components/CornerScore/index.less deleted file mode 100644 index cb8bf35..0000000 --- a/packages/meta/es/CompareImage/components/CornerScore/index.less +++ /dev/null @@ -1,21 +0,0 @@ -.zhst-image__CornerScore { - position: absolute; - right: 0; - bottom: 0; - width: 56px; - height: 22px; - line-height: 22px; - text-align: right; - padding-right: 1px; - background-size: 100%; - background-image: url('data: image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAAAsCAYAAAC9rDzHAAAByUlEQVR4Xu2cO08DMRCEJy0tlNBCSwmU0EIJLbS0UEILLTX/Fo3kk1AUHrrsjB3dWIoUnZTdvfnOZ6+1mxXGGHsADgEcA9hvnyMAvJ7xiwKrjuoQ0HmDxu8ZMxToAZDQrgAE2gxg6z9xAjwFcAvgoCDumGgKuADeA7iI6vUKqAFyE/KU12U9uMmiGuBr4Ong0bIS4A2Aa234sa4CyFzuPfLqFVABfGg5nv4OFu5BAZAbl4+F62q7fQVAJul3tjtYuCMFwEcATNozDAooAL7ltMVATngS8+kLP54UMzAAjc9VABrFVrgKQIWqRpsBaBRb4SoAFaoabQagUWyFqwBUqGq0GYBGsRWuAlChqtFmABrFVrgKQIWqRpsBaBRb4SoAFaoabVYDZLU1K9EyTApUA2RzyrMp9rgRlBWylIIlFRkmBapnIIuZ0hJmgkc3lQBTzGQEN7mqApjNSwd4VTOQr8yXFDL1IbjtDOTMY/dR1r0+/LZaA1n7yb6/wOsEb+4rlMDYdZR0oSO4uZuYtEkPAO17CP9dA3nCwll3Mlj8iw/nL4ABN/gj8hPAgBsc3KY1kJuTs7Y5yV+B7BBA5nKXrSUsKcGOgJvC/ALSJBp5mBHCFAAAAABJRU5ErkJggg=='); - z-index: 99; - - &>span { - padding-right: 6px; - line-height: 22px; - font-size: 12px; - vertical-align: middle; - color: rgba(255, 255, 255, 100%); - } -} diff --git a/packages/meta/es/CompareImage/index.less b/packages/meta/es/CompareImage/index.less deleted file mode 100644 index ec4db9d..0000000 --- a/packages/meta/es/CompareImage/index.less +++ /dev/null @@ -1,144 +0,0 @@ -.zhst-image__compater-view { - display: flex; - width: 100%; - align-items: center; - justify-content: center; - - &>div:first-child { - margin-right: 25px; - } - - &>div:last-child { - margin-left: 25px; - } - - &__container { - font-size: 0; - position: relative; - box-sizing: content-box; - border: 1px solid #f0f0f0; - } - - &__view { - min-width: 345px; - min-height: 450px; - } - - &__label { - position: absolute; - z-index: 99; - top: 0; - left: 0; - display: flex; - font-size: 16px; - height: 34px; - align-items: center; - justify-content: center; - - // width: 48px; - padding: 0 6px; - background: #09f; - color: #fff; - } - - &__tool { - display: flex; - width: 100%; - height: 40px; - align-items: center; - justify-content: center; - background: #f9f9f9; - - i, - span { - color: #333 !important; - } - - i { - margin-right: 4px; - } - - &>*:not(:last-child) { - margin-right: 20px; - } - - &__scale { - display: inline-block; - width: 38px; - height: 16px; - - // margin-left: 15px; - box-sizing: content-box; - border: 1px solid rgb(77 77 77 / 100%); - background: rgb(255 255 255 / 100%); - border-radius: 2px; - color: #4d4d4d; - cursor: default; - font-size: 12px; - line-height: 16px; - text-align: center; - } - - &__line { - width: 1px; - height: 14px; - background: #e6e6e6; - } - } - - &__empty { - position: absolute; - z-index: 9; - display: flex; - width: 100%; - height: 100%; - flex-direction: column; - align-items: center; - justify-content: center; - background: #f9f9f9; - transform: translateY(-100%); - - &>img { - margin-bottom: 12px; - width: 140px; - height: 80px; - } - - &--text { - color: #999; - font-size: 14px; - line-height: 22px; - } - } - - &__scoll-module { - position: absolute; - padding: 12px; - bottom: 48px; - display: flex; - width: 100%; - align-items: flex-end; - justify-content: space-between; - pointer-events: none; - box-sizing: border-box; - - &__btn { - width: 56px; - height: 56px; - opacity: 0.4; - pointer-events: all; - - &>span { - display: flex; - align-items: center; - justify-content: center; - } - } - - &__btn:hover { - opacity: 0.6; - background-color: #09f !important; - color: #fff !important; - } - } -} diff --git a/packages/meta/es/VideoPlayer/components/Loading/index.less b/packages/meta/es/VideoPlayer/components/Loading/index.less deleted file mode 100644 index b6c11a2..0000000 --- a/packages/meta/es/VideoPlayer/components/Loading/index.less +++ /dev/null @@ -1,53 +0,0 @@ -.zhst-image__video-view__player-mask { - position: absolute; - width: 100%; - height: 100%; - z-index: 99; - top: 0; - right: 0; - bottom: 0; - left: 0; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - background-color: rgb(4 4 4 / 70%); - - &--bg { - z-index: 999; - background-color: rgb(4 4 4 / 100%); - } - - i { - cursor: pointer; - } - - &-title { - margin-top: 12px; - color: #fff; - text-align: center; - - & a { - color: #09f; - cursor: pointer; - text-decoration: underline; - } - } -} - -.zhst-image__video-view__icon-wraper { - display: flex; - width: 80px; - height: 80px; - align-items: center; - justify-content: center; - background-color: rgb(255 255 255 / 10%); - border-radius: 50%; - cursor: pointer; - line-height: 80px; - text-align: center; - - // &:hover { - // background: #0099ff; - // } -} diff --git a/packages/meta/es/VideoPlayer/components/Progress/index.less b/packages/meta/es/VideoPlayer/components/Progress/index.less deleted file mode 100644 index e922211..0000000 --- a/packages/meta/es/VideoPlayer/components/Progress/index.less +++ /dev/null @@ -1,49 +0,0 @@ -.zhst-image__range { - position: relative; - - &--no-slider { - .next-range-slider { - display: none; - } - } - - & .next-range .next-range-track { - height: 8px; - margin-top: -4px; - border-radius: 8px; - } - - & .next-range .next-range-selected { - height: 8px; - margin-top: -4px; - border-radius: 8px; - } - - & .next-range .next-range-slider-inner { - width: 14px; - height: 14px; - border-color: #fff; - margin-top: -7px; - margin-left: -7px; - background-color: #0098ff; - } - - & .next-range .next-range-slider { - width: 14px; - height: 14px; - margin-top: -7px; - margin-left: -7px; - } - - & .next-range.simulation-click>.next-range-slider-inner { - border: 2px solid #fff !important; - } - - & .next-range .next-range-frag.next-range-active .next-range-slider .next-range-slider-inner { - border: 2px solid #fff !important; - } - - & .next-range .next-range-slider.next-range-slider-moving .next-range-slider-inner { - border: 2px solid #fff !important; - } -} diff --git a/packages/meta/es/VideoPlayer/index.less b/packages/meta/es/VideoPlayer/index.less deleted file mode 100644 index 2630aa1..0000000 --- a/packages/meta/es/VideoPlayer/index.less +++ /dev/null @@ -1,73 +0,0 @@ -.zhst-image__video-view { - position: relative; - overflow: hidden; - background-color: #333; - - // &-flv { - // width: 85%; - // } - &-screenshot { - position: absolute; - z-index: 10; - } - - &-crop-container { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - } - - &-align { - position: absolute; - top: 0; - left: 0; - pointer-events: none; - } - - &-opt { - position: absolute; - z-index: 99; - bottom: 0; - display: flex; - width: 100%; - height: 32px; - box-sizing: border-box; - align-items: center; - padding: 0 12px 0 24px; - background-color: rgb(0 0 0 / 80%); - line-height: 32px; - - &>div:first-child { - display: flex; - align-items: center; - margin-right: 12px; - } - - &>div:last-child { - display: flex; - align-items: center; - margin-left: 12px; - } - - &-range { - display: flex; - height: 32px; - flex: 1; - align-items: center; - line-height: 32px; - text-align: center; - - &>div:first-child { - flex: 1; - } - - &>div:last-child { - width: 100px; - margin-left: 8px; - color: #fff; - } - } - } -} diff --git a/packages/meta/es/index.js b/packages/meta/es/index.js index dfd5478..bc3fa06 100644 --- a/packages/meta/es/index.js +++ b/packages/meta/es/index.js @@ -9,6 +9,7 @@ export { default as VideoPlayer } from "./VideoPlayer"; // antd export { default as Tabs } from "./tabs"; export { default as Tree } from "./tree"; +export { default as Spin } from "./spin"; export { default as message } from "./message"; export { default as Button } from "./button"; export { default as Image } from "./image"; diff --git a/packages/meta/src/CompareImage/CompareImage.tsx b/packages/meta/src/CompareImage/CompareImage.tsx index 5c72f65..49b2102 100644 --- a/packages/meta/src/CompareImage/CompareImage.tsx +++ b/packages/meta/src/CompareImage/CompareImage.tsx @@ -17,6 +17,9 @@ export interface CompareImageProps { * @default "默认值" */ label?: string; + labelColor?: string; + width?: string; + height?: string showTools?: boolean; prefixCls?: string; openRoll?: boolean; //开启翻页 @@ -39,7 +42,10 @@ const CompareImage = forwardRef((props, const { prefixCls: customizePrefixCls, label = '标题', + width = '400', + height, openRoll = true, + labelColor, url = '', score = 0, preDisable, @@ -69,11 +75,10 @@ const CompareImage = forwardRef((props, } ); - if (generateImg(url)) { - imgInsRef.current = new Viewer(imgContainerRef.current, { - image: generateImg(url), - }); - } + imgInsRef.current = new Viewer(imgContainerRef.current, { + image: url, + height: parseInt(height!), + }); return () => { handleTransformChange?.remove(); @@ -96,8 +101,8 @@ const CompareImage = forwardRef((props, })); return ( -
- {label &&
{label}
} +
+ {label &&
{label}
} {!url ? (
((props, style={{ width: '56px' }} icon={} > - */}