diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 353deb0..5155b1b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,12 +1,32 @@ stages: - build + - package + - deploy + +cache: + policy: pull + key: '$CI_COMMIT_REF_NAME' + paths: + - node_modules/ build: + image: registry.zhst.com/video-analysis/pnpm4 tags: - linux stage: build script: - - cd /home - - ls - - git - - node + - chmod +x ./deploy/build.sh && ./deploy/build.sh + artifacts: + name: '${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_${CI_JOB_NAME}_${CI_PIPELINE_ID}' + paths: + - ./app/public/* + +package: + tags: + - linux_shell + stage: package + script: + - chmod +x ./deploy/package.sh && ./deploy/package.sh + dependencies: + - build + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..123c217 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,5 @@ +FROM alpine:latest + +ADD ./app/public/ /app/public/ + +CMD [ "sh", "-c", "while true; do echo zhst-web; sleep 1; done" ] \ No newline at end of file diff --git a/deploy/build.sh b/deploy/build.sh new file mode 100755 index 0000000..00a1980 --- /dev/null +++ b/deploy/build.sh @@ -0,0 +1,9 @@ +pnpm install + +pnpm run build:master + +mkdir -p ./app/public/ + +mv ./dist/* ./app/public/ + +cat ./app/public/index.html | head -n 7 diff --git a/deploy/package.sh b/deploy/package.sh new file mode 100644 index 0000000..74c068d --- /dev/null +++ b/deploy/package.sh @@ -0,0 +1,10 @@ +#! /bin/bash +set -e + +export DOCKER_CLI_EXPERIMENTAL=enabled +docker login registry.zhst.com -u zhst -p Zhst666\& + +# docker build -t registry.zhst.com/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME//\//-}-${CI_PIPELINE_ID} -f Dockerfile . +# docker push registry.zhst.com/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME//\//-}-${CI_PIPELINE_ID} +docker buildx build --platform linux/arm64,linux/amd64 -t registry.zhst.com/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME//\//-}-${CI_PIPELINE_ID} -f Dockerfile . --push + diff --git a/global.d.ts b/global.d.ts index e69de29..1ea3960 100644 --- a/global.d.ts +++ b/global.d.ts @@ -0,0 +1 @@ +declare module '*.less'; diff --git a/package.json b/package.json index 1c9d983..e01b2b7 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ ], "scripts": { "add": "pnpm changeset add", + "build": "pnpm --filter=@zhst/* run build", "build:master": "dumi build", "build:watch": "father dev", "dev": "dumi dev", diff --git a/packages/biz/es/BigImageModal/BigImageModal.d.ts b/packages/biz/es/BigImageModal/BigImageModal.d.ts new file mode 100644 index 0000000..ae5e46d --- /dev/null +++ b/packages/biz/es/BigImageModal/BigImageModal.d.ts @@ -0,0 +1,40 @@ +import React from 'react'; +import type { ModalProps, DescriptionsProps, TabsProps, VideoViewRef, ImgViewRef } from '@zhst/meta'; +import './index.less'; +export declare const componentPrefix = "zhst-image"; +export type TAB_TYPE = 'COMPATER' | 'NORMAL' | 'VIDEO'; +export type MODEL_TYPE = 'VIDEO' | 'IMAGE'; +export interface BigImageModalProps extends ModalProps { + visible: boolean; + activeTab?: TAB_TYPE; + attributeList: { + title: string; + children: Pick; + }; + tabs: { + data: Pick & { + key: TAB_TYPE; + }; + }; + dataSource: any; + imageData: any; + relatedData: any; + isRelated?: boolean; + footer?: React.ReactNode; + showCarousel?: boolean; + onTabChange?: (newVal?: TAB_TYPE, oldVal?: TAB_TYPE) => void; + onIndexChange?: (newVal?: number, oldVal?: number) => void; + transformPropFunc: (data: any) => void; +} +interface BigModalRef { + tab: TAB_TYPE; + setTab: (tab: TAB_TYPE) => void; + modalRef: ModalProps; + activeKey: string; + setActiveKey: (val: string) => void; + videoPlayerRef: VideoViewRef; + combineImageRef: any; + bigImagePreviewRef: ImgViewRef; +} +declare const BigImageModal: React.FC; +export default BigImageModal; diff --git a/packages/biz/es/BigImageModal/components/CombineImage/index.d.ts b/packages/biz/es/BigImageModal/components/CombineImage/index.d.ts new file mode 100644 index 0000000..19dbaa2 --- /dev/null +++ b/packages/biz/es/BigImageModal/components/CombineImage/index.d.ts @@ -0,0 +1,11 @@ +import { FC } from 'react'; +interface ComBineImageProps { + data: { + imgSummary: string; + compaterImages: string[]; + imageKey: string; + score: number; + }; +} +declare const ComBineImage: FC; +export default ComBineImage; diff --git a/packages/biz/es/BigImageModal/components/CombineImage/index.js b/packages/biz/es/BigImageModal/components/CombineImage/index.js new file mode 100644 index 0000000..abe895d --- /dev/null +++ b/packages/biz/es/BigImageModal/components/CombineImage/index.js @@ -0,0 +1,58 @@ +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +import React, { useRef, forwardRef, useImperativeHandle, useState } from 'react'; +import { CompareImage, Flex, Score } from '@zhst/meta'; +var ComBineImage = /*#__PURE__*/forwardRef(function (props, ref) { + var data = props.data; + var imgSummary = data.imgSummary, + _data$compaterImages = data.compaterImages, + compaterImages = _data$compaterImages === void 0 ? [] : _data$compaterImages; + var targetImageRef = useRef(null); + var compareImageRef = useRef(null); + var _useState = useState(compaterImages.findIndex(function (_url) { + return imgSummary === _url; + }) || 0), + _useState2 = _slicedToArray(_useState, 2), + targetIndex = _useState2[0], + setTargetIndex = _useState2[1]; + useImperativeHandle(ref, function () { + return { + compareImageRef: compareImageRef, + targetImageRef: targetImageRef + }; + }); + return /*#__PURE__*/React.createElement(Flex, { + justify: "space-evenly", + align: "center", + style: { + padding: '0 32px' + } + }, /*#__PURE__*/React.createElement(CompareImage, { + ref: targetImageRef, + preDisable: targetIndex === 0, + nextDisable: targetIndex >= compaterImages.length - 1, + onNext: function onNext() { + return setTargetIndex(targetIndex + 1); + }, + onPre: function onPre() { + return setTargetIndex(targetIndex - 1); + }, + showScore: false, + openRoll: !!compaterImages.length, + url: compaterImages[targetIndex] || imgSummary, + label: "\u76EE\u6807\u56FE" + }), /*#__PURE__*/React.createElement(Score, { + score: data.score + }), /*#__PURE__*/React.createElement(CompareImage, { + ref: compareImageRef, + url: data.imageKey, + openRoll: false, + score: data.score, + label: "\u5BF9\u6BD4\u56FE" + })); +}); +export default ComBineImage; \ No newline at end of file diff --git a/packages/biz/es/BigImageModal/components/navigation/index.d.ts b/packages/biz/es/BigImageModal/components/navigation/index.d.ts new file mode 100644 index 0000000..78b1ca8 --- /dev/null +++ b/packages/biz/es/BigImageModal/components/navigation/index.d.ts @@ -0,0 +1,13 @@ +import * as React from 'react'; +import './index.less'; +declare const Navigation: React.FC<{ + show?: boolean; + onClick?: React.MouseEventHandler; + prev?: boolean; + next?: boolean; + disabled?: boolean; + className?: string; + color?: string; + hoverColor?: string; +}>; +export default Navigation; diff --git a/packages/biz/es/BigImageModal/mock.d.ts b/packages/biz/es/BigImageModal/mock.d.ts new file mode 100644 index 0000000..68ff4e3 --- /dev/null +++ b/packages/biz/es/BigImageModal/mock.d.ts @@ -0,0 +1,245 @@ +export declare const IMAGE_DATA: { + enAbleDeleteFeature: boolean; + tabsFilter: string[]; + selectIndex: number; + disableBtn: number[]; + dataSource: { + objectId: string; + condition: { + featureInfo: null; + featureData: string; + imageData: string; + alg: string; + rect: { + x: number; + y: number; + w: number; + h: number; + }; + objectImageUrl: string; + srcImageUrl: string; + }; + score: number; + timestamp: number; + deviceId: string; + id: string; + name: string; + dirid: string; + status: string; + longitude: number; + latitude: number; + caseId: string; + caseGroup: string; + isDeleted: string; + objectIndex: { + objectId: string; + solutionId: string; + deviceId: string; + fragmentId: string; + }; + objectType: string; + isObjectTrack: boolean; + pathId: string; + frameInfo: { + frameId: string; + frameTimestamp: string; + width: number; + height: number; + originWidth: number; + originHeight: number; + offsetTime: string; + skipNumber: string; + }; + level: number; + bboxInFrame: { + x: number; + y: number; + w: number; + h: number; + }; + bboxExtInFrame: { + x: number; + y: number; + w: number; + h: number; + }; + objectImageKey: string; + objectExtImageKey: string; + frameImageKey: string; + confidence: number; + sourceObjectId: string; + storeTimestamp: string; + gbNumber: string; + qualityScore: number; + subObjectCount: number; + subObjectType: string[]; + subObjectIds: string[]; + solutionId: string; + fragmentId: string; + contrastKey: string; + compaterImages: string[]; + imgSummary: string; + imageKey: string; + srcImageUrl: string; + algorithmVersion: string; + cameraId: string; + cameraName: string; + }[]; + isArchiveDetail: boolean; + ToolProps: { + renderVideoBtn: boolean; + disableVideo: boolean; + }; + specialTitle: string; +}; +export declare const BIG_IMAGE_DATA: ({ + imageKey: string; + imgSummary: string; + flvUrl: string; + compaterImages: string[]; + odRect: { + x: number; + y: number; + w: number; + h: number; + }; + attachImg: { + url: string; + label: string; + }[]; + score: string; + showScore: boolean; + cameraPosition: string; + time: string; + objects: { + objectIndex: { + objectId: string; + solutionId: string; + deviceId: string; + fragmentId: string; + }; + objectType: string; + sourceObjectId: string; + level: number; + confidence: number; + frameInfo: { + frameId: string; + frameTimestamp: string; + width: number; + height: number; + originWidth: number; + originHeight: number; + offsetTime: string; + skipNumber: string; + }; + infoOnSource: { + bboxInFrame: { + bboxRatio: { + x: number; + y: number; + w: number; + h: number; + }; + }; + countInSource: number; + indexInSource: number; + }; + qualityScore: number; + }[]; +} | { + imageKey: string; + imgSummary: string; + odRect: { + x: number; + y: number; + w: number; + h: number; + }; + attachImg: { + url: string; + label: string; + }[]; + flvUrl: string; + score: number; + showScore: boolean; + cameraPosition: string; + time: string; + objects: ({ + objectIndex: { + objectId: string; + solutionId: string; + deviceId: string; + fragmentId: string; + }; + objectType: string; + sourceObjectId: string; + frameInfo: { + frameId: string; + frameTimestamp: string; + width: number; + height: number; + originWidth: number; + originHeight: number; + offsetTime: string; + skipNumber: string; + }; + infoOnSource: { + bboxInFrame: { + bboxRatio: { + x: number; + y: number; + w: number; + h: number; + }; + }; + countInSource: number; + indexInSource: number; + }; + qualityScore: number; + level?: undefined; + confidence?: undefined; + } | { + objectIndex: { + objectId: string; + solutionId: string; + deviceId: string; + fragmentId: string; + }; + objectType: string; + sourceObjectId: string; + level: number; + confidence: number; + frameInfo: { + frameId: string; + frameTimestamp: string; + width: number; + height: number; + originWidth: number; + originHeight: number; + offsetTime: string; + skipNumber: string; + }; + infoOnSource: { + bboxInFrame: { + bboxRatio: { + x: number; + y: number; + w: number; + h: number; + }; + }; + countInSource: number; + indexInSource: number; + }; + qualityScore: number; + })[]; + compaterImages?: undefined; +})[]; +export declare const attributeList: { + title: string; + children: { + key: string; + label: string; + children: string; + }[]; +}[]; diff --git a/packages/biz/es/BigImageModal/util/bigImageModalAdapter.d.ts b/packages/biz/es/BigImageModal/util/bigImageModalAdapter.d.ts new file mode 100644 index 0000000..185982d --- /dev/null +++ b/packages/biz/es/BigImageModal/util/bigImageModalAdapter.d.ts @@ -0,0 +1,118 @@ +/** + * 适配老的大屏组件数据格式传入 + */ +import React from 'react'; +import { AlgorithmVersionStr, HumanProperty, ObjectType, Rect } 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 { + 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; + attributeList: { + label: string; + list: any[]; + }[]; + archiveImages?: any; + spaceName: string; + objectIndex?: { + deviceId: string; + fragmentId: string; + objectId: string; + solutionId: string; + }; + objectType: ObjectType; + objectId: string; + bodyObjectId?: string; + faceObjectId?: string; + sourceObjectId?: string; + 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; +} +export interface ImageModalDataProps { + targetData: BigImageData[]; + compactData: BigImageData[]; +} +export interface ModalAdapterConfigProps { + oldMode?: boolean; +} +/** + * 大图组件适配器,兼容老接口 + * @param Cmp 大图组件 + * @param config 额外配置 + * @returns 大图组件 + */ +declare const adapter: (Cmp: any, config: ModalAdapterConfigProps) => any; +export default adapter; diff --git a/packages/biz/es/BigImageModal/util/bigImageModalAdapter.js b/packages/biz/es/BigImageModal/util/bigImageModalAdapter.js new file mode 100644 index 0000000..bad3d69 --- /dev/null +++ b/packages/biz/es/BigImageModal/util/bigImageModalAdapter.js @@ -0,0 +1,50 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * 适配老的大屏组件数据格式传入 + */ +import React from 'react'; + +/** + * 描述列表 description + */ + +/** + * 工具栏 + */ + +/** + * 兼容老数据格式 + * @param _data 老数据格式 + * @returns newData + */ +var translateOldImageData = function translateOldImageData(_data) { + return _objectSpread(_objectSpread({}, _data), {}, { + open: _data.visible, + onCancel: _data.onClose + }); +}; + +/** + * 大图组件适配器,兼容老接口 + * @param Cmp 大图组件 + * @param config 额外配置 + * @returns 大图组件 + */ +var adapter = function adapter(Cmp, config) { + var _config$oldMode = config.oldMode, + oldMode = _config$oldMode === void 0 ? false : _config$oldMode; + return function (props) { + var newProps = oldMode ? translateOldImageData(props) : props; + console.log('adapter----适配数据', props, newProps); + + // 该属性已经废弃 + delete newProps.visible; + return /*#__PURE__*/React.createElement(Cmp, newProps); + }; +}; +export default adapter; \ No newline at end of file diff --git a/packages/biz/es/Demo/index.d.ts b/packages/biz/es/Demo/index.d.ts new file mode 100644 index 0000000..bcc157c --- /dev/null +++ b/packages/biz/es/Demo/index.d.ts @@ -0,0 +1,3 @@ +import React from 'react'; +declare const _default: () => React.JSX.Element; +export default _default; diff --git a/packages/biz/es/RealTimeMonitor/RealTimeMonitor.d.ts b/packages/biz/es/RealTimeMonitor/RealTimeMonitor.d.ts new file mode 100644 index 0000000..a3f147f --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/RealTimeMonitor.d.ts @@ -0,0 +1,21 @@ +import React from 'react'; +import { IRecord, VideoPlayerCardProps, ViewLargerImageModalRef } from '@zhst/biz'; +interface RealTimeMonitorProps { + videoDataSource?: VideoPlayerCardProps[]; + handleWindowClick?: (key?: string) => void; + handleCloseButtonClick?: (key?: string) => void; + selectedWindowKey?: string; + warningDataSource?: IRecord[]; + viewLargerImageModalRef?: React.RefObject; + handleDownloadImg?: (imgSrc?: string) => void; + onRecordClick?: (record?: IRecord) => void; + selectedRecordId?: string; + isRecordListLoading?: boolean; + recordListTitle?: string; + style?: React.CSSProperties; + cardStyle?: React.CSSProperties; + imgStyle?: React.CSSProperties; + largeImageTitle?: string; +} +export declare const RealTimeMonitor: React.FC; +export default RealTimeMonitor; diff --git a/packages/biz/es/RealTimeMonitor/RealTimeMonitor.js b/packages/biz/es/RealTimeMonitor/RealTimeMonitor.js new file mode 100644 index 0000000..b11561c --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/RealTimeMonitor.js @@ -0,0 +1,35 @@ +import React from 'react'; +import WindowToggle from "./components/WindowToggle"; +import WarningRecordList from "./components/WarningRecordList"; +export var RealTimeMonitor = function RealTimeMonitor(props) { + var videoDataSource = props.videoDataSource, + handleWindowClick = props.handleWindowClick, + handleCloseButtonClick = props.handleCloseButtonClick, + selectedWindowKey = props.selectedWindowKey, + warningDataSource = props.warningDataSource, + viewLargerImageModalRef = props.viewLargerImageModalRef, + handleDownloadImg = props.handleDownloadImg, + onRecordClick = props.onRecordClick, + selectedRecordId = props.selectedRecordId, + isRecordListLoading = props.isRecordListLoading; + return /*#__PURE__*/React.createElement("div", { + className: "zhst-biz-real-time-monitor", + style: { + display: 'flex' + } + }, /*#__PURE__*/React.createElement(WindowToggle, { + selectedWindowKey: selectedWindowKey, + dataSource: videoDataSource, + handleWindowClick: handleWindowClick, + handleCloseButtonClick: handleCloseButtonClick + }), /*#__PURE__*/React.createElement(WarningRecordList, { + dataSource: warningDataSource, + handleDownloadImg: handleDownloadImg, + onRecordClick: onRecordClick, + selectedRecordId: selectedRecordId, + viewLargerImageModalRef: viewLargerImageModalRef, + isRecordListLoading: isRecordListLoading, + recordListTitle: "\u76D1\u63A7\u9884\u8B66\u8BB0\u5F55" + })); +}; +export default RealTimeMonitor; \ No newline at end of file diff --git a/packages/biz/es/RealTimeMonitor/components/WarningRecordList/WarningRecordList.d.ts b/packages/biz/es/RealTimeMonitor/components/WarningRecordList/WarningRecordList.d.ts new file mode 100644 index 0000000..6489299 --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/components/WarningRecordList/WarningRecordList.d.ts @@ -0,0 +1,18 @@ +import React from 'react'; +import { IRecord, ViewLargerImageModalRef } from '@zhst/biz'; +import "./index.less"; +interface WarningRecordListProps { + dataSource?: IRecord[]; + viewLargerImageModalRef?: React.RefObject; + handleDownloadImg?: (imgSrc?: string) => void; + onRecordClick?: (record?: IRecord) => void; + selectedRecordId?: string; + isRecordListLoading?: boolean; + recordListTitle?: string; + style?: React.CSSProperties; + cardStyle?: React.CSSProperties; + imgStyle?: React.CSSProperties; + largeImageTitle?: string; +} +declare const WarningRecordList: React.FC; +export default WarningRecordList; diff --git a/packages/biz/es/RealTimeMonitor/components/WarningRecordList/WarningRecordList.js b/packages/biz/es/RealTimeMonitor/components/WarningRecordList/WarningRecordList.js new file mode 100644 index 0000000..5715506 --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/components/WarningRecordList/WarningRecordList.js @@ -0,0 +1,81 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +import React from 'react'; +import { ViewLargerImageModal, WarningRecordCard } from '@zhst/biz'; +import { Empty, Space, Spin } from 'antd'; +import "./index.less"; +import { LoadingOutlined } from '@ant-design/icons'; +var WarningRecordList = function WarningRecordList(props) { + var _props$dataSource = props.dataSource, + dataSource = _props$dataSource === void 0 ? [] : _props$dataSource, + viewLargerImageModalRef = props.viewLargerImageModalRef, + selectedRecordId = props.selectedRecordId, + handleDownloadImg = props.handleDownloadImg, + _onRecordClick = props.onRecordClick, + isRecordListLoading = props.isRecordListLoading, + recordListTitle = props.recordListTitle, + style = props.style, + cardStyle = props.cardStyle, + imgStyle = props.imgStyle, + largeImageTitle = props.largeImageTitle; + return /*#__PURE__*/React.createElement("div", { + className: "zhst-biz-warning-record-list", + style: style + }, /*#__PURE__*/React.createElement("div", { + className: "header" + }, recordListTitle), /*#__PURE__*/React.createElement("div", { + className: "body" + }, isRecordListLoading ? /*#__PURE__*/React.createElement("div", { + style: { + height: '100%', + display: 'flex', + justifyContent: 'center', + alignItems: 'center' + } + }, /*#__PURE__*/React.createElement(Spin, { + indicator: /*#__PURE__*/React.createElement(LoadingOutlined, { + style: { + fontSize: 24 + } + }) + })) : (dataSource === null || dataSource === void 0 ? void 0 : dataSource.length) > 0 ? /*#__PURE__*/React.createElement(Space, { + direction: "vertical", + size: 10 + }, dataSource === null || dataSource === void 0 ? void 0 : dataSource.map(function (record, index) { + if (index > 2) return; + return /*#__PURE__*/React.createElement(WarningRecordCard, { + key: record === null || record === void 0 ? void 0 : record.id, + record: record, + onRecordClick: function onRecordClick(record) { + _onRecordClick === null || _onRecordClick === void 0 || _onRecordClick(record); + }, + selectedRecordId: selectedRecordId, + cardStyle: _objectSpread({ + width: 300, + height: 264 + }, cardStyle), + imgStyle: _objectSpread({ + width: 280, + height: 169 + }, imgStyle) + }); + })) : /*#__PURE__*/React.createElement("div", { + style: { + height: '100%', + display: 'flex', + justifyContent: 'center', + alignItems: 'center' + } + }, /*#__PURE__*/React.createElement(Empty, { + description: "\u6682\u65E0\u6570\u636E" + }))), /*#__PURE__*/React.createElement(ViewLargerImageModal, { + ref: viewLargerImageModalRef, + downloadImg: handleDownloadImg, + title: largeImageTitle + })); +}; +export default WarningRecordList; \ No newline at end of file diff --git a/packages/biz/es/RealTimeMonitor/components/WarningRecordList/index.d.ts b/packages/biz/es/RealTimeMonitor/components/WarningRecordList/index.d.ts new file mode 100644 index 0000000..b50da75 --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/components/WarningRecordList/index.d.ts @@ -0,0 +1,2 @@ +import WarningRecordList from './WarningRecordList'; +export default WarningRecordList; diff --git a/packages/biz/es/RealTimeMonitor/components/WarningRecordList/index.js b/packages/biz/es/RealTimeMonitor/components/WarningRecordList/index.js new file mode 100644 index 0000000..6e69d61 --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/components/WarningRecordList/index.js @@ -0,0 +1,2 @@ +import WarningRecordList from "./WarningRecordList"; +export default WarningRecordList; \ No newline at end of file diff --git a/packages/biz/es/RealTimeMonitor/components/WarningRecordList/index.less b/packages/biz/es/RealTimeMonitor/components/WarningRecordList/index.less new file mode 100644 index 0000000..e348f82 --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/components/WarningRecordList/index.less @@ -0,0 +1,20 @@ +.zhst-biz-warning-record-list { + display: flex; + flex-direction: column; + border-left: solid 1px #00000026; + width: 320px; + + .header { + width: 100%; + height: 48px; + background-color: #EFF2F4; + padding: 10px 20px; + box-sizing: border-box; + } + + .body { + padding: 10px; + overflow: hidden; + flex: 1; + } +} \ No newline at end of file diff --git a/packages/biz/es/RealTimeMonitor/components/WindowToggle/WindowToggle.d.ts b/packages/biz/es/RealTimeMonitor/components/WindowToggle/WindowToggle.d.ts new file mode 100644 index 0000000..c67b407 --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/components/WindowToggle/WindowToggle.d.ts @@ -0,0 +1,11 @@ +import React from 'react'; +import { VideoPlayerCardProps } from '@zhst/biz'; +import './index.less'; +interface WindowToggleProps { + dataSource?: VideoPlayerCardProps[]; + handleWindowClick?: (key?: string) => void; + handleCloseButtonClick?: (key?: string) => void; + selectedWindowKey?: string; +} +export declare const WindowToggle: React.FC; +export default WindowToggle; diff --git a/packages/biz/es/RealTimeMonitor/components/WindowToggle/WindowToggle.js b/packages/biz/es/RealTimeMonitor/components/WindowToggle/WindowToggle.js new file mode 100644 index 0000000..d9efe21 --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/components/WindowToggle/WindowToggle.js @@ -0,0 +1,81 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +import React, { useState } from 'react'; +import { Segmented } from 'antd'; +import { AppstoreOutlined, BarsOutlined } from '@ant-design/icons'; +import { VideoPlayerCard } from '@zhst/biz'; +import "./index.less"; +import { theme } from 'antd/lib'; +export var WindowToggle = function WindowToggle(props) { + var _props$dataSource = props.dataSource, + dataSource = _props$dataSource === void 0 ? [] : _props$dataSource, + handleWindowClick = props.handleWindowClick, + handleCloseButtonClick = props.handleCloseButtonClick, + selectedWindowKey = props.selectedWindowKey; + var _useState = useState("large"), + _useState2 = _slicedToArray(_useState, 2), + size = _useState2[0], + setSize = _useState2[1]; + var useToken = theme.useToken; + var _useToken = useToken(), + token = _useToken.token; + var getLabelStyle = function getLabelStyle(isSelected) { + return _objectSpread({ + padding: "0 11px", + background: "#fff" + }, isSelected ? { + background: token.colorPrimary, + color: '#fff' + } : {}); + }; + return /*#__PURE__*/React.createElement("div", { + className: "zhst-biz-window-toggle" + }, /*#__PURE__*/React.createElement("div", { + className: "header" + }, /*#__PURE__*/React.createElement(Segmented, { + defaultValue: "large", + options: [{ + value: 'large', + label: /*#__PURE__*/React.createElement("div", { + style: getLabelStyle(size === 'large') + }, /*#__PURE__*/React.createElement(BarsOutlined, null)) + }, { + value: 'small', + label: /*#__PURE__*/React.createElement("div", { + style: getLabelStyle(size === 'small') + }, /*#__PURE__*/React.createElement(AppstoreOutlined, null)) + }], + onChange: function onChange(value) { + // 当一个窗口时 默认 selectedkey 第一条数据的 windowkey + if (value === 'large' && dataSource.length > 0) { + var windowKey = dataSource[0].windowKey; + handleWindowClick === null || handleWindowClick === void 0 || handleWindowClick(windowKey); + } + setSize(value); + } + })), /*#__PURE__*/React.createElement("div", { + className: "body" + }, dataSource === null || dataSource === void 0 ? void 0 : dataSource.map(function (item, index) { + if (size === "large" && index > 0) return; + return /*#__PURE__*/React.createElement(VideoPlayerCard, _extends({ + key: item.windowKey, + selectedWindowKey: selectedWindowKey, + size: size + }, item, { + handleWindowClick: handleWindowClick, + handleCloseButtonClick: handleCloseButtonClick + })); + }))); +}; +export default WindowToggle; \ No newline at end of file diff --git a/packages/biz/es/RealTimeMonitor/components/WindowToggle/index.d.ts b/packages/biz/es/RealTimeMonitor/components/WindowToggle/index.d.ts new file mode 100644 index 0000000..3b57a45 --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/components/WindowToggle/index.d.ts @@ -0,0 +1,2 @@ +import WindowToggle from './WindowToggle'; +export default WindowToggle; diff --git a/packages/biz/es/RealTimeMonitor/components/WindowToggle/index.js b/packages/biz/es/RealTimeMonitor/components/WindowToggle/index.js new file mode 100644 index 0000000..2f4ac13 --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/components/WindowToggle/index.js @@ -0,0 +1,2 @@ +import WindowToggle from "./WindowToggle"; +export default WindowToggle; \ No newline at end of file diff --git a/packages/biz/es/RealTimeMonitor/components/WindowToggle/index.less b/packages/biz/es/RealTimeMonitor/components/WindowToggle/index.less new file mode 100644 index 0000000..61c77bd --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/components/WindowToggle/index.less @@ -0,0 +1,45 @@ +.zhst-biz-window-toggle { + display: flex; + flex-direction: column; + flex: 1; + + .header { + width: 100%; + height: 48px; + background-color: #EFF2F4; + padding: 10px 20px; + box-sizing: border-box; + + .ant-segmented { + padding: 0; + + .ant-segmented-group { + border-radius: 4px; + overflow: hidden; + + .ant-segmented-item { + border-radius: 0; + + .ant-segmented-item-label { + padding: 0; + } + } + } + } + } + + .body { + flex: 1; + width: 100%; + background-color: #E5EAEC; + padding: 10px; + box-sizing: border-box; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + + >div { + margin: 10px; + } + } +} \ No newline at end of file diff --git a/packages/biz/es/RealTimeMonitor/index.d.ts b/packages/biz/es/RealTimeMonitor/index.d.ts new file mode 100644 index 0000000..9013d29 --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/index.d.ts @@ -0,0 +1,2 @@ +import RealTimeMonitor from './RealTimeMonitor'; +export default RealTimeMonitor; diff --git a/packages/biz/es/RealTimeMonitor/index.js b/packages/biz/es/RealTimeMonitor/index.js new file mode 100644 index 0000000..80b2a3c --- /dev/null +++ b/packages/biz/es/RealTimeMonitor/index.js @@ -0,0 +1,2 @@ +import RealTimeMonitor from "./RealTimeMonitor"; +export default RealTimeMonitor; \ No newline at end of file diff --git a/packages/biz/es/VideoPlayerCard/VideoPlayerCard.d.ts b/packages/biz/es/VideoPlayerCard/VideoPlayerCard.d.ts new file mode 100644 index 0000000..cd1775e --- /dev/null +++ b/packages/biz/es/VideoPlayerCard/VideoPlayerCard.d.ts @@ -0,0 +1,19 @@ +import { CardProps } from 'antd'; +import React, { ReactNode } from 'react'; +import './index.less'; +export interface VideoPlayerCardProps { + windowKey?: string; + selectedWindowKey?: string; + showType?: 'video' | "image"; + imgSrc?: string; + videoSrc?: string; + cardProps?: CardProps; + errorReasonText?: string; + isWindowLoading?: boolean; + size?: 'large' | 'small'; + title?: string | ReactNode; + handleCloseButtonClick?: (key?: string) => void; + handleWindowClick?: (key?: string) => void; +} +export declare const VideoPlayerCard: React.FC; +export default VideoPlayerCard; diff --git a/packages/biz/es/VideoPlayerCard/VideoPlayerCard.js b/packages/biz/es/VideoPlayerCard/VideoPlayerCard.js new file mode 100644 index 0000000..e4daf93 --- /dev/null +++ b/packages/biz/es/VideoPlayerCard/VideoPlayerCard.js @@ -0,0 +1,140 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +import { Card, Space, Spin, Button } from 'antd'; +import { theme } from 'antd/lib'; +import { VideoPlayer } from '@zhst/meta'; +import React, { useState, useEffect, useRef } from 'react'; +import { CloseOutlined, LoadingOutlined } from '@ant-design/icons'; +import "./index.less"; +export var VideoPlayerCard = function VideoPlayerCard(props) { + var componentName = "zhst-biz-video-player-card"; + var showType = props.showType, + imgSrc = props.imgSrc, + videoSrc = props.videoSrc, + cardProps = props.cardProps, + isWindowLoading = props.isWindowLoading, + errorReasonText = props.errorReasonText, + size = props.size, + title = props.title, + handleCloseButtonClick = props.handleCloseButtonClick, + handleWindowClick = props.handleWindowClick, + windowKey = props.windowKey, + _props$selectedWindow = props.selectedWindowKey, + selectedWindowKey = _props$selectedWindow === void 0 ? '' : _props$selectedWindow; + var _useState = useState(null), + _useState2 = _slicedToArray(_useState, 2), + cardContent = _useState2[0], + setCardContent = _useState2[1]; + var useToken = theme.useToken; + var _useToken = useToken(), + token = _useToken.token; + var videoRef = useRef(null); + var selectedBorderStyle = { + border: "2px solid ".concat(token.colorPrimary), + boxShadow: " 0px 2px 9px 0px rgba(0,0,0,0.16)" + }; + var cardStyle = _objectSpread(_objectSpread({}, size === 'large' ? { + height: 931 + } : { + height: 456, + cursor: 'pointer' + }), size === 'small' && selectedWindowKey === windowKey ? selectedBorderStyle : {}); + var videoPlayerCardStyle = size === 'small' ? { + width: "calc(50% - 20px)" + } : { + flex: 1 + }; + useEffect(function () { + if (!isWindowLoading && (videoSrc || imgSrc)) { + var contentElement = null; + if (videoSrc) { + var _videoRef$current; + contentElement = /*#__PURE__*/React.createElement(VideoPlayer, { + ref: videoRef, + url: videoSrc + }); + (_videoRef$current = videoRef.current) === null || _videoRef$current === void 0 || _videoRef$current.setShowCrop(true); + } else if (imgSrc) { + contentElement = /*#__PURE__*/React.createElement("img", { + alt: "\u9996\u5E27\u56FE", + src: imgSrc, + style: { + width: "100%", + height: "100%", + display: 'block' + } + }); + } + setCardContent(contentElement); + } else { + setCardContent(null); + } + }, [showType, imgSrc, videoSrc, isWindowLoading]); + return /*#__PURE__*/React.createElement("div", { + className: componentName, + onClick: function onClick() { + handleWindowClick === null || handleWindowClick === void 0 || handleWindowClick(windowKey); + }, + style: videoPlayerCardStyle + }, /*#__PURE__*/React.createElement(Card, _extends({ + title: /*#__PURE__*/React.createElement(Space, { + style: { + width: "100%", + justifyContent: "space-between" + } + }, /*#__PURE__*/React.createElement("div", null, title), /*#__PURE__*/React.createElement("div", { + className: "card-close-button" + }, /*#__PURE__*/React.createElement(Button, { + type: "text", + onClick: function onClick() { + handleCloseButtonClick === null || handleCloseButtonClick === void 0 || handleCloseButtonClick(windowKey); + } + }, /*#__PURE__*/React.createElement(CloseOutlined, null)))), + style: _objectSpread({ + display: "flex", + flexDirection: "column", + borderRadius: 4, + overflow: "hidden" + }, cardStyle), + bodyStyle: { + flex: 1 + } + }, cardProps), cardContent ? /*#__PURE__*/React.createElement(React.Fragment, null, cardContent) : /*#__PURE__*/React.createElement("div", { + style: { + backgroundColor: '#000', + height: '100%', + display: 'flex', + padding: '20px', + boxSizing: 'border-box' + } + }, isWindowLoading ? /*#__PURE__*/React.createElement("div", { + style: { + flex: 1, + display: 'flex', + justifyContent: 'center', + alignItems: 'center' + } + }, /*#__PURE__*/React.createElement(Spin, { + indicator: /*#__PURE__*/React.createElement(LoadingOutlined, { + style: { + fontSize: 24 + } + }) + })) : !!errorReasonText && /*#__PURE__*/React.createElement("span", { + style: { + color: token.colorError + } + }, errorReasonText)))); +}; +export default VideoPlayerCard; \ No newline at end of file diff --git a/packages/biz/es/VideoPlayerCard/index.d.ts b/packages/biz/es/VideoPlayerCard/index.d.ts new file mode 100644 index 0000000..41afa58 --- /dev/null +++ b/packages/biz/es/VideoPlayerCard/index.d.ts @@ -0,0 +1,3 @@ +import VideoPlayerCard from './VideoPlayerCard'; +export type { VideoPlayerCardProps } from './VideoPlayerCard'; +export default VideoPlayerCard; diff --git a/packages/biz/es/VideoPlayerCard/index.js b/packages/biz/es/VideoPlayerCard/index.js new file mode 100644 index 0000000..4cb8f05 --- /dev/null +++ b/packages/biz/es/VideoPlayerCard/index.js @@ -0,0 +1,2 @@ +import VideoPlayerCard from "./VideoPlayerCard"; +export default VideoPlayerCard; \ No newline at end of file diff --git a/packages/biz/es/VideoPlayerCard/index.less b/packages/biz/es/VideoPlayerCard/index.less new file mode 100644 index 0000000..0f87e3e --- /dev/null +++ b/packages/biz/es/VideoPlayerCard/index.less @@ -0,0 +1,30 @@ +.zhst-biz-video-player-card { + .ant-card-head { + padding: 0 20px; + } + + .ant-card-body { + padding: 0; + overflow: hidden; + border-radius: 0; + + .zhst-image__video-view { + height: 100%; + } + } + + .card-close-button { + .ant-btn { + padding: 0 3px; + height: 22px; + color: #00000073; + } + + .ant-btn:hover { + padding: 0 3px; + height: 22px; + color: #000000e0; + } + } + +} \ No newline at end of file diff --git a/packages/biz/es/ViewLargerImageModal/ViewLargerImageModal.d.ts b/packages/biz/es/ViewLargerImageModal/ViewLargerImageModal.d.ts new file mode 100644 index 0000000..d82a52e --- /dev/null +++ b/packages/biz/es/ViewLargerImageModal/ViewLargerImageModal.d.ts @@ -0,0 +1,25 @@ +import React from 'react'; +import { ModalProps, SpaceProps } from 'antd'; +import './index.less'; +type ViewLargerImageModalParams = { + imgSrc?: string; + warningData?: { + label?: string; + value?: string; + }[]; +}; +export interface ViewLargerImageModalRef { + show: (params?: ViewLargerImageModalParams) => void; + handleCancel: () => void; +} +export interface ViewLargerImageModalProps { + imgStyle?: React.CSSProperties; + downloadImg?: (imgSrc?: string) => void; + title?: string; + downloadText?: string; + modalProps?: ModalProps; + spaceProps?: SpaceProps; +} +export declare const ViewLargerImageModal: React.ForwardRefExoticComponent>; +export default ViewLargerImageModal; +export declare const useViewLargerImageModal: () => React.RefObject; diff --git a/packages/biz/es/ViewLargerImageModal/ViewLargerImageModal.js b/packages/biz/es/ViewLargerImageModal/ViewLargerImageModal.js new file mode 100644 index 0000000..07638be --- /dev/null +++ b/packages/biz/es/ViewLargerImageModal/ViewLargerImageModal.js @@ -0,0 +1,106 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +import React, { useImperativeHandle, useRef, useState, forwardRef } from 'react'; +import { Modal, Space } from 'antd'; +import theme from 'antd/lib/theme'; +import { DownloadOutlined } from '@ant-design/icons'; +import "./index.less"; +export var ViewLargerImageModal = /*#__PURE__*/forwardRef(function (props, ref) { + var modalProps = props.modalProps, + downloadImg = props.downloadImg, + imgStyle = props.imgStyle, + _props$title = props.title, + title = _props$title === void 0 ? '预警大图' : _props$title, + _props$downloadText = props.downloadText, + downloadText = _props$downloadText === void 0 ? '下载大图' : _props$downloadText, + spaceProps = props.spaceProps; + var useToken = theme.useToken; + var _useToken = useToken(), + token = _useToken.token; + var _useState = useState(false), + _useState2 = _slicedToArray(_useState, 2), + open = _useState2[0], + setOpen = _useState2[1]; + var _useState3 = useState(), + _useState4 = _slicedToArray(_useState3, 2), + imgSrc = _useState4[0], + setImgSrc = _useState4[1]; + var _useState5 = useState(), + _useState6 = _slicedToArray(_useState5, 2), + warningData = _useState6[0], + setWarningData = _useState6[1]; + var handleCancel = function handleCancel() { + setOpen(false); + }; + useImperativeHandle(ref, function () { + return { + show: function show(_params) { + setOpen(true); + setImgSrc(_params === null || _params === void 0 ? void 0 : _params.imgSrc); + setWarningData(_params === null || _params === void 0 ? void 0 : _params.warningData); + }, + handleCancel: handleCancel + }; + }); + return /*#__PURE__*/React.createElement(Modal, _extends({ + className: "zhst-biz-view-warning-larger-image-modal", + open: open, + destroyOnClose: true, + title: title, + width: "1029px", + footer: null, + onCancel: handleCancel + }, modalProps), /*#__PURE__*/React.createElement(Space, _extends({ + size: 0, + styles: { + item: { + backgroundColor: '#F6F9FAFF' + } + } + }, spaceProps), /*#__PURE__*/React.createElement("img", { + alt: title, + src: imgSrc, + style: _objectSpread({ + width: 789, + height: 444, + display: 'block' + }, imgStyle) + }), /*#__PURE__*/React.createElement("div", { + className: "right-context" + }, warningData === null || warningData === void 0 ? void 0 : warningData.map(function (_ref) { + var label = _ref.label, + value = _ref.value; + return /*#__PURE__*/React.createElement("div", { + key: label + }, /*#__PURE__*/React.createElement("span", { + className: "context-key" + }, "".concat(label, ": ")), value); + }), imgSrc && downloadImg && /*#__PURE__*/React.createElement("div", { + className: "img-download", + style: { + color: token.colorPrimary + }, + onClick: function onClick() { + return downloadImg === null || downloadImg === void 0 ? void 0 : downloadImg(imgSrc); + } + }, /*#__PURE__*/React.createElement(DownloadOutlined, null), /*#__PURE__*/React.createElement("span", { + style: { + paddingLeft: 3 + } + }, downloadText))))); +}); +export default ViewLargerImageModal; +export var useViewLargerImageModal = function useViewLargerImageModal() { + return useRef(null); +}; \ No newline at end of file diff --git a/packages/biz/es/ViewLargerImageModal/index.d.ts b/packages/biz/es/ViewLargerImageModal/index.d.ts new file mode 100644 index 0000000..417e8be --- /dev/null +++ b/packages/biz/es/ViewLargerImageModal/index.d.ts @@ -0,0 +1,4 @@ +import ViewLargerImageModal, { useViewLargerImageModal } from './ViewLargerImageModal'; +export type { ViewLargerImageModalRef, ViewLargerImageModalProps } from './ViewLargerImageModal'; +export default ViewLargerImageModal; +export { useViewLargerImageModal }; diff --git a/packages/biz/es/ViewLargerImageModal/index.js b/packages/biz/es/ViewLargerImageModal/index.js new file mode 100644 index 0000000..baa9ea1 --- /dev/null +++ b/packages/biz/es/ViewLargerImageModal/index.js @@ -0,0 +1,3 @@ +import ViewLargerImageModal, { useViewLargerImageModal } from "./ViewLargerImageModal"; +export default ViewLargerImageModal; +export { useViewLargerImageModal }; \ No newline at end of file diff --git a/packages/biz/es/ViewLargerImageModal/index.less b/packages/biz/es/ViewLargerImageModal/index.less new file mode 100644 index 0000000..32363d0 --- /dev/null +++ b/packages/biz/es/ViewLargerImageModal/index.less @@ -0,0 +1,62 @@ +.zhst-biz-view-warning-larger-image-modal { + font-family: MicrosoftYaHei; + + .ant-modal-content { + padding: 0; + height: 492px; + border-radius: 6px; + overflow: hidden; + + .ant-modal-close { + top: 14px; + right: 16px; + } + + .ant-modal-header { + height: 48px; + line-height: 48px; + margin-bottom: 0; + + .ant-modal-title { + height: 100%; + line-height: 48px; + font-weight: bold; + padding-left: 20px; + } + } + + .ant-modal-body { + height: 444px; + + >div { + width: 100%; + height: 100%; + align-items: flex-start; + + >div:nth-child(2) { + position: relative; + flex: 1; + box-sizing: border-box; + height: 100%; + padding: 30px 16px; + + .right-context>div { + margin-bottom: 20px; + } + + .right-context .context-key { + font-weight: bold; + } + + .img-download { + position: absolute; + bottom: 0; + cursor: pointer; + } + + } + + } + } + } +} \ No newline at end of file diff --git a/packages/biz/es/WarningRecordCard/WarningRecordCard.d.ts b/packages/biz/es/WarningRecordCard/WarningRecordCard.d.ts new file mode 100644 index 0000000..966998b --- /dev/null +++ b/packages/biz/es/WarningRecordCard/WarningRecordCard.d.ts @@ -0,0 +1,30 @@ +import { CardProps } from 'antd'; +import React from 'react'; +import './index.less'; +export interface IRecord { + imgSrc?: string; + id?: string; + /** + * 预警类型 + */ + warningType?: string; + warningInfo?: string[]; + boxId: string; + position: string; + cabietId?: string; + cabietText?: string; + warningTime?: string; + warningTimestamp?: string | number; + warningTimeFormat?: string; +} +export interface WarningRecordCardProps { + record?: IRecord; + onRecordClick?: (record?: IRecord) => void; + style?: React.CSSProperties; + cardProps?: CardProps; + selectedRecordId?: string; + cardStyle?: React.CSSProperties; + imgStyle?: React.CSSProperties; +} +export declare const WarningRecordCard: React.FC; +export default WarningRecordCard; diff --git a/packages/biz/es/WarningRecordCard/WarningRecordCard.js b/packages/biz/es/WarningRecordCard/WarningRecordCard.js new file mode 100644 index 0000000..20a6f82 --- /dev/null +++ b/packages/biz/es/WarningRecordCard/WarningRecordCard.js @@ -0,0 +1,89 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +import { Card, Space, Divider } from 'antd'; +import { theme } from 'antd/lib'; +import React from 'react'; +import dayjs from 'dayjs'; +import "./index.less"; +; +; +export var WarningRecordCard = function WarningRecordCard(props) { + var componentName = "zhst-biz-warning-record-card"; + var record = props.record, + onRecordClick = props.onRecordClick, + style = props.style, + cardProps = props.cardProps, + selectedRecordId = props.selectedRecordId, + cardStyle = props.cardStyle, + imgStyle = props.imgStyle; + var _ref = record || {}, + imgSrc = _ref.imgSrc, + id = _ref.id, + warningType = _ref.warningType, + _ref$warningInfo = _ref.warningInfo, + warningInfo = _ref$warningInfo === void 0 ? [] : _ref$warningInfo, + cabietText = _ref.cabietText, + warningTime = _ref.warningTime, + warningTimestamp = _ref.warningTimestamp, + _ref$warningTimeForma = _ref.warningTimeFormat, + warningTimeFormat = _ref$warningTimeForma === void 0 ? 'YYYY-MM-DD HH:mm:ss' : _ref$warningTimeForma; + var formattedDate = warningTimestamp ? dayjs(warningTimestamp).format(warningTimeFormat) : ''; + var warningTimeShow = warningTime ? warningTime : formattedDate; + var useToken = theme.useToken; + var _useToken = useToken(), + token = _useToken.token; + var selectedBorderStyle = { + border: "2px solid ".concat(token.colorPrimary), + boxShadow: " 0px 2px 9px 0px rgba(0,0,0,0.16)" + }; + var selectedCardStyle = _objectSpread({}, selectedRecordId === (record === null || record === void 0 ? void 0 : record.id) ? selectedBorderStyle : {}); + var handleClick = function handleClick() { + onRecordClick === null || onRecordClick === void 0 || onRecordClick(record); + }; + return /*#__PURE__*/React.createElement("div", { + className: componentName, + key: id, + onClick: handleClick, + style: style + }, /*#__PURE__*/React.createElement(Card, _extends({ + cover: /*#__PURE__*/React.createElement("img", { + alt: "\u9884\u8B66\u56FE", + src: imgSrc, + style: _objectSpread({ + width: 336, + height: 203, + borderRadius: 0 + }, imgStyle) + }), + style: _objectSpread(_objectSpread({ + width: 356, + height: 302, + padding: 10, + borderRadius: 4 + }, selectedCardStyle), cardStyle) + }, cardProps), /*#__PURE__*/React.createElement("div", { + className: "left-context" + }, /*#__PURE__*/React.createElement("div", { + className: "warning-type" + }, warningType), /*#__PURE__*/React.createElement(Space, { + size: 0, + split: /*#__PURE__*/React.createElement(Divider, { + type: "vertical" + }) + }, warningInfo === null || warningInfo === void 0 ? void 0 : warningInfo.map(function (item, index) { + return /*#__PURE__*/React.createElement("div", { + key: index, + className: "info-item" + }, item); + })), /*#__PURE__*/React.createElement("div", { + className: "warning-time" + }, warningTimeShow)), /*#__PURE__*/React.createElement("div", { + className: "cabietInfo" + }, cabietText))); +}; +export default WarningRecordCard; \ No newline at end of file diff --git a/packages/biz/es/WarningRecordCard/index.d.ts b/packages/biz/es/WarningRecordCard/index.d.ts new file mode 100644 index 0000000..8b82d36 --- /dev/null +++ b/packages/biz/es/WarningRecordCard/index.d.ts @@ -0,0 +1,3 @@ +import WarningRecordCard from './WarningRecordCard'; +export type { IRecord, WarningRecordCardProps } from './WarningRecordCard'; +export default WarningRecordCard; diff --git a/packages/biz/es/WarningRecordCard/index.js b/packages/biz/es/WarningRecordCard/index.js new file mode 100644 index 0000000..36c3c58 --- /dev/null +++ b/packages/biz/es/WarningRecordCard/index.js @@ -0,0 +1,2 @@ +import WarningRecordCard from "./WarningRecordCard"; +export default WarningRecordCard; \ No newline at end of file diff --git a/packages/biz/es/WarningRecordCard/index.less b/packages/biz/es/WarningRecordCard/index.less new file mode 100644 index 0000000..7cfba38 --- /dev/null +++ b/packages/biz/es/WarningRecordCard/index.less @@ -0,0 +1,27 @@ +.zhst-biz-warning-record-card { + cursor: pointer; + + .ant-card-body { + padding: 0; + font-family: MicrosoftYaHei; + line-height: 19px; + display: flex; + margin-top: 10px; + + .left-context { + flex: 1; + + >div { + margin-top: 6px; + } + + >div:nth-child(1) { + margin-top: 0; + } + } + + .warning-type { + font-weight: bold; + } + } +} \ No newline at end of file diff --git a/packages/biz/es/boxSelectTree/boxSelectTree.d.ts b/packages/biz/es/boxSelectTree/boxSelectTree.d.ts new file mode 100644 index 0000000..0690e8f --- /dev/null +++ b/packages/biz/es/boxSelectTree/boxSelectTree.d.ts @@ -0,0 +1,9 @@ +import { FC } from 'react'; +import { TabsProps } from 'antd'; +import type { BoxPanelProps } from './components/boxPanel'; +export interface BoxSelectTreeProps extends BoxPanelProps { + onTabChange?: (e: any) => void; + tabsProps?: TabsProps; +} +declare const BoxSelectTree: FC; +export default BoxSelectTree; diff --git a/packages/biz/es/boxSelectTree/boxSelectTree.js b/packages/biz/es/boxSelectTree/boxSelectTree.js new file mode 100644 index 0000000..a08972a --- /dev/null +++ b/packages/biz/es/boxSelectTree/boxSelectTree.js @@ -0,0 +1,92 @@ +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +import React from 'react'; +import { Tabs } from 'antd'; +import BoxPanel from "./components/boxPanel"; +var BoxSelectTree = function BoxSelectTree(props) { + var data = props.data, + _props$boxDataSource = props.boxDataSource, + boxDataSource = _props$boxDataSource === void 0 ? [] : _props$boxDataSource, + onTabChange = props.onTabChange, + onSearch = props.onSearch, + onItemCheck = props.onItemCheck, + onItemSelect = props.onItemSelect, + onBoxBatchDelete = props.onBoxBatchDelete, + onBoxDelete = props.onBoxDelete, + onCreateSubmit = props.onCreateSubmit, + onClockClick = props.onClockClick, + onImport = props.onImport, + onCreate = props.onCreate, + tabsProps = props.tabsProps, + searchInputProps = props.searchInputProps, + treeProps = props.treeProps, + customImport = props.customImport, + showOptions = props.showOptions, + extraBtns = props.extraBtns; + var items = [{ + key: '1', + label: /*#__PURE__*/React.createElement("div", { + style: { + textAlign: 'center', + width: '160px' + } + }, "\u76D2\u5B50\u7EC4"), + children: /*#__PURE__*/React.createElement(BoxPanel, { + searchInputProps: searchInputProps, + boxDataSource: boxDataSource, + treeProps: treeProps, + data: data, + onCreate: onCreate, + onCreateSubmit: onCreateSubmit, + onBoxBatchDelete: onBoxBatchDelete, + onBoxDelete: onBoxDelete, + onSearch: onSearch, + onItemCheck: onItemCheck, + onItemSelect: onItemSelect, + showOptions: showOptions, + customImport: customImport, + extraBtns: extraBtns, + onClockClick: onClockClick, + onImport: onImport + }) + }, { + key: '2', + label: /*#__PURE__*/React.createElement("div", { + style: { + textAlign: 'center', + width: '160px' + } + }, "\u76D2\u5B50"), + children: /*#__PURE__*/React.createElement(BoxPanel, { + boxDataSource: boxDataSource, + searchInputProps: searchInputProps, + treeProps: treeProps, + data: data, + onCreate: onCreate, + onBoxBatchDelete: onBoxBatchDelete, + onCreateSubmit: onCreateSubmit, + onBoxDelete: onBoxDelete, + onSearch: onSearch, + onItemCheck: onItemCheck, + onItemSelect: onItemSelect, + showOptions: showOptions, + customImport: customImport, + extraBtns: extraBtns, + onClockClick: onClockClick, + onImport: onImport + }) + }]; + return /*#__PURE__*/React.createElement(Tabs, _extends({ + defaultActiveKey: "1", + centered: true, + items: items, + onChange: onTabChange, + tabBarGutter: 0, + indicator: { + size: function size(origin) { + return origin; + }, + align: 'center' + } + }, tabsProps)); +}; +export default BoxSelectTree; \ No newline at end of file diff --git a/packages/biz/es/boxSelectTree/components/boxPanel/index.d.ts b/packages/biz/es/boxSelectTree/components/boxPanel/index.d.ts new file mode 100644 index 0000000..21a551f --- /dev/null +++ b/packages/biz/es/boxSelectTree/components/boxPanel/index.d.ts @@ -0,0 +1,27 @@ +import { FC } from 'react'; +import { TreeDataNode } from 'antd'; +import { ModalFormProps } from '@ant-design/pro-components'; +import type { TreeProps, InputProps } from 'antd'; +import type { BoxTreeProps } from '../../../tree'; +export interface BoxPanelProps { + searchInputProps?: InputProps; + showOptions?: boolean; + treeProps?: Partial; + data: TreeDataNode[]; + boxDataSource: TreeDataNode[]; + handleImport?: () => void; + onSearch?: (e: any) => void; + onItemCheck?: TreeProps['onCheck']; + onItemSelect?: TreeProps['onSelect']; + onBoxBatchDelete?: (data?: any) => void; + onBoxDelete?: (data?: any) => void; + onCreateSubmit?: ModalFormProps['onFinish']; + onClockClick?: () => void; + onImport?: () => void; + onBatch?: () => void; + onCreate?: () => void; + customImport?: any; + extraBtns?: any; +} +declare const BoxPanel: FC; +export default BoxPanel; diff --git a/packages/biz/es/boxSelectTree/components/boxPanel/index.js b/packages/biz/es/boxSelectTree/components/boxPanel/index.js new file mode 100644 index 0000000..4e4a5fa --- /dev/null +++ b/packages/biz/es/boxSelectTree/components/boxPanel/index.js @@ -0,0 +1,292 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +import React, { useState, useRef } from 'react'; +import { Button, Divider, Input, Space } from 'antd'; +import { ModalForm, ProFormText } from '@ant-design/pro-components'; +import { ClockCircleOutlined, CloseCircleOutlined, DiffOutlined, FolderAddOutlined, ImportOutlined, SwitcherOutlined } from '@ant-design/icons'; +import TreeTransferModal from "../../../treeTransferModal"; +import BoxTree from "../../../tree"; +// import './index.less' + +var BoxPanel = function BoxPanel(props) { + var _createFormRef$curren4, _treeProps$checkedKey; + var searchInputProps = props.searchInputProps, + _props$showOptions = props.showOptions, + showOptions = _props$showOptions === void 0 ? true : _props$showOptions, + extraBtns = props.extraBtns, + _props$data = props.data, + data = _props$data === void 0 ? [] : _props$data, + onSearch = props.onSearch, + treeProps = props.treeProps, + onItemCheck = props.onItemCheck, + onItemSelect = props.onItemSelect, + onCreateSubmit = props.onCreateSubmit, + onBoxBatchDelete = props.onBoxBatchDelete, + onBoxDelete = props.onBoxDelete, + onClockClick = props.onClockClick, + onImport = props.onImport, + onBatch = props.onBatch, + onCreate = props.onCreate, + boxDataSource = props.boxDataSource, + customImport = props.customImport; + var _useState = useState(false), + _useState2 = _slicedToArray(_useState, 2), + isTreeCheckable = _useState2[0], + setIsTreeCheckable = _useState2[1]; + var _useState3 = useState([]), + _useState4 = _slicedToArray(_useState3, 2), + targetItems = _useState4[0], + setTargetItems = _useState4[1]; + var _useState5 = useState(false), + _useState6 = _slicedToArray(_useState5, 2), + boxChoiceOpen = _useState6[0], + setBoxChoiceOpen = _useState6[1]; + var _useState7 = useState([]), + _useState8 = _slicedToArray(_useState7, 2), + checkedKeys = _useState8[0], + setCheckedKeys = _useState8[1]; + var createFormRef = useRef(); + + /** + * 修改选择状态 + * @param _data + */ + var handleCheckable = function handleCheckable() { + setIsTreeCheckable(function (pre) { + return !pre; + }); + }; + var onTreeCheck = function onTreeCheck(keys, info) { + var _targetItems = []; + setCheckedKeys(keys); + info.checkedNodes.forEach(function (o) { + o.isLeaf && _targetItems.push(o); + }); + setTargetItems(_targetItems); + }; + + /** + * 删除 + * @param key + * @param param1 + */ + var onItemDelete = function onItemDelete(key, _ref) { + var keys = _ref.keys; + setCheckedKeys(function (pre) { + var newKeys = pre.filter(function (_key) { + return !keys.includes(_key); + }); + return newKeys; + }); + setTargetItems(function (pre) { + return pre.filter(function (o) { + return o.key !== key; + }); + }); + }; + + // 盒子点击确定 + var onBoxChoiceOk = /*#__PURE__*/function () { + var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(data) { + var _createFormRef$curren, _createFormRef$curren2, _createFormRef$curren3; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + (_createFormRef$curren = createFormRef.current) === null || _createFormRef$curren === void 0 || _createFormRef$curren.setFieldValue('boxList', data); + (_createFormRef$curren2 = createFormRef.current) === null || _createFormRef$curren2 === void 0 || _createFormRef$curren2.setFieldValue('boxName', 123); + console.log((_createFormRef$curren3 = createFormRef.current) === null || _createFormRef$curren3 === void 0 ? void 0 : _createFormRef$curren3.getFieldValue('boxList')); + setBoxChoiceOpen(false); + case 4: + case "end": + return _context.stop(); + } + }, _callee); + })); + return function onBoxChoiceOk(_x) { + return _ref2.apply(this, arguments); + }; + }(); + + // 盒子选择重置 + var onBoxChoiceReset = function onBoxChoiceReset() { + setCheckedKeys([]); + setTargetItems([]); + }; + return /*#__PURE__*/React.createElement("div", { + style: { + padding: '0 16px' + } + }, /*#__PURE__*/React.createElement(TreeTransferModal, { + open: boxChoiceOpen, + onCancel: function onCancel() { + return setBoxChoiceOpen(false); + }, + onRadioChange: function onRadioChange(e) { + return console.log('radio', e.target.value); + } // 顶部 radio 事件 + , + dataSource: boxDataSource // 数据源 + , + targetItems: targetItems // 右侧选中项 + , + checkedKeys: checkedKeys // 左侧选中 + , + onReset: onBoxChoiceReset // 重置按钮事件 + , + onOk: onBoxChoiceOk // 确定按钮事件 + , + onTreeCheck: onTreeCheck // 树check选中事件 + , + onItemDelete: onItemDelete // 右侧点击删除事件 + }), /*#__PURE__*/React.createElement(Space, { + size: 12, + direction: "vertical", + style: { + width: '100%' + } + }, /*#__PURE__*/React.createElement(Space, { + size: 4, + style: { + width: '100%', + justifyContent: 'space-between' + } + }, /*#__PURE__*/React.createElement(Input, _extends({ + size: "middle", + onChange: function onChange(e) { + return onSearch === null || onSearch === void 0 ? void 0 : onSearch(e); + }, + placeholder: "\u8BF7\u8F93\u5165\u76D2\u5B50\u540D\u79F0" + }, searchInputProps)), customImport || /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, { + type: "text", + onClick: function onClick() { + return (onBatch === null || onBatch === void 0 ? void 0 : onBatch()) || handleCheckable(); + }, + icon: isTreeCheckable ? /*#__PURE__*/React.createElement(SwitcherOutlined, null) : /*#__PURE__*/React.createElement(DiffOutlined, null) + }), /*#__PURE__*/React.createElement(Button, { + type: "text", + onClick: function onClick() { + return onClockClick === null || onClockClick === void 0 ? void 0 : onClockClick(); + }, + icon: /*#__PURE__*/React.createElement(ClockCircleOutlined, null) + }))), showOptions && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Space, { + align: "center" + }, /*#__PURE__*/React.createElement(Button, { + type: "text", + style: { + padding: '4px 8px' + }, + onClick: function onClick() { + return onImport === null || onImport === void 0 ? void 0 : onImport(); + }, + icon: /*#__PURE__*/React.createElement(ImportOutlined, null) + }, "\u5BFC\u5165\u76D2\u5B50"), /*#__PURE__*/React.createElement(Divider, { + type: "vertical", + style: { + margin: '8px 0' + } + }), onCreate ? /*#__PURE__*/React.createElement(Button, { + onClick: onCreate, + type: "text", + style: { + padding: '4px 8px' + }, + icon: /*#__PURE__*/React.createElement(FolderAddOutlined, null) + }, "\u65B0\u5EFA\u7EC4") : /*#__PURE__*/React.createElement(ModalForm, { + width: '600px', + open: onCreate ? false : undefined, + formRef: createFormRef, + title: "\u65B0\u5EFA\u7EC4", + modalProps: { + destroyOnClose: true + }, + layout: "horizontal", + labelCol: { + span: 6 + }, + wrapperCol: { + span: 18 + }, + trigger: /*#__PURE__*/React.createElement(Button, { + type: "text", + style: { + padding: '4px 8px' + }, + icon: /*#__PURE__*/React.createElement(FolderAddOutlined, null) + }, "\u65B0\u5EFA\u7EC4"), + submitter: { + searchConfig: { + submitText: '确定', + resetText: '取消' + } + }, + onFinish: onCreateSubmit + }, /*#__PURE__*/React.createElement(ProFormText, { + rules: [{ + required: true, + max: 20 + }, { + pattern: /^[^\s]*$/g, + message: '禁止输入空格' + }], + fieldProps: { + showCount: true + }, + width: "md", + name: "name", + label: "\u76D2\u5B50\u7EC4\u540D\u79F0", + placeholder: "\u8BF7\u8F93\u5165\u76D2\u5B50\u540D\u79F0" + }), /*#__PURE__*/React.createElement(ProFormText, { + width: "md", + name: "boxList", + label: "\u76D2\u5B50\u9009\u62E9", + fieldProps: { + readOnly: true, + value: "\u5DF2\u9009\u62E9".concat(((_createFormRef$curren4 = createFormRef.current) === null || _createFormRef$curren4 === void 0 || (_createFormRef$curren4 = _createFormRef$curren4.getFieldValue('boxList')) === null || _createFormRef$curren4 === void 0 ? void 0 : _createFormRef$curren4.length) || 0, "\u4E2A\u76D2\u5B50"), + suffix: /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement("a", { + onClick: function onClick() { + var _createFormRef$curren5; + (_createFormRef$curren5 = createFormRef.current) === null || _createFormRef$curren5 === void 0 || _createFormRef$curren5.setFieldValue('boxList', null); + onBoxChoiceReset(); + } + }, "\u6062\u590D\u9ED8\u8BA4"), /*#__PURE__*/React.createElement("a", { + onClick: function onClick() { + return setBoxChoiceOpen(true); + } + }, "\u8303\u56F4\u9009\u62E9")) + } + })), /*#__PURE__*/React.createElement(Divider, { + type: "vertical", + style: { + margin: '8px 0' + } + }), /*#__PURE__*/React.createElement(Button, { + danger: true, + type: "text", + style: { + padding: '4px 8px' + }, + icon: /*#__PURE__*/React.createElement(CloseCircleOutlined, null), + disabled: (treeProps === null || treeProps === void 0 || (_treeProps$checkedKey = treeProps.checkedKeys) === null || _treeProps$checkedKey === void 0 ? void 0 : _treeProps$checkedKey.length) <= 0, + onClick: onBoxBatchDelete + }, "\u5220\u9664")), /*#__PURE__*/React.createElement(Divider, { + style: { + margin: 0 + } + })), extraBtns, /*#__PURE__*/React.createElement(BoxTree, _extends({ + treeCheckable: isTreeCheckable, + data: data, + onItemSelect: onItemSelect, + onItemCheck: onItemCheck, + onItemDelete: onBoxDelete + }, treeProps)))); +}; +export default BoxPanel; \ No newline at end of file diff --git a/packages/biz/es/boxSelectTree/index.d.ts b/packages/biz/es/boxSelectTree/index.d.ts new file mode 100644 index 0000000..2ff0f1e --- /dev/null +++ b/packages/biz/es/boxSelectTree/index.d.ts @@ -0,0 +1,3 @@ +import BoxSelectTree from './boxSelectTree'; +export type { BoxSelectTreeProps } from './boxSelectTree'; +export default BoxSelectTree; diff --git a/packages/biz/es/boxSelectTree/index.js b/packages/biz/es/boxSelectTree/index.js new file mode 100644 index 0000000..c537873 --- /dev/null +++ b/packages/biz/es/boxSelectTree/index.js @@ -0,0 +1,2 @@ +import BoxSelectTree from "./boxSelectTree"; +export default BoxSelectTree; \ No newline at end of file diff --git a/packages/biz/es/boxSelectTree/mock.d.ts b/packages/biz/es/boxSelectTree/mock.d.ts new file mode 100644 index 0000000..84026eb --- /dev/null +++ b/packages/biz/es/boxSelectTree/mock.d.ts @@ -0,0 +1,2 @@ +import { TreeDataNode } from "antd"; +export declare const treeData: TreeDataNode[]; diff --git a/packages/biz/es/boxSelectTree/mock.js b/packages/biz/es/boxSelectTree/mock.js new file mode 100644 index 0000000..f05520b --- /dev/null +++ b/packages/biz/es/boxSelectTree/mock.js @@ -0,0 +1,22 @@ +export var treeData = [{ + title: '全部盒子', + key: '0-0', + children: [{ + title: '盒子组1', + key: '0-0-0', + children: [{ + title: '摄像头1', + key: '0-0-0-0' + }, { + title: '摄像头2', + key: '0-0-0-1' + }] + }, { + title: '盒子组2', + key: '0-0-1', + children: [{ + title: '摄像头4', + key: '0-0-1-0' + }] + }] +}]; \ No newline at end of file diff --git a/packages/biz/es/tree/boxTree.d.ts b/packages/biz/es/tree/boxTree.d.ts new file mode 100644 index 0000000..5e34aef --- /dev/null +++ b/packages/biz/es/tree/boxTree.d.ts @@ -0,0 +1,17 @@ +import { FC } from 'react'; +import { TreeDataNode, TreeProps } from 'antd'; +import './index.less'; +export interface BoxTreeProps extends TreeProps { + data: TreeDataNode[]; + treeCheckable?: boolean; + showItemOption?: boolean; + customOptions?: any; + onItemCheck?: TreeProps['onCheck']; + onItemSelect?: TreeProps['onSelect']; + onItemSetting?: (_data: any) => void; + onItemDelete?: (_data: any) => void; + onItemRename?: (_nodeData: any) => void; + onItemRenameFinish?: (_data: any, _nodeData: any) => Promise; +} +declare const boxTree: FC; +export default boxTree; diff --git a/packages/biz/es/tree/boxTree.js b/packages/biz/es/tree/boxTree.js new file mode 100644 index 0000000..e9e44cb --- /dev/null +++ b/packages/biz/es/tree/boxTree.js @@ -0,0 +1,134 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +import React, { useState } from 'react'; +import { Tree, Badge, Space } from 'antd'; +import theme from 'antd/es/theme'; +import { CloseOutlined, EditOutlined, SettingOutlined } from '@ant-design/icons'; +import { ModalForm, ProFormText } from '@ant-design/pro-components'; +import "./index.less"; +var componentName = 'zhst-biz-tree'; +var useToken = theme.useToken; +var boxTree = function boxTree(props) { + var onItemSelect = props.onItemSelect, + onItemCheck = props.onItemCheck, + onItemSetting = props.onItemSetting, + onItemDelete = props.onItemDelete, + _props$data = props.data, + data = _props$data === void 0 ? [] : _props$data, + _props$showItemOption = props.showItemOption, + showItemOption = _props$showItemOption === void 0 ? true : _props$showItemOption, + _props$treeCheckable = props.treeCheckable, + treeCheckable = _props$treeCheckable === void 0 ? false : _props$treeCheckable, + onItemRename = props.onItemRename, + onItemRenameFinish = props.onItemRenameFinish, + customOptions = props.customOptions; + var _useToken = useToken(), + token = _useToken.token; + var _useState = useState(''), + _useState2 = _slicedToArray(_useState, 2), + checkedItem = _useState2[0], + setCheckedItem = _useState2[1]; + var cameraStatus = new Map([['0', 'error'], ['1', 'success'], ['3', 'processing'], ['4', 'default']]); + return /*#__PURE__*/React.createElement(Tree, _extends({ + checkable: treeCheckable, + blockNode: true, + onSelect: function onSelect(selectedKeys, info) { + setCheckedItem(selectedKeys[0]); + onItemSelect === null || onItemSelect === void 0 || onItemSelect(selectedKeys, info); + }, + onCheck: onItemCheck, + treeData: data, + titleRender: function titleRender(_nodeData) { + return /*#__PURE__*/React.createElement("div", { + className: "".concat(componentName, "-item-render") + }, !_nodeData.children && _nodeData.isCamera && /*#__PURE__*/React.createElement(Badge, { + style: { + marginRight: '6px' + }, + status: cameraStatus.get(_nodeData.status || '4') + }), /*#__PURE__*/React.createElement("span", { + // @ts-ignore + style: checkedItem === _nodeData.key && _nodeData.isCamera ? { + color: token.colorPrimary + } : {} + }, _nodeData.title), showItemOption && /*#__PURE__*/React.createElement(Space, { + className: "".concat(componentName, "-item-render_right"), + style: { + float: 'right' + } + }, customOptions || /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ModalForm, { + title: "\u91CD\u547D\u540D", + width: 600, + modalProps: { + destroyOnClose: true + }, + layout: "horizontal", + labelCol: { + span: 6 + }, + wrapperCol: { + span: 18 + }, + trigger: /*#__PURE__*/React.createElement(EditOutlined, { + onClick: function onClick(e) { + e.preventDefault(); + e.stopPropagation(); + onItemRename === null || onItemRename === void 0 || onItemRename(_nodeData); + } + }), + submitter: { + searchConfig: { + submitText: '确定', + resetText: '取消' + } + }, + onFinish: ( /*#__PURE__*/function () { + var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(value) { + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + return _context.abrupt("return", onItemRenameFinish === null || onItemRenameFinish === void 0 ? void 0 : onItemRenameFinish(value, _nodeData)); + case 1: + case "end": + return _context.stop(); + } + }, _callee); + })); + return function (_x) { + return _ref.apply(this, arguments); + }; + }()) + }, /*#__PURE__*/React.createElement(ProFormText, { + rules: [{ + required: true + }], + width: "md", + name: "name", + label: "\u76D2\u5B50\u540D\u79F0", + placeholder: "\u8BF7\u8F93\u5165\u76D2\u5B50\u540D\u79F0" + })), /*#__PURE__*/React.createElement(SettingOutlined, { + onClick: function onClick(e) { + e.preventDefault(); + e.stopPropagation(); + onItemSetting === null || onItemSetting === void 0 || onItemSetting(_nodeData); + } + }), /*#__PURE__*/React.createElement(CloseOutlined, { + onClick: function onClick(e) { + e.preventDefault(); + e.stopPropagation(); + onItemDelete === null || onItemDelete === void 0 || onItemDelete(_nodeData); + } + })))); + } + }, props)); +}; +export default boxTree; \ No newline at end of file diff --git a/packages/biz/es/tree/index.d.ts b/packages/biz/es/tree/index.d.ts new file mode 100644 index 0000000..4082eb0 --- /dev/null +++ b/packages/biz/es/tree/index.d.ts @@ -0,0 +1,13 @@ +import { TreeDataNode } from 'antd'; +import BoxTree from './boxTree'; +export interface TreeData extends TreeDataNode { + children?: TreeDataNode['children'] & { + isCamera?: boolean; + /** + * 0-失败 1-成功 2-进行中 3-未知 + */ + status?: '0' | '1' | '2' | '3'; + }[]; +} +export type { BoxTreeProps } from './boxTree'; +export default BoxTree; diff --git a/packages/biz/es/tree/index.js b/packages/biz/es/tree/index.js new file mode 100644 index 0000000..23238e5 --- /dev/null +++ b/packages/biz/es/tree/index.js @@ -0,0 +1,2 @@ +import BoxTree from "./boxTree"; +export default BoxTree; \ No newline at end of file diff --git a/packages/biz/es/tree/index.less b/packages/biz/es/tree/index.less new file mode 100644 index 0000000..9da4e2d --- /dev/null +++ b/packages/biz/es/tree/index.less @@ -0,0 +1,9 @@ +.zhst-biz-tree-item-render { + &_right { + display: none; + } + + &:hover &_right { + display: inline-flex; + } +} diff --git a/packages/biz/es/treeTransfer/TreeTransfer.d.ts b/packages/biz/es/treeTransfer/TreeTransfer.d.ts new file mode 100644 index 0000000..e9b6b3f --- /dev/null +++ b/packages/biz/es/treeTransfer/TreeTransfer.d.ts @@ -0,0 +1,20 @@ +import React from 'react'; +import { TransferProps, TreeDataNode, TreeProps } from 'antd'; +import './index.less'; +export interface TreeTransferProps { + dataSource: TreeDataNode[]; + treeProps?: TreeProps; + targetItems: TreeDataNode[]; + checkedKeys: string[]; + onTreeSelect?: TreeProps['onSelect']; + onTreeCheck?: TreeProps['onCheck']; + onItemDelete?: (key: string, info?: { + root: TreeDataNode[]; + keys: string[]; + }) => void; + onChange?: TransferProps['onChange']; + onOk?: (data: any) => void; + onReset?: () => void; +} +declare const TreeTransfer: React.FC; +export default TreeTransfer; diff --git a/packages/biz/es/treeTransfer/TreeTransfer.js b/packages/biz/es/treeTransfer/TreeTransfer.js new file mode 100644 index 0000000..51b8c35 --- /dev/null +++ b/packages/biz/es/treeTransfer/TreeTransfer.js @@ -0,0 +1,142 @@ +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +import React, { useState } from 'react'; +import { Button, Card, Flex, Input, Tree } from 'antd'; +import theme from 'antd/es/theme'; +import "./index.less"; +import { DeleteOutlined, DoubleRightOutlined, SearchOutlined } from '@ant-design/icons'; +import { getAllRootKeyById } from "./treeTransferHelper"; +var componentName = 'zhst-biz-treeTransfer'; +var useToken = theme.useToken; +var TreeTransfer = function TreeTransfer(_ref) { + var dataSource = _ref.dataSource, + treeProps = _ref.treeProps, + _ref$targetItems = _ref.targetItems, + targetItems = _ref$targetItems === void 0 ? [] : _ref$targetItems, + _ref$checkedKeys = _ref.checkedKeys, + checkedKeys = _ref$checkedKeys === void 0 ? [] : _ref$checkedKeys, + onTreeCheck = _ref.onTreeCheck, + onTreeSelect = _ref.onTreeSelect, + onItemDelete = _ref.onItemDelete, + onOk = _ref.onOk, + onReset = _ref.onReset; + var _useToken = useToken(), + token = _useToken.token; + var _useState = useState(''), + _useState2 = _slicedToArray(_useState, 2), + keyWords = _useState2[0], + setKeyWords = _useState2[1]; + function findNodesWithKeyword(_keyWords, _treeData) { + // @ts-ignore + function dfs(node) { + return node.filter(function (item) { + return item.title.includes(_keyWords); + }); + } + var data = dfs(_treeData); + return data || []; + } + return /*#__PURE__*/React.createElement(Flex, { + gap: 20, + className: componentName, + align: "center", + justify: "center" + }, /*#__PURE__*/React.createElement("div", { + className: "".concat(componentName, "-left") + }, /*#__PURE__*/React.createElement(Card, { + className: "".concat(componentName, "-left_card"), + title: /*#__PURE__*/React.createElement("div", { + style: { + textAlign: 'center' + } + }, "\u53EF\u9009\u62E9\u7684\u8303\u56F4"), + bodyStyle: { + padding: 12 + } + }, /*#__PURE__*/React.createElement(Input, { + prefix: /*#__PURE__*/React.createElement(SearchOutlined, null), + onChange: function onChange(e) { + return setKeyWords(e.target.value); + }, + placeholder: "\u8BF7\u8F93\u5165\u8BBE\u5907\u540D\u79F0" + }), /*#__PURE__*/React.createElement(Tree, _extends({ + style: { + marginTop: '6px' + }, + height: 420, + blockNode: true, + checkable: true, + checkedKeys: checkedKeys, + treeData: findNodesWithKeyword(keyWords, dataSource), + onCheck: function onCheck(keys, info) { + return onTreeCheck === null || onTreeCheck === void 0 ? void 0 : onTreeCheck(keys, info); + }, + onSelect: function onSelect(keys, info) { + return onTreeSelect === null || onTreeSelect === void 0 ? void 0 : onTreeSelect(keys, info); + } + }, treeProps)))), /*#__PURE__*/React.createElement(DoubleRightOutlined, null), /*#__PURE__*/React.createElement("div", { + className: "".concat(componentName, "-right") + }, /*#__PURE__*/React.createElement(Card, { + className: "".concat(componentName, "-right_card"), + title: /*#__PURE__*/React.createElement("div", { + style: { + textAlign: 'center' + } + }, "\u5DF2\u9009\u62E9\u7684\u8303\u56F4"), + bodyStyle: { + padding: 0 + } + }, /*#__PURE__*/React.createElement("div", { + className: "".concat(componentName, "-right_card__items") + }, targetItems.map(function (item) { + return /*#__PURE__*/React.createElement("div", { + className: "".concat(componentName, "-right_card__items___item"), + key: item.key, + onMouseEnter: function onMouseEnter(e) { + e.target.style.backgroundColor = token.colorPrimaryBg; + e.target.style.color = token.colorPrimary; + }, + onMouseLeave: function onMouseLeave(e) { + e.target.style.color = token.colorText; + e.target.style.backgroundColor = null; + } + }, item.title, /*#__PURE__*/React.createElement("div", { + style: { + float: 'right' + } + }, /*#__PURE__*/React.createElement(DeleteOutlined, { + onClick: function onClick() { + var _getAllRootKeyById = getAllRootKeyById(item.key, dataSource), + root = _getAllRootKeyById.root, + keys = _getAllRootKeyById.keys; + onItemDelete === null || onItemDelete === void 0 || onItemDelete(item.key, { + root: root, + keys: keys + }); + } + }))); + })), /*#__PURE__*/React.createElement(Flex, { + className: "".concat(componentName, "-right_card__btns") + }, /*#__PURE__*/React.createElement(Button, { + style: { + marginRight: 8, + width: '50%' + }, + disabled: targetItems.length <= 0, + onClick: onReset + }, "\u91CD\u7F6E"), /*#__PURE__*/React.createElement(Button, { + style: { + width: '50%' + }, + type: "primary", + onClick: function onClick() { + return onOk === null || onOk === void 0 ? void 0 : onOk(targetItems); + } + }, "\u786E\u5B9A"))))); +}; +export default TreeTransfer; \ No newline at end of file diff --git a/packages/biz/es/treeTransfer/index.d.ts b/packages/biz/es/treeTransfer/index.d.ts new file mode 100644 index 0000000..7ea5c47 --- /dev/null +++ b/packages/biz/es/treeTransfer/index.d.ts @@ -0,0 +1,4 @@ +import TreeTransfer from "./TreeTransfer"; +export type { TreeTransferProps } from './TreeTransfer'; +export * from './treeTransferHelper'; +export default TreeTransfer; diff --git a/packages/biz/es/treeTransfer/index.js b/packages/biz/es/treeTransfer/index.js new file mode 100644 index 0000000..153880e --- /dev/null +++ b/packages/biz/es/treeTransfer/index.js @@ -0,0 +1,3 @@ +import TreeTransfer from "./TreeTransfer"; +export * from "./treeTransferHelper"; +export default TreeTransfer; \ No newline at end of file diff --git a/packages/biz/es/treeTransfer/index.less b/packages/biz/es/treeTransfer/index.less new file mode 100644 index 0000000..9ffe8cd --- /dev/null +++ b/packages/biz/es/treeTransfer/index.less @@ -0,0 +1,43 @@ +.zhst-biz-treeTransfer { + &-left { + &_card { + width: 500px; + height: 522px; + background-color: #FCFCFC; + } + } + + &-right { + &_card { + width: 300px; + height: 522px; + background-color: #FCFCFC; + + &__items { + padding: 8px 4px; + overflow: scroll; + + &::-webkit-scrollbar { + display: none; + } + + &___item { + margin: 0; + padding: 4px 12px; + cursor: pointer; + } + } + + &__btns { + width: 100%; + padding: 8px; + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%); + box-sizing: border-box; + border-top: 1px solid #f0f0f0; + } + } + } +} diff --git a/packages/biz/es/treeTransfer/treeTransferHelper.d.ts b/packages/biz/es/treeTransfer/treeTransferHelper.d.ts new file mode 100644 index 0000000..705684c --- /dev/null +++ b/packages/biz/es/treeTransfer/treeTransferHelper.d.ts @@ -0,0 +1,12 @@ +export declare const isChecked: (selectedKeys: React.Key[], eventKey: React.Key) => boolean; +/** + * 通过子元素找到父级节点 + * @param objects + * @param element + * @returns + */ +export declare const findParentByChild: (objects: any[], propertyValue: string | number, propertyKey?: string) => any; +export declare const getAllRootKeyById: (val: string | number, list: any[], key?: string) => { + root: any; + keys: any[]; +}; diff --git a/packages/biz/es/treeTransfer/treeTransferHelper.js b/packages/biz/es/treeTransfer/treeTransferHelper.js new file mode 100644 index 0000000..efaf6d8 --- /dev/null +++ b/packages/biz/es/treeTransfer/treeTransferHelper.js @@ -0,0 +1,57 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +export var isChecked = function isChecked(selectedKeys, eventKey) { + return selectedKeys.includes(eventKey); +}; +function isObject(value) { + return value !== null && _typeof(value) === 'object' && !Array.isArray(value); +} + +/** + * 通过子元素找到父级节点 + * @param objects + * @param element + * @returns + */ +export var findParentByChild = function findParentByChild(objects, propertyValue) { + var propertyKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'key'; + for (var i = 0; i < objects.length; i++) { + var obj = objects[i]; + if (obj[propertyKey] === propertyValue) { + return obj; + } else if (_typeof(obj) === 'object') { + var found = findParentByChild(Object.values(obj), propertyValue); + if (found) { + return obj; + } + } + } + return null; // 如果找不到包含具有指定属性的子对象的父对象,返回 null +}; +export var getAllRootKeyById = function getAllRootKeyById(val, list) { + var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'key'; + var keys = []; + var findParentByChild = function findParentByChild(propertyValue, objects, propertyKey) { + for (var i = 0; i < objects.length; i++) { + var obj = objects[i]; + if (obj[propertyKey] === propertyValue) { + console.log('obj', obj); + return obj; + } else if (_typeof(obj) === 'object') { + var found = findParentByChild(propertyValue, Object.values(obj), propertyKey); + if (found) { + if (isObject(found)) { + keys.push(found.key); + } + return obj; + } + } + } + return null; // 如果找不到包含具有指定属性的子对象的父对象,返回 null + }; + var data = findParentByChild(val, list, key); + data.key && keys.push(data.key); + return { + root: data, + keys: keys + }; +}; \ No newline at end of file diff --git a/packages/biz/es/treeTransferModal/TreeTransferModal.d.ts b/packages/biz/es/treeTransferModal/TreeTransferModal.d.ts new file mode 100644 index 0000000..e0a0d0e --- /dev/null +++ b/packages/biz/es/treeTransferModal/TreeTransferModal.d.ts @@ -0,0 +1,26 @@ +import { FC } from 'react'; +import { ModalProps, RadioGroupProps, SelectProps, TransferProps, TreeDataNode, TreeProps } from 'antd'; +export interface TreeTransferModalProps { + dataSource: TreeDataNode[]; + treeProps?: TreeProps; + targetItems: TreeDataNode[]; + checkedKeys: string[]; + onTreeSelect?: TreeProps['onSelect']; + onTreeCheck?: TreeProps['onCheck']; + onItemDelete?: (key: string, info?: { + root: TreeDataNode[]; + keys: string[]; + }) => void; + onChange?: TransferProps['onChange']; + onOk?: (data: any) => void; + onReset?: () => void; + open?: boolean; + onCancel?: ModalProps['onCancel']; + onRadioChange?: RadioGroupProps['onChange']; + onSelect?: SelectProps['onSelect']; + modalProps?: ModalProps; + radioProps?: RadioGroupProps; + selectProps?: SelectProps; +} +declare const TreeTransferModal: FC; +export default TreeTransferModal; diff --git a/packages/biz/es/treeTransferModal/TreeTransferModal.js b/packages/biz/es/treeTransferModal/TreeTransferModal.js new file mode 100644 index 0000000..5580038 --- /dev/null +++ b/packages/biz/es/treeTransferModal/TreeTransferModal.js @@ -0,0 +1,80 @@ +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +import React, { useState } from 'react'; +import { Modal, Radio, Select } from 'antd'; +import TreeTransfer from "../treeTransfer"; +import { ALL_LIST, BOX_TYPE_LIST } from "../utils/constants"; +var TreeTransferModal = function TreeTransferModal(props) { + var open = props.open, + _props$dataSource = props.dataSource, + dataSource = _props$dataSource === void 0 ? [] : _props$dataSource, + checkedKeys = props.checkedKeys, + onItemDelete = props.onItemDelete, + onOk = props.onOk, + onCancel = props.onCancel, + onReset = props.onReset, + onRadioChange = props.onRadioChange, + onTreeCheck = props.onTreeCheck, + onSelect = props.onSelect, + targetItems = props.targetItems, + modalProps = props.modalProps, + radioProps = props.radioProps, + selectProps = props.selectProps; + var _useState = useState('1'), + _useState2 = _slicedToArray(_useState, 2), + type = _useState2[0], + setType = _useState2[1]; + return /*#__PURE__*/React.createElement(Modal, _extends({ + open: open, + destroyOnClose: true, + title: "\u7EDF\u8BA1\u70B9\u4F4D", + width: "948px", + footer: null, + onCancel: onCancel + }, modalProps), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Radio.Group, _extends({ + onChange: function onChange(e) { + setType(e.target.value); + onRadioChange === null || onRadioChange === void 0 || onRadioChange(e); + }, + style: { + marginLeft: '24px', + padding: '20px 0' + }, + value: type, + options: BOX_TYPE_LIST + }, radioProps)), /*#__PURE__*/React.createElement(Select, _extends({ + defaultValue: '', + style: { + marginLeft: 200, + width: 150 + }, + options: ALL_LIST, + onSelect: onSelect + }, selectProps))), type === 'box' ? /*#__PURE__*/React.createElement(TreeTransfer, { + dataSource: dataSource, + targetItems: targetItems, + checkedKeys: checkedKeys, + onTreeCheck: onTreeCheck, + onItemDelete: onItemDelete, + onOk: onOk, + onReset: onReset + }) : /*#__PURE__*/React.createElement(TreeTransfer, { + dataSource: dataSource, + targetItems: targetItems, + checkedKeys: checkedKeys, + onTreeCheck: onTreeCheck, + onItemDelete: onItemDelete, + onOk: onOk, + onReset: onReset + }), /*#__PURE__*/React.createElement("p", { + style: { + textAlign: 'right' + } + }, "\u5DF2\u9009\u4E2D", targetItems.length, "\u4E2A\u70B9\u4F4D"))); +}; +export default TreeTransferModal; \ No newline at end of file diff --git a/packages/biz/es/treeTransferModal/index.d.ts b/packages/biz/es/treeTransferModal/index.d.ts new file mode 100644 index 0000000..8e5245a --- /dev/null +++ b/packages/biz/es/treeTransferModal/index.d.ts @@ -0,0 +1,3 @@ +import TreeTransferModal from './TreeTransferModal'; +export type { TreeTransferModalProps } from './TreeTransferModal'; +export default TreeTransferModal; diff --git a/packages/biz/es/treeTransferModal/index.js b/packages/biz/es/treeTransferModal/index.js new file mode 100644 index 0000000..3c464e7 --- /dev/null +++ b/packages/biz/es/treeTransferModal/index.js @@ -0,0 +1,2 @@ +import TreeTransferModal from "./TreeTransferModal"; +export default TreeTransferModal; \ No newline at end of file diff --git a/packages/biz/lib/BigImageModal/BigImageModal.d.ts b/packages/biz/lib/BigImageModal/BigImageModal.d.ts new file mode 100644 index 0000000..ae5e46d --- /dev/null +++ b/packages/biz/lib/BigImageModal/BigImageModal.d.ts @@ -0,0 +1,40 @@ +import React from 'react'; +import type { ModalProps, DescriptionsProps, TabsProps, VideoViewRef, ImgViewRef } from '@zhst/meta'; +import './index.less'; +export declare const componentPrefix = "zhst-image"; +export type TAB_TYPE = 'COMPATER' | 'NORMAL' | 'VIDEO'; +export type MODEL_TYPE = 'VIDEO' | 'IMAGE'; +export interface BigImageModalProps extends ModalProps { + visible: boolean; + activeTab?: TAB_TYPE; + attributeList: { + title: string; + children: Pick; + }; + tabs: { + data: Pick & { + key: TAB_TYPE; + }; + }; + dataSource: any; + imageData: any; + relatedData: any; + isRelated?: boolean; + footer?: React.ReactNode; + showCarousel?: boolean; + onTabChange?: (newVal?: TAB_TYPE, oldVal?: TAB_TYPE) => void; + onIndexChange?: (newVal?: number, oldVal?: number) => void; + transformPropFunc: (data: any) => void; +} +interface BigModalRef { + tab: TAB_TYPE; + setTab: (tab: TAB_TYPE) => void; + modalRef: ModalProps; + activeKey: string; + setActiveKey: (val: string) => void; + videoPlayerRef: VideoViewRef; + combineImageRef: any; + bigImagePreviewRef: ImgViewRef; +} +declare const BigImageModal: React.FC; +export default BigImageModal; diff --git a/packages/biz/lib/BigImageModal/components/CombineImage/index.d.ts b/packages/biz/lib/BigImageModal/components/CombineImage/index.d.ts new file mode 100644 index 0000000..19dbaa2 --- /dev/null +++ b/packages/biz/lib/BigImageModal/components/CombineImage/index.d.ts @@ -0,0 +1,11 @@ +import { FC } from 'react'; +interface ComBineImageProps { + data: { + imgSummary: string; + compaterImages: string[]; + imageKey: string; + score: number; + }; +} +declare const ComBineImage: FC; +export default ComBineImage; diff --git a/packages/biz/lib/BigImageModal/components/CombineImage/index.js b/packages/biz/lib/BigImageModal/components/CombineImage/index.js new file mode 100644 index 0000000..aa5aca2 --- /dev/null +++ b/packages/biz/lib/BigImageModal/components/CombineImage/index.js @@ -0,0 +1,71 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/BigImageModal/components/CombineImage/index.tsx +var CombineImage_exports = {}; +__export(CombineImage_exports, { + default: () => CombineImage_default +}); +module.exports = __toCommonJS(CombineImage_exports); +var import_react = __toESM(require("react")); +var import_meta = require("@zhst/meta"); +var ComBineImage = (0, import_react.forwardRef)((props, ref) => { + const { data } = props; + const { imgSummary, compaterImages = [] } = data; + const targetImageRef = (0, import_react.useRef)(null); + const compareImageRef = (0, import_react.useRef)(null); + const [targetIndex, setTargetIndex] = (0, import_react.useState)(compaterImages.findIndex((_url) => imgSummary === _url) || 0); + (0, import_react.useImperativeHandle)(ref, () => ({ + compareImageRef, + targetImageRef + })); + return /* @__PURE__ */ import_react.default.createElement(import_meta.Flex, { justify: "space-evenly", align: "center", style: { padding: "0 32px" } }, /* @__PURE__ */ import_react.default.createElement( + import_meta.CompareImage, + { + ref: targetImageRef, + preDisable: targetIndex === 0, + nextDisable: targetIndex >= compaterImages.length - 1, + onNext: () => setTargetIndex(targetIndex + 1), + onPre: () => setTargetIndex(targetIndex - 1), + showScore: false, + openRoll: !!compaterImages.length, + url: compaterImages[targetIndex] || imgSummary, + label: "目标图" + } + ), /* @__PURE__ */ import_react.default.createElement(import_meta.Score, { score: data.score }), /* @__PURE__ */ import_react.default.createElement( + import_meta.CompareImage, + { + ref: compareImageRef, + url: data.imageKey, + openRoll: false, + score: data.score, + label: "对比图" + } + )); +}); +var CombineImage_default = ComBineImage; diff --git a/packages/biz/lib/BigImageModal/components/navigation/index.d.ts b/packages/biz/lib/BigImageModal/components/navigation/index.d.ts new file mode 100644 index 0000000..78b1ca8 --- /dev/null +++ b/packages/biz/lib/BigImageModal/components/navigation/index.d.ts @@ -0,0 +1,13 @@ +import * as React from 'react'; +import './index.less'; +declare const Navigation: React.FC<{ + show?: boolean; + onClick?: React.MouseEventHandler; + prev?: boolean; + next?: boolean; + disabled?: boolean; + className?: string; + color?: string; + hoverColor?: string; +}>; +export default Navigation; diff --git a/packages/biz/lib/BigImageModal/mock.d.ts b/packages/biz/lib/BigImageModal/mock.d.ts new file mode 100644 index 0000000..68ff4e3 --- /dev/null +++ b/packages/biz/lib/BigImageModal/mock.d.ts @@ -0,0 +1,245 @@ +export declare const IMAGE_DATA: { + enAbleDeleteFeature: boolean; + tabsFilter: string[]; + selectIndex: number; + disableBtn: number[]; + dataSource: { + objectId: string; + condition: { + featureInfo: null; + featureData: string; + imageData: string; + alg: string; + rect: { + x: number; + y: number; + w: number; + h: number; + }; + objectImageUrl: string; + srcImageUrl: string; + }; + score: number; + timestamp: number; + deviceId: string; + id: string; + name: string; + dirid: string; + status: string; + longitude: number; + latitude: number; + caseId: string; + caseGroup: string; + isDeleted: string; + objectIndex: { + objectId: string; + solutionId: string; + deviceId: string; + fragmentId: string; + }; + objectType: string; + isObjectTrack: boolean; + pathId: string; + frameInfo: { + frameId: string; + frameTimestamp: string; + width: number; + height: number; + originWidth: number; + originHeight: number; + offsetTime: string; + skipNumber: string; + }; + level: number; + bboxInFrame: { + x: number; + y: number; + w: number; + h: number; + }; + bboxExtInFrame: { + x: number; + y: number; + w: number; + h: number; + }; + objectImageKey: string; + objectExtImageKey: string; + frameImageKey: string; + confidence: number; + sourceObjectId: string; + storeTimestamp: string; + gbNumber: string; + qualityScore: number; + subObjectCount: number; + subObjectType: string[]; + subObjectIds: string[]; + solutionId: string; + fragmentId: string; + contrastKey: string; + compaterImages: string[]; + imgSummary: string; + imageKey: string; + srcImageUrl: string; + algorithmVersion: string; + cameraId: string; + cameraName: string; + }[]; + isArchiveDetail: boolean; + ToolProps: { + renderVideoBtn: boolean; + disableVideo: boolean; + }; + specialTitle: string; +}; +export declare const BIG_IMAGE_DATA: ({ + imageKey: string; + imgSummary: string; + flvUrl: string; + compaterImages: string[]; + odRect: { + x: number; + y: number; + w: number; + h: number; + }; + attachImg: { + url: string; + label: string; + }[]; + score: string; + showScore: boolean; + cameraPosition: string; + time: string; + objects: { + objectIndex: { + objectId: string; + solutionId: string; + deviceId: string; + fragmentId: string; + }; + objectType: string; + sourceObjectId: string; + level: number; + confidence: number; + frameInfo: { + frameId: string; + frameTimestamp: string; + width: number; + height: number; + originWidth: number; + originHeight: number; + offsetTime: string; + skipNumber: string; + }; + infoOnSource: { + bboxInFrame: { + bboxRatio: { + x: number; + y: number; + w: number; + h: number; + }; + }; + countInSource: number; + indexInSource: number; + }; + qualityScore: number; + }[]; +} | { + imageKey: string; + imgSummary: string; + odRect: { + x: number; + y: number; + w: number; + h: number; + }; + attachImg: { + url: string; + label: string; + }[]; + flvUrl: string; + score: number; + showScore: boolean; + cameraPosition: string; + time: string; + objects: ({ + objectIndex: { + objectId: string; + solutionId: string; + deviceId: string; + fragmentId: string; + }; + objectType: string; + sourceObjectId: string; + frameInfo: { + frameId: string; + frameTimestamp: string; + width: number; + height: number; + originWidth: number; + originHeight: number; + offsetTime: string; + skipNumber: string; + }; + infoOnSource: { + bboxInFrame: { + bboxRatio: { + x: number; + y: number; + w: number; + h: number; + }; + }; + countInSource: number; + indexInSource: number; + }; + qualityScore: number; + level?: undefined; + confidence?: undefined; + } | { + objectIndex: { + objectId: string; + solutionId: string; + deviceId: string; + fragmentId: string; + }; + objectType: string; + sourceObjectId: string; + level: number; + confidence: number; + frameInfo: { + frameId: string; + frameTimestamp: string; + width: number; + height: number; + originWidth: number; + originHeight: number; + offsetTime: string; + skipNumber: string; + }; + infoOnSource: { + bboxInFrame: { + bboxRatio: { + x: number; + y: number; + w: number; + h: number; + }; + }; + countInSource: number; + indexInSource: number; + }; + qualityScore: number; + })[]; + compaterImages?: undefined; +})[]; +export declare const attributeList: { + title: string; + children: { + key: string; + label: string; + children: string; + }[]; +}[]; diff --git a/packages/biz/lib/BigImageModal/util/bigImageModalAdapter.d.ts b/packages/biz/lib/BigImageModal/util/bigImageModalAdapter.d.ts new file mode 100644 index 0000000..185982d --- /dev/null +++ b/packages/biz/lib/BigImageModal/util/bigImageModalAdapter.d.ts @@ -0,0 +1,118 @@ +/** + * 适配老的大屏组件数据格式传入 + */ +import React from 'react'; +import { AlgorithmVersionStr, HumanProperty, ObjectType, Rect } 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 { + 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; + attributeList: { + label: string; + list: any[]; + }[]; + archiveImages?: any; + spaceName: string; + objectIndex?: { + deviceId: string; + fragmentId: string; + objectId: string; + solutionId: string; + }; + objectType: ObjectType; + objectId: string; + bodyObjectId?: string; + faceObjectId?: string; + sourceObjectId?: string; + 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; +} +export interface ImageModalDataProps { + targetData: BigImageData[]; + compactData: BigImageData[]; +} +export interface ModalAdapterConfigProps { + oldMode?: boolean; +} +/** + * 大图组件适配器,兼容老接口 + * @param Cmp 大图组件 + * @param config 额外配置 + * @returns 大图组件 + */ +declare const adapter: (Cmp: any, config: ModalAdapterConfigProps) => any; +export default adapter; diff --git a/packages/biz/lib/BigImageModal/util/bigImageModalAdapter.js b/packages/biz/lib/BigImageModal/util/bigImageModalAdapter.js new file mode 100644 index 0000000..cc45b23 --- /dev/null +++ b/packages/biz/lib/BigImageModal/util/bigImageModalAdapter.js @@ -0,0 +1,57 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/BigImageModal/util/bigImageModalAdapter.tsx +var bigImageModalAdapter_exports = {}; +__export(bigImageModalAdapter_exports, { + default: () => bigImageModalAdapter_default +}); +module.exports = __toCommonJS(bigImageModalAdapter_exports); +var import_react = __toESM(require("react")); +var translateOldImageData = (_data) => { + return { + ..._data, + open: _data.visible, + onCancel: _data.onClose + }; +}; +var adapter = (Cmp, config) => { + const { oldMode = false } = config; + return (props) => { + const newProps = oldMode ? translateOldImageData(props) : props; + console.log("adapter----适配数据", props, newProps); + delete newProps.visible; + return /* @__PURE__ */ import_react.default.createElement( + Cmp, + { + ...newProps + } + ); + }; +}; +var bigImageModalAdapter_default = adapter; diff --git a/packages/biz/lib/Demo/index.d.ts b/packages/biz/lib/Demo/index.d.ts new file mode 100644 index 0000000..bcc157c --- /dev/null +++ b/packages/biz/lib/Demo/index.d.ts @@ -0,0 +1,3 @@ +import React from 'react'; +declare const _default: () => React.JSX.Element; +export default _default; diff --git a/packages/biz/lib/RealTimeMonitor/RealTimeMonitor.d.ts b/packages/biz/lib/RealTimeMonitor/RealTimeMonitor.d.ts new file mode 100644 index 0000000..a3f147f --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/RealTimeMonitor.d.ts @@ -0,0 +1,21 @@ +import React from 'react'; +import { IRecord, VideoPlayerCardProps, ViewLargerImageModalRef } from '@zhst/biz'; +interface RealTimeMonitorProps { + videoDataSource?: VideoPlayerCardProps[]; + handleWindowClick?: (key?: string) => void; + handleCloseButtonClick?: (key?: string) => void; + selectedWindowKey?: string; + warningDataSource?: IRecord[]; + viewLargerImageModalRef?: React.RefObject; + handleDownloadImg?: (imgSrc?: string) => void; + onRecordClick?: (record?: IRecord) => void; + selectedRecordId?: string; + isRecordListLoading?: boolean; + recordListTitle?: string; + style?: React.CSSProperties; + cardStyle?: React.CSSProperties; + imgStyle?: React.CSSProperties; + largeImageTitle?: string; +} +export declare const RealTimeMonitor: React.FC; +export default RealTimeMonitor; diff --git a/packages/biz/lib/RealTimeMonitor/RealTimeMonitor.js b/packages/biz/lib/RealTimeMonitor/RealTimeMonitor.js new file mode 100644 index 0000000..48ad4dc --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/RealTimeMonitor.js @@ -0,0 +1,77 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/RealTimeMonitor/RealTimeMonitor.tsx +var RealTimeMonitor_exports = {}; +__export(RealTimeMonitor_exports, { + RealTimeMonitor: () => RealTimeMonitor, + default: () => RealTimeMonitor_default +}); +module.exports = __toCommonJS(RealTimeMonitor_exports); +var import_react = __toESM(require("react")); +var import_WindowToggle = __toESM(require("./components/WindowToggle")); +var import_WarningRecordList = __toESM(require("./components/WarningRecordList")); +var RealTimeMonitor = (props) => { + const { + videoDataSource, + handleWindowClick, + handleCloseButtonClick, + selectedWindowKey, + warningDataSource, + viewLargerImageModalRef, + handleDownloadImg, + onRecordClick, + selectedRecordId, + isRecordListLoading + } = props; + return /* @__PURE__ */ import_react.default.createElement("div", { className: "zhst-biz-real-time-monitor", style: { display: "flex" } }, /* @__PURE__ */ import_react.default.createElement( + import_WindowToggle.default, + { + selectedWindowKey, + dataSource: videoDataSource, + handleWindowClick, + handleCloseButtonClick + } + ), /* @__PURE__ */ import_react.default.createElement( + import_WarningRecordList.default, + { + dataSource: warningDataSource, + handleDownloadImg, + onRecordClick, + selectedRecordId, + viewLargerImageModalRef, + isRecordListLoading, + recordListTitle: "监控预警记录" + } + )); +}; +var RealTimeMonitor_default = RealTimeMonitor; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + RealTimeMonitor +}); diff --git a/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/WarningRecordList.d.ts b/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/WarningRecordList.d.ts new file mode 100644 index 0000000..6489299 --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/WarningRecordList.d.ts @@ -0,0 +1,18 @@ +import React from 'react'; +import { IRecord, ViewLargerImageModalRef } from '@zhst/biz'; +import "./index.less"; +interface WarningRecordListProps { + dataSource?: IRecord[]; + viewLargerImageModalRef?: React.RefObject; + handleDownloadImg?: (imgSrc?: string) => void; + onRecordClick?: (record?: IRecord) => void; + selectedRecordId?: string; + isRecordListLoading?: boolean; + recordListTitle?: string; + style?: React.CSSProperties; + cardStyle?: React.CSSProperties; + imgStyle?: React.CSSProperties; + largeImageTitle?: string; +} +declare const WarningRecordList: React.FC; +export default WarningRecordList; diff --git a/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/WarningRecordList.js b/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/WarningRecordList.js new file mode 100644 index 0000000..a2441e3 --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/WarningRecordList.js @@ -0,0 +1,74 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/RealTimeMonitor/components/WarningRecordList/WarningRecordList.tsx +var WarningRecordList_exports = {}; +__export(WarningRecordList_exports, { + default: () => WarningRecordList_default +}); +module.exports = __toCommonJS(WarningRecordList_exports); +var import_react = __toESM(require("react")); +var import_biz = require("@zhst/biz"); +var import_antd = require("antd"); +var import_index = require("./index.less"); +var import_icons = require("@ant-design/icons"); +var WarningRecordList = (props) => { + const { + dataSource = [], + viewLargerImageModalRef, + selectedRecordId, + handleDownloadImg, + onRecordClick, + isRecordListLoading, + recordListTitle, + style, + cardStyle, + imgStyle, + largeImageTitle + } = props; + return /* @__PURE__ */ import_react.default.createElement("div", { className: "zhst-biz-warning-record-list", style }, /* @__PURE__ */ import_react.default.createElement("div", { className: "header" }, recordListTitle), /* @__PURE__ */ import_react.default.createElement("div", { className: "body" }, isRecordListLoading ? /* @__PURE__ */ import_react.default.createElement("div", { style: { height: "100%", display: "flex", justifyContent: "center", alignItems: "center" } }, /* @__PURE__ */ import_react.default.createElement(import_antd.Spin, { indicator: /* @__PURE__ */ import_react.default.createElement(import_icons.LoadingOutlined, { style: { fontSize: 24 } }) })) : (dataSource == null ? void 0 : dataSource.length) > 0 ? /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { direction: "vertical", size: 10 }, dataSource == null ? void 0 : dataSource.map( + (record, index) => { + if (index > 2) + return; + return /* @__PURE__ */ import_react.default.createElement( + import_biz.WarningRecordCard, + { + key: record == null ? void 0 : record.id, + record, + onRecordClick: (record2) => { + onRecordClick == null ? void 0 : onRecordClick(record2); + }, + selectedRecordId, + cardStyle: { width: 300, height: 264, ...cardStyle }, + imgStyle: { width: 280, height: 169, ...imgStyle } + } + ); + } + )) : /* @__PURE__ */ import_react.default.createElement("div", { style: { height: "100%", display: "flex", justifyContent: "center", alignItems: "center" } }, /* @__PURE__ */ import_react.default.createElement(import_antd.Empty, { description: "暂无数据" }))), /* @__PURE__ */ import_react.default.createElement(import_biz.ViewLargerImageModal, { ref: viewLargerImageModalRef, downloadImg: handleDownloadImg, title: largeImageTitle })); +}; +var WarningRecordList_default = WarningRecordList; diff --git a/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/index.d.ts b/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/index.d.ts new file mode 100644 index 0000000..b50da75 --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/index.d.ts @@ -0,0 +1,2 @@ +import WarningRecordList from './WarningRecordList'; +export default WarningRecordList; diff --git a/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/index.js b/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/index.js new file mode 100644 index 0000000..6f47b77 --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/RealTimeMonitor/components/WarningRecordList/index.tsx +var WarningRecordList_exports = {}; +__export(WarningRecordList_exports, { + default: () => WarningRecordList_default +}); +module.exports = __toCommonJS(WarningRecordList_exports); +var import_WarningRecordList = __toESM(require("./WarningRecordList")); +var WarningRecordList_default = import_WarningRecordList.default; diff --git a/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/index.less b/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/index.less new file mode 100644 index 0000000..e348f82 --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/components/WarningRecordList/index.less @@ -0,0 +1,20 @@ +.zhst-biz-warning-record-list { + display: flex; + flex-direction: column; + border-left: solid 1px #00000026; + width: 320px; + + .header { + width: 100%; + height: 48px; + background-color: #EFF2F4; + padding: 10px 20px; + box-sizing: border-box; + } + + .body { + padding: 10px; + overflow: hidden; + flex: 1; + } +} \ No newline at end of file diff --git a/packages/biz/lib/RealTimeMonitor/components/WindowToggle/WindowToggle.d.ts b/packages/biz/lib/RealTimeMonitor/components/WindowToggle/WindowToggle.d.ts new file mode 100644 index 0000000..c67b407 --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/components/WindowToggle/WindowToggle.d.ts @@ -0,0 +1,11 @@ +import React from 'react'; +import { VideoPlayerCardProps } from '@zhst/biz'; +import './index.less'; +interface WindowToggleProps { + dataSource?: VideoPlayerCardProps[]; + handleWindowClick?: (key?: string) => void; + handleCloseButtonClick?: (key?: string) => void; + selectedWindowKey?: string; +} +export declare const WindowToggle: React.FC; +export default WindowToggle; diff --git a/packages/biz/lib/RealTimeMonitor/components/WindowToggle/WindowToggle.js b/packages/biz/lib/RealTimeMonitor/components/WindowToggle/WindowToggle.js new file mode 100644 index 0000000..ccd71ed --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/components/WindowToggle/WindowToggle.js @@ -0,0 +1,88 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/RealTimeMonitor/components/WindowToggle/WindowToggle.tsx +var WindowToggle_exports = {}; +__export(WindowToggle_exports, { + WindowToggle: () => WindowToggle, + default: () => WindowToggle_default +}); +module.exports = __toCommonJS(WindowToggle_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var import_icons = require("@ant-design/icons"); +var import_biz = require("@zhst/biz"); +var import_index = require("./index.less"); +var import_lib = require("antd/lib"); +var WindowToggle = (props) => { + const { dataSource = [], handleWindowClick, handleCloseButtonClick, selectedWindowKey } = props; + const [size, setSize] = (0, import_react.useState)("large"); + const { useToken } = import_lib.theme; + const { token } = useToken(); + const getLabelStyle = (isSelected) => ({ + padding: "0 11px", + background: "#fff", + ...isSelected ? { background: token.colorPrimary, color: "#fff" } : {} + }); + return /* @__PURE__ */ import_react.default.createElement("div", { className: "zhst-biz-window-toggle" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "header" }, /* @__PURE__ */ import_react.default.createElement( + import_antd.Segmented, + { + defaultValue: "large", + options: [ + { value: "large", label: /* @__PURE__ */ import_react.default.createElement("div", { style: getLabelStyle(size === "large") }, /* @__PURE__ */ import_react.default.createElement(import_icons.BarsOutlined, null)) }, + { value: "small", label: /* @__PURE__ */ import_react.default.createElement("div", { style: getLabelStyle(size === "small") }, /* @__PURE__ */ import_react.default.createElement(import_icons.AppstoreOutlined, null)) } + ], + onChange: (value) => { + if (value === "large" && dataSource.length > 0) { + const { windowKey } = dataSource[0]; + handleWindowClick == null ? void 0 : handleWindowClick(windowKey); + } + setSize(value); + } + } + )), /* @__PURE__ */ import_react.default.createElement("div", { className: "body" }, dataSource == null ? void 0 : dataSource.map((item, index) => { + if (size === "large" && index > 0) + return; + return /* @__PURE__ */ import_react.default.createElement( + import_biz.VideoPlayerCard, + { + key: item.windowKey, + selectedWindowKey, + size, + ...item, + handleWindowClick, + handleCloseButtonClick + } + ); + }))); +}; +var WindowToggle_default = WindowToggle; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + WindowToggle +}); diff --git a/packages/biz/lib/RealTimeMonitor/components/WindowToggle/index.d.ts b/packages/biz/lib/RealTimeMonitor/components/WindowToggle/index.d.ts new file mode 100644 index 0000000..3b57a45 --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/components/WindowToggle/index.d.ts @@ -0,0 +1,2 @@ +import WindowToggle from './WindowToggle'; +export default WindowToggle; diff --git a/packages/biz/lib/RealTimeMonitor/components/WindowToggle/index.js b/packages/biz/lib/RealTimeMonitor/components/WindowToggle/index.js new file mode 100644 index 0000000..9f8c4b6 --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/components/WindowToggle/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/RealTimeMonitor/components/WindowToggle/index.tsx +var WindowToggle_exports = {}; +__export(WindowToggle_exports, { + default: () => WindowToggle_default +}); +module.exports = __toCommonJS(WindowToggle_exports); +var import_WindowToggle = __toESM(require("./WindowToggle")); +var WindowToggle_default = import_WindowToggle.default; diff --git a/packages/biz/lib/RealTimeMonitor/components/WindowToggle/index.less b/packages/biz/lib/RealTimeMonitor/components/WindowToggle/index.less new file mode 100644 index 0000000..61c77bd --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/components/WindowToggle/index.less @@ -0,0 +1,45 @@ +.zhst-biz-window-toggle { + display: flex; + flex-direction: column; + flex: 1; + + .header { + width: 100%; + height: 48px; + background-color: #EFF2F4; + padding: 10px 20px; + box-sizing: border-box; + + .ant-segmented { + padding: 0; + + .ant-segmented-group { + border-radius: 4px; + overflow: hidden; + + .ant-segmented-item { + border-radius: 0; + + .ant-segmented-item-label { + padding: 0; + } + } + } + } + } + + .body { + flex: 1; + width: 100%; + background-color: #E5EAEC; + padding: 10px; + box-sizing: border-box; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + + >div { + margin: 10px; + } + } +} \ No newline at end of file diff --git a/packages/biz/lib/RealTimeMonitor/index.d.ts b/packages/biz/lib/RealTimeMonitor/index.d.ts new file mode 100644 index 0000000..9013d29 --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/index.d.ts @@ -0,0 +1,2 @@ +import RealTimeMonitor from './RealTimeMonitor'; +export default RealTimeMonitor; diff --git a/packages/biz/lib/RealTimeMonitor/index.js b/packages/biz/lib/RealTimeMonitor/index.js new file mode 100644 index 0000000..041c33e --- /dev/null +++ b/packages/biz/lib/RealTimeMonitor/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/RealTimeMonitor/index.tsx +var RealTimeMonitor_exports = {}; +__export(RealTimeMonitor_exports, { + default: () => RealTimeMonitor_default +}); +module.exports = __toCommonJS(RealTimeMonitor_exports); +var import_RealTimeMonitor = __toESM(require("./RealTimeMonitor")); +var RealTimeMonitor_default = import_RealTimeMonitor.default; diff --git a/packages/biz/lib/VideoPlayerCard/VideoPlayerCard.d.ts b/packages/biz/lib/VideoPlayerCard/VideoPlayerCard.d.ts new file mode 100644 index 0000000..cd1775e --- /dev/null +++ b/packages/biz/lib/VideoPlayerCard/VideoPlayerCard.d.ts @@ -0,0 +1,19 @@ +import { CardProps } from 'antd'; +import React, { ReactNode } from 'react'; +import './index.less'; +export interface VideoPlayerCardProps { + windowKey?: string; + selectedWindowKey?: string; + showType?: 'video' | "image"; + imgSrc?: string; + videoSrc?: string; + cardProps?: CardProps; + errorReasonText?: string; + isWindowLoading?: boolean; + size?: 'large' | 'small'; + title?: string | ReactNode; + handleCloseButtonClick?: (key?: string) => void; + handleWindowClick?: (key?: string) => void; +} +export declare const VideoPlayerCard: React.FC; +export default VideoPlayerCard; diff --git a/packages/biz/lib/VideoPlayerCard/VideoPlayerCard.js b/packages/biz/lib/VideoPlayerCard/VideoPlayerCard.js new file mode 100644 index 0000000..8dae8f4 --- /dev/null +++ b/packages/biz/lib/VideoPlayerCard/VideoPlayerCard.js @@ -0,0 +1,99 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/VideoPlayerCard/VideoPlayerCard.tsx +var VideoPlayerCard_exports = {}; +__export(VideoPlayerCard_exports, { + VideoPlayerCard: () => VideoPlayerCard, + default: () => VideoPlayerCard_default +}); +module.exports = __toCommonJS(VideoPlayerCard_exports); +var import_antd = require("antd"); +var import_lib = require("antd/lib"); +var import_meta = require("@zhst/meta"); +var import_react = __toESM(require("react")); +var import_icons = require("@ant-design/icons"); +var import_index = require("./index.less"); +var VideoPlayerCard = (props) => { + const componentName = `zhst-biz-video-player-card`; + const { showType, imgSrc, videoSrc, cardProps, isWindowLoading, errorReasonText, size, title, handleCloseButtonClick, handleWindowClick, windowKey, selectedWindowKey = "" } = props; + const [cardContent, setCardContent] = (0, import_react.useState)(null); + const { useToken } = import_lib.theme; + const { token } = useToken(); + const videoRef = (0, import_react.useRef)(null); + const selectedBorderStyle = { + border: `2px solid ${token.colorPrimary}`, + boxShadow: " 0px 2px 9px 0px rgba(0,0,0,0.16)" + }; + const cardStyle = { + ...size === "large" ? { height: 931 } : { height: 456, cursor: "pointer" }, + ...size === "small" && selectedWindowKey === windowKey ? selectedBorderStyle : {} + }; + const videoPlayerCardStyle = size === "small" ? { width: "calc(50% - 20px)" } : { flex: 1 }; + (0, import_react.useEffect)(() => { + var _a; + if (!isWindowLoading && (videoSrc || imgSrc)) { + let contentElement = null; + if (videoSrc) { + contentElement = /* @__PURE__ */ import_react.default.createElement(import_meta.VideoPlayer, { ref: videoRef, url: videoSrc }); + (_a = videoRef.current) == null ? void 0 : _a.setShowCrop(true); + } else if (imgSrc) { + contentElement = /* @__PURE__ */ import_react.default.createElement( + "img", + { + alt: "首帧图", + src: imgSrc, + style: { width: "100%", height: "100%", display: "block" } + } + ); + } + setCardContent(contentElement); + } else { + setCardContent(null); + } + }, [showType, imgSrc, videoSrc, isWindowLoading]); + return /* @__PURE__ */ import_react.default.createElement("div", { className: componentName, onClick: () => { + handleWindowClick == null ? void 0 : handleWindowClick(windowKey); + }, style: videoPlayerCardStyle }, /* @__PURE__ */ import_react.default.createElement( + import_antd.Card, + { + title: /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { style: { width: "100%", justifyContent: "space-between" } }, /* @__PURE__ */ import_react.default.createElement("div", null, title), /* @__PURE__ */ import_react.default.createElement("div", { className: "card-close-button" }, /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { type: "text", onClick: () => { + handleCloseButtonClick == null ? void 0 : handleCloseButtonClick(windowKey); + } }, /* @__PURE__ */ import_react.default.createElement(import_icons.CloseOutlined, null)))), + style: { display: "flex", flexDirection: "column", borderRadius: 4, overflow: "hidden", ...cardStyle }, + bodyStyle: { flex: 1 }, + ...cardProps + }, + cardContent ? /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, cardContent) : /* @__PURE__ */ import_react.default.createElement("div", { style: { backgroundColor: "#000", height: "100%", display: "flex", padding: "20px", boxSizing: "border-box" } }, isWindowLoading ? /* @__PURE__ */ import_react.default.createElement("div", { style: { flex: 1, display: "flex", justifyContent: "center", alignItems: "center" } }, /* @__PURE__ */ import_react.default.createElement(import_antd.Spin, { indicator: /* @__PURE__ */ import_react.default.createElement(import_icons.LoadingOutlined, { style: { fontSize: 24 } }) })) : !!errorReasonText && /* @__PURE__ */ import_react.default.createElement("span", { style: { color: token.colorError } }, errorReasonText)) + )); +}; +var VideoPlayerCard_default = VideoPlayerCard; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + VideoPlayerCard +}); diff --git a/packages/biz/lib/VideoPlayerCard/index.d.ts b/packages/biz/lib/VideoPlayerCard/index.d.ts new file mode 100644 index 0000000..41afa58 --- /dev/null +++ b/packages/biz/lib/VideoPlayerCard/index.d.ts @@ -0,0 +1,3 @@ +import VideoPlayerCard from './VideoPlayerCard'; +export type { VideoPlayerCardProps } from './VideoPlayerCard'; +export default VideoPlayerCard; diff --git a/packages/biz/lib/VideoPlayerCard/index.js b/packages/biz/lib/VideoPlayerCard/index.js new file mode 100644 index 0000000..7810d71 --- /dev/null +++ b/packages/biz/lib/VideoPlayerCard/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/VideoPlayerCard/index.tsx +var VideoPlayerCard_exports = {}; +__export(VideoPlayerCard_exports, { + default: () => VideoPlayerCard_default +}); +module.exports = __toCommonJS(VideoPlayerCard_exports); +var import_VideoPlayerCard = __toESM(require("./VideoPlayerCard")); +var VideoPlayerCard_default = import_VideoPlayerCard.default; diff --git a/packages/biz/lib/VideoPlayerCard/index.less b/packages/biz/lib/VideoPlayerCard/index.less new file mode 100644 index 0000000..0f87e3e --- /dev/null +++ b/packages/biz/lib/VideoPlayerCard/index.less @@ -0,0 +1,30 @@ +.zhst-biz-video-player-card { + .ant-card-head { + padding: 0 20px; + } + + .ant-card-body { + padding: 0; + overflow: hidden; + border-radius: 0; + + .zhst-image__video-view { + height: 100%; + } + } + + .card-close-button { + .ant-btn { + padding: 0 3px; + height: 22px; + color: #00000073; + } + + .ant-btn:hover { + padding: 0 3px; + height: 22px; + color: #000000e0; + } + } + +} \ No newline at end of file diff --git a/packages/biz/lib/ViewLargerImageModal/ViewLargerImageModal.d.ts b/packages/biz/lib/ViewLargerImageModal/ViewLargerImageModal.d.ts new file mode 100644 index 0000000..d82a52e --- /dev/null +++ b/packages/biz/lib/ViewLargerImageModal/ViewLargerImageModal.d.ts @@ -0,0 +1,25 @@ +import React from 'react'; +import { ModalProps, SpaceProps } from 'antd'; +import './index.less'; +type ViewLargerImageModalParams = { + imgSrc?: string; + warningData?: { + label?: string; + value?: string; + }[]; +}; +export interface ViewLargerImageModalRef { + show: (params?: ViewLargerImageModalParams) => void; + handleCancel: () => void; +} +export interface ViewLargerImageModalProps { + imgStyle?: React.CSSProperties; + downloadImg?: (imgSrc?: string) => void; + title?: string; + downloadText?: string; + modalProps?: ModalProps; + spaceProps?: SpaceProps; +} +export declare const ViewLargerImageModal: React.ForwardRefExoticComponent>; +export default ViewLargerImageModal; +export declare const useViewLargerImageModal: () => React.RefObject; diff --git a/packages/biz/lib/ViewLargerImageModal/ViewLargerImageModal.js b/packages/biz/lib/ViewLargerImageModal/ViewLargerImageModal.js new file mode 100644 index 0000000..9d5ef6f --- /dev/null +++ b/packages/biz/lib/ViewLargerImageModal/ViewLargerImageModal.js @@ -0,0 +1,87 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/ViewLargerImageModal/ViewLargerImageModal.tsx +var ViewLargerImageModal_exports = {}; +__export(ViewLargerImageModal_exports, { + ViewLargerImageModal: () => ViewLargerImageModal, + default: () => ViewLargerImageModal_default, + useViewLargerImageModal: () => useViewLargerImageModal +}); +module.exports = __toCommonJS(ViewLargerImageModal_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var import_theme = __toESM(require("antd/lib/theme")); +var import_icons = require("@ant-design/icons"); +var import_index = require("./index.less"); +var ViewLargerImageModal = (0, import_react.forwardRef)( + (props, ref) => { + const { modalProps, downloadImg, imgStyle, title = "预警大图", downloadText = "下载大图", spaceProps } = props; + const { useToken } = import_theme.default; + const { token } = useToken(); + const [open, setOpen] = (0, import_react.useState)(false); + const [imgSrc, setImgSrc] = (0, import_react.useState)(); + const [warningData, setWarningData] = (0, import_react.useState)(); + const handleCancel = () => { + setOpen(false); + }; + (0, import_react.useImperativeHandle)(ref, () => { + return { + show: (_params) => { + setOpen(true); + setImgSrc(_params == null ? void 0 : _params.imgSrc); + setWarningData(_params == null ? void 0 : _params.warningData); + }, + handleCancel + }; + }); + return /* @__PURE__ */ import_react.default.createElement( + import_antd.Modal, + { + className: "zhst-biz-view-warning-larger-image-modal", + open, + destroyOnClose: true, + title, + width: "1029px", + footer: null, + onCancel: handleCancel, + ...modalProps + }, + /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { size: 0, styles: { item: { backgroundColor: "#F6F9FAFF" } }, ...spaceProps }, /* @__PURE__ */ import_react.default.createElement("img", { alt: title, src: imgSrc, style: { width: 789, height: 444, display: "block", ...imgStyle } }), /* @__PURE__ */ import_react.default.createElement("div", { className: "right-context" }, warningData == null ? void 0 : warningData.map(({ label, value }) => /* @__PURE__ */ import_react.default.createElement("div", { key: label }, /* @__PURE__ */ import_react.default.createElement("span", { className: "context-key" }, `${label}: `), value)), imgSrc && downloadImg && /* @__PURE__ */ import_react.default.createElement("div", { className: "img-download", style: { color: token.colorPrimary }, onClick: () => downloadImg == null ? void 0 : downloadImg(imgSrc) }, /* @__PURE__ */ import_react.default.createElement(import_icons.DownloadOutlined, null), /* @__PURE__ */ import_react.default.createElement("span", { style: { paddingLeft: 3 } }, downloadText)))) + ); + } +); +var ViewLargerImageModal_default = ViewLargerImageModal; +var useViewLargerImageModal = () => { + return (0, import_react.useRef)(null); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + ViewLargerImageModal, + useViewLargerImageModal +}); diff --git a/packages/biz/lib/ViewLargerImageModal/index.d.ts b/packages/biz/lib/ViewLargerImageModal/index.d.ts new file mode 100644 index 0000000..417e8be --- /dev/null +++ b/packages/biz/lib/ViewLargerImageModal/index.d.ts @@ -0,0 +1,4 @@ +import ViewLargerImageModal, { useViewLargerImageModal } from './ViewLargerImageModal'; +export type { ViewLargerImageModalRef, ViewLargerImageModalProps } from './ViewLargerImageModal'; +export default ViewLargerImageModal; +export { useViewLargerImageModal }; diff --git a/packages/biz/lib/ViewLargerImageModal/index.js b/packages/biz/lib/ViewLargerImageModal/index.js new file mode 100644 index 0000000..936db94 --- /dev/null +++ b/packages/biz/lib/ViewLargerImageModal/index.js @@ -0,0 +1,41 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/ViewLargerImageModal/index.tsx +var ViewLargerImageModal_exports = {}; +__export(ViewLargerImageModal_exports, { + default: () => ViewLargerImageModal_default, + useViewLargerImageModal: () => import_ViewLargerImageModal.useViewLargerImageModal +}); +module.exports = __toCommonJS(ViewLargerImageModal_exports); +var import_ViewLargerImageModal = __toESM(require("./ViewLargerImageModal")); +var ViewLargerImageModal_default = import_ViewLargerImageModal.default; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + useViewLargerImageModal +}); diff --git a/packages/biz/lib/ViewLargerImageModal/index.less b/packages/biz/lib/ViewLargerImageModal/index.less new file mode 100644 index 0000000..32363d0 --- /dev/null +++ b/packages/biz/lib/ViewLargerImageModal/index.less @@ -0,0 +1,62 @@ +.zhst-biz-view-warning-larger-image-modal { + font-family: MicrosoftYaHei; + + .ant-modal-content { + padding: 0; + height: 492px; + border-radius: 6px; + overflow: hidden; + + .ant-modal-close { + top: 14px; + right: 16px; + } + + .ant-modal-header { + height: 48px; + line-height: 48px; + margin-bottom: 0; + + .ant-modal-title { + height: 100%; + line-height: 48px; + font-weight: bold; + padding-left: 20px; + } + } + + .ant-modal-body { + height: 444px; + + >div { + width: 100%; + height: 100%; + align-items: flex-start; + + >div:nth-child(2) { + position: relative; + flex: 1; + box-sizing: border-box; + height: 100%; + padding: 30px 16px; + + .right-context>div { + margin-bottom: 20px; + } + + .right-context .context-key { + font-weight: bold; + } + + .img-download { + position: absolute; + bottom: 0; + cursor: pointer; + } + + } + + } + } + } +} \ No newline at end of file diff --git a/packages/biz/lib/WarningRecordCard/WarningRecordCard.d.ts b/packages/biz/lib/WarningRecordCard/WarningRecordCard.d.ts new file mode 100644 index 0000000..966998b --- /dev/null +++ b/packages/biz/lib/WarningRecordCard/WarningRecordCard.d.ts @@ -0,0 +1,30 @@ +import { CardProps } from 'antd'; +import React from 'react'; +import './index.less'; +export interface IRecord { + imgSrc?: string; + id?: string; + /** + * 预警类型 + */ + warningType?: string; + warningInfo?: string[]; + boxId: string; + position: string; + cabietId?: string; + cabietText?: string; + warningTime?: string; + warningTimestamp?: string | number; + warningTimeFormat?: string; +} +export interface WarningRecordCardProps { + record?: IRecord; + onRecordClick?: (record?: IRecord) => void; + style?: React.CSSProperties; + cardProps?: CardProps; + selectedRecordId?: string; + cardStyle?: React.CSSProperties; + imgStyle?: React.CSSProperties; +} +export declare const WarningRecordCard: React.FC; +export default WarningRecordCard; diff --git a/packages/biz/lib/WarningRecordCard/WarningRecordCard.js b/packages/biz/lib/WarningRecordCard/WarningRecordCard.js new file mode 100644 index 0000000..b5de8e4 --- /dev/null +++ b/packages/biz/lib/WarningRecordCard/WarningRecordCard.js @@ -0,0 +1,74 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/WarningRecordCard/WarningRecordCard.tsx +var WarningRecordCard_exports = {}; +__export(WarningRecordCard_exports, { + WarningRecordCard: () => WarningRecordCard, + default: () => WarningRecordCard_default +}); +module.exports = __toCommonJS(WarningRecordCard_exports); +var import_antd = require("antd"); +var import_lib = require("antd/lib"); +var import_react = __toESM(require("react")); +var import_dayjs = __toESM(require("dayjs")); +var import_index = require("./index.less"); +var WarningRecordCard = (props) => { + const componentName = `zhst-biz-warning-record-card`; + const { record, onRecordClick, style, cardProps, selectedRecordId, cardStyle, imgStyle } = props; + const { imgSrc, id, warningType, warningInfo = [], cabietText, warningTime, warningTimestamp, warningTimeFormat = "YYYY-MM-DD HH:mm:ss" } = record || {}; + const formattedDate = warningTimestamp ? (0, import_dayjs.default)(warningTimestamp).format(warningTimeFormat) : ""; + const warningTimeShow = warningTime ? warningTime : formattedDate; + const { useToken } = import_lib.theme; + const { token } = useToken(); + const selectedBorderStyle = { + border: `2px solid ${token.colorPrimary}`, + boxShadow: " 0px 2px 9px 0px rgba(0,0,0,0.16)" + }; + const selectedCardStyle = { + ...selectedRecordId === (record == null ? void 0 : record.id) ? selectedBorderStyle : {} + }; + const handleClick = () => { + onRecordClick == null ? void 0 : onRecordClick(record); + }; + return /* @__PURE__ */ import_react.default.createElement("div", { className: componentName, key: id, onClick: handleClick, style }, /* @__PURE__ */ import_react.default.createElement( + import_antd.Card, + { + cover: /* @__PURE__ */ import_react.default.createElement("img", { alt: "预警图", src: imgSrc, style: { width: 336, height: 203, borderRadius: 0, ...imgStyle } }), + style: { width: 356, height: 302, padding: 10, borderRadius: 4, ...selectedCardStyle, ...cardStyle }, + ...cardProps + }, + /* @__PURE__ */ import_react.default.createElement("div", { className: "left-context" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "warning-type" }, warningType), /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { size: 0, split: /* @__PURE__ */ import_react.default.createElement(import_antd.Divider, { type: "vertical" }) }, warningInfo == null ? void 0 : warningInfo.map((item, index) => /* @__PURE__ */ import_react.default.createElement("div", { key: index, className: "info-item" }, item))), /* @__PURE__ */ import_react.default.createElement("div", { className: "warning-time" }, warningTimeShow)), + /* @__PURE__ */ import_react.default.createElement("div", { className: "cabietInfo" }, cabietText) + )); +}; +var WarningRecordCard_default = WarningRecordCard; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + WarningRecordCard +}); diff --git a/packages/biz/lib/WarningRecordCard/index.d.ts b/packages/biz/lib/WarningRecordCard/index.d.ts new file mode 100644 index 0000000..8b82d36 --- /dev/null +++ b/packages/biz/lib/WarningRecordCard/index.d.ts @@ -0,0 +1,3 @@ +import WarningRecordCard from './WarningRecordCard'; +export type { IRecord, WarningRecordCardProps } from './WarningRecordCard'; +export default WarningRecordCard; diff --git a/packages/biz/lib/WarningRecordCard/index.js b/packages/biz/lib/WarningRecordCard/index.js new file mode 100644 index 0000000..9d01a95 --- /dev/null +++ b/packages/biz/lib/WarningRecordCard/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/WarningRecordCard/index.tsx +var WarningRecordCard_exports = {}; +__export(WarningRecordCard_exports, { + default: () => WarningRecordCard_default +}); +module.exports = __toCommonJS(WarningRecordCard_exports); +var import_WarningRecordCard = __toESM(require("./WarningRecordCard")); +var WarningRecordCard_default = import_WarningRecordCard.default; diff --git a/packages/biz/lib/WarningRecordCard/index.less b/packages/biz/lib/WarningRecordCard/index.less new file mode 100644 index 0000000..7cfba38 --- /dev/null +++ b/packages/biz/lib/WarningRecordCard/index.less @@ -0,0 +1,27 @@ +.zhst-biz-warning-record-card { + cursor: pointer; + + .ant-card-body { + padding: 0; + font-family: MicrosoftYaHei; + line-height: 19px; + display: flex; + margin-top: 10px; + + .left-context { + flex: 1; + + >div { + margin-top: 6px; + } + + >div:nth-child(1) { + margin-top: 0; + } + } + + .warning-type { + font-weight: bold; + } + } +} \ No newline at end of file diff --git a/packages/biz/lib/boxSelectTree/boxSelectTree.d.ts b/packages/biz/lib/boxSelectTree/boxSelectTree.d.ts new file mode 100644 index 0000000..0690e8f --- /dev/null +++ b/packages/biz/lib/boxSelectTree/boxSelectTree.d.ts @@ -0,0 +1,9 @@ +import { FC } from 'react'; +import { TabsProps } from 'antd'; +import type { BoxPanelProps } from './components/boxPanel'; +export interface BoxSelectTreeProps extends BoxPanelProps { + onTabChange?: (e: any) => void; + tabsProps?: TabsProps; +} +declare const BoxSelectTree: FC; +export default BoxSelectTree; diff --git a/packages/biz/lib/boxSelectTree/boxSelectTree.js b/packages/biz/lib/boxSelectTree/boxSelectTree.js new file mode 100644 index 0000000..79df21b --- /dev/null +++ b/packages/biz/lib/boxSelectTree/boxSelectTree.js @@ -0,0 +1,124 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/boxSelectTree/boxSelectTree.tsx +var boxSelectTree_exports = {}; +__export(boxSelectTree_exports, { + default: () => boxSelectTree_default +}); +module.exports = __toCommonJS(boxSelectTree_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var import_boxPanel = __toESM(require("./components/boxPanel")); +var BoxSelectTree = (props) => { + const { + data, + boxDataSource = [], + onTabChange, + onSearch, + onItemCheck, + onItemSelect, + onBoxBatchDelete, + onBoxDelete, + onCreateSubmit, + onClockClick, + onImport, + onCreate, + tabsProps, + searchInputProps, + treeProps, + customImport, + showOptions, + extraBtns + } = props; + const items = [ + { + key: "1", + label: /* @__PURE__ */ import_react.default.createElement("div", { style: { textAlign: "center", width: "160px" } }, "盒子组"), + children: /* @__PURE__ */ import_react.default.createElement( + import_boxPanel.default, + { + searchInputProps, + boxDataSource, + treeProps, + data, + onCreate, + onCreateSubmit, + onBoxBatchDelete, + onBoxDelete, + onSearch, + onItemCheck, + onItemSelect, + showOptions, + customImport, + extraBtns, + onClockClick, + onImport + } + ) + }, + { + key: "2", + label: /* @__PURE__ */ import_react.default.createElement("div", { style: { textAlign: "center", width: "160px" } }, "盒子"), + children: /* @__PURE__ */ import_react.default.createElement( + import_boxPanel.default, + { + boxDataSource, + searchInputProps, + treeProps, + data, + onCreate, + onBoxBatchDelete, + onCreateSubmit, + onBoxDelete, + onSearch, + onItemCheck, + onItemSelect, + showOptions, + customImport, + extraBtns, + onClockClick, + onImport + } + ) + } + ]; + return /* @__PURE__ */ import_react.default.createElement( + import_antd.Tabs, + { + defaultActiveKey: "1", + centered: true, + items, + onChange: onTabChange, + tabBarGutter: 0, + indicator: { size: (origin) => origin, align: "center" }, + ...tabsProps + } + ); +}; +var boxSelectTree_default = BoxSelectTree; diff --git a/packages/biz/lib/boxSelectTree/components/boxPanel/index.d.ts b/packages/biz/lib/boxSelectTree/components/boxPanel/index.d.ts new file mode 100644 index 0000000..21a551f --- /dev/null +++ b/packages/biz/lib/boxSelectTree/components/boxPanel/index.d.ts @@ -0,0 +1,27 @@ +import { FC } from 'react'; +import { TreeDataNode } from 'antd'; +import { ModalFormProps } from '@ant-design/pro-components'; +import type { TreeProps, InputProps } from 'antd'; +import type { BoxTreeProps } from '../../../tree'; +export interface BoxPanelProps { + searchInputProps?: InputProps; + showOptions?: boolean; + treeProps?: Partial; + data: TreeDataNode[]; + boxDataSource: TreeDataNode[]; + handleImport?: () => void; + onSearch?: (e: any) => void; + onItemCheck?: TreeProps['onCheck']; + onItemSelect?: TreeProps['onSelect']; + onBoxBatchDelete?: (data?: any) => void; + onBoxDelete?: (data?: any) => void; + onCreateSubmit?: ModalFormProps['onFinish']; + onClockClick?: () => void; + onImport?: () => void; + onBatch?: () => void; + onCreate?: () => void; + customImport?: any; + extraBtns?: any; +} +declare const BoxPanel: FC; +export default BoxPanel; diff --git a/packages/biz/lib/boxSelectTree/components/boxPanel/index.js b/packages/biz/lib/boxSelectTree/components/boxPanel/index.js new file mode 100644 index 0000000..6fafeaa --- /dev/null +++ b/packages/biz/lib/boxSelectTree/components/boxPanel/index.js @@ -0,0 +1,179 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/boxSelectTree/components/boxPanel/index.tsx +var boxPanel_exports = {}; +__export(boxPanel_exports, { + default: () => boxPanel_default +}); +module.exports = __toCommonJS(boxPanel_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var import_pro_components = require("@ant-design/pro-components"); +var import_icons = require("@ant-design/icons"); +var import_treeTransferModal = __toESM(require("../../../treeTransferModal")); +var import_tree = __toESM(require("../../../tree")); +var BoxPanel = (props) => { + var _a, _b, _c; + const { + searchInputProps, + showOptions = true, + extraBtns, + data = [], + onSearch, + treeProps, + onItemCheck, + onItemSelect, + onCreateSubmit, + onBoxBatchDelete, + onBoxDelete, + onClockClick, + onImport, + onBatch, + onCreate, + boxDataSource, + customImport + } = props; + const [isTreeCheckable, setIsTreeCheckable] = (0, import_react.useState)(false); + const [targetItems, setTargetItems] = (0, import_react.useState)([]); + const [boxChoiceOpen, setBoxChoiceOpen] = (0, import_react.useState)(false); + const [checkedKeys, setCheckedKeys] = (0, import_react.useState)([]); + const createFormRef = (0, import_react.useRef)(); + const handleCheckable = () => { + setIsTreeCheckable((pre) => !pre); + }; + const onTreeCheck = (keys, info) => { + let _targetItems = []; + setCheckedKeys(keys); + info.checkedNodes.forEach((o) => { + o.isLeaf && _targetItems.push(o); + }); + setTargetItems(_targetItems); + }; + const onItemDelete = (key, { keys }) => { + setCheckedKeys((pre) => { + const newKeys = pre.filter((_key) => !keys.includes(_key)); + return newKeys; + }); + setTargetItems((pre) => pre.filter((o) => o.key !== key)); + }; + const onBoxChoiceOk = async (data2) => { + var _a2, _b2, _c2; + (_a2 = createFormRef.current) == null ? void 0 : _a2.setFieldValue("boxList", data2); + (_b2 = createFormRef.current) == null ? void 0 : _b2.setFieldValue("boxName", 123); + console.log((_c2 = createFormRef.current) == null ? void 0 : _c2.getFieldValue("boxList")); + setBoxChoiceOpen(false); + }; + const onBoxChoiceReset = () => { + setCheckedKeys([]); + setTargetItems([]); + }; + return /* @__PURE__ */ import_react.default.createElement("div", { style: { padding: "0 16px" } }, /* @__PURE__ */ import_react.default.createElement( + import_treeTransferModal.default, + { + open: boxChoiceOpen, + onCancel: () => setBoxChoiceOpen(false), + onRadioChange: (e) => console.log("radio", e.target.value), + dataSource: boxDataSource, + targetItems, + checkedKeys, + onReset: onBoxChoiceReset, + onOk: onBoxChoiceOk, + onTreeCheck, + onItemDelete + } + ), /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { size: 12, direction: "vertical", style: { width: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { size: 4, style: { width: "100%", justifyContent: "space-between" } }, /* @__PURE__ */ import_react.default.createElement(import_antd.Input, { size: "middle", onChange: (e) => onSearch == null ? void 0 : onSearch(e), placeholder: "请输入盒子名称", ...searchInputProps }), customImport || /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { type: "text", onClick: () => (onBatch == null ? void 0 : onBatch()) || handleCheckable(), icon: isTreeCheckable ? /* @__PURE__ */ import_react.default.createElement(import_icons.SwitcherOutlined, null) : /* @__PURE__ */ import_react.default.createElement(import_icons.DiffOutlined, null) }), /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { type: "text", onClick: () => onClockClick == null ? void 0 : onClockClick(), icon: /* @__PURE__ */ import_react.default.createElement(import_icons.ClockCircleOutlined, null) }))), showOptions && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { align: "center" }, /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { type: "text", style: { padding: "4px 8px" }, onClick: () => onImport == null ? void 0 : onImport(), icon: /* @__PURE__ */ import_react.default.createElement(import_icons.ImportOutlined, null) }, "导入盒子"), /* @__PURE__ */ import_react.default.createElement(import_antd.Divider, { type: "vertical", style: { margin: "8px 0" } }), onCreate ? /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { onClick: onCreate, type: "text", style: { padding: "4px 8px" }, icon: /* @__PURE__ */ import_react.default.createElement(import_icons.FolderAddOutlined, null) }, "新建组") : /* @__PURE__ */ import_react.default.createElement( + import_pro_components.ModalForm, + { + width: "600px", + open: onCreate ? false : void 0, + formRef: createFormRef, + title: "新建组", + modalProps: { destroyOnClose: true }, + layout: "horizontal", + labelCol: { span: 6 }, + wrapperCol: { span: 18 }, + trigger: /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { type: "text", style: { padding: "4px 8px" }, icon: /* @__PURE__ */ import_react.default.createElement(import_icons.FolderAddOutlined, null) }, "新建组"), + submitter: { + searchConfig: { + submitText: "确定", + resetText: "取消" + } + }, + onFinish: onCreateSubmit + }, + /* @__PURE__ */ import_react.default.createElement( + import_pro_components.ProFormText, + { + rules: [ + { + required: true, + max: 20 + }, + { + pattern: /^[^\s]*$/g, + message: "禁止输入空格" + } + ], + fieldProps: { showCount: true }, + width: "md", + name: "name", + label: "盒子组名称", + placeholder: "请输入盒子名称" + } + ), + /* @__PURE__ */ import_react.default.createElement( + import_pro_components.ProFormText, + { + width: "md", + name: "boxList", + label: "盒子选择", + fieldProps: { + readOnly: true, + value: `已选择${((_b = (_a = createFormRef.current) == null ? void 0 : _a.getFieldValue("boxList")) == null ? void 0 : _b.length) || 0}个盒子`, + suffix: /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, /* @__PURE__ */ import_react.default.createElement("a", { onClick: () => { + var _a2; + (_a2 = createFormRef.current) == null ? void 0 : _a2.setFieldValue("boxList", null); + onBoxChoiceReset(); + } }, "恢复默认"), /* @__PURE__ */ import_react.default.createElement("a", { onClick: () => setBoxChoiceOpen(true) }, "范围选择")) + } + } + ) + ), /* @__PURE__ */ import_react.default.createElement(import_antd.Divider, { type: "vertical", style: { margin: "8px 0" } }), /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { danger: true, type: "text", style: { padding: "4px 8px" }, icon: /* @__PURE__ */ import_react.default.createElement(import_icons.CloseCircleOutlined, null), disabled: ((_c = treeProps == null ? void 0 : treeProps.checkedKeys) == null ? void 0 : _c.length) <= 0, onClick: onBoxBatchDelete }, "删除")), /* @__PURE__ */ import_react.default.createElement(import_antd.Divider, { style: { margin: 0 } })), extraBtns, /* @__PURE__ */ import_react.default.createElement( + import_tree.default, + { + treeCheckable: isTreeCheckable, + data, + onItemSelect, + onItemCheck, + onItemDelete: onBoxDelete, + ...treeProps + } + ))); +}; +var boxPanel_default = BoxPanel; diff --git a/packages/biz/lib/boxSelectTree/index.d.ts b/packages/biz/lib/boxSelectTree/index.d.ts new file mode 100644 index 0000000..2ff0f1e --- /dev/null +++ b/packages/biz/lib/boxSelectTree/index.d.ts @@ -0,0 +1,3 @@ +import BoxSelectTree from './boxSelectTree'; +export type { BoxSelectTreeProps } from './boxSelectTree'; +export default BoxSelectTree; diff --git a/packages/biz/lib/boxSelectTree/index.js b/packages/biz/lib/boxSelectTree/index.js new file mode 100644 index 0000000..74ef62f --- /dev/null +++ b/packages/biz/lib/boxSelectTree/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/boxSelectTree/index.tsx +var boxSelectTree_exports = {}; +__export(boxSelectTree_exports, { + default: () => boxSelectTree_default +}); +module.exports = __toCommonJS(boxSelectTree_exports); +var import_boxSelectTree = __toESM(require("./boxSelectTree")); +var boxSelectTree_default = import_boxSelectTree.default; diff --git a/packages/biz/lib/boxSelectTree/mock.d.ts b/packages/biz/lib/boxSelectTree/mock.d.ts new file mode 100644 index 0000000..84026eb --- /dev/null +++ b/packages/biz/lib/boxSelectTree/mock.d.ts @@ -0,0 +1,2 @@ +import { TreeDataNode } from "antd"; +export declare const treeData: TreeDataNode[]; diff --git a/packages/biz/lib/boxSelectTree/mock.js b/packages/biz/lib/boxSelectTree/mock.js new file mode 100644 index 0000000..5160e1d --- /dev/null +++ b/packages/biz/lib/boxSelectTree/mock.js @@ -0,0 +1,60 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/boxSelectTree/mock.tsx +var mock_exports = {}; +__export(mock_exports, { + treeData: () => treeData +}); +module.exports = __toCommonJS(mock_exports); +var treeData = [ + { + title: "全部盒子", + key: "0-0", + children: [ + { + title: "盒子组1", + key: "0-0-0", + children: [ + { + title: "摄像头1", + key: "0-0-0-0" + }, + { + title: "摄像头2", + key: "0-0-0-1" + } + ] + }, + { + title: "盒子组2", + key: "0-0-1", + children: [ + { + title: "摄像头4", + key: "0-0-1-0" + } + ] + } + ] + } +]; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + treeData +}); diff --git a/packages/biz/lib/tree/boxTree.d.ts b/packages/biz/lib/tree/boxTree.d.ts new file mode 100644 index 0000000..5e34aef --- /dev/null +++ b/packages/biz/lib/tree/boxTree.d.ts @@ -0,0 +1,17 @@ +import { FC } from 'react'; +import { TreeDataNode, TreeProps } from 'antd'; +import './index.less'; +export interface BoxTreeProps extends TreeProps { + data: TreeDataNode[]; + treeCheckable?: boolean; + showItemOption?: boolean; + customOptions?: any; + onItemCheck?: TreeProps['onCheck']; + onItemSelect?: TreeProps['onSelect']; + onItemSetting?: (_data: any) => void; + onItemDelete?: (_data: any) => void; + onItemRename?: (_nodeData: any) => void; + onItemRenameFinish?: (_data: any, _nodeData: any) => Promise; +} +declare const boxTree: FC; +export default boxTree; diff --git a/packages/biz/lib/tree/boxTree.js b/packages/biz/lib/tree/boxTree.js new file mode 100644 index 0000000..835a8f7 --- /dev/null +++ b/packages/biz/lib/tree/boxTree.js @@ -0,0 +1,134 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/tree/boxTree.tsx +var boxTree_exports = {}; +__export(boxTree_exports, { + default: () => boxTree_default +}); +module.exports = __toCommonJS(boxTree_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var import_theme = __toESM(require("antd/es/theme")); +var import_icons = require("@ant-design/icons"); +var import_pro_components = require("@ant-design/pro-components"); +var import_index = require("./index.less"); +var componentName = "zhst-biz-tree"; +var { useToken } = import_theme.default; +var boxTree = (props) => { + const { + onItemSelect, + onItemCheck, + onItemSetting, + onItemDelete, + data = [], + showItemOption = true, + treeCheckable = false, + onItemRename, + onItemRenameFinish, + customOptions + } = props; + const { token } = useToken(); + const [checkedItem, setCheckedItem] = (0, import_react.useState)(""); + const cameraStatus = /* @__PURE__ */ new Map([ + ["0", "error"], + ["1", "success"], + ["3", "processing"], + ["4", "default"] + ]); + return /* @__PURE__ */ import_react.default.createElement( + import_antd.Tree, + { + checkable: treeCheckable, + blockNode: true, + onSelect: (selectedKeys, info) => { + setCheckedItem(selectedKeys[0]); + onItemSelect == null ? void 0 : onItemSelect(selectedKeys, info); + }, + onCheck: onItemCheck, + treeData: data, + titleRender: (_nodeData) => { + return /* @__PURE__ */ import_react.default.createElement("div", { className: `${componentName}-item-render` }, !_nodeData.children && _nodeData.isCamera && /* @__PURE__ */ import_react.default.createElement(import_antd.Badge, { style: { marginRight: "6px" }, status: cameraStatus.get(_nodeData.status || "4") }), /* @__PURE__ */ import_react.default.createElement( + "span", + { + style: checkedItem === _nodeData.key && _nodeData.isCamera ? { + color: token.colorPrimary + } : {} + }, + _nodeData.title + ), showItemOption && /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { className: `${componentName}-item-render_right`, style: { float: "right" } }, customOptions || /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement( + import_pro_components.ModalForm, + { + title: "重命名", + width: 600, + modalProps: { destroyOnClose: true }, + layout: "horizontal", + labelCol: { span: 6 }, + wrapperCol: { span: 18 }, + trigger: /* @__PURE__ */ import_react.default.createElement(import_icons.EditOutlined, { onClick: (e) => { + e.preventDefault(); + e.stopPropagation(); + onItemRename == null ? void 0 : onItemRename(_nodeData); + } }), + submitter: { + searchConfig: { + submitText: "确定", + resetText: "取消" + } + }, + onFinish: async (value) => onItemRenameFinish == null ? void 0 : onItemRenameFinish(value, _nodeData) + }, + /* @__PURE__ */ import_react.default.createElement( + import_pro_components.ProFormText, + { + rules: [ + { + required: true + } + ], + width: "md", + name: "name", + label: "盒子名称", + placeholder: "请输入盒子名称" + } + ) + ), /* @__PURE__ */ import_react.default.createElement(import_icons.SettingOutlined, { onClick: (e) => { + e.preventDefault(); + e.stopPropagation(); + onItemSetting == null ? void 0 : onItemSetting(_nodeData); + } }), /* @__PURE__ */ import_react.default.createElement(import_icons.CloseOutlined, { onClick: (e) => { + e.preventDefault(); + e.stopPropagation(); + onItemDelete == null ? void 0 : onItemDelete(_nodeData); + } })))); + }, + ...props + } + ); +}; +var boxTree_default = boxTree; diff --git a/packages/biz/lib/tree/index.d.ts b/packages/biz/lib/tree/index.d.ts new file mode 100644 index 0000000..4082eb0 --- /dev/null +++ b/packages/biz/lib/tree/index.d.ts @@ -0,0 +1,13 @@ +import { TreeDataNode } from 'antd'; +import BoxTree from './boxTree'; +export interface TreeData extends TreeDataNode { + children?: TreeDataNode['children'] & { + isCamera?: boolean; + /** + * 0-失败 1-成功 2-进行中 3-未知 + */ + status?: '0' | '1' | '2' | '3'; + }[]; +} +export type { BoxTreeProps } from './boxTree'; +export default BoxTree; diff --git a/packages/biz/lib/tree/index.js b/packages/biz/lib/tree/index.js new file mode 100644 index 0000000..46783d3 --- /dev/null +++ b/packages/biz/lib/tree/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/tree/index.tsx +var tree_exports = {}; +__export(tree_exports, { + default: () => tree_default +}); +module.exports = __toCommonJS(tree_exports); +var import_boxTree = __toESM(require("./boxTree")); +var tree_default = import_boxTree.default; diff --git a/packages/biz/lib/tree/index.less b/packages/biz/lib/tree/index.less new file mode 100644 index 0000000..9da4e2d --- /dev/null +++ b/packages/biz/lib/tree/index.less @@ -0,0 +1,9 @@ +.zhst-biz-tree-item-render { + &_right { + display: none; + } + + &:hover &_right { + display: inline-flex; + } +} diff --git a/packages/biz/lib/treeTransfer/TreeTransfer.d.ts b/packages/biz/lib/treeTransfer/TreeTransfer.d.ts new file mode 100644 index 0000000..e9b6b3f --- /dev/null +++ b/packages/biz/lib/treeTransfer/TreeTransfer.d.ts @@ -0,0 +1,20 @@ +import React from 'react'; +import { TransferProps, TreeDataNode, TreeProps } from 'antd'; +import './index.less'; +export interface TreeTransferProps { + dataSource: TreeDataNode[]; + treeProps?: TreeProps; + targetItems: TreeDataNode[]; + checkedKeys: string[]; + onTreeSelect?: TreeProps['onSelect']; + onTreeCheck?: TreeProps['onCheck']; + onItemDelete?: (key: string, info?: { + root: TreeDataNode[]; + keys: string[]; + }) => void; + onChange?: TransferProps['onChange']; + onOk?: (data: any) => void; + onReset?: () => void; +} +declare const TreeTransfer: React.FC; +export default TreeTransfer; diff --git a/packages/biz/lib/treeTransfer/TreeTransfer.js b/packages/biz/lib/treeTransfer/TreeTransfer.js new file mode 100644 index 0000000..4d5b340 --- /dev/null +++ b/packages/biz/lib/treeTransfer/TreeTransfer.js @@ -0,0 +1,136 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/treeTransfer/TreeTransfer.tsx +var TreeTransfer_exports = {}; +__export(TreeTransfer_exports, { + default: () => TreeTransfer_default +}); +module.exports = __toCommonJS(TreeTransfer_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var import_theme = __toESM(require("antd/es/theme")); +var import_index = require("./index.less"); +var import_icons = require("@ant-design/icons"); +var import_treeTransferHelper = require("./treeTransferHelper"); +var componentName = "zhst-biz-treeTransfer"; +var { useToken } = import_theme.default; +var TreeTransfer = ({ + dataSource, + treeProps, + targetItems = [], + checkedKeys = [], + onTreeCheck, + onTreeSelect, + onItemDelete, + onOk, + onReset +}) => { + const { token } = useToken(); + const [keyWords, setKeyWords] = (0, import_react.useState)(""); + function findNodesWithKeyword(_keyWords, _treeData) { + function dfs(node) { + return node.filter((item) => item.title.includes(_keyWords)); + } + const data = dfs(_treeData); + return data || []; + } + return /* @__PURE__ */ import_react.default.createElement(import_antd.Flex, { gap: 20, className: componentName, align: "center", justify: "center" }, /* @__PURE__ */ import_react.default.createElement("div", { className: `${componentName}-left` }, /* @__PURE__ */ import_react.default.createElement( + import_antd.Card, + { + className: `${componentName}-left_card`, + title: /* @__PURE__ */ import_react.default.createElement("div", { style: { textAlign: "center" } }, "可选择的范围"), + bodyStyle: { padding: 12 } + }, + /* @__PURE__ */ import_react.default.createElement(import_antd.Input, { prefix: /* @__PURE__ */ import_react.default.createElement(import_icons.SearchOutlined, null), onChange: (e) => setKeyWords(e.target.value), placeholder: "请输入设备名称" }), + /* @__PURE__ */ import_react.default.createElement( + import_antd.Tree, + { + style: { marginTop: "6px" }, + height: 420, + blockNode: true, + checkable: true, + checkedKeys, + treeData: findNodesWithKeyword(keyWords, dataSource), + onCheck: (keys, info) => onTreeCheck == null ? void 0 : onTreeCheck(keys, info), + onSelect: (keys, info) => onTreeSelect == null ? void 0 : onTreeSelect(keys, info), + ...treeProps + } + ) + )), /* @__PURE__ */ import_react.default.createElement(import_icons.DoubleRightOutlined, null), /* @__PURE__ */ import_react.default.createElement("div", { className: `${componentName}-right` }, /* @__PURE__ */ import_react.default.createElement( + import_antd.Card, + { + className: `${componentName}-right_card`, + title: /* @__PURE__ */ import_react.default.createElement("div", { style: { textAlign: "center" } }, "已选择的范围"), + bodyStyle: { padding: 0 } + }, + /* @__PURE__ */ import_react.default.createElement( + "div", + { + className: `${componentName}-right_card__items` + }, + targetItems.map((item) => /* @__PURE__ */ import_react.default.createElement( + "div", + { + className: `${componentName}-right_card__items___item`, + key: item.key, + onMouseEnter: (e) => { + e.target.style.backgroundColor = token.colorPrimaryBg; + e.target.style.color = token.colorPrimary; + }, + onMouseLeave: (e) => { + e.target.style.color = token.colorText; + e.target.style.backgroundColor = null; + } + }, + item.title, + /* @__PURE__ */ import_react.default.createElement("div", { style: { float: "right" } }, /* @__PURE__ */ import_react.default.createElement(import_icons.DeleteOutlined, { onClick: () => { + const { root, keys } = (0, import_treeTransferHelper.getAllRootKeyById)(item.key, dataSource); + onItemDelete == null ? void 0 : onItemDelete(item.key, { root, keys }); + } })) + )) + ), + /* @__PURE__ */ import_react.default.createElement( + import_antd.Flex, + { + className: `${componentName}-right_card__btns` + }, + /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { style: { marginRight: 8, width: "50%" }, disabled: targetItems.length <= 0, onClick: onReset }, "重置"), + /* @__PURE__ */ import_react.default.createElement( + import_antd.Button, + { + style: { width: "50%" }, + type: "primary", + onClick: () => onOk == null ? void 0 : onOk(targetItems) + }, + "确定" + ) + ) + ))); +}; +var TreeTransfer_default = TreeTransfer; diff --git a/packages/biz/lib/treeTransfer/index.d.ts b/packages/biz/lib/treeTransfer/index.d.ts new file mode 100644 index 0000000..7ea5c47 --- /dev/null +++ b/packages/biz/lib/treeTransfer/index.d.ts @@ -0,0 +1,4 @@ +import TreeTransfer from "./TreeTransfer"; +export type { TreeTransferProps } from './TreeTransfer'; +export * from './treeTransferHelper'; +export default TreeTransfer; diff --git a/packages/biz/lib/treeTransfer/index.js b/packages/biz/lib/treeTransfer/index.js new file mode 100644 index 0000000..7e50781 --- /dev/null +++ b/packages/biz/lib/treeTransfer/index.js @@ -0,0 +1,42 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/treeTransfer/index.tsx +var treeTransfer_exports = {}; +__export(treeTransfer_exports, { + default: () => treeTransfer_default +}); +module.exports = __toCommonJS(treeTransfer_exports); +var import_TreeTransfer = __toESM(require("./TreeTransfer")); +__reExport(treeTransfer_exports, require("./treeTransferHelper"), module.exports); +var treeTransfer_default = import_TreeTransfer.default; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + ...require("./treeTransferHelper") +}); diff --git a/packages/biz/lib/treeTransfer/index.less b/packages/biz/lib/treeTransfer/index.less new file mode 100644 index 0000000..9ffe8cd --- /dev/null +++ b/packages/biz/lib/treeTransfer/index.less @@ -0,0 +1,43 @@ +.zhst-biz-treeTransfer { + &-left { + &_card { + width: 500px; + height: 522px; + background-color: #FCFCFC; + } + } + + &-right { + &_card { + width: 300px; + height: 522px; + background-color: #FCFCFC; + + &__items { + padding: 8px 4px; + overflow: scroll; + + &::-webkit-scrollbar { + display: none; + } + + &___item { + margin: 0; + padding: 4px 12px; + cursor: pointer; + } + } + + &__btns { + width: 100%; + padding: 8px; + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%); + box-sizing: border-box; + border-top: 1px solid #f0f0f0; + } + } + } +} diff --git a/packages/biz/lib/treeTransfer/treeTransferHelper.d.ts b/packages/biz/lib/treeTransfer/treeTransferHelper.d.ts new file mode 100644 index 0000000..705684c --- /dev/null +++ b/packages/biz/lib/treeTransfer/treeTransferHelper.d.ts @@ -0,0 +1,12 @@ +export declare const isChecked: (selectedKeys: React.Key[], eventKey: React.Key) => boolean; +/** + * 通过子元素找到父级节点 + * @param objects + * @param element + * @returns + */ +export declare const findParentByChild: (objects: any[], propertyValue: string | number, propertyKey?: string) => any; +export declare const getAllRootKeyById: (val: string | number, list: any[], key?: string) => { + root: any; + keys: any[]; +}; diff --git a/packages/biz/lib/treeTransfer/treeTransferHelper.js b/packages/biz/lib/treeTransfer/treeTransferHelper.js new file mode 100644 index 0000000..1c3c4eb --- /dev/null +++ b/packages/biz/lib/treeTransfer/treeTransferHelper.js @@ -0,0 +1,77 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/treeTransfer/treeTransferHelper.ts +var treeTransferHelper_exports = {}; +__export(treeTransferHelper_exports, { + findParentByChild: () => findParentByChild, + getAllRootKeyById: () => getAllRootKeyById, + isChecked: () => isChecked +}); +module.exports = __toCommonJS(treeTransferHelper_exports); +var isChecked = (selectedKeys, eventKey) => selectedKeys.includes(eventKey); +function isObject(value) { + return value !== null && typeof value === "object" && !Array.isArray(value); +} +var findParentByChild = (objects, propertyValue, propertyKey = "key") => { + for (let i = 0; i < objects.length; i++) { + const obj = objects[i]; + if (obj[propertyKey] === propertyValue) { + return obj; + } else if (typeof obj === "object") { + const found = findParentByChild(Object.values(obj), propertyValue); + if (found) { + return obj; + } + } + } + return null; +}; +var getAllRootKeyById = (val, list, key = "key") => { + let keys = []; + const findParentByChild2 = (propertyValue, objects, propertyKey) => { + for (let i = 0; i < objects.length; i++) { + const obj = objects[i]; + if (obj[propertyKey] === propertyValue) { + console.log("obj", obj); + return obj; + } else if (typeof obj === "object") { + const found = findParentByChild2(propertyValue, Object.values(obj), propertyKey); + if (found) { + if (isObject(found)) { + keys.push(found.key); + } + return obj; + } + } + } + return null; + }; + const data = findParentByChild2(val, list, key); + data.key && keys.push(data.key); + return { + root: data, + keys + }; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + findParentByChild, + getAllRootKeyById, + isChecked +}); diff --git a/packages/biz/lib/treeTransferModal/TreeTransferModal.d.ts b/packages/biz/lib/treeTransferModal/TreeTransferModal.d.ts new file mode 100644 index 0000000..e0a0d0e --- /dev/null +++ b/packages/biz/lib/treeTransferModal/TreeTransferModal.d.ts @@ -0,0 +1,26 @@ +import { FC } from 'react'; +import { ModalProps, RadioGroupProps, SelectProps, TransferProps, TreeDataNode, TreeProps } from 'antd'; +export interface TreeTransferModalProps { + dataSource: TreeDataNode[]; + treeProps?: TreeProps; + targetItems: TreeDataNode[]; + checkedKeys: string[]; + onTreeSelect?: TreeProps['onSelect']; + onTreeCheck?: TreeProps['onCheck']; + onItemDelete?: (key: string, info?: { + root: TreeDataNode[]; + keys: string[]; + }) => void; + onChange?: TransferProps['onChange']; + onOk?: (data: any) => void; + onReset?: () => void; + open?: boolean; + onCancel?: ModalProps['onCancel']; + onRadioChange?: RadioGroupProps['onChange']; + onSelect?: SelectProps['onSelect']; + modalProps?: ModalProps; + radioProps?: RadioGroupProps; + selectProps?: SelectProps; +} +declare const TreeTransferModal: FC; +export default TreeTransferModal; diff --git a/packages/biz/lib/treeTransferModal/TreeTransferModal.js b/packages/biz/lib/treeTransferModal/TreeTransferModal.js new file mode 100644 index 0000000..5c20927 --- /dev/null +++ b/packages/biz/lib/treeTransferModal/TreeTransferModal.js @@ -0,0 +1,114 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/treeTransferModal/TreeTransferModal.tsx +var TreeTransferModal_exports = {}; +__export(TreeTransferModal_exports, { + default: () => TreeTransferModal_default +}); +module.exports = __toCommonJS(TreeTransferModal_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var import_treeTransfer = __toESM(require("../treeTransfer")); +var import_constants = require("../utils/constants"); +var TreeTransferModal = (props) => { + const { + open, + dataSource = [], + checkedKeys, + onItemDelete, + onOk, + onCancel, + onReset, + onRadioChange, + onTreeCheck, + onSelect, + targetItems, + modalProps, + radioProps, + selectProps + } = props; + const [type, setType] = (0, import_react.useState)("1"); + return /* @__PURE__ */ import_react.default.createElement( + import_antd.Modal, + { + open, + destroyOnClose: true, + title: "统计点位", + width: "948px", + footer: null, + onCancel, + ...modalProps + }, + /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement( + import_antd.Radio.Group, + { + onChange: (e) => { + setType(e.target.value); + onRadioChange == null ? void 0 : onRadioChange(e); + }, + style: { marginLeft: "24px", padding: "20px 0" }, + value: type, + options: import_constants.BOX_TYPE_LIST, + ...radioProps + } + ), /* @__PURE__ */ import_react.default.createElement( + import_antd.Select, + { + defaultValue: "", + style: { marginLeft: 200, width: 150 }, + options: import_constants.ALL_LIST, + onSelect, + ...selectProps + } + )), type === "box" ? /* @__PURE__ */ import_react.default.createElement( + import_treeTransfer.default, + { + dataSource, + targetItems, + checkedKeys, + onTreeCheck, + onItemDelete, + onOk, + onReset + } + ) : /* @__PURE__ */ import_react.default.createElement( + import_treeTransfer.default, + { + dataSource, + targetItems, + checkedKeys, + onTreeCheck, + onItemDelete, + onOk, + onReset + } + ), /* @__PURE__ */ import_react.default.createElement("p", { style: { textAlign: "right" } }, "已选中", targetItems.length, "个点位")) + ); +}; +var TreeTransferModal_default = TreeTransferModal; diff --git a/packages/biz/lib/treeTransferModal/index.d.ts b/packages/biz/lib/treeTransferModal/index.d.ts new file mode 100644 index 0000000..8e5245a --- /dev/null +++ b/packages/biz/lib/treeTransferModal/index.d.ts @@ -0,0 +1,3 @@ +import TreeTransferModal from './TreeTransferModal'; +export type { TreeTransferModalProps } from './TreeTransferModal'; +export default TreeTransferModal; diff --git a/packages/biz/lib/treeTransferModal/index.js b/packages/biz/lib/treeTransferModal/index.js new file mode 100644 index 0000000..19037a6 --- /dev/null +++ b/packages/biz/lib/treeTransferModal/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/treeTransferModal/index.tsx +var treeTransferModal_exports = {}; +__export(treeTransferModal_exports, { + default: () => treeTransferModal_default +}); +module.exports = __toCommonJS(treeTransferModal_exports); +var import_TreeTransferModal = __toESM(require("./TreeTransferModal")); +var treeTransferModal_default = import_TreeTransferModal.default; diff --git a/packages/biz/src/boxSelectTree/components/boxPanel/index.tsx b/packages/biz/src/boxSelectTree/components/boxPanel/index.tsx index 2699227..396e375 100644 --- a/packages/biz/src/boxSelectTree/components/boxPanel/index.tsx +++ b/packages/biz/src/boxSelectTree/components/boxPanel/index.tsx @@ -6,7 +6,6 @@ import type { TreeProps, InputProps } from 'antd'; import type { BoxTreeProps } from '../../../tree'; import TreeTransferModal from '../../../treeTransferModal' import BoxTree from '../../../tree'; -// import './index.less' export interface BoxPanelProps { searchInputProps?: InputProps diff --git a/packages/func/es/camera/constants.d.ts b/packages/func/es/camera/constants.d.ts new file mode 100644 index 0000000..0658bd8 --- /dev/null +++ b/packages/func/es/camera/constants.d.ts @@ -0,0 +1,41 @@ +/** + * 设备类型枚举 + */ +export declare const DeviceType: { + VMS: string; + DIR: string; + CAMERA: string; +}; +export declare const LOCAL_KEY = "local"; +export declare const DIRE_CONNECT_KEY = "direconnect"; +export declare const BOX_LIST_KEY = "boxlist"; +export declare enum VmsplatformOpt { + VMSPLATFORMOPT_ID = 0, + VMSPLATFORMOPT_PLATFORMNAME = 1, + VMSPLATFORMOPT_PLUGINNAME = 2, + VMSPLATFORMOPT_IP = 3, + VMSPLATFORMOPT_PORT = 4, + VMSPLATFORMOPT_USERNAME = 5, + VMSPLATFORMOPT_PASSWORD = 6 +} +export declare enum OPT { + OR = 0, + AND = 1, + ORNOT = 2, + ANDNOT = 3 +} +export declare enum DevicemanagerCameraType { + DEVICEMANAGER_CAMERA_TYPE_DEFAULT = 0, + DEVICEMANAGER_CAMERA_TYPE_NORMAL = 1, + DEVICEMANAGER_CAMERA_TYPE_1400 = 97, + DEVICEMANAGER_CAMERA_TYPE_DHGRABBER = 98, + DEVICEMANAGER_CAMERA_TYPE_HKGRABBER = 99, + DEVICEMANAGER_CAMERA_TYPE_LOCAL = 100 +} +export declare const BOX_DIRECONNECT_PLATFORM_FILTER: { + filtervmsplatformList: { + opt: OPT; + vmsplatformOpt: VmsplatformOpt; + value: string; + }[]; +}; diff --git a/packages/func/es/camera/index.d.ts b/packages/func/es/camera/index.d.ts new file mode 100644 index 0000000..c47dcdd --- /dev/null +++ b/packages/func/es/camera/index.d.ts @@ -0,0 +1,40 @@ +import { DevicemanagerCameraType } from './constants'; +export declare const isFaceCamera: (type: DevicemanagerCameraType) => boolean; +/** + * + * @param value 传入的数据 可以是 item(camera/vms/dirs)/ deviceID + * @param isId + */ +export declare function getDeviceType(value: { + [x: string]: any; + id: any; +} | string): any; +/** + * 后端设备id/vmsid/dirid是三张表 合并在一起不保证唯一 前端生成唯一key + * @param id 设备id + * @param type 设备类型 + */ +export declare function deviceIDToDeviceKey(id: any, type: string, vmsId?: any): string; +/** + * 后端设备id/vmsid/dirid是三张表 合并在一起不保证唯一 前端生成唯一key + * @param item camera/vms/dirs + */ +export declare function deviceToDeviceKey(item: { + [x: string]: any; + id: any; +}): string; +/** + * 设备树key 转 后端设备原始id dirid是string/vms&camera 是number 和后端保持一致 + * @param deviceKey 设备树的id + */ +export declare function deviceKeyToDeviceId(deviceKey: { + split: (arg0: string) => [any, any]; +}): any; +export declare const getVmsIdByDeviceId: (key: string) => string; +/** + * 通过设备id或设备key在树里面找摄像头 + * @param ids cameraId + * @param deviceTree 树 + * @param type "id" | "key" + */ +export declare const findCamerasByInDeviceTree: (ids: never[] | undefined, deviceTree: any, type?: string) => any[]; diff --git a/packages/func/es/file/index.d.ts b/packages/func/es/file/index.d.ts new file mode 100644 index 0000000..2f4e705 --- /dev/null +++ b/packages/func/es/file/index.d.ts @@ -0,0 +1,80 @@ +export type Rect = { + x: number; + y: number; + w: number; + h: number; +}; +/** + * + * @param url 需要转为图片的链接 + * @returns 图片的 dom + */ +export declare const urlToImg: (url: string) => Promise; +export declare const base64DecodeImageKey: (base64ImgKey: string) => string; +/** + * 通过url获取图片的base64字符串 + * @param src 图片链接 + * @param outputFormat 图片格式 + * @returns base64 @string + */ +export declare const getBase64ByUrl: (src: string | URL, outputFormat?: string) => Promise; +/** + * 把文件转base64 + * @param file @file 文件 + * @returns @string + */ +export declare const fileToBase64: (file: any) => Promise; +/** + * + * @param image @file 图片文件 + * @param width @number 宽度 + * @param height @number 高度 + * @returns @string base64 + */ +export declare const getBase64Image: (image: any, width?: any, height?: any) => string; +/** + * 通过图片获取base64 + * @param src 图片地址 + * @returns @string + */ +export declare const getBase64ByImage: (src: string) => Promise; +/** + * url转base64 + * @param {String} url - url地址 + */ +export declare const urlToBase64V2: (url: string) => Promise; +/** + * base64转Blob + * @param {String} base64 - base64 + */ +export declare function base64toBlob(base64: string): Blob | undefined; +/** + * 图片集打包压缩下载 + * 1. url -> base64 -> blob + * 2. 将blob加入jsZip文件夹内,用file-saver保存 + * @param {Array<{url:string,name:string}>} imgDataList + * @param {string} zipName + */ +export declare const downloadPackageImages: (imgDataList: string | any[], zipName: string) => Promise; +export declare function getFileSize(size: number): string; +export declare const dataURLToBlob: (dataurl: string) => Blob; +/** + * key 转 http 链接 + * @param originImgkey 图片的值 ,可以是 base64 也可以是 http链接 + * @param host 图片的域值 + * @returns {string} + */ +export declare const generateImg: (imgKey: string, host?: string) => string; +/** + * 获取指定字符串后面的部分 + * @param imageKey v1_开头的字符串 + * @returns + */ +export declare const getImageKey: (imageKey: string, preFix?: string) => string; +/** + * 获取图片 + * @param img 图片的url链接 + * @param odRect + * @returns file + */ +export declare const getFileByRect: (img: string, odRect: Rect) => Promise; diff --git a/packages/func/es/index.d.ts b/packages/func/es/index.d.ts new file mode 100644 index 0000000..39ccf20 --- /dev/null +++ b/packages/func/es/index.d.ts @@ -0,0 +1,10 @@ +export * from 'lodash-es'; +export * from './file'; +export * from './map'; +export * from './performance'; +export * from './string'; +export * from './number'; +export * from './time'; +export * from './utils'; +export * from './camera'; +export * from './math'; diff --git a/packages/func/es/map/index.d.ts b/packages/func/es/map/index.d.ts new file mode 100644 index 0000000..08fa4a2 --- /dev/null +++ b/packages/func/es/map/index.d.ts @@ -0,0 +1,10 @@ +/** + * 获取经纬信息 + * @param lngLat 位置信息 + * @returns @object { long, lat } + */ +export declare const fixedLngLat: (lngLat?: string) => string; +export declare const transformLngLat: (lngLat?: string) => { + longitude: number; + latitude: number; +} | null; diff --git a/packages/func/es/math/index.d.ts b/packages/func/es/math/index.d.ts new file mode 100644 index 0000000..d87c485 --- /dev/null +++ b/packages/func/es/math/index.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/packages/func/es/number/index.d.ts b/packages/func/es/number/index.d.ts new file mode 100644 index 0000000..b8e65be --- /dev/null +++ b/packages/func/es/number/index.d.ts @@ -0,0 +1,14 @@ +/** + * 设置数据的精度 + * @param originNumber + * @param accuracy 精度 以原点为中心向左为正,向右为负, + * @param isCeil 是否为向上取整 + * @returns number + */ +export declare const setNumberAccuracy: (originNumber: number, accuracy?: number, isCeil?: boolean) => number; +/** + * 获取数字 + * @param number 需要校验的数值 + * @returns @number + */ +export declare const toRealNumber: (number: any) => any; diff --git a/packages/func/es/performance/index.d.ts b/packages/func/es/performance/index.d.ts new file mode 100644 index 0000000..22dd838 --- /dev/null +++ b/packages/func/es/performance/index.d.ts @@ -0,0 +1 @@ +export declare const speedConvert: (bps: number, contertUnit?: number) => string; diff --git a/packages/func/es/string/demo/getValueByUrl.js b/packages/func/es/string/demo/getValueByUrl.js new file mode 100644 index 0000000..875db42 --- /dev/null +++ b/packages/func/es/string/demo/getValueByUrl.js @@ -0,0 +1,35 @@ +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +/** + * Created by jiangzhixiong on 2024/03/20 + */ + +import React, { useState } from 'react'; +import { getValueByUrl } from '@zhst/func'; +var demo = function demo() { + var _useState = useState(null), + _useState2 = _slicedToArray(_useState, 2), + inputVal = _useState2[0], + setInputVal = _useState2[1]; + var _useState3 = useState(null), + _useState4 = _slicedToArray(_useState3, 2), + outputVal = _useState4[0], + setOutPutVal = _useState4[1]; + var handleClick = function handleClick() { + var val = getValueByUrl('to', inputVal); + setOutPutVal(val); + }; + return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("input", { + value: inputVal, + onChange: function onChange(e) { + return setInputVal(e.target.value); + } + }), /*#__PURE__*/React.createElement("button", { + onClick: handleClick + }, "\u63D0\u4EA4"), /*#__PURE__*/React.createElement("p", null, "\u8F93\u51FA\uFF1A", outputVal))); +}; +export default demo; \ No newline at end of file diff --git a/packages/func/es/time/index.d.ts b/packages/func/es/time/index.d.ts new file mode 100644 index 0000000..28b4d03 --- /dev/null +++ b/packages/func/es/time/index.d.ts @@ -0,0 +1,11 @@ +export declare const formateDuration: (diff: number) => string; +export declare function generateTime(): { + startDateTime: number; + endDateTime: number; +}; +/** + * 格式化时间为 00:00 + * @param seconds 时间,单位秒 + * @returns + */ +export declare function formatDurationTime(seconds: number): string; diff --git a/packages/func/es/utils/index.d.ts b/packages/func/es/utils/index.d.ts new file mode 100644 index 0000000..4a5e574 --- /dev/null +++ b/packages/func/es/utils/index.d.ts @@ -0,0 +1,36 @@ +export { default as isChrome } from './isChrome'; +export declare const matchS3Prefix: (str: string) => boolean; +/** + * 通过文件名获取文件类型 + * @param fileName 文件名称 + * @returns 文件类型 + */ +export declare const getFileSuffix: (fileName: string) => string; +/** + * 通过类型获取文件名 + * @param type 类型 + * @returns + */ +export declare const getImageSuffixByFileType: (type: string) => string; +export declare function getChromeVersion(): number | false; +export declare const nextTick: (func: (value: void) => void | PromiseLike) => void; +export declare const loop: (items: string | any[], callback: (arg0: any) => any) => void; +export declare const addEventListenerWrapper: (target: any, eventType: string, cb: any, option?: any) => { + remove: () => void; +}; +/** + * Get transforms base on the given object. + * @param {Object} obj - The target object. + * @returns {string} A string contains transform values. + */ +export declare function getTransforms({ rotate, scaleX, scaleY, translateX, translateY, }: { + rotate?: number; + scaleX?: number; + scaleY?: number; + translateX?: number; + translateY?: number; +}): { + WebkitTransform: string; + msTransform: string; + transform: string; +}; diff --git a/packages/func/es/utils/isChrome.d.ts b/packages/func/es/utils/isChrome.d.ts new file mode 100644 index 0000000..2d07ceb --- /dev/null +++ b/packages/func/es/utils/isChrome.d.ts @@ -0,0 +1,3 @@ +export declare const isBrowser: boolean; +declare const isChrome: () => boolean; +export default isChrome; diff --git a/packages/func/lib/camera/constants.d.ts b/packages/func/lib/camera/constants.d.ts new file mode 100644 index 0000000..0658bd8 --- /dev/null +++ b/packages/func/lib/camera/constants.d.ts @@ -0,0 +1,41 @@ +/** + * 设备类型枚举 + */ +export declare const DeviceType: { + VMS: string; + DIR: string; + CAMERA: string; +}; +export declare const LOCAL_KEY = "local"; +export declare const DIRE_CONNECT_KEY = "direconnect"; +export declare const BOX_LIST_KEY = "boxlist"; +export declare enum VmsplatformOpt { + VMSPLATFORMOPT_ID = 0, + VMSPLATFORMOPT_PLATFORMNAME = 1, + VMSPLATFORMOPT_PLUGINNAME = 2, + VMSPLATFORMOPT_IP = 3, + VMSPLATFORMOPT_PORT = 4, + VMSPLATFORMOPT_USERNAME = 5, + VMSPLATFORMOPT_PASSWORD = 6 +} +export declare enum OPT { + OR = 0, + AND = 1, + ORNOT = 2, + ANDNOT = 3 +} +export declare enum DevicemanagerCameraType { + DEVICEMANAGER_CAMERA_TYPE_DEFAULT = 0, + DEVICEMANAGER_CAMERA_TYPE_NORMAL = 1, + DEVICEMANAGER_CAMERA_TYPE_1400 = 97, + DEVICEMANAGER_CAMERA_TYPE_DHGRABBER = 98, + DEVICEMANAGER_CAMERA_TYPE_HKGRABBER = 99, + DEVICEMANAGER_CAMERA_TYPE_LOCAL = 100 +} +export declare const BOX_DIRECONNECT_PLATFORM_FILTER: { + filtervmsplatformList: { + opt: OPT; + vmsplatformOpt: VmsplatformOpt; + value: string; + }[]; +}; diff --git a/packages/func/lib/camera/constants.js b/packages/func/lib/camera/constants.js new file mode 100644 index 0000000..efd28fa --- /dev/null +++ b/packages/func/lib/camera/constants.js @@ -0,0 +1,90 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/camera/constants.ts +var constants_exports = {}; +__export(constants_exports, { + BOX_DIRECONNECT_PLATFORM_FILTER: () => BOX_DIRECONNECT_PLATFORM_FILTER, + BOX_LIST_KEY: () => BOX_LIST_KEY, + DIRE_CONNECT_KEY: () => DIRE_CONNECT_KEY, + DeviceType: () => DeviceType, + DevicemanagerCameraType: () => DevicemanagerCameraType, + LOCAL_KEY: () => LOCAL_KEY, + OPT: () => OPT, + VmsplatformOpt: () => VmsplatformOpt +}); +module.exports = __toCommonJS(constants_exports); +var DeviceType = { + VMS: "vms", + DIR: "dir", + CAMERA: "camera" +}; +var LOCAL_KEY = "local"; +var DIRE_CONNECT_KEY = "direconnect"; +var BOX_LIST_KEY = "boxlist"; +var VmsplatformOpt = /* @__PURE__ */ ((VmsplatformOpt2) => { + VmsplatformOpt2[VmsplatformOpt2["VMSPLATFORMOPT_ID"] = 0] = "VMSPLATFORMOPT_ID"; + VmsplatformOpt2[VmsplatformOpt2["VMSPLATFORMOPT_PLATFORMNAME"] = 1] = "VMSPLATFORMOPT_PLATFORMNAME"; + VmsplatformOpt2[VmsplatformOpt2["VMSPLATFORMOPT_PLUGINNAME"] = 2] = "VMSPLATFORMOPT_PLUGINNAME"; + VmsplatformOpt2[VmsplatformOpt2["VMSPLATFORMOPT_IP"] = 3] = "VMSPLATFORMOPT_IP"; + VmsplatformOpt2[VmsplatformOpt2["VMSPLATFORMOPT_PORT"] = 4] = "VMSPLATFORMOPT_PORT"; + VmsplatformOpt2[VmsplatformOpt2["VMSPLATFORMOPT_USERNAME"] = 5] = "VMSPLATFORMOPT_USERNAME"; + VmsplatformOpt2[VmsplatformOpt2["VMSPLATFORMOPT_PASSWORD"] = 6] = "VMSPLATFORMOPT_PASSWORD"; + return VmsplatformOpt2; +})(VmsplatformOpt || {}); +var OPT = /* @__PURE__ */ ((OPT2) => { + OPT2[OPT2["OR"] = 0] = "OR"; + OPT2[OPT2["AND"] = 1] = "AND"; + OPT2[OPT2["ORNOT"] = 2] = "ORNOT"; + OPT2[OPT2["ANDNOT"] = 3] = "ANDNOT"; + return OPT2; +})(OPT || {}); +var DevicemanagerCameraType = /* @__PURE__ */ ((DevicemanagerCameraType2) => { + DevicemanagerCameraType2[DevicemanagerCameraType2["DEVICEMANAGER_CAMERA_TYPE_DEFAULT"] = 0] = "DEVICEMANAGER_CAMERA_TYPE_DEFAULT"; + DevicemanagerCameraType2[DevicemanagerCameraType2["DEVICEMANAGER_CAMERA_TYPE_NORMAL"] = 1] = "DEVICEMANAGER_CAMERA_TYPE_NORMAL"; + DevicemanagerCameraType2[DevicemanagerCameraType2["DEVICEMANAGER_CAMERA_TYPE_1400"] = 97] = "DEVICEMANAGER_CAMERA_TYPE_1400"; + DevicemanagerCameraType2[DevicemanagerCameraType2["DEVICEMANAGER_CAMERA_TYPE_DHGRABBER"] = 98] = "DEVICEMANAGER_CAMERA_TYPE_DHGRABBER"; + DevicemanagerCameraType2[DevicemanagerCameraType2["DEVICEMANAGER_CAMERA_TYPE_HKGRABBER"] = 99] = "DEVICEMANAGER_CAMERA_TYPE_HKGRABBER"; + DevicemanagerCameraType2[DevicemanagerCameraType2["DEVICEMANAGER_CAMERA_TYPE_LOCAL"] = 100] = "DEVICEMANAGER_CAMERA_TYPE_LOCAL"; + return DevicemanagerCameraType2; +})(DevicemanagerCameraType || {}); +var BOX_DIRECONNECT_PLATFORM_FILTER = { + filtervmsplatformList: [ + { + opt: 0 /* OR */, + vmsplatformOpt: 1 /* VMSPLATFORMOPT_PLATFORMNAME */, + value: "direconnect" + }, + { + opt: 0 /* OR */, + vmsplatformOpt: 1 /* VMSPLATFORMOPT_PLATFORMNAME */, + value: "boxlist" + } + ] +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + BOX_DIRECONNECT_PLATFORM_FILTER, + BOX_LIST_KEY, + DIRE_CONNECT_KEY, + DeviceType, + DevicemanagerCameraType, + LOCAL_KEY, + OPT, + VmsplatformOpt +}); diff --git a/packages/func/lib/camera/index.d.ts b/packages/func/lib/camera/index.d.ts new file mode 100644 index 0000000..c47dcdd --- /dev/null +++ b/packages/func/lib/camera/index.d.ts @@ -0,0 +1,40 @@ +import { DevicemanagerCameraType } from './constants'; +export declare const isFaceCamera: (type: DevicemanagerCameraType) => boolean; +/** + * + * @param value 传入的数据 可以是 item(camera/vms/dirs)/ deviceID + * @param isId + */ +export declare function getDeviceType(value: { + [x: string]: any; + id: any; +} | string): any; +/** + * 后端设备id/vmsid/dirid是三张表 合并在一起不保证唯一 前端生成唯一key + * @param id 设备id + * @param type 设备类型 + */ +export declare function deviceIDToDeviceKey(id: any, type: string, vmsId?: any): string; +/** + * 后端设备id/vmsid/dirid是三张表 合并在一起不保证唯一 前端生成唯一key + * @param item camera/vms/dirs + */ +export declare function deviceToDeviceKey(item: { + [x: string]: any; + id: any; +}): string; +/** + * 设备树key 转 后端设备原始id dirid是string/vms&camera 是number 和后端保持一致 + * @param deviceKey 设备树的id + */ +export declare function deviceKeyToDeviceId(deviceKey: { + split: (arg0: string) => [any, any]; +}): any; +export declare const getVmsIdByDeviceId: (key: string) => string; +/** + * 通过设备id或设备key在树里面找摄像头 + * @param ids cameraId + * @param deviceTree 树 + * @param type "id" | "key" + */ +export declare const findCamerasByInDeviceTree: (ids: never[] | undefined, deviceTree: any, type?: string) => any[]; diff --git a/packages/func/lib/camera/index.js b/packages/func/lib/camera/index.js new file mode 100644 index 0000000..b7ae6f1 --- /dev/null +++ b/packages/func/lib/camera/index.js @@ -0,0 +1,143 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/camera/index.ts +var camera_exports = {}; +__export(camera_exports, { + deviceIDToDeviceKey: () => deviceIDToDeviceKey, + deviceKeyToDeviceId: () => deviceKeyToDeviceId, + deviceToDeviceKey: () => deviceToDeviceKey, + findCamerasByInDeviceTree: () => findCamerasByInDeviceTree, + getDeviceType: () => getDeviceType, + getVmsIdByDeviceId: () => getVmsIdByDeviceId, + isFaceCamera: () => isFaceCamera +}); +module.exports = __toCommonJS(camera_exports); +var import_lodash_es = require("lodash-es"); +var import_utils = require("../utils"); +var import_constants = require("./constants"); +var isFaceCamera = (type) => { + return [ + import_constants.DevicemanagerCameraType.DEVICEMANAGER_CAMERA_TYPE_1400, + import_constants.DevicemanagerCameraType.DEVICEMANAGER_CAMERA_TYPE_HKGRABBER, + import_constants.DevicemanagerCameraType.DEVICEMANAGER_CAMERA_TYPE_DHGRABBER + ].includes(type); +}; +function getDeviceType(value) { + let type; + let isDeviceKey = (0, import_lodash_es.isString)(value); + if (isDeviceKey) { + type = value.split("_")[0]; + } else { + if ((0, import_lodash_es.has)(value, "longitude")) { + type = import_constants.DeviceType["CAMERA"]; + } + if ((0, import_lodash_es.has)(value, "ip")) { + type = import_constants.DeviceType["VMS"]; + } + if (!type) { + type = import_constants.DeviceType["DIR"]; + } + } + return type; +} +function deviceIDToDeviceKey(id, type, vmsId) { + if (type == import_constants.DeviceType["DIR"]) { + return `${type}_${id}_${vmsId}`; + } else { + return `${type}_${id}`; + } +} +function deviceToDeviceKey(item) { + let deviceKey = ""; + let type = getDeviceType(item); + if (!type) { + console.error("device type is null!"); + } + switch (type) { + case import_constants.DeviceType["DIR"]: + { + let dirId = item["dirid"] || item["dirId"]; + if (!dirId && dirId !== 0) { + console.error("dirId type is null!"); + } + let vmsId = (0, import_lodash_es.get)(item, "extendInfo.vmsPlatformId"); + if (!vmsId && vmsId !== 0) { + console.error("vmsId type is null!"); + } + deviceKey = `${type}_${dirId}_${vmsId}`; + } + break; + case import_constants.DeviceType["VMS"]: + deviceKey = `${type}_${item["id"]}`; + break; + case import_constants.DeviceType["CAMERA"]: + { + let vmsId = (0, import_lodash_es.get)(item, "extendInfo.vmsPlatformId"); + if (!vmsId && vmsId !== 0) { + console.error("vmsId type is null!"); + } + deviceKey = `${type}_${item.id}`; + } + break; + } + return deviceKey; +} +function deviceKeyToDeviceId(deviceKey) { + let [type, id] = deviceKey.split("_"); + return type === import_constants.DeviceType["DIR"] ? id : Number(id); +} +var getVmsIdByDeviceId = (key) => { + const type = getDeviceType(key); + let vmsId = ""; + switch (type) { + case import_constants.DeviceType["CAMERA"]: + case import_constants.DeviceType["DIR"]: + vmsId = key.split("_")[2]; + break; + case import_constants.DeviceType["VMS"]: + vmsId = key.split("_")[1]; + break; + } + if (!vmsId) { + console.error("vmsid is null!"); + } + return vmsId; +}; +var findCamerasByInDeviceTree = (ids = [], deviceTree, type = "id") => { + let cameraInfoList = []; + let _ids = ids.map((v) => String(v)); + (0, import_utils.loop)(deviceTree, (item) => { + let isCamera = getDeviceType((0, import_lodash_es.get)(item, "key", "")) === import_constants.DeviceType["CAMERA"]; + let isMatch = type === "key" ? _ids.includes((0, import_lodash_es.get)(item, "key")) : _ids.includes(`${(0, import_lodash_es.get)(item, "origin.id")}`); + if (isCamera && isMatch) { + cameraInfoList.push(item); + } + }); + return cameraInfoList; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + deviceIDToDeviceKey, + deviceKeyToDeviceId, + deviceToDeviceKey, + findCamerasByInDeviceTree, + getDeviceType, + getVmsIdByDeviceId, + isFaceCamera +}); diff --git a/packages/func/lib/file/index.d.ts b/packages/func/lib/file/index.d.ts new file mode 100644 index 0000000..2f4e705 --- /dev/null +++ b/packages/func/lib/file/index.d.ts @@ -0,0 +1,80 @@ +export type Rect = { + x: number; + y: number; + w: number; + h: number; +}; +/** + * + * @param url 需要转为图片的链接 + * @returns 图片的 dom + */ +export declare const urlToImg: (url: string) => Promise; +export declare const base64DecodeImageKey: (base64ImgKey: string) => string; +/** + * 通过url获取图片的base64字符串 + * @param src 图片链接 + * @param outputFormat 图片格式 + * @returns base64 @string + */ +export declare const getBase64ByUrl: (src: string | URL, outputFormat?: string) => Promise; +/** + * 把文件转base64 + * @param file @file 文件 + * @returns @string + */ +export declare const fileToBase64: (file: any) => Promise; +/** + * + * @param image @file 图片文件 + * @param width @number 宽度 + * @param height @number 高度 + * @returns @string base64 + */ +export declare const getBase64Image: (image: any, width?: any, height?: any) => string; +/** + * 通过图片获取base64 + * @param src 图片地址 + * @returns @string + */ +export declare const getBase64ByImage: (src: string) => Promise; +/** + * url转base64 + * @param {String} url - url地址 + */ +export declare const urlToBase64V2: (url: string) => Promise; +/** + * base64转Blob + * @param {String} base64 - base64 + */ +export declare function base64toBlob(base64: string): Blob | undefined; +/** + * 图片集打包压缩下载 + * 1. url -> base64 -> blob + * 2. 将blob加入jsZip文件夹内,用file-saver保存 + * @param {Array<{url:string,name:string}>} imgDataList + * @param {string} zipName + */ +export declare const downloadPackageImages: (imgDataList: string | any[], zipName: string) => Promise; +export declare function getFileSize(size: number): string; +export declare const dataURLToBlob: (dataurl: string) => Blob; +/** + * key 转 http 链接 + * @param originImgkey 图片的值 ,可以是 base64 也可以是 http链接 + * @param host 图片的域值 + * @returns {string} + */ +export declare const generateImg: (imgKey: string, host?: string) => string; +/** + * 获取指定字符串后面的部分 + * @param imageKey v1_开头的字符串 + * @returns + */ +export declare const getImageKey: (imageKey: string, preFix?: string) => string; +/** + * 获取图片 + * @param img 图片的url链接 + * @param odRect + * @returns file + */ +export declare const getFileByRect: (img: string, odRect: Rect) => Promise; diff --git a/packages/func/lib/file/index.js b/packages/func/lib/file/index.js new file mode 100644 index 0000000..22c9b0a --- /dev/null +++ b/packages/func/lib/file/index.js @@ -0,0 +1,317 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/file/index.ts +var file_exports = {}; +__export(file_exports, { + base64DecodeImageKey: () => base64DecodeImageKey, + base64toBlob: () => base64toBlob, + dataURLToBlob: () => dataURLToBlob, + downloadPackageImages: () => downloadPackageImages, + fileToBase64: () => fileToBase64, + generateImg: () => generateImg, + getBase64ByImage: () => getBase64ByImage, + getBase64ByUrl: () => getBase64ByUrl, + getBase64Image: () => getBase64Image, + getFileByRect: () => getFileByRect, + getFileSize: () => getFileSize, + getImageKey: () => getImageKey, + urlToBase64V2: () => urlToBase64V2, + urlToImg: () => urlToImg +}); +module.exports = __toCommonJS(file_exports); +var import_base_64 = __toESM(require("base-64")); +var import_jszip = __toESM(require("jszip")); +var import_file_saver = __toESM(require("file-saver")); +var import_utils = require("../utils"); +var import_lodash_es = require("lodash-es"); +var urlToImg = (url) => { + const resImage = new Promise((resolve) => { + const image = new Image(); + image.crossOrigin = ""; + image.src = url; + image.onload = () => { + resolve(image); + }; + }); + return resImage; +}; +var base64DecodeImageKey = (base64ImgKey) => { + let tempStr = base64ImgKey; + if ((0, import_utils.matchS3Prefix)(tempStr)) { + tempStr = tempStr.replace(/^v[0-9]_/, ""); + tempStr = import_base_64.default.decode(tempStr); + } + const [bucket, ...pathArr] = tempStr.split("_"); + return tempStr = `${bucket}/${pathArr.join("_")}`; +}; +var getBase64ByUrl = function(src, outputFormat = "image/png") { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open("GET", src, true); + xhr.responseType = "arraybuffer"; + xhr.onload = function(e) { + if (Number(xhr.status) === 200) { + const uInt8Array = new Uint8Array(xhr.response); + let i = uInt8Array.length; + const binaryString = new Array(i); + while (i--) { + binaryString[i] = String.fromCharCode(uInt8Array[i]); + } + const data = binaryString.join(""); + const base64 = window.btoa(data); + const dataUrl = "data:" + (outputFormat || "image/png") + ";base64," + base64; + resolve(dataUrl); + } else { + reject(e); + } + }; + xhr.onerror = (e) => { + reject(e); + }; + xhr.send(); + }); +}; +var fileToBase64 = (file) => { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = function(e) { + resolve(e == null ? void 0 : e.target.result); + }; + reader.onerror = function(e) { + reject(e); + }; + }); +}; +var getBase64Image = (image, width, height) => { + const canvas = document.createElement("canvas"); + canvas.width = width !== void 0 ? width : image.width; + canvas.height = height !== void 0 ? height : image.height; + const ctx = canvas.getContext("2d"); + ctx == null ? void 0 : ctx.drawImage(image, 0, 0, canvas.width, canvas.height); + const ext = image.src.substring(image.src.lastIndexOf(".") + 1).toLowerCase(); + const dataURL = canvas.toDataURL("image/" + ext); + return dataURL; +}; +var getBase64ByImage = function(src) { + return new Promise((resolve, reject) => { + const image = new Image(); + const timestamp = (/* @__PURE__ */ new Date()).getTime(); + const imgUrl = src + "?" + timestamp; + image.src = imgUrl; + image.onload = function() { + function getBase64Image2(img) { + const canvas = document.createElement("canvas"); + canvas.width = img.width; + canvas.height = img.height; + const ctx = canvas.getContext("2d"); + ctx == null ? void 0 : ctx.drawImage(img, 0, 0, img.width, img.height); + const ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase(); + const dataURL = canvas.toDataURL("image/" + ext); + return dataURL; + } + const base64 = getBase64Image2(image); + resolve(base64); + }; + image.onerror = (e) => { + reject(e); + }; + }); +}; +var urlToBase64V2 = (url) => { + return new Promise((resolve, reject) => { + let image = new Image(); + image.onload = function() { + var _a; + let canvas = document.createElement("canvas"); + canvas.width = image.naturalWidth; + canvas.height = image.naturalHeight; + (_a = canvas == null ? void 0 : canvas.getContext("2d")) == null ? void 0 : _a.drawImage(image, 0, 0); + let result = canvas.toDataURL("image/png"); + resolve(result); + }; + const imgUrl = url; + image.setAttribute("crossOrigin", "Anonymous"); + image.src = imgUrl; + image.onerror = () => { + reject(new Error("Images fail to load")); + }; + }).catch((error) => { + throw new Error(error); + }); +}; +function base64toBlob(base64) { + if (!base64) + return; + var arr = base64.split(","), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); + while (n--) { + u8arr[n] = bstr.charCodeAt(n); + } + return new Blob([u8arr], { type: mime }); +} +var downloadPackageImages = async (imgDataList, zipName) => { + let imgDataDownLoadList = []; + let imgBlobList = []; + let imageSuffix = []; + let zip = new import_jszip.default(); + let img = zip.folder(zipName); + try { + for (let i2 = 0; i2 < imgDataList.length; i2++) { + let src = imgDataList[i2].url; + let suffix = src.substring(src.lastIndexOf(".")); + let base64ByUrl = await urlToBase64V2(imgDataList[i2].url); + if (!base64ByUrl) + continue; + let blob = base64toBlob(base64ByUrl); + imgDataDownLoadList.push(imgDataList[i2]); + imgBlobList.push(blob); + imageSuffix.push(suffix); + } + if (imgBlobList.length === 0) + throw new Error("The number of pictures is zero !"); + if (imgBlobList.length > 0) { + for (var i = 0; i < imgBlobList.length; i++) { + img == null ? void 0 : img.file( + imgDataDownLoadList[i].name + (0, import_lodash_es.get)(imageSuffix, `.${i}`, imageSuffix[0]), + // @ts-ignore + imgBlobList[i], + { + base64: true + } + ); + } + } + zip.generateAsync({ type: "blob" }).then(function(content) { + import_file_saver.default.saveAs(content, zipName + ".zip"); + }); + } catch (error) { + throw new Error(error); + } +}; +function getFileSize(size) { + if (!size) + return ""; + var num = 1024; + if (size < num) + return size + "B"; + if (size < Math.pow(num, 2)) + return (size / num).toFixed(2) + "K"; + if (size < Math.pow(num, 3)) + return (size / Math.pow(num, 2)).toFixed(2) + "M"; + if (size < Math.pow(num, 4)) + return (size / Math.pow(num, 3)).toFixed(2) + "G"; + return (size / Math.pow(num, 4)).toFixed(2) + "T"; +} +var dataURLToBlob = (dataurl) => { + const arr = dataurl.split(","); + const mime = arr[0].match(/:(.*?);/)[1]; + const bstr = atob(arr[1]); + let n = bstr.length; + const u8arr = new Uint8Array(n); + while (n--) { + u8arr[n] = bstr.charCodeAt(n); + } + return new Blob([u8arr], { type: mime }); +}; +var generateImg = (_imgKey, host = "http://10.0.0.120") => { + let imgKey = _imgKey; + let imgUrl = ""; + if (!imgKey) + return ""; + if (/(http|https):\/\/([\w.]+\/?)\S*/ig.test(imgKey)) { + return imgKey; + } + try { + if ((0, import_utils.matchS3Prefix)(imgKey)) { + imgKey = base64DecodeImageKey(imgKey); + if (imgKey.endsWith("/")) { + const i = imgKey.substring(0, imgKey.length - 1); + imgKey = i; + } + } + imgUrl = `${host}/file/${imgKey}`; + if (_imgKey.includes("v3")) { + imgUrl = `${host}/minio/${imgKey}`; + } + } catch (error) { + console.error(error); + imgUrl = ""; + } + return imgUrl; +}; +var getImageKey = (imageKey, preFix) => { + const splitIndex = preFix || "v1_"; + if (imageKey.startsWith(splitIndex)) { + return window.atob(imageKey.split(splitIndex)[1]).replace("_", "/"); + } else { + return imageKey; + } +}; +var getFileByRect = async (img, odRect) => { + var _a; + let image; + if ((0, import_lodash_es.isString)(img)) { + const url = generateImg(img); + image = await urlToImg(url); + } else { + image = img; + } + const commonCanvas = document.createElement("canvas"); + commonCanvas.width = odRect.w * image.width; + commonCanvas.height = odRect.h * image.height; + commonCanvas.style.display = "none"; + document.body.appendChild(commonCanvas); + const commonCtx = commonCanvas.getContext("2d"); + commonCtx == null ? void 0 : commonCtx.translate(-odRect.x * image.width, -odRect.y * image.height); + commonCtx == null ? void 0 : commonCtx.drawImage(image, 0, 0); + const base64 = commonCanvas.toDataURL("image/jpeg"); + const blobData = dataURLToBlob(base64); + (_a = commonCanvas.parentNode) == null ? void 0 : _a.removeChild(commonCanvas); + const file = new window.File([blobData], `${(/* @__PURE__ */ new Date()).getTime()}`, { + type: "image/jpeg" + }); + return file; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + base64DecodeImageKey, + base64toBlob, + dataURLToBlob, + downloadPackageImages, + fileToBase64, + generateImg, + getBase64ByImage, + getBase64ByUrl, + getBase64Image, + getFileByRect, + getFileSize, + getImageKey, + urlToBase64V2, + urlToImg +}); diff --git a/packages/func/lib/index.d.ts b/packages/func/lib/index.d.ts new file mode 100644 index 0000000..39ccf20 --- /dev/null +++ b/packages/func/lib/index.d.ts @@ -0,0 +1,10 @@ +export * from 'lodash-es'; +export * from './file'; +export * from './map'; +export * from './performance'; +export * from './string'; +export * from './number'; +export * from './time'; +export * from './utils'; +export * from './camera'; +export * from './math'; diff --git a/packages/func/lib/index.js b/packages/func/lib/index.js new file mode 100644 index 0000000..eb2aaa8 --- /dev/null +++ b/packages/func/lib/index.js @@ -0,0 +1,41 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/index.tsx +var src_exports = {}; +module.exports = __toCommonJS(src_exports); +__reExport(src_exports, require("lodash-es"), module.exports); +__reExport(src_exports, require("./file"), module.exports); +__reExport(src_exports, require("./map"), module.exports); +__reExport(src_exports, require("./performance"), module.exports); +__reExport(src_exports, require("./string"), module.exports); +__reExport(src_exports, require("./number"), module.exports); +__reExport(src_exports, require("./time"), module.exports); +__reExport(src_exports, require("./utils"), module.exports); +__reExport(src_exports, require("./camera"), module.exports); +__reExport(src_exports, require("./math"), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + ...require("lodash-es"), + ...require("./file"), + ...require("./map"), + ...require("./performance"), + ...require("./string"), + ...require("./number"), + ...require("./time"), + ...require("./utils"), + ...require("./camera"), + ...require("./math") +}); diff --git a/packages/func/lib/map/index.d.ts b/packages/func/lib/map/index.d.ts new file mode 100644 index 0000000..08fa4a2 --- /dev/null +++ b/packages/func/lib/map/index.d.ts @@ -0,0 +1,10 @@ +/** + * 获取经纬信息 + * @param lngLat 位置信息 + * @returns @object { long, lat } + */ +export declare const fixedLngLat: (lngLat?: string) => string; +export declare const transformLngLat: (lngLat?: string) => { + longitude: number; + latitude: number; +} | null; diff --git a/packages/func/lib/map/index.js b/packages/func/lib/map/index.js new file mode 100644 index 0000000..39c614a --- /dev/null +++ b/packages/func/lib/map/index.js @@ -0,0 +1,54 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/map/index.ts +var map_exports = {}; +__export(map_exports, { + fixedLngLat: () => fixedLngLat, + transformLngLat: () => transformLngLat +}); +module.exports = __toCommonJS(map_exports); +var fixedLngLat = (lngLat) => { + if (!lngLat) { + return ""; + } + const lngLatArr = lngLat.split(","); + const longitude = Number(lngLatArr[0]).toFixed(6); + const latitude = Number(lngLatArr[1]).toFixed(6); + if (lngLatArr.length < 2) { + return ""; + } + return `${longitude},${latitude}`; +}; +var transformLngLat = (lngLat) => { + if (lngLat) { + const lngLatArr = lngLat ? lngLat.split(",") : []; + const longitude = Number(lngLatArr[0]); + const latitude = Number(lngLatArr[1]); + if (lngLatArr.length < 2) { + return null; + } + return { longitude, latitude }; + } + return null; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + fixedLngLat, + transformLngLat +}); diff --git a/packages/func/lib/math/index.d.ts b/packages/func/lib/math/index.d.ts new file mode 100644 index 0000000..d87c485 --- /dev/null +++ b/packages/func/lib/math/index.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/packages/func/lib/math/index.js b/packages/func/lib/math/index.js new file mode 100644 index 0000000..7b14521 --- /dev/null +++ b/packages/func/lib/math/index.js @@ -0,0 +1,25 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/math/index.ts +var math_exports = {}; +__export(math_exports, { + default: () => math_default +}); +module.exports = __toCommonJS(math_exports); +var math_default = {}; diff --git a/packages/func/lib/number/index.d.ts b/packages/func/lib/number/index.d.ts new file mode 100644 index 0000000..b8e65be --- /dev/null +++ b/packages/func/lib/number/index.d.ts @@ -0,0 +1,14 @@ +/** + * 设置数据的精度 + * @param originNumber + * @param accuracy 精度 以原点为中心向左为正,向右为负, + * @param isCeil 是否为向上取整 + * @returns number + */ +export declare const setNumberAccuracy: (originNumber: number, accuracy?: number, isCeil?: boolean) => number; +/** + * 获取数字 + * @param number 需要校验的数值 + * @returns @number + */ +export declare const toRealNumber: (number: any) => any; diff --git a/packages/func/lib/number/index.js b/packages/func/lib/number/index.js new file mode 100644 index 0000000..371a003 --- /dev/null +++ b/packages/func/lib/number/index.js @@ -0,0 +1,53 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/number/index.ts +var number_exports = {}; +__export(number_exports, { + setNumberAccuracy: () => setNumberAccuracy, + toRealNumber: () => toRealNumber +}); +module.exports = __toCommonJS(number_exports); +var setNumberAccuracy = (originNumber, accuracy = 0, isCeil = true) => { + if (originNumber === 0) { + return 0; + } + let returnData = 0; + if (isCeil) { + returnData = Math.ceil(originNumber / Math.pow(10, accuracy)) * Math.pow(10, accuracy); + } else { + returnData = Math.floor(originNumber / Math.pow(10, accuracy)) * Math.pow(10, accuracy); + } + if (accuracy < 0) { + returnData = Number(returnData.toFixed(-accuracy)); + } else { + returnData = Number(returnData.toFixed(0)); + } + return returnData; +}; +var toRealNumber = (number) => { + if (isNaN(number) || number === Infinity) { + return 0; + } else + return number; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + setNumberAccuracy, + toRealNumber +}); diff --git a/packages/func/lib/performance/index.d.ts b/packages/func/lib/performance/index.d.ts new file mode 100644 index 0000000..22dd838 --- /dev/null +++ b/packages/func/lib/performance/index.d.ts @@ -0,0 +1 @@ +export declare const speedConvert: (bps: number, contertUnit?: number) => string; diff --git a/packages/func/lib/performance/index.js b/packages/func/lib/performance/index.js new file mode 100644 index 0000000..1d12f21 --- /dev/null +++ b/packages/func/lib/performance/index.js @@ -0,0 +1,41 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/performance/index.ts +var performance_exports = {}; +__export(performance_exports, { + speedConvert: () => speedConvert +}); +module.exports = __toCommonJS(performance_exports); +var speedConvert = (bps, contertUnit = 8) => { + if (bps === void 0) + return `0KB/s`; + const byte = bps / contertUnit; + if (bps > 1024 * 1024 * 1024) { + return `${(byte / 1024 / 1024 / 1024).toFixed(2)}GB/s`; + } else if (byte > 1024 * 1024) { + return `${(byte / 1024 / 1024).toFixed(2)}MB/s`; + } else if (byte > 1024) { + return `${(byte / 1024).toFixed(2)}KB/s`; + } + return `${byte}KB/s`; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + speedConvert +}); diff --git a/packages/func/lib/string/demo/getValueByUrl.js b/packages/func/lib/string/demo/getValueByUrl.js new file mode 100644 index 0000000..d270df3 --- /dev/null +++ b/packages/func/lib/string/demo/getValueByUrl.js @@ -0,0 +1,46 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/string/demo/getValueByUrl.tsx +var getValueByUrl_exports = {}; +__export(getValueByUrl_exports, { + default: () => getValueByUrl_default +}); +module.exports = __toCommonJS(getValueByUrl_exports); +var import_react = __toESM(require("react")); +var import_func = require("@zhst/func"); +var demo = () => { + const [inputVal, setInputVal] = (0, import_react.useState)(null); + const [outputVal, setOutPutVal] = (0, import_react.useState)(null); + const handleClick = () => { + let val = (0, import_func.getValueByUrl)("to", inputVal); + setOutPutVal(val); + }; + return /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("input", { value: inputVal, onChange: (e) => setInputVal(e.target.value) }), /* @__PURE__ */ import_react.default.createElement("button", { onClick: handleClick }, "提交"), /* @__PURE__ */ import_react.default.createElement("p", null, "输出:", outputVal))); +}; +var getValueByUrl_default = demo; diff --git a/packages/func/lib/string/index.js b/packages/func/lib/string/index.js new file mode 100644 index 0000000..0bab8ba --- /dev/null +++ b/packages/func/lib/string/index.js @@ -0,0 +1,83 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/string/index.ts +var string_exports = {}; +__export(string_exports, { + cutStr: () => cutStr, + getStrLength: () => getStrLength, + getValueByUrl: () => getValueByUrl, + isUrl: () => isUrl +}); +module.exports = __toCommonJS(string_exports); +var getStrLength = function(str) { + var realLength = 0, len = str.length, charCode = -1; + for (var i = 0; i < len; i++) { + charCode = str.charCodeAt(i); + if (charCode >= 0 && charCode <= 128) + realLength += 1; + else + realLength += 2; + } + return realLength; +}; +var cutStr = function cutstr(str, len) { + var str_length = 0; + var str_len = 0; + let str_cut = new String(); + str_len = str.length; + for (var i = 0; i < str_len; i++) { + let a = str.charAt(i); + str_length++; + if (escape(a).length > 4) { + str_length++; + } + str_cut = str_cut.concat(a); + if (str_length >= len) { + str_cut = str_cut.concat("..."); + return str_cut; + } + } + if (str_length < len) { + return str; + } +}; +var isUrl = (str) => { + try { + new URL(str); + return true; + } catch (err) { + return false; + } +}; +var getValueByUrl = (key, str) => { + let result = null; + if (isUrl(str)) { + result = new URL(str).searchParams.get(key); + } else { + result = new URLSearchParams(str.indexOf("?") > -1 ? str : `?${str}`).get(key); + } + return result; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + cutStr, + getStrLength, + getValueByUrl, + isUrl +}); diff --git a/packages/func/lib/time/index.d.ts b/packages/func/lib/time/index.d.ts new file mode 100644 index 0000000..28b4d03 --- /dev/null +++ b/packages/func/lib/time/index.d.ts @@ -0,0 +1,11 @@ +export declare const formateDuration: (diff: number) => string; +export declare function generateTime(): { + startDateTime: number; + endDateTime: number; +}; +/** + * 格式化时间为 00:00 + * @param seconds 时间,单位秒 + * @returns + */ +export declare function formatDurationTime(seconds: number): string; diff --git a/packages/func/lib/time/index.js b/packages/func/lib/time/index.js new file mode 100644 index 0000000..cf77388 --- /dev/null +++ b/packages/func/lib/time/index.js @@ -0,0 +1,73 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time/index.ts +var time_exports = {}; +__export(time_exports, { + formatDurationTime: () => formatDurationTime, + formateDuration: () => formateDuration, + generateTime: () => generateTime +}); +module.exports = __toCommonJS(time_exports); +var import_dayjs = __toESM(require("dayjs")); +var formateDuration = (diff) => { + var days = Math.floor(diff / (24 * 3600 * 1e3)); + var leave1 = diff % (24 * 3600 * 1e3); + var hours = Math.floor(leave1 / (3600 * 1e3)); + var leave2 = leave1 % (3600 * 1e3); + var minutes = Math.floor(leave2 / (60 * 1e3)); + var leave3 = leave2 % (60 * 1e3); + var seconds = Math.round(leave3 / 1e3); + var returnStr = seconds + "秒"; + if (minutes > 0) { + returnStr = minutes + "分"; + } + if (hours > 0) { + returnStr = hours + "小时"; + } + if (days > 0) { + returnStr = days + "天"; + } + return returnStr; +}; +function generateTime() { + let endDateTime = (0, import_dayjs.default)().endOf("day").unix(); + let startDateTime = (0, import_dayjs.default)().startOf("day").unix(); + return { startDateTime, endDateTime }; +} +function formatDurationTime(seconds) { + var minutes = Math.floor(seconds / 60) || 0; + var remainingSeconds = Math.floor(seconds % 60); + return (minutes < 10 ? `0${minutes}` : minutes) + ":" + (remainingSeconds < 10 ? "0" : "") + remainingSeconds; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + formatDurationTime, + formateDuration, + generateTime +}); diff --git a/packages/func/lib/utils/index.d.ts b/packages/func/lib/utils/index.d.ts new file mode 100644 index 0000000..4a5e574 --- /dev/null +++ b/packages/func/lib/utils/index.d.ts @@ -0,0 +1,36 @@ +export { default as isChrome } from './isChrome'; +export declare const matchS3Prefix: (str: string) => boolean; +/** + * 通过文件名获取文件类型 + * @param fileName 文件名称 + * @returns 文件类型 + */ +export declare const getFileSuffix: (fileName: string) => string; +/** + * 通过类型获取文件名 + * @param type 类型 + * @returns + */ +export declare const getImageSuffixByFileType: (type: string) => string; +export declare function getChromeVersion(): number | false; +export declare const nextTick: (func: (value: void) => void | PromiseLike) => void; +export declare const loop: (items: string | any[], callback: (arg0: any) => any) => void; +export declare const addEventListenerWrapper: (target: any, eventType: string, cb: any, option?: any) => { + remove: () => void; +}; +/** + * Get transforms base on the given object. + * @param {Object} obj - The target object. + * @returns {string} A string contains transform values. + */ +export declare function getTransforms({ rotate, scaleX, scaleY, translateX, translateY, }: { + rotate?: number; + scaleX?: number; + scaleY?: number; + translateX?: number; + translateY?: number; +}): { + WebkitTransform: string; + msTransform: string; + transform: string; +}; diff --git a/packages/func/lib/utils/index.js b/packages/func/lib/utils/index.js new file mode 100644 index 0000000..78022ad --- /dev/null +++ b/packages/func/lib/utils/index.js @@ -0,0 +1,171 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/utils/index.ts +var utils_exports = {}; +__export(utils_exports, { + addEventListenerWrapper: () => addEventListenerWrapper, + getChromeVersion: () => getChromeVersion, + getFileSuffix: () => getFileSuffix, + getImageSuffixByFileType: () => getImageSuffixByFileType, + getTransforms: () => getTransforms, + isChrome: () => import_isChrome.default, + loop: () => loop, + matchS3Prefix: () => matchS3Prefix, + nextTick: () => nextTick +}); +module.exports = __toCommonJS(utils_exports); +var import_lodash_es = require("lodash-es"); +var import_react_dom = __toESM(require("react-dom")); +var import_isChrome = __toESM(require("./isChrome")); +var matchS3Prefix = (str) => { + return /^v[0-9]_/.test(str); +}; +var getFileSuffix = (fileName) => { + const splitArr = fileName.split("."); + return splitArr.length < 2 ? "" : splitArr[splitArr.length - 1]; +}; +var getImageSuffixByFileType = (type) => { + let imageSuffix = ""; + switch (type) { + case "jpeg": { + imageSuffix = ".jpg"; + break; + } + case "gif": { + imageSuffix = ".gif"; + break; + } + case "png": { + imageSuffix = ".png"; + break; + } + case "vnd.wap.wbmp": { + imageSuffix = ".wbmp"; + break; + } + case "x-up-wpng": { + imageSuffix = ".wpng"; + break; + } + case "nbmp": { + imageSuffix = ".nbmp"; + break; + } + } + return imageSuffix; +}; +function getChromeVersion() { + const arr = navigator.userAgent.split(" "); + let chromeVersion = ""; + for (let i = 0; i < arr.length; i++) { + if (/chrome/i.test(arr[i])) + chromeVersion = arr[i]; + } + if (chromeVersion) { + return Number(chromeVersion.split("/")[1].split(".")[0]); + } else { + return false; + } +} +var nextTick = (func) => { + if (queueMicrotask) { + queueMicrotask(func); + return; + } + Promise.resolve().then(func); +}; +var loop = (items, callback) => { + for (let i = 0; i < items.length; i++) { + const element = items[i]; + let isBreak = callback(element); + if (isBreak) { + return; + } + if (element["children"]) { + loop(element["children"], callback); + } + } +}; +var addEventListenerWrapper = (target, eventType, cb, option) => { + const callback = import_react_dom.default.unstable_batchedUpdates ? function run(e) { + import_react_dom.default.unstable_batchedUpdates(cb, e); + } : cb; + if (target.addEventListener) { + target.addEventListener(eventType, callback, option); + } + return { + remove: () => { + if (target.removeEventListener) { + target.removeEventListener(eventType, callback); + } + } + }; +}; +function getTransforms({ + rotate, + scaleX, + scaleY, + translateX, + translateY +}) { + const values = []; + if ((0, import_lodash_es.isNumber)(translateX) && translateX !== 0) { + values.push(`translateX(${translateX}px)`); + } + if ((0, import_lodash_es.isNumber)(translateY) && translateY !== 0) { + values.push(`translateY(${translateY}px)`); + } + if ((0, import_lodash_es.isNumber)(rotate) && rotate !== 0) { + values.push(`rotate(${rotate}deg)`); + } + if ((0, import_lodash_es.isNumber)(scaleX) && scaleX !== 1) { + values.push(`scaleX(${scaleX})`); + } + if ((0, import_lodash_es.isNumber)(scaleY) && scaleY !== 1) { + values.push(`scaleY(${scaleY})`); + } + const transform = values.length ? values.join(" ") : "none"; + return { + WebkitTransform: transform, + msTransform: transform, + transform + }; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + addEventListenerWrapper, + getChromeVersion, + getFileSuffix, + getImageSuffixByFileType, + getTransforms, + isChrome, + loop, + matchS3Prefix, + nextTick +}); diff --git a/packages/func/lib/utils/isChrome.d.ts b/packages/func/lib/utils/isChrome.d.ts new file mode 100644 index 0000000..2d07ceb --- /dev/null +++ b/packages/func/lib/utils/isChrome.d.ts @@ -0,0 +1,3 @@ +export declare const isBrowser: boolean; +declare const isChrome: () => boolean; +export default isChrome; diff --git a/packages/func/lib/utils/isChrome.js b/packages/func/lib/utils/isChrome.js new file mode 100644 index 0000000..4ad2681 --- /dev/null +++ b/packages/func/lib/utils/isChrome.js @@ -0,0 +1,42 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/utils/isChrome.ts +var isChrome_exports = {}; +__export(isChrome_exports, { + default: () => isChrome_default, + isBrowser: () => isBrowser +}); +module.exports = __toCommonJS(isChrome_exports); +var isBrowser = !!(typeof window !== "undefined" && window.document && window.document.createElement); +var isChrome = () => { + const winNav = isBrowser && window.navigator; + const vendorName = winNav && (winNav == null ? void 0 : winNav.vendor); + const userAgent = winNav && winNav.userAgent; + const isChromium = isBrowser && typeof chrome !== "undefined"; + const isOpera = isBrowser && typeof opr !== "undefined"; + const isIEedge = userAgent && userAgent.indexOf("Edge") > -1; + const isIOSChrome = !!(userAgent && userAgent.match("CriOS")); + const isDesktopChrome = isChromium && vendorName === "Google Inc." && !isOpera && !isIEedge; + return isIOSChrome || isDesktopChrome; +}; +var isChrome_default = isChrome; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + isBrowser +}); diff --git a/packages/hooks/es/useActivateWrapper/index.d.ts b/packages/hooks/es/useActivateWrapper/index.d.ts new file mode 100644 index 0000000..8c35f0c --- /dev/null +++ b/packages/hooks/es/useActivateWrapper/index.d.ts @@ -0,0 +1,4 @@ +export declare const useUnActivateWrapper: (cb: () => void) => void; +export declare const useActivateWrapper: (cb: any) => null; +export declare const useActivateState: () => boolean; +export default useActivateWrapper; diff --git a/packages/hooks/es/useDeepMemo/index.d.ts b/packages/hooks/es/useDeepMemo/index.d.ts new file mode 100644 index 0000000..ba9fabc --- /dev/null +++ b/packages/hooks/es/useDeepMemo/index.d.ts @@ -0,0 +1,2 @@ +import { DependencyList } from 'react'; +export default function useDeepMemo(factory: () => T, deps: DependencyList | undefined): T; diff --git a/packages/hooks/es/useSocket/index.d.ts b/packages/hooks/es/useSocket/index.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/hooks/lib/useActivateWrapper/index.d.ts b/packages/hooks/lib/useActivateWrapper/index.d.ts new file mode 100644 index 0000000..8c35f0c --- /dev/null +++ b/packages/hooks/lib/useActivateWrapper/index.d.ts @@ -0,0 +1,4 @@ +export declare const useUnActivateWrapper: (cb: () => void) => void; +export declare const useActivateWrapper: (cb: any) => null; +export declare const useActivateState: () => boolean; +export default useActivateWrapper; diff --git a/packages/hooks/lib/useDeepMemo/index.d.ts b/packages/hooks/lib/useDeepMemo/index.d.ts new file mode 100644 index 0000000..ba9fabc --- /dev/null +++ b/packages/hooks/lib/useDeepMemo/index.d.ts @@ -0,0 +1,2 @@ +import { DependencyList } from 'react'; +export default function useDeepMemo(factory: () => T, deps: DependencyList | undefined): T; diff --git a/packages/hooks/lib/useSocket/index.d.ts b/packages/hooks/lib/useSocket/index.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/icon/CHANGELOG.md b/packages/icon/CHANGELOG.md index e69de29..5b91928 100644 --- a/packages/icon/CHANGELOG.md +++ b/packages/icon/CHANGELOG.md @@ -0,0 +1,7 @@ +# @zhst/icon + +## 0.2.0 + +### Minor Changes + +- 初始化 icon 包 diff --git a/packages/icon/package.json b/packages/icon/package.json index 7eae57f..959dcb5 100644 --- a/packages/icon/package.json +++ b/packages/icon/package.json @@ -1,6 +1,6 @@ { "name": "@zhst/icon", - "version": "0.1.0", + "version": "0.2.0", "description": "图标库", "keywords": [ "icon", diff --git a/packages/map/es/user/index.d.ts b/packages/map/es/user/index.d.ts new file mode 100644 index 0000000..d87c485 --- /dev/null +++ b/packages/map/es/user/index.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/packages/map/es/user/index.js b/packages/map/es/user/index.js new file mode 100644 index 0000000..7c645e4 --- /dev/null +++ b/packages/map/es/user/index.js @@ -0,0 +1 @@ +export default {}; \ No newline at end of file diff --git a/packages/map/lib/user/index.js b/packages/map/lib/user/index.js new file mode 100644 index 0000000..eef01d8 --- /dev/null +++ b/packages/map/lib/user/index.js @@ -0,0 +1,25 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/user/index.ts +var user_exports = {}; +__export(user_exports, { + default: () => user_default +}); +module.exports = __toCommonJS(user_exports); +var user_default = {}; diff --git a/packages/material/CHANGELOG.md b/packages/material/CHANGELOG.md index 0303728..bd3d572 100644 --- a/packages/material/CHANGELOG.md +++ b/packages/material/CHANGELOG.md @@ -1,5 +1,11 @@ # @zhst/material +## 0.7.1 + +### Patch Changes + +- 添加登录 css 属性 + ## 0.7.0 ### Minor Changes diff --git a/packages/material/es/algorithmConfig/algorithmConfig.d.ts b/packages/material/es/algorithmConfig/algorithmConfig.d.ts new file mode 100644 index 0000000..9c0101e --- /dev/null +++ b/packages/material/es/algorithmConfig/algorithmConfig.d.ts @@ -0,0 +1,53 @@ +import React from 'react'; +import { AlgorithmTableProps } from './components/algorithmTable/AlgorithmTable'; +import { TimeTemplateTableProps } from './components/timeTemplateTable/TimeTemplateTable'; +export interface AlgorithmConfigProps { + onAddAlgorithm?: () => void; + /** + * 单选的图片数据 + */ + drawData?: { + imageKey: string; + odRect?: { + x: number; + y: number; + w: number; + h: number; + }; + score?: string; + time?: string; + }; + /** + * 单选状态圈选后的监听事件 + */ + drawListener?: (data: any) => void; + algorithmTableDataSource?: { + id: string; + templateName: string; + operatingCycle: string; + algorithmOccupied: number; + }[]; + timeTemplateDataSource?: { + id: string; + templateName: string; + operatingCycle: string; + arrangeWeek: string; + algorithmOccupied: string; + }[]; + boxList: { + id: string; + name: string; + }[]; + algorithmTableProps?: AlgorithmTableProps; + timeTemplateTableProps?: TimeTemplateTableProps; + selectedKey?: string; + rowKey?: string; + type: AlgorithmTableProps['tableType']; + onSelect?: (key: string, info?: any) => void; +} +export interface AlgorithmConfigRef { + draw: () => void; + cancelDraw: () => void; +} +declare const AlgorithmConfig: React.ForwardRefExoticComponent>; +export default AlgorithmConfig; diff --git a/packages/material/es/algorithmConfig/algorithmConfig.js b/packages/material/es/algorithmConfig/algorithmConfig.js new file mode 100644 index 0000000..f283541 --- /dev/null +++ b/packages/material/es/algorithmConfig/algorithmConfig.js @@ -0,0 +1,141 @@ +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +import React, { useRef, forwardRef, useImperativeHandle } from 'react'; +import { Flex, Image } from "antd"; +import theme from 'antd/es/theme'; +import { BigImagePreview } from '@zhst/meta'; +import { AlgorithmConfigImg, ErrorImage } from "../utils/base64Images"; +import AlgorithmTable from "./components/algorithmTable"; +import TimeTemplateTable from "./components/timeTemplateTable"; +var useToken = theme.useToken; +var Title = function Title(props) { + return /*#__PURE__*/React.createElement("h2", { + style: { + margin: '18px 16px', + fontSize: '14px', + color: 'rgba(0, 0, 0, 0.88)' + } + }, props.children); +}; +var AlgorithmConfig = /*#__PURE__*/forwardRef(function (props, ref) { + var _props$algorithmTable = props.algorithmTableDataSource, + algorithmTableDataSource = _props$algorithmTable === void 0 ? [] : _props$algorithmTable, + _props$timeTemplateDa = props.timeTemplateDataSource, + timeTemplateDataSource = _props$timeTemplateDa === void 0 ? [] : _props$timeTemplateDa, + _props$boxList = props.boxList, + boxList = _props$boxList === void 0 ? [] : _props$boxList, + drawData = props.drawData, + drawListener = props.drawListener, + algorithmTableProps = props.algorithmTableProps, + timeTemplateTableProps = props.timeTemplateTableProps, + selectedKey = props.selectedKey, + _props$type = props.type, + type = _props$type === void 0 ? 'multiple' : _props$type, + _props$rowKey = props.rowKey, + rowKey = _props$rowKey === void 0 ? 'id' : _props$rowKey, + onSelect = props.onSelect; + var drawImageRef = useRef(null); + var _useToken = useToken(), + token = _useToken.token; + useImperativeHandle(ref, function () { + return { + draw: function draw() { + var _drawImageRef$current; + (_drawImageRef$current = drawImageRef.current) === null || _drawImageRef$current === void 0 || _drawImageRef$current.setShowCrop(true); + }, + cancelDraw: function cancelDraw() { + var _drawImageRef$current2; + (_drawImageRef$current2 = drawImageRef.current) === null || _drawImageRef$current2 === void 0 || _drawImageRef$current2.setShowCrop(false); + } + }; + }); + return /*#__PURE__*/React.createElement(Flex, { + style: { + border: "1px solid ".concat(token.colorBorder), + backgroundColor: token.colorBgBase + } + }, /*#__PURE__*/React.createElement("div", { + title: "\u76D2\u5B50\u5217\u8868", + style: { + width: '13.9%' + } + }, /*#__PURE__*/React.createElement(Title, null, "\u76D2\u5B50\u5217\u8868"), /*#__PURE__*/React.createElement("div", { + style: { + borderTop: "1px solid ".concat(token.colorBorder) + } + }, boxList.map(function (item) { + return /*#__PURE__*/React.createElement("p", { + key: item.id, + onClick: function onClick() { + return onSelect === null || onSelect === void 0 ? void 0 : onSelect(item.id, item); + }, + style: { + margin: 0, + padding: "".concat(token.paddingXXS, "px ").concat(token.paddingLG, "px"), + cursor: 'pointer', + // @ts-ignore + color: selectedKey === item[rowKey] ? token.colorPrimary : token.colorText, + // @ts-ignore + backgroundColor: selectedKey === item[rowKey] ? token.blue1 : token.colorBgBase, + transition: '0.2s ease' + } + }, item.name); + }))), /*#__PURE__*/React.createElement("div", { + style: { + boxSizing: 'border-box', + width: '46.3%', + textAlign: 'center', + borderLeft: "1px solid ".concat(token.colorBorder), + borderRight: "1px solid ".concat(token.colorBorder) + } + }, type === 'single' ? /*#__PURE__*/React.createElement(BigImagePreview, { + ref: drawImageRef, + hideTypeBtns: true, + type: "CUSTOM", + screenshotButtonRender: function screenshotButtonRender() { + return /*#__PURE__*/React.createElement(React.Fragment, null); + } + // @ts-ignore + , + data: drawData, + onDraw: drawListener + }) : /*#__PURE__*/React.createElement("div", { + style: { + padding: '84px' + } + }, /*#__PURE__*/React.createElement(Image, { + width: '62.5%', + src: AlgorithmConfigImg, + preview: false, + fallback: ErrorImage + }), /*#__PURE__*/React.createElement("h2", null, "\u8BF7\u8FDB\u884C\u6279\u91CF\u914D\u7F6E"), /*#__PURE__*/React.createElement("ul", { + style: { + display: 'inline-block', + paddingLeft: 0, + width: '51.8%', + listStyle: 'none', + textAlign: 'left', + color: token.colorTextLabel + } + }, /*#__PURE__*/React.createElement("li", null, "\xB7 \u76D2\u5B50\u6279\u91CF\u914D\u7F6E\u4EC5\u652F\u6301\u540C\u578B\u53F7\u76D2\u5B50\uFF1B"), /*#__PURE__*/React.createElement("li", null, "\xB7 \u91C7\u53D6\u8986\u76D6\u5F0F\u66F4\u65B0\uFF0C\u4E0D\u4FDD\u7559\u539F\u6709\u914D\u7F6E\uFF0C\u4E14\u9884\u8B66\u68C0\u6D4B\u6846\u9ED8\u8BA4\u5168\u5C4F\u8303\u56F4\uFF1B"), /*#__PURE__*/React.createElement("li", null, "\xB7 \u4EBA\u6D41\u91CF\u7EDF\u8BA1\u9ED8\u8BA4\u68C0\u6D4B\u7EBF\u4E3A\u5C4F\u5E55\u4E2D\u592E\u6A2A\u5411\u7EBF\u6761\uFF0C\u4E14\u7BAD\u5934\u6307\u5411\u4E0B\u65B9\uFF1B"), /*#__PURE__*/React.createElement("li", null, "\xB7 \u4F18\u5148\u9009\u62E9\u62C9\u6D41\u6B63\u5E38\u7684\u6444\u50CF\u5934\u3002")))), /*#__PURE__*/React.createElement("div", { + style: { + width: '39.8%' + } + }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Title, null, "\u65F6\u95F4\u6A21\u677F"), /*#__PURE__*/React.createElement("div", { + style: { + padding: "".concat(token.paddingMD, "px ").concat(token.paddingSM, "px"), + borderTop: "1px solid ".concat(token.colorBorder), + borderBottom: "1px solid ".concat(token.colorBorder) + } + }, /*#__PURE__*/React.createElement(TimeTemplateTable, _extends({ + dataSource: timeTemplateDataSource + }, timeTemplateTableProps)))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Title, null, "\u7B97\u6CD5\u5E94\u7528"), /*#__PURE__*/React.createElement("div", { + style: { + padding: "".concat(token.paddingMD, "px ").concat(token.paddingSM, "px"), + borderTop: "1px solid ".concat(token.colorBorder) + } + }, /*#__PURE__*/React.createElement(AlgorithmTable, _extends({ + dataSource: algorithmTableDataSource, + tableType: type + }, algorithmTableProps)))))); +}); +export default AlgorithmConfig; \ No newline at end of file diff --git a/packages/material/es/algorithmConfig/components/algorithmTable/AlgorithmTable.d.ts b/packages/material/es/algorithmConfig/components/algorithmTable/AlgorithmTable.d.ts new file mode 100644 index 0000000..baec10b --- /dev/null +++ b/packages/material/es/algorithmConfig/components/algorithmTable/AlgorithmTable.d.ts @@ -0,0 +1,20 @@ +import React from 'react'; +import type { ParamsType, ProTableProps } from '@ant-design/pro-components'; +import { AnyObject } from 'antd/es/_util/type'; +import { SelectProps } from 'antd/lib'; +export interface AlgorithmTableProps extends ProTableProps { + onAddAlgorithm?: (id?: string, record?: any) => void; + onItemSwitch?: (status?: boolean, id?: string, info?: any) => void; + onItemEdit?: (values?: any, info?: any) => void; + onItemDelete?: (id?: string, info?: any) => void; + onSortSelect?: SelectProps['onChange']; + onDraw?: (id: any, info?: any) => void; + selectedKey?: string; + sortList?: { + label: string; + value: string; + }[]; + tableType?: 'multiple' | 'single'; +} +declare const AlgorithmTable: (props: AlgorithmTableProps) => React.JSX.Element; +export default AlgorithmTable; diff --git a/packages/material/es/algorithmConfig/components/algorithmTable/AlgorithmTable.js b/packages/material/es/algorithmConfig/components/algorithmTable/AlgorithmTable.js new file mode 100644 index 0000000..d50ba26 --- /dev/null +++ b/packages/material/es/algorithmConfig/components/algorithmTable/AlgorithmTable.js @@ -0,0 +1,129 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +import React from 'react'; +import { DeleteFilled, EditFilled, ImportOutlined, PlusCircleFilled } from '@ant-design/icons'; +import { ProTable } from '@ant-design/pro-components'; +import { Popconfirm, Select, Space, Switch } from 'antd'; +import theme from 'antd/es/theme'; +import SchemaFormModal from "../schemaFormModal/schemaFormModal"; +var useToken = theme.useToken; +var AlgorithmTable = function AlgorithmTable(props) { + var onAddAlgorithm = props.onAddAlgorithm, + onItemSwitch = props.onItemSwitch, + onItemEdit = props.onItemEdit, + onItemDelete = props.onItemDelete, + onSortSelect = props.onSortSelect, + selectedKey = props.selectedKey, + onDraw = props.onDraw, + _props$tableType = props.tableType, + tableType = _props$tableType === void 0 ? 'multiple' : _props$tableType, + _props$sortList = props.sortList, + sortList = _props$sortList === void 0 ? [] : _props$sortList; + var _useToken = useToken(), + token = _useToken.token; + var columns = [{ + title: '模板名称', + dataIndex: 'templateName' + }, { + title: '运行周期', + dataIndex: 'runCycle', + valueType: 'select', + width: 80, + valueEnum: { + 1: { + text: '黑夜' + }, + 0: { + text: '白天' + } + } + }, { + title: '算力占用', + dataIndex: 'powerOccupy' + }, { + title: '操作', + key: 'option', + valueType: 'option', + fixed: true, + render: function render(_DOM, record) { + return [/*#__PURE__*/React.createElement(Switch, { + value: record.status, + onChange: function onChange(_status) { + return onItemSwitch === null || onItemSwitch === void 0 ? void 0 : onItemSwitch(_status, record.id, record); + } + }), /*#__PURE__*/React.createElement("a", { + onClick: function onClick() { + return onDraw === null || onDraw === void 0 ? void 0 : onDraw(record.id, record); + }, + style: { + display: tableType === 'single' ? 'block' : 'none' + }, + href: "#" + }, /*#__PURE__*/React.createElement(ImportOutlined, null)), /*#__PURE__*/React.createElement(SchemaFormModal, { + type: record.templateType, + onFinish: ( /*#__PURE__*/function () { + var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(values) { + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + return _context.abrupt("return", onItemEdit === null || onItemEdit === void 0 ? void 0 : onItemEdit(values, record)); + case 1: + case "end": + return _context.stop(); + } + }, _callee); + })); + return function (_x) { + return _ref.apply(this, arguments); + }; + }()), + trigger: /*#__PURE__*/React.createElement("a", { + href: "#" + }, /*#__PURE__*/React.createElement(EditFilled, null)) + }), /*#__PURE__*/React.createElement(Popconfirm, { + title: "\u786E\u5B9A\u5220\u9664\u5417\uFF1F", + onConfirm: function onConfirm() { + return onItemDelete === null || onItemDelete === void 0 ? void 0 : onItemDelete(record.id, record); + } + }, /*#__PURE__*/React.createElement("a", { + href: "#" + }, /*#__PURE__*/React.createElement(DeleteFilled, null)))]; + } + }]; + return /*#__PURE__*/React.createElement(ProTable, _extends({ + columns: columns, + bordered: true, + scroll: { + y: 240 + }, + dataSource: [], + headerTitle: /*#__PURE__*/React.createElement(Space, { + size: 16 + }, /*#__PURE__*/React.createElement(Select, { + value: selectedKey, + style: { + width: 320 + }, + onChange: onSortSelect, + options: sortList + }), /*#__PURE__*/React.createElement(PlusCircleFilled, { + onClick: function onClick() { + return onAddAlgorithm === null || onAddAlgorithm === void 0 ? void 0 : onAddAlgorithm(); + }, + style: { + fontSize: '24px', + color: token.colorPrimary, + cursor: 'pointer' + } + })), + toolbar: undefined, + rowKey: "id", + search: false, + options: false, + pagination: false + }, props)); +}; +export default AlgorithmTable; \ No newline at end of file diff --git a/packages/material/es/algorithmConfig/components/algorithmTable/index.d.ts b/packages/material/es/algorithmConfig/components/algorithmTable/index.d.ts new file mode 100644 index 0000000..42d422c --- /dev/null +++ b/packages/material/es/algorithmConfig/components/algorithmTable/index.d.ts @@ -0,0 +1,3 @@ +import AlgorithmTable from './AlgorithmTable'; +export type { AlgorithmTableProps } from './AlgorithmTable'; +export default AlgorithmTable; diff --git a/packages/material/es/algorithmConfig/components/algorithmTable/index.js b/packages/material/es/algorithmConfig/components/algorithmTable/index.js new file mode 100644 index 0000000..345e650 --- /dev/null +++ b/packages/material/es/algorithmConfig/components/algorithmTable/index.js @@ -0,0 +1,2 @@ +import AlgorithmTable from "./AlgorithmTable"; +export default AlgorithmTable; \ No newline at end of file diff --git a/packages/material/es/algorithmConfig/components/schemaFormModal/index.d.ts b/packages/material/es/algorithmConfig/components/schemaFormModal/index.d.ts new file mode 100644 index 0000000..b42d137 --- /dev/null +++ b/packages/material/es/algorithmConfig/components/schemaFormModal/index.d.ts @@ -0,0 +1,2 @@ +import SchemaFormModal from './schemaFormModal'; +export default SchemaFormModal; diff --git a/packages/material/es/algorithmConfig/components/schemaFormModal/index.js b/packages/material/es/algorithmConfig/components/schemaFormModal/index.js new file mode 100644 index 0000000..deeb691 --- /dev/null +++ b/packages/material/es/algorithmConfig/components/schemaFormModal/index.js @@ -0,0 +1,2 @@ +import SchemaFormModal from "./schemaFormModal"; +export default SchemaFormModal; \ No newline at end of file diff --git a/packages/material/es/algorithmConfig/components/schemaFormModal/schemaFormModal.d.ts b/packages/material/es/algorithmConfig/components/schemaFormModal/schemaFormModal.d.ts new file mode 100644 index 0000000..2c2d7cd --- /dev/null +++ b/packages/material/es/algorithmConfig/components/schemaFormModal/schemaFormModal.d.ts @@ -0,0 +1,8 @@ +import { FC } from 'react'; +import type { ModalFormProps } from '@ant-design/pro-components'; +export interface SchemaFormModalProps extends ModalFormProps { + type: 'fire' | 'smoke' | 'traffic' | 'face' | 'destroy' | 'wander' | 'gather' | 'cameraBlock'; +} +export declare const SCHEME_TYPE_LIST: Map; +declare const SchemaFormModal: FC; +export default SchemaFormModal; diff --git a/packages/material/es/algorithmConfig/components/schemaFormModal/schemaFormModal.js b/packages/material/es/algorithmConfig/components/schemaFormModal/schemaFormModal.js new file mode 100644 index 0000000..b1c56e2 --- /dev/null +++ b/packages/material/es/algorithmConfig/components/schemaFormModal/schemaFormModal.js @@ -0,0 +1,128 @@ +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +import React from 'react'; +import { BetaSchemaForm } from '@ant-design/pro-components'; +import { Input, Space } from 'antd'; +export var SCHEME_TYPE_LIST = new Map([['fire', '火焰识别'], ['smoke', '烟雾识别'], ['traffic', '人流量统计'], ['face', '面部遮挡识别'], ['destroy', '人员破坏识别'], ['wander', '人员徘徊识别'], ['gather', '人员聚集识别'], ['cameraBlock', '摄像头遮挡识别']]); +var SchemaFormModal = function SchemaFormModal(props) { + var _props$type = props.type, + type = _props$type === void 0 ? 'fire' : _props$type, + onFinish = props.onFinish; + var getColumnsByType = function getColumnsByType(type) { + if (!type) return []; + var arr = []; + if (type === 'gather') { + arr.push({ + title: '预警人数:', + dataIndex: 'alarmMember', + formItemProps: { + rules: [{ + required: true, + message: '此项为必填项' + }] + }, + renderFormItem: function renderFormItem() { + return /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement(Input, null), "\u4EBA\uFF083~10\uFF09"); + }, + width: 'm' + }); + } + if (type === 'cameraBlock') { + arr.push({ + title: '遮挡百分比:', + dataIndex: 'blockPercent', + formItemProps: { + rules: [{ + required: true, + message: '此项为必填项' + }] + }, + renderFormItem: function renderFormItem() { + return /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement(Input, null), "%\uFF0830~80\uFF09"); + }, + width: 'm' + }); + } + if (type !== 'traffic') { + arr.push({ + title: '最短持续时间:', + dataIndex: 'minTime', + formItemProps: { + rules: [{ + required: true, + message: '此项为必填项' + }] + }, + renderFormItem: function renderFormItem() { + return /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement(Input, null), "\u79D2\uFF082~10\uFF09"); + }, + width: 'm' + }); + arr.push({ + title: '报警间隔时间:', + dataIndex: 'alarmTime', + formItemProps: { + rules: [{ + required: true, + message: '此项为必填项' + }] + }, + renderFormItem: function renderFormItem() { + return /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement(Input, null), "\u79D2\uFF0810~600\uFF09"); + }, + width: 'm' + }); + } else if (type === 'traffic') { + arr.push({ + title: '灵敏度:', + dataIndex: 'sensitivity', + formItemProps: { + rules: [{ + required: true, + message: '此项为必填项' + }] + }, + renderFormItem: function renderFormItem() { + return /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement(Input, null), "\uFF080~100\uFF09"); + }, + width: 'm' + }); + } + arr.push({ + title: '灵敏度:', + dataIndex: 'sensitivity', + formItemProps: { + rules: [{ + required: true, + message: '此项为必填项' + }] + }, + renderFormItem: function renderFormItem() { + return /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement(Input, null), "\uFF080~100\uFF09"); + }, + width: 'm' + }); + return arr; + }; + return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(BetaSchemaForm, _extends({ + width: 600 + // @ts-ignore + , + title: SCHEME_TYPE_LIST.get(type), + shouldUpdate: false, + layoutType: "ModalForm", + layout: "horizontal", + labelCol: { + span: 6 + }, + wrapperCol: { + span: 18 + }, + preserve: false, + modalProps: { + destroyOnClose: true + }, + onFinish: onFinish, + columns: getColumnsByType(type) + }, props))); +}; +export default SchemaFormModal; \ No newline at end of file diff --git a/packages/material/es/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.d.ts b/packages/material/es/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.d.ts new file mode 100644 index 0000000..102d04a --- /dev/null +++ b/packages/material/es/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.d.ts @@ -0,0 +1,8 @@ +import React from 'react'; +import type { ParamsType, ProTableProps } from '@ant-design/pro-components'; +import { AnyObject } from 'antd/es/_util/type'; +export interface TimeTemplateTableProps extends ProTableProps { + onItemBlur?: (value?: number | string, id?: any, record?: any) => void; +} +declare const TimeTemplateTable: (props: TimeTemplateTableProps) => React.JSX.Element; +export default TimeTemplateTable; diff --git a/packages/material/es/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.js b/packages/material/es/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.js new file mode 100644 index 0000000..aa4c75e --- /dev/null +++ b/packages/material/es/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.js @@ -0,0 +1,47 @@ +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +import React from 'react'; +import { ProTable } from '@ant-design/pro-components'; +import { InputNumber } from 'antd'; +var TimeTemplateTable = function TimeTemplateTable(props) { + var onItemBlur = props.onItemBlur; + var columns = [{ + title: '模板名称', + dataIndex: 'templateName' + }, { + title: '运行周期', + dataIndex: 'runCycle' + }, { + title: '布控星期', + dataIndex: 'arrangeDay' + }, { + title: '算力占用', + dataIndex: 'powerOccupy' + }, { + title: '配置路数', + key: 'option', + valueType: 'option', + render: function render(_, record) { + return /*#__PURE__*/React.createElement(InputNumber, { + value: record.lineNum, + onBlur: function onBlur(e) { + return onItemBlur === null || onItemBlur === void 0 ? void 0 : onItemBlur(e.target.value, record.id, record); + }, + min: 0 + }); + } + }]; + return /*#__PURE__*/React.createElement(ProTable, _extends({ + columns: columns, + bordered: true, + scroll: { + y: 95 + }, + toolbar: undefined, + rowKey: "id", + search: false, + options: false, + pagination: false, + dataSource: [] + }, props)); +}; +export default TimeTemplateTable; \ No newline at end of file diff --git a/packages/material/es/algorithmConfig/components/timeTemplateTable/index.d.ts b/packages/material/es/algorithmConfig/components/timeTemplateTable/index.d.ts new file mode 100644 index 0000000..fefdc38 --- /dev/null +++ b/packages/material/es/algorithmConfig/components/timeTemplateTable/index.d.ts @@ -0,0 +1,3 @@ +import TimeTemplateTable from './TimeTemplateTable'; +export type { TimeTemplateTableProps } from './TimeTemplateTable'; +export default TimeTemplateTable; diff --git a/packages/material/es/algorithmConfig/components/timeTemplateTable/index.js b/packages/material/es/algorithmConfig/components/timeTemplateTable/index.js new file mode 100644 index 0000000..c169e92 --- /dev/null +++ b/packages/material/es/algorithmConfig/components/timeTemplateTable/index.js @@ -0,0 +1,2 @@ +import TimeTemplateTable from "./TimeTemplateTable"; +export default TimeTemplateTable; \ No newline at end of file diff --git a/packages/material/es/algorithmConfig/index.d.ts b/packages/material/es/algorithmConfig/index.d.ts new file mode 100644 index 0000000..7f2faa9 --- /dev/null +++ b/packages/material/es/algorithmConfig/index.d.ts @@ -0,0 +1,5 @@ +import AlgorithmConfig from './algorithmConfig'; +export type { AlgorithmConfigProps, AlgorithmConfigRef } from './algorithmConfig'; +export type { AlgorithmTableProps } from './components/algorithmTable'; +export type { TimeTemplateTableProps } from './components/timeTemplateTable'; +export default AlgorithmConfig; diff --git a/packages/material/es/algorithmConfig/index.js b/packages/material/es/algorithmConfig/index.js new file mode 100644 index 0000000..d37d374 --- /dev/null +++ b/packages/material/es/algorithmConfig/index.js @@ -0,0 +1,2 @@ +import AlgorithmConfig from "./algorithmConfig"; +export default AlgorithmConfig; \ No newline at end of file diff --git a/packages/material/es/algorithmConfigModal/algorithmConfigModal.d.ts b/packages/material/es/algorithmConfigModal/algorithmConfigModal.d.ts new file mode 100644 index 0000000..41b21e2 --- /dev/null +++ b/packages/material/es/algorithmConfigModal/algorithmConfigModal.d.ts @@ -0,0 +1,8 @@ +import { FC } from 'react'; +import { ModalProps } from "antd"; +import { AlgorithmConfigProps } from '../algorithmConfig/algorithmConfig'; +export interface AlgorithmConfigModalProps extends ModalProps { + algorithmConfigProps: AlgorithmConfigProps; +} +declare const AlgorithmConfigModal: FC; +export default AlgorithmConfigModal; diff --git a/packages/material/es/algorithmConfigModal/algorithmConfigModal.js b/packages/material/es/algorithmConfigModal/algorithmConfigModal.js new file mode 100644 index 0000000..6b0abfe --- /dev/null +++ b/packages/material/es/algorithmConfigModal/algorithmConfigModal.js @@ -0,0 +1,22 @@ +function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } +import React from 'react'; +import { ConfigProvider, Modal } from "antd"; +import AlgorithmConfig from "../algorithmConfig/algorithmConfig"; +var AlgorithmConfigModal = function AlgorithmConfigModal(props) { + var algorithmConfigProps = props.algorithmConfigProps; + return /*#__PURE__*/React.createElement(ConfigProvider, { + theme: { + components: { + Modal: { + headerBg: '#EFF2F4', + footerBg: '#EFF2F4', + contentBg: '#EFF2F4' + } + } + } + }, /*#__PURE__*/React.createElement(Modal, _extends({ + okText: "\u786E\u5B9A", + cancelText: "\u53D6\u6D88" + }, props), /*#__PURE__*/React.createElement(AlgorithmConfig, algorithmConfigProps))); +}; +export default AlgorithmConfigModal; \ No newline at end of file diff --git a/packages/material/es/algorithmConfigModal/index.d.ts b/packages/material/es/algorithmConfigModal/index.d.ts new file mode 100644 index 0000000..873cc35 --- /dev/null +++ b/packages/material/es/algorithmConfigModal/index.d.ts @@ -0,0 +1,2 @@ +import AlgorithmConfigModal from './algorithmConfigModal'; +export default AlgorithmConfigModal; diff --git a/packages/material/es/algorithmConfigModal/index.js b/packages/material/es/algorithmConfigModal/index.js new file mode 100644 index 0000000..3a3b16f --- /dev/null +++ b/packages/material/es/algorithmConfigModal/index.js @@ -0,0 +1,2 @@ +import AlgorithmConfigModal from "./algorithmConfigModal"; +export default AlgorithmConfigModal; \ No newline at end of file diff --git a/packages/material/es/index.d.ts b/packages/material/es/index.d.ts new file mode 100644 index 0000000..8d44736 --- /dev/null +++ b/packages/material/es/index.d.ts @@ -0,0 +1,6 @@ +export { default as AlgorithmConfigModal } from './algorithmConfigModal'; +export { default as AlgorithmConfig } from './algorithmConfig'; +export type { AlgorithmConfigRef, AlgorithmConfigProps } from './algorithmConfig'; +export { default as Login } from './login'; +export { default as Password } from './password'; +export * from 'rc-util'; diff --git a/packages/material/es/index.js b/packages/material/es/index.js new file mode 100644 index 0000000..4ee0143 --- /dev/null +++ b/packages/material/es/index.js @@ -0,0 +1,5 @@ +export { default as AlgorithmConfigModal } from "./algorithmConfigModal"; +export { default as AlgorithmConfig } from "./algorithmConfig"; +export { default as Login } from "./login"; +export { default as Password } from "./password"; +export * from 'rc-util'; \ No newline at end of file diff --git a/packages/material/es/login/Login.d.ts b/packages/material/es/login/Login.d.ts new file mode 100644 index 0000000..cd9701d --- /dev/null +++ b/packages/material/es/login/Login.d.ts @@ -0,0 +1,14 @@ +/** + * Created by jiangzhixiong on 2024/03/18 + */ +import { FC } from 'react'; +import { FormProps } from 'antd'; +interface LoginProps { + title: string; + onIconClick?: () => void; + rememberPassword?: boolean; + imageUrl: string; + onFinish: FormProps['onFinish']; +} +declare const Login: FC; +export default Login; diff --git a/packages/material/es/login/Login.js b/packages/material/es/login/Login.js new file mode 100644 index 0000000..aa3a20c --- /dev/null +++ b/packages/material/es/login/Login.js @@ -0,0 +1,111 @@ +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +/** + * Created by jiangzhixiong on 2024/03/18 + */ + +import React from 'react'; +import { Button, Checkbox, Flex, Form, Image, Input, theme } from 'antd'; +import { HomeOutlined } from '@ant-design/icons'; +var useToken = theme.useToken; +var Login = function Login(props) { + var title = props.title, + onIconClick = props.onIconClick, + _props$rememberPasswo = props.rememberPassword, + rememberPassword = _props$rememberPasswo === void 0 ? true : _props$rememberPasswo, + imageUrl = props.imageUrl, + onFinish = props.onFinish; + var _Form$useForm = Form.useForm(), + _Form$useForm2 = _slicedToArray(_Form$useForm, 1), + form = _Form$useForm2[0]; + var _useToken = useToken(), + token = _useToken.token; + return /*#__PURE__*/React.createElement(Flex, null, /*#__PURE__*/React.createElement(Flex, { + align: "center", + justify: "center", + style: { + position: 'relative', + width: '40%', + padding: "30px" + } + }, /*#__PURE__*/React.createElement(HomeOutlined, { + onClick: onIconClick, + style: { + position: 'absolute', + top: '30px', + left: '30px', + fontSize: "".concat(token.sizeLG, "px"), + cursor: 'pointer' + } + }), /*#__PURE__*/React.createElement("div", { + style: { + width: '56%' + } + }, /*#__PURE__*/React.createElement("h2", { + style: { + margin: '30px 0', + fontSize: '30px' + } + }, title), /*#__PURE__*/React.createElement(Form, { + layout: "vertical", + form: form, + onFinish: onFinish + }, /*#__PURE__*/React.createElement(Form.Item, { + name: "account", + label: "\u8D26\u53F7", + rules: [{ + required: true, + message: '请输入账号!' + }] + }, /*#__PURE__*/React.createElement(Input, { + placeholder: "\u8BF7\u8F93\u5165\u8D26\u53F7", + variant: "borderless", + style: { + border: 'none', + borderBottom: '1px solid rgba(0, 0, 0, 0.06)' + } + })), /*#__PURE__*/React.createElement(Form.Item, { + name: "password", + label: "\u5BC6\u7801", + rules: [{ + required: true, + message: '请输入密码!' + }] + }, /*#__PURE__*/React.createElement(Input.Password, { + placeholder: "\u8BF7\u8F93\u5165\u5BC6\u7801", + variant: "borderless", + style: { + border: 'none', + borderBottom: '1px solid rgba(0, 0, 0, 0.06)' + } + })), /*#__PURE__*/React.createElement(Form.Item, { + style: { + display: rememberPassword ? 'block' : 'none' + } + }, /*#__PURE__*/React.createElement(Form.Item, { + name: "remember", + valuePropName: "checked", + noStyle: true + }, /*#__PURE__*/React.createElement(Checkbox, null, "\u8BB0\u4F4F\u5BC6\u7801"))), /*#__PURE__*/React.createElement(Form.Item, null, /*#__PURE__*/React.createElement(Button, { + block: true, + type: "primary", + htmlType: "submit" + }, "\u767B\u5F55"))))), /*#__PURE__*/React.createElement("div", { + style: { + width: '60%' + } + }, /*#__PURE__*/React.createElement(Image, { + style: { + width: '100%' + }, + src: imageUrl, + width: '100%', + preview: false, + fallback: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg==" + }))); +}; +export default Login; \ No newline at end of file diff --git a/packages/material/es/login/images/ai-suanfa.png b/packages/material/es/login/images/ai-suanfa.png new file mode 100644 index 0000000..848fc3a Binary files /dev/null and b/packages/material/es/login/images/ai-suanfa.png differ diff --git a/packages/material/es/login/images/ai-video.png b/packages/material/es/login/images/ai-video.png new file mode 100644 index 0000000..99304b7 Binary files /dev/null and b/packages/material/es/login/images/ai-video.png differ diff --git a/packages/material/es/login/images/box-manage.png b/packages/material/es/login/images/box-manage.png new file mode 100644 index 0000000..fcaca42 Binary files /dev/null and b/packages/material/es/login/images/box-manage.png differ diff --git a/packages/material/es/login/index.d.ts b/packages/material/es/login/index.d.ts new file mode 100644 index 0000000..189be5f --- /dev/null +++ b/packages/material/es/login/index.d.ts @@ -0,0 +1,2 @@ +import Login from './Login'; +export default Login; diff --git a/packages/material/es/login/index.js b/packages/material/es/login/index.js new file mode 100644 index 0000000..11d767f --- /dev/null +++ b/packages/material/es/login/index.js @@ -0,0 +1,2 @@ +import Login from "./Login"; +export default Login; \ No newline at end of file diff --git a/packages/material/es/password/Password.d.ts b/packages/material/es/password/Password.d.ts new file mode 100644 index 0000000..47f9c0f --- /dev/null +++ b/packages/material/es/password/Password.d.ts @@ -0,0 +1,11 @@ +/** + * Created by jiangzhixiong on 2024/03/18 + */ +import { FC } from 'react'; +import { FormProps } from 'antd'; +interface PasswordProps { + onFinish: FormProps['onFinish']; + onCancel: () => void; +} +declare const Password: FC; +export default Password; diff --git a/packages/material/es/password/Password.js b/packages/material/es/password/Password.js new file mode 100644 index 0000000..07c03ee --- /dev/null +++ b/packages/material/es/password/Password.js @@ -0,0 +1,101 @@ +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +/** + * Created by jiangzhixiong on 2024/03/18 + */ + +import React from 'react'; +import { Button, Form, Input, Space } from 'antd'; +var Password = function Password(props) { + var onFinish = props.onFinish, + onCancel = props.onCancel; + var _Form$useForm = Form.useForm(), + _Form$useForm2 = _slicedToArray(_Form$useForm, 1), + form = _Form$useForm2[0]; + return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h2", { + style: { + marginTop: '0', + fontSize: '20px' + } + }, "\u4FEE\u6539\u5BC6\u7801"), /*#__PURE__*/React.createElement(Form, { + labelCol: { + span: 4 + }, + wrapperCol: { + span: 20 + }, + form: form, + onFinish: onFinish + }, /*#__PURE__*/React.createElement(Form.Item, { + name: "password", + label: "\u539F\u5BC6\u7801", + rules: [{ + required: true, + message: '请输入密码!' + }] + }, /*#__PURE__*/React.createElement(Input.Password, { + variant: "borderless", + style: { + border: 'none', + borderBottom: '1px solid rgba(0, 0, 0, 0.06)' + } + })), /*#__PURE__*/React.createElement(Form.Item, { + name: "newPassword", + label: "\u65B0\u5BC6\u7801", + rules: [{ + required: true, + message: '请输入新密码!' + }] + }, /*#__PURE__*/React.createElement(Input.Password, { + variant: "borderless", + style: { + border: 'none', + borderBottom: '1px solid rgba(0, 0, 0, 0.06)' + } + })), /*#__PURE__*/React.createElement(Form.Item, { + name: "rePassword", + label: "\u786E\u8BA4\u5BC6\u7801", + dependencies: ['password'], + rules: [{ + required: true, + message: '请再次输入密码!' + }, function (_ref) { + var getFieldValue = _ref.getFieldValue; + return { + validator: function validator(_, value) { + if (!value || getFieldValue('password') === value) { + return Promise.resolve(); + } + return Promise.reject(new Error('两次输入的密码不一致!')); + } + }; + }] + }, /*#__PURE__*/React.createElement(Input.Password, { + variant: "borderless", + style: { + border: 'none', + borderBottom: '1px solid rgba(0, 0, 0, 0.06)' + } + })), /*#__PURE__*/React.createElement("div", { + style: { + textAlign: 'right' + } + }, /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement(Button, { + htmlType: "reset", + onClick: onCancel, + style: { + width: '100px' + } + }, "\u53D6\u6D88"), /*#__PURE__*/React.createElement(Button, { + type: "primary", + htmlType: "submit", + style: { + width: '100px' + } + }, "\u786E\u8BA4"))))); +}; +export default Password; \ No newline at end of file diff --git a/packages/material/es/password/index.d.ts b/packages/material/es/password/index.d.ts new file mode 100644 index 0000000..b102ba8 --- /dev/null +++ b/packages/material/es/password/index.d.ts @@ -0,0 +1,2 @@ +import Password from './Password'; +export default Password; diff --git a/packages/material/es/password/index.js b/packages/material/es/password/index.js new file mode 100644 index 0000000..19f86b0 --- /dev/null +++ b/packages/material/es/password/index.js @@ -0,0 +1,2 @@ +import Password from "./Password"; +export default Password; \ No newline at end of file diff --git a/packages/material/es/utils/base64Images.d.ts b/packages/material/es/utils/base64Images.d.ts new file mode 100644 index 0000000..0cd9cac --- /dev/null +++ b/packages/material/es/utils/base64Images.d.ts @@ -0,0 +1,2 @@ +export declare const AlgorithmConfigImg = "data:image/png;base64,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"; +export declare const ErrorImage = "data:image/png;base64,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"; diff --git a/packages/material/es/utils/base64Images.js b/packages/material/es/utils/base64Images.js new file mode 100644 index 0000000..26e6b03 --- /dev/null +++ b/packages/material/es/utils/base64Images.js @@ -0,0 +1,2 @@ +export var AlgorithmConfigImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAJ4CAMAAADBbDkhAAADAFBMVEUAAAAEY8YLY84KY84IYccMZ88LY8kEbfx2cf8MZeFsd/4KYcgHfvVQmvgCgPzO4frG3/pTyvTM4flaoPdHpPdNwe7B3PxQx/bh7fw6oOJUpfgKYcq81vcGWfo6oPSeyPabxfWuy/cJYshjpvmNyvuiy/cIP+QgnfS+2vljp/gIZPgDcPoHQfiZw/QEXvprpfnD2+5Nu/aq0PsonvMOYMna6f0DWPxE9u1Mmfio0voxnvJ1rPoIaPsIZfnY6ft0qPkCS/qo1fsTPvejv/Q9lP5DlP1OsvU3gvkBT/4CX/3S4fAlZvinzvqMvPcqiPcadvqy0/mEx/7f6vUjdvqRrvVNjfYeb/0wU3jB4vyCvu9aivHg6O+Kh/ja4OZWm/vk7fSdtd4VgPU4mN/R4/QaYf3o8PcGXfI/mfJMpexLj/vY4/JK3PgvT4tEs/71+v2iyvLH0NssbeRktPD0xpb3pX9UXWl6u/jO4PEfnfdxheh1wv6Twu7cxrSnr7Zwe4tr2e92dvEzbueOk5yKvPgyWIN8l79C3erptYUrU47hwJ83u+fHwrIXe/mLwf8/Sligv/8EYf4Xkf0ko/wlqPufu/vx9foJbf0Zmf1krf1eqfsblPYmdfgem/giofkRgPI15fofnvx9wv5Wf/wmrfzr8voNdvKFufmZwPgWivSqy/6Fqvk7kv002/wy0f0ymPwquP4voPzU5P611P7p8/5DivyTxv4ViPxdeuyBl/intftssP4qnvhEj/Wkxv1ytv10vv2GzvlOkfnJ3P4vyfz7/v+Nw/9ylf1Nhfxmkf1Xo/s+bPBohvwKS+MuY/AuwP1yiv4xrfxFpftwpf0dWOxzfv+Xt/tnuP1iof0/wfyPsPpMavQt6vtbcvdftvw7hsdJW/AmuvmR0P4oqPd1xf5CgNY3tv2zxN0NduoHZ+s8Yf1kwfoymu05dPxQsfh1lPHm6e1Afe0ixPoifug8u/o1SmY8R1S+5P+b5Ps6q/MeK0Kp4f0ibceJ6vEvZ6Sh6sQLDRFlsQw4AAAAjHRSTlMADRksPiJUZvs08GJc/c3+9jL4++gp/j3+JOZw/K/s1uP+Sd/1yuj58fxBzebxVfoUSIHzf/6c/e6+8Pt6jPXaYrLM/uGSVdjT0CjT3V7+rOn+g9r0XcT+z339QP79sWn+0flY99LRd/7Guf7+1JtD/aH2+vz+p522/M2b/f779NzG/cxe/KW0ynb+wnMWo08AAZ4/SURBVHja7J3PixtlGMcna+0gBlYHqtnDXkSxFAxvFlMQamwVexiM6GJhS7CBhsVlDwZ72AV79FoPRuaizdKF11URJGHASwRF3n9EPQjuYcDDCp583l/zvMlmM2NxaBKez04y2XSP/fB93+d93nc84lETtne3trZ2W8wjCGI5KYWbwVCxSqoTxJIS7gf14epwVV71gFQniCUk3NyqQ5RbhvVgn1QniOUi3L+YWj60qjd226Q6QSwNkOYY5k6oVxrb7dAjCGIJYO2LSuxg1aVeieM4iqLtDqU6QSw8rL0lwxwS3cn0ADSPOI8k4kMynSAWG9bZPTVoD2Sa8yhFbHoEQSwuoDnkeJAarpRvNCDNI1f0KPRywUoeQRDzRjstwWGoB0kldZxHdvDu5aC7t7d3t9m9QLYTxBzR2Q1Sv4f2rYKao+tim2VrfveTjxW3ah5BEHNCS2r+i6rAIWrQDnDjeCp9y5vNhZt7HxvPXz5HkU4QcwFr7QenS3ANmeacW82B9NbJq/kHvk+iE8RcgJoPXc1jJTlclkRY19ve2bDmx6nmT/q+f4lEJ4hHT3czqCvFUfIgaNQrdqQON41IIoNoz9A8TfM3QXMSnSDmgdZ+w25RUwyV6ZXYjNdtpiMJip41aPdJdILIS5GehPtyw7kSHEMd0jzWmk8O2dXtbNFLNdBcA5qT6AQxF4SbTxm/1U0L31BpjmILuLTdicCh+2zN3/R9Ep0gcgc2Y15hhBtPpd2umOj1OI5cEmU8OM6V6tJ1Pk109ixq/qRPohPEXBBiG5yDGrQjNsOxEse5wER3Nb/rpjmJThCe9+g7xeXeFSi1m8b2ALeojUc5flRwuJJpondvppX2Kz6JThBzAdvcAsURPT+vV3Buzh3h1aWi/Yw5+tM33TQn0QkiLyws0I72hObqN1uDcxfMBWZ5or7lkYALRZ/Q/AOfRCeIeVhP81hnK0DN3ab2iTVzLLK7X0K8J67oF8bSnEQniLxas9ArDGa3qAUY5kZzFBzt1u9C3W2wY9Xd1fyW75PoBJGXEgMbvYJgrV1cNZevoT0MbrLMLqzrSSR0AS7h+L0RfQ2b2q/4Z0GbWggCKTTOce9K3ab50Bm0x/x0qT1Rwa5fBi44vKWisxo2tYPOlOgEkQ/GvAJp7YLmCGqOlmOqcxSc4z/pb7kUnU00tVOiE8QcpHlXam6a2vHdpLl8iXR+7pwcpZTHL3BUf21cc0p0gshXjCs0zUO54TyYXFQz3a4Y2anWibb8fdBaiMQO2XHXavzOJ47mlOgEMQcL52rvCjBuutEcK+vKZ93PDnBTfU+4tTuKK3b3Koiezs0p0Qkim+LTfHN7/PiYAK6hboPTRovE5jhPq24iTXBhO2fik6Pn4wiQiW41p0QniJxD91JYnOlhe7duBEeCsQcy8HTIniir4ZZwMXFKXFw5eX7n9lEccS363pt+1fcp0QkiH2HoFUe4v5VqjtTRcqHG7EpwM1J319kMXGp+Z+d4dHwY6y/ia+Wy71OiE0Reutmilx7SFLahdqKmpqfPXeG4LY07i2ncKcfZPxEJl4P2n3eOX+yPjn+PdaDHd+WWc0p0gsi9cM6yNL9Qq9WevrDyEA9LXD1N3WiuPUahubsJXbiD+jiu/yo176eicy5Fp0QniP9v2L5Wu369dh248fh/3LuCK+aGYIiHwblnutrw5gnHrWqRQWp++3jU7/V7vRGIrv/6rk+JThB5CL0crD1bM5r7V5/4rw9LxCOicIsa53BxN8G5SL2GT0IrL9Q6m9T8nzu3j3u93ufwkqJHEkp0gshLh2WurbFnIc1rUvPq1av5RWed/VWnBmeTvYIBnray2n52rm7wO9fraiC6pCI1f3HUgzgH0mJcHFOiE0Q2LZYrzUFzKXrZB83zi65OiZrELKhxneDYuZ6YT+5g3pbm6n/fgbn5b/2eRYsOUKITRA5aYeYxE6Wn7eS8fFXzRN4HMqRhjuDc3MCdT8LU4HDlnPM4hjQHzWHMrujbRKeqO0E8TAWudJbm8ANxLtM8v+jd3cZQea7f9IXdrpjaicBv3NqbXmxTmt8Gz6Xh+uWKziNKdIKYTavlITPSHETHNAeuVPNsOMcKu326UqOOPe2Y2aoNTt35+Ka1RHBZgjvcOe73YNiOnruiU6ITi0XJy6CINM9eOFeW11zNX728Xs3SfBPsBn7B89rB88RpdhVSY33DeMeJuY30+OSnY0hzzWhgh+44R4//Y6LP734fgiiCVjtzR0tJLpwr0cs+pvnl9fUM0cPNoD5MA919ihrnpginC+zOoXDuzbbBxvHJ89AfA2b34ZKCQ9Fdyy4bZvTIvr7nF57ouIRwbaPTDZlHEIsAm1lqR81rptReddMcmCl6S29Rky8nzSsY5s6hMZzjr0JESnDbBSe3qIHmoz6A03Np+mA0kqKrTrmLX9/ykSITnW28sqV4Ye8xb2korayshQDD/si10CMmWNChe9hhmXtUIc2N5lfH0jxDdLa5bRxHhvaBDPJN2FYYhKuUx8m5JNZN7Q96fSO6ZTQaKNHfjaO4cvGl945A9CITHdNca/7WJx99dMlbEh4/V62eP3/jRrPTabXsf4ASjVgmWUjTWyEaPQFDzU1/zKTmGaKH2NRuC3DAEE+D41HCMdRNiOs37uS9bmq/D3pb0dNyu7Rci1555o2jo6PDwhN9UvPLl5dE9NKlskWq3nGTnFJ94enkKLWr/hhgYm6eIXo49bkr9TiOrcdCaJWFLqnrmbow8iNx/e+dY2hqN5JjoA+s6YPB7ydvvHcEHBaf6Ky7Lx2Xo/ZboPmyiL5S1qDpLUaiLwcZ62kld+Ecul3LqPmr6y7Vqam3XT/16OOg4aS5MAN0e3P1FiIR+ptYNbW/2DdZbqtwhsFooDjeOZJ8Wnyil0BzQGkOcb40opfK40jTuzRqXw7a7dnRhStq8HZKc6Q6fe9KgDU4qzl3N6wAZrBukh0Pl4CPqg0OPP/nDqR5r49o0we64j6QjL7568dDZfphQYmOmm+g5uD48oh+qZxhOiPrC6FU8Bw9bLMcwzmV5nCVxzXPEJ21dwOteGA1D8aecG70TrD6JuS7KbgnVnw5aIc2ODM3B8y9J00fKd2B7384OPgDRP/0qPA5ejedm0vNl0n0J8qnuNnsNLvMXYAlFpAcoq+B5pLa9EE7Up1M88ZQtcekUT5+GJwQwmxZUXdzvCvHorsdtFd0mj/o9R48eNBz6u19OS+HS2r+zcG9e/cOVKJ/WuwcfXxuvlSir1TLyFimU6IvMKzD8pwfA2mOK2pYgssQXWmOaM9h0M6xxdU9q13deSI/gO4IhxW1P9VOVK25Er1np+ojmecjpfnBPeCv7w6l5/AqLNHD9q7W/K3XQPMlE/1ceRrNZrNDZbgFhn0Y5jk/Rv/MSnMUHR+WGECf63BS89hENaLXz7mdn6cld1w4P4JBuwzzvjLdii4ZSdEHI625RiW6FL2IRLf9MW/ZFbVlEx1X1sa42Wni4B2gJkCXeX/cWSvMM5Sb1tS+fhbVVPP9QLfB4cw8kGnu+i0iDtiRu0j0ZySR31dOfoY0B7NBcPlS9M17f9Qf9KAE9xlYrkz/Ug/di5ujs45pg3tFab50oq+Up3L+ehNMd4q3HY9YFNhmnj1q13WDzI2xvSuzRcdnorroLWoIx7tIxqIdH7UWV07gNDhZaZd53gfP4Uc7PlIV9/uyCPeFcvyHA9Achu4FztGxP+aFPan5Eor+WHk6N5oAo2n6whG2vGyYPViinKE5im41d7vaA/VyKu0izWzsYR+btas3+Ht9hLOajoPf0nSjOSDll2n+BdTgFOr21ZdK9ELm6KxtF85VCW4ZRS+dK88wnVbTpzDnHbBhK4/mptu1fCVTcxS9u3+qqT2Qmsen8hsNF6r+bhHY7Qr9MTLE7bq5Aj/0IM1xcg6W26p7EZ1xpY7VXK6oLavoz80SvUn1uKnM61PPZKk9E2yDq6YlOCi1z+ZylW1cHA6nnQaHFmOZ3SB0Z5y7p4WD5t/CMVH3+/d18Q3B3ldIc7AcefsrHLr/73P07jWjOc7NJ1l/veotOKXzZcT3yw4wS6fF9H/ZO5+XuK4ojo9ZKEGhTSG/KMW0MRQKlddChZAxJqVamExmStoJinRCI2FIQpuKYoKxiLVFxHYRuxjQ0VjQNCldJApuSgz1j+i+dNFlIAsXXfV7zrn3nTcvT9+biY2jvO+778e8JosWPv2ec+659+0uhU+cy4pz7BLFmOuMWpj6h/S7K+rmwNxy7uteZzenV9zmKgU6vDBN7W+/TZhbQ+fr7xhM+QIGufk8bNzVPIN+b/sd3WHM0+rmQfrwww/PJHa5ympxyWx7Q3CWLiFhrBqWc6k3yv4xvv6YZBTM28Y6Ptl4tO5hnE58XslDtf30sebofmlTO3k5jemSa+m/g3EMTs6L4uZyFYF6An27O+Oc3gvdzHl6S8z3AOipG/Xi5XLNZrMW81aTpSdi7Q4B9ChuLsqFT5yrxvKfUBMc2uBAuBnaH2PTcos3+/iiu5YFp+rIv08uv42oHW6uoE+zBHRgXlq1bLP0+Z9tz9FT74fm5oja9wTokyOTTHp7klBPuqCrpcfluOdUg73ulbi5d4laexQ3f3zIE67rLlHq3qBak/Qy+lGL0yY57nZFqZ2rcCSgbUG3vNsSHK4u6RmB/dk2z6PfiIo5tHtzdMcR0AdHeojpbLbdgO7P0g962jDi0lytqi8VAfMcY17e7XoxzM2Pv7nxCIAbzE+DcZpes9vH2BvuZr05hjxKli7T57RTO20TNVMqlaZLCyyiXUAXyuksAfMl18VVCvqp7XB0xTyNifOQoH2XO/rkRK+APtjTyqBnDeiwdit/7P5VXI6rRUXqZdrHmOMs6MYScPNQzB9vGC9fZ9DpIt2u6tpGwFmXq4j0Cf0xf6MGVyohXMeBepvb7Iob9NNP0wtFd0JtCQOH0Sq/yjzbxtAdG2aQwjHf9Y4+OTjQa0Cvdx29kMUdTwo6VBe3wda2IoC+73CuUADmOaU8GQHzq79YzAlwHNrU7k+/mW//yxXvbnCgHJzjgKUbKxeBcnoG5mUOnuGx6jr70uwfZj36C+8Z58DN08bNN+H8DQra94SjDw4a0CcLuXqPo7fD1N16XJykB6tmet1TUYKsOsI8l8vBzRVzw/nFLTB/99D6+msKOd8+x4SaUK2Ey2H0VO3dCpiTm0MI1ol0yIJOF3oqzZTV2MXOl1b11ewP1Tn6/oB9Ms9+kg5xc8J8bzj6hAv6xMhUT6M6uoIOEegHErFqVr0XnESIHGAOznEo5qE1uLY3rt47hCI7ZCjnh9OnV8ptXAiXepuij7Eo82t208cZTsxLSMuZdplAd4F/CMyVcw3eTaK+Ks8yj36qWkfXtStpXqHW3JHf0s33iKN7QB8cmALo2YbnHb3Rt7IlFa9sqSVh6UqElaiFzgKrITBovxiIObk5p+Uatvsn1EwdTm08eN6c3XymWGTMyc+n0R8D1F3NSQlOjNynjF7xT6tomGkqDJ282ZfyTqidTUPd6fTQ1m6+Fx3dgJ5MEujtCrpOsKl/JGLVjiKU2g8UjBoqmDcH5ssbpgBnDR2XD+zKU73Q1cs+DxUw/4uC9qK1c7dTRvVw4c79+aUAzmfxUqtx0jBTWY7e2Dg0nu6+du3m++ePipuft5gPb9HtCu1NRx8A6FKFY9BxupbOoB9NuIrz9USiNnL0SKV2BO3Gz89YRcB87LNlMfF1r6EjN0ecrjTrQ9lbrbubbx/PlLjZlVifM7xDcHUSmL8DN/drns8MLsjNXXev1NEJ8zSBfrJltOsoIvjzZ5vTpObxUMzPnTu3FxzdYdAnJ53E5MAAQP/m9f5sthOEG9Dbsg2uo3dhJj1Wzam3N3zivKsAEerJSvpjfl0+xITb8hsl6p5PHyvNAVpU2nnTRy7BEdyEOcXtuDHiuImbr3o4Z7DpMotrxkU+IyU5Bj36PHpjYZyYbj55cnT0+vXC4cPi5ng1lA3HHHpRR3dSN29e6t3RmSpnYtIB6OTmAvrU7f7+/nYFHcO2zMTVuNpTpOVFR7uYcRh6Q3TM+8dOLa+v61yaYd2sXVm0bu2z7udoh/gT5zNF1NhJuAFuCdptJxxhrpQr6UuC91JZfs4FOePoTyKE7k2d4wz1iWPA/O7d6z09wy0t9ObYeD4c820AvS51oZt18/2d4weUTzDoA4MC+uDU198Hgt6KbzTlPNW43rgaVwNKXYqKOUY45qqxjmUbq0PrxDj3x/gsXH+aNjgXfTdzR38MgnbE68z4QlnMPsfyBu3zPkuXN0L7qsU9Q45OvXHhjt5UOAvI0yfSzeTmdwH68OhoS0vLsciYVw+6dtGL0h1diR2Rgj6hoE8MjHyfDAKdY3dPZhhX46CdzNH7MJ8WqoOFTkCOS2cyagmuDZX2zx5sCOZq6eTmvC2z0g2On7pfSJRt2nE3yJsF59TUXoKdF4G3xO3S8gox57IS1Qc5c/0MREtpjvEuK8gZR19b2xL0xqbOoWZgDs4FcwKdOB9tGc7f6m/fhHLFfAzjxUC/cQGbyV4hzJvHO3YS9EGAPuA6OgZA/3YT0OHpiVg1o1Rf+FbtORAOyoF5RW7+wMyWW8ohboNjeBlpDMs3LvKgXs7P3NSOEhwgZ8axv8QcMKchuXr5jJo6uhKNITeZc+NHCKE72flaSI7eKJgD9GOjTLmADg1/eQvKMtntW7s5VH3VPVWG+c6CDrQF8q1Bb0U1DkddIlYtyLmQitDU3tVpVFEJ7viDjXWbkts7f0Vt0WLsHpCl2kV90WV+BU3tFLUXwTTQNojPzRHhUpMzTe3Bi1fmA5pgCXuvo9/Lb405vPxEc4u4uYLOmCvqwZiP0cGYVwu6c0kwh4A5dByg75ScSQO6OvrA7cBiXI6kHuLE69d2UM6l8IlzxbzCpnZgrpyLpXOpnTlXypVqtXS6EfPcH/PXZfTHLBQBOiCX1vY59naJ3Q3mQWAv6aSa2LpPz9jRt6q6NxUE83RaMFfQFXNFPQhzo6rn0RXz9LGOjh0HHQLhGAMKek9TUOgujh5vJ/X/6KCzLR9LVMzfK1SF+bsbnlK7LbcfoXlziK5MMt/lwYe6vDFN7bJyhRnHlWQXoE+TiqvKuK8Ix6dK/FyMHfeMbA65Btjzm2Eu7TDdw8AcnKt+U86VdB/mqmo743TPaHFz4XynQndFvbcc9PqmZDLY0eM2Ga92qBjXdylCG1zeYJ6sBPMfCXNtgOPraXbzRQ/oT6m6btHXqTb7EnZOu8FdnmEvZ9it5lgLErvfUbT9mvc/L5W7OoG+tlln3BlgPk7zaenmY6M+yhV0VdZfg1M/D++Mi445QN9BR9c16aDcgt5FXCfbLOi2YwaGXkmOXpdwIPn3jreDh17O0hVx83w+34mRbFDMw3Pzx8u21VUx5zY4K47UCXR54Gd5+VQq8NAK9EoL5ealokbthnVdel6874PZv4nMLF8z+ElXkaVdVq89AesBoDdS0N6N1FyDdsU8CHSg/kY45arWSJhfwSElODX0GgAde+O5oI+8Vy/7wJqaHIh3HT3qPpP734HQYtN344aDdN6Jl7C/vFL7Yca8sxLM28xKVAEcpFs3P72inLNre60dh/Jv35ud2mcWODuX1Jyu+j01wTwgOff/Vr69t1ncn4mjn1LQFXPJzbsDMQ929C+++PScYo6hmFfj6OrmyM1rDnQpy4mjT/bUm30iydSBe9aC/p7+6S06rOv2t9ogQD6v7sQfeQlRpP8NOlEmzhG0E+cgvUEnzkMFzGn/5nXmnA/5xDlxvmKTcbJvDPODbVyx59k029Q+U4Sfk2SzKFzt/o/T9HRf7Vzzcq/8/s6pucDOL+btVlL+eXSDOVSG+XUgbki/7gcdmJPOhbh5VEe/caF7EzuvgRzddfURgE7GPpUD6Yy6C3prDjrsqwiFf6uRUU/F7XRhcuqiZH4R+mPyoij9Mermnx3ikB2WTl7OF8F80XAuOPNVHyB9w38O/TF/0hI1uDmJm9th6O7WcAR6kdvgFObAlriMlt81O9f5NcnRT/mm115vAuayIg2YB0TtAY5+EZiTPv7443DMwx29VzCHmn2U46gZ0MnVpxj0kdsAXUi3oDfkoANRcnOyc1WBSI93in4pH145WgnmuuD8FFaiioydm7UrJuNmkp9qfC7WrhG78XZug3uCoF0olwRdOYfmSpsuUdOHQG/X1ehyInQH5iQFXUpw3VyCUzv3m/pvCrpiDs5ZynlVju5IU/sVi7lyjoGzFopxVvu+mxoZoegdoFshfLcp+tHKP7Jej9bZmPRtiLaitMFdrQBzbYPbsBNq5g5xfwzEF7Vv80qLcVKBWyHK0dT+BEF7yTBu8nI2dU7OqUGmeEeC9mDU581OkF7YM2zvS/NlrXIZs8OMgg7Me7jSjrCd166U2TkDLn4ORw/GXCSYV+HousukYq6ks6HXkqMnEm/V357ygY5U3YJeF8FVmkT+6D3eV7L6HB3zaaE6mMtfJc6v9ndGX3COoJ3cXGvskHS7EucK9qJqhcimuTQpwOMFcy5L1GaKVkw4k04nLUu1n1cKZFxZ11Wps/dnccNYknfQLE4X9DXtjGuEm0tu3uzHXGN3hl0dXSn3CpxXBTqC9msmOU+P+zkH5Bg1Mb2mlt5UX//d1NcSuquE9K7wzwTsK/t+m5J+PhWDXtU8Ok9YpEL/OtwcnONsr2RjiY5lXpemTXA0HgFzizZ4F7bV1Y8sqqUz6JDs7coT50w5nTPCOdfhIMGcyFWZn3pVMycbFz/H0HemcwagS47+c95iLpwHYW5jdmPsX7olOAzG/CMXcy7JVQN6itvgcCjmvhS9xkL3ROKdJqDekysHvVVqcQfC9y7a71KOnpukZxuqvpjv7V+Iqt2uV4Xz9qh9cG1cat9ws3LcSa++8ugDr5n7pbyvuL/h5rwbXMl1cxyCuM6g074SP0RUBkMrb/N8z3gC91Wz8cTPvEy1sbHnBCjvlqD9erCX4xDUUXUXzFmWcsU8AupnAjEXaaVdKTeVuBoL3aVmXu/h3NoytC/S3xbM8WWndvcTED3xB9arkoPhhP83J8xv4cwCc8t5mJtfHDuO/hidNDfZuRdzaDFcK0ceUX8MF9lL4ui48pQahuhhcfPcXHdrl81kVOr6soZNRkZCd3DOOXpj50nCHCvUdOI82NTF0Ql0wfwLwRynxfxTPkiVgO70/cfeuYXGVUVhuFMvg2jREmJjvEIFUTGZgiajnViVJINRk3ppsIoVr0MVL3nwChqjcvAl6pO3SDTUmahpEEviQ4nRKgGffBCiBhEqBQVFlOIFxAf/tdbe+eNxZ86RxhjN/Huffc4ZL4jy+a+99tr7WNAecvONnvSV5+hrjlA0qYI4uoJ+1JpEHeZn9QWMhTa7QwCdCblczd3TzdG7UuxRy2wQzDca5uQ8yc4vG9hik3M0LKvpWc5WBkeC4dVm3LRxNBfQ+z/ijnA2zDF60M3P3RmQIJSqPkXvdqe4l4eYi8PA/Wu4OUdHq9x/vy6onbrAzcOergM0fpezc6WbmBviVFrQu1AfI5hDoaDdburoKw10RN8hSc49eUZphp61g+ZAuZLOM2R9BrkGevI6ei6X5l9UfcfOdkBOzFOVwvUK51od4zmHbOGcEpQJelCYm/+KHJyxLXpZm3FugTsXzsMlcJRBbjCbhlwSPl4iZ59kAuejb2y9/PLzTz311GqYM3BX0C/wnLejeUnFjF3zy2ypQM9dD8xFqLkl3/HAfWU6utAaU5Ouoh+eYSquK2wu292CXNZuHertZum17y4v4VdRmWrf2d6umLddlIrzFum9KA3ZCM59BZxArql2Ep4g83VJtX8Zm5sL6Eo5XkQsaifWVCAvVyb06F5EHc8GOjB/d88egM6i9jDkkNzQCTrn5u3kXKboKdbTm4j5PS7VjpDiiSDkIkN9BTr6mrVNcdKzNkOv6ujrO6P+1pJM7gvGtt1Beu27y39buTSrE4eVdrajNZqbU4XqlEOSbtcEnKEO0c3JchB7hu7Yooag3TGObnfbrYYO2Ybz4bCJh4te/XSc6rbXbnvUIthvJHSfBeZ7TgLoQcxZ3O45V+AV9JuIeYByAf32xN1rLGrn3DzAeWNjozG+EkN3X9xGZUvg/LDqf0kkau2PjjlSDZ3K2qt+6aX22eV0c/RbUpQKr0XQDspBumFOtQQhV/X2AvTegZ3Iw5mRG+cXNpDzJJmX68K5YR5DnZwDc+44l4vmHTL0Id2lRsBp4bFfhw8enJoB5tBvW09LSMEtWFxT3XnKTcAcXRp0k3FumDP7fqmRfvvioN/Dnaghzh3meTP1FQr6mrWHxwydmbiw1eSiqD6zph6s31k6pm1But5ycrR0xqU1BdbR+ZagHNwcnKP3XZTAuRo5LgxC+WW9vQNYVzPEXfBOzNNJMJ/+7gwftTPZ/rw7SkYx54oaUV+UdoKNzj9osfwQ1tQI/RAMfc9JJ50Ezn8F5tU4x0DMVZ9fYIij087Ri9RlTmrsYdCJ+eWLU74xv/G6le3oMOjDFq6viZ87vMOnGGWi7ZjAA/TSkVH/g+ca3/MfdCrMW/r62ndelmbhfNsOYJ5vby8q5tUCd2IPzLVpwt3vRvUVMn+Lciycj9xMOyftVhGn0TurXYlt8M2f/lj2tHMjOjPtC6poYOd7B98A6MD8fdbHhGSU2+Bh//wUZdxQv9okbk4Z4ZeimQJzdBzhnMw5lG80Q1+5oHOvKYTtqWutOgtDUFGk5J4A0I+Ep/sS+Z42Bu9q6ffUDpdMXjjvSoM5IAfmPVkCHjD0FhutiZtb27nVjmqHwPvf5xz1MbJFDXIDy+HQrVImvndlmBefAvh7ssvhdLxMz8+cGR19Yw84f1/NPCFuR6NeMdAVdWKOR6qXfi4tEL8fTcxPXRTz/EZtjUL5SnZ0UeaIo44666ijjjjiiEzC139y0QZXoQXGj3ywv6RLbKKsy8rx4201BdWVsWgpl+L/wB15hzkn51QbMfeU+8m5NQTuHzg3hzRuj6Xc8MhV87gEc5+Do1421P3s3Lv5sLQA7hRJDoONxyGMNsDNf6wbmRwF6L/9+nt/Nc5JOboOJjr61V5xzm2Czml6DPSBjouJeVCagrsODZj/F0BPr84ow2Kb7LlRZKAHLJ1FtLW19MA6Otw8Sdt25NflJWzvuSioFnLeIwMx10szcWbmNnrOQbVeOvLVSf8EQI6F8wr2rpDzl+nlwPwlkM5184TNqPbOeTm3sxB4G3TsLkvQXpkchU7/CpiT6WrFcE5x0K02LoA5ZZCbr1/iA/jLHprbeu216JefVi1oh5uDctP/B/TM9k16z8HQs6h+PSaKjtTQHXIL6wWfjmNiuZZ3j+mWFAnK9R35qXw7HB1uHlQBcLvOFJzoMt8HtljUboOveQXE0hsEaOCMu3SHuj6gx9z8ZY6QfXVJU3CBvBtjdt7IfdmN9PLYKjpeynDzyqRwPnklzDxl1E4/v9ODDsrDbq5k49LxUiMcpMPQPegDj80988zWa0E6KQ9F7biu+x+CXh+tt4xca2up1AeoS/0lD3rWWbqMtaX0hMR7MubtU3mIK2pNwci9Z97UiTnkHP20twVxj3oDKDZPl2aY2wtu3t71AuZfKeYUK17d8XDYu7KQ5EDkbgPvnJUr4PHzo9C0BLb7YPeZlRl18/cPJLk5189tNBnr46c4zm+KYx4UUIeEdKBe1H+CrdduZQougDkgx2XlcMsJ+j+P1gaL3OtbW1tBeKFHLR13UYG1cgJ67cPLi535mOb8mPaJffmpfRNFlsEBdd4w0tC1odvcnL2l73gk4Lxg6Aq3ObrhjVfX/bN4OTD/1YraiThr4oA6Ljc3J8m09KrnyJTLfOfOc35FtRsr53WVGY3a3z9gZv5FNcqh2Oycy2u+BNZjTs7PFrBxU7otaBcVjfSB4rTGE8+cs+jc3CbnGrZvQYur8b/u6Jsi470ViqQU7lyx9OyfQC/M18zUDooMpdqvT8Z859jYvn3AvE+oJt/ujYbe4ry8RzBfyDl0ckvfFs/5cVopY4YN0DVy94Bbb7Bn1S92sATx9oy7d0vBDYfdm+/oIfFX2vqCA2UOrpsenFU39wtqX9gV5pygx8Rad3LOHaoBKwflRbX024ubZyYnTx8dna1csxjmauauRmaLDWkc/b/j6p3bPehQCXP0wrli6QRdimZ83n2N1921T72YulLMzTOlnVNjExOGeZOBLTeibgMA1w75qF1ZV8mMvaXvdM7QZR+LrpepdbscnD6j0d4b5DS4b797KTA595Cjv0TMqXAZXOzn1zU6p53rK4veD/64DpBZ1G6Z9mQBcut6edHRXZ07MUd3nn6pQW5jLzhHv73YPAjMgfrg5ubFU+15l2lndbu8/E8cPdNZ70Bf32qWLkyXIhe6Z3kaVaw47pZacVzahfO1grnI3JycW+cvBe/nIJo2bqYu/KP1vfGBIq79Qj/9Fphd9K5ZeNzkRwxW1C4fRSXlJJz1r5KCo5LY5ifPIWWaD8M6djvqgTmCdrFzUC6YfyGdqnLMBBUDnTvXiLkbbrcH3MD3gLr5wEBxc2Vm8PTJyZnK5ubm5kXtXOpjGpVxJZ2IE/RlcGxGyksNehQZ6DmCfkwp6mhh1p2T9M7aSnrs0IKuxP88mW07142NTYxNtPdlm4xza+ix1gbIXeuNCZyL+nbsMdD9DB2GTUtnzI6bco/RTmo3uNH/XCgDLzfMF0KdpGFpXE7TArhhTsj9HB3HOh/sRtA+Ojs6OzkjKbgEzEG4jQuNnC/jDnSFnJijhXJwmLZrGyg2V2ZOHxycGVTMAfrDW56Iu7kl4BC023tAcPxDBR0fYb7jjqv+NX/MrI+iTfoQGegarUd39XhHJ+idtWxcXOA7AfRtO9ZNTEztG2vv0aA9wDmbo9xycHHMDfUdv3zgq2Xk64kirqD5STpkNXDovx1AGRw4f5nHtdPMRcQ8wHrSQc4seuU3GvzvkoKbHpycBegVpOCU80RD332nDEy5B9bRebIMMGdD1I7Y3QTMLQsnmA/OnA7SgbkpkIITOwfqG3kSJO4xzg/V0Y946vFHvr73hhtuuCq33K5OT9+uJbCbBPR+LW0/snTXg75ihsVxnduu6GTJzKpfSIebJx8TtQNp9omJsTwwFxFvPuJXawp6D4beq43vs4m5Ux9Ad35uRe7W3QTdIL8Bg8u1a1G7L4oh5Soz9HSHwcUTc5ZmL6ObwZuPM3x/x/aovTBYmZ2dnRk5cIApOJIeNnQCHuB83Da1mMi5ilNzc3NArphLG6xMN3tt3gJPJ+ZW0w4J5p7vOOXK+SGBfthTPz399NOPPg7Ub7txudFhMq4+4yfp/bYNvXSngs5snNzly8sb5jm/ezWn3XOZNDvON3VMrQPlY/liwXBWuKXzbsTbO2xbOlNwGB3mDnZsaDnOToE81tbWGvRqQBeu7d3W0K0+5nU4OeHWp5c0ajf0UQYXCMwTWY+ZOeiO65vuqc2Dg3Nzc6MVn2mv6ui7+YAWxHycjm52DsYVcx2ookXtmJtvFMRxwc0pxzmrXcXPvZvbEIrcDw30teAc+vnpRx+594YfbktRKt219Hj5ZJwP3cXFs+boZuksdwfpNUcXdXUlB1uZY9rXjU1N7JsqtjVB3rpd533+uWBEx+bmFPLwcoQUF9Ed5pDB3aDQ445B62P0mCiKsKuZc4taKj/nCxq/vjI8bOtoTkNDunflxxcqg3Ozc5Ur3ztgKTh3oSXM0LVRMdTh6Ca3b81Q5wq6xxw5uLrpkZERxdw4J+nQE/N2jtk5g3ZcoTSctkMB/cn7gLmi/vOjjyB+vyPx3EU4yVJrQ8QpupwxQ9BF2T87+n95hWEJRLCT//+79uShoaGJCbg5RLhl1BaL3AE6qEbkvhjmeHegu/OjznutQa3cge2L4sTaG+ykdiPbonSm4/xreEEtBezlIT7jJMj4X1bu3tdcmYMqlQPfAvMvoFcwkvVFamTQ5Qoa+jg6HZ2Qo1NFunnj9JUjI4MjFefmVGxyLlG5vYfi9ka7QDl0KKCDcU/600D9hxSocz1nSSvj6ltVkauOuesuBzpe8IsHfVtnbadqUnUMQb8V6lW26ed6EXy7mdo0Qg9j7vi3QyFNPhfXIM0/aI9vUXuVN5KPBTVG3GnFwH4YPLM8Bhl27+jYifrJm5WKx1wIJ9p8Cta3S6fuXMj5+G5tCrrbn2oN3S2pAXJrgvmIqDLiMac2E3MtdyXm4Xo4dx066ET9vkfv/QGoL3cCfn1U71JxvjYOYXrkLb3gDqHQD7ICdQ967qpV+2nV3N8B/WQaOZ8YtfMVoBPoIOYEHR2DAxuXf3Lk6xHOHnI0Jz5xi1oy64lVNPwb2fExL4qbIwWGoH23YK6G7loY9d1VNqyNi+wBN4DuMUcn5urmvUXVQDE//Z5hjqD9L6TPz82li4GbaOhB1JcMdJuq3/fo1wjgH4BlL6OrZ7ZvwBh50G0tLYpKtq1FXsA+7uro2zKre6NqVyblgghBTysDvceI7iHk7jeCrpwTdI+6SepjvnfHRJFsfeFPHnMiSnwTVOZqm7zwL0c4LztR696cE1Xeo5tLCzO+213MtVPjNn64f//+j52lY5CCGWoh5pDl2vN733tP4nbBHJzHpSTnAa6nnCk43MP59qUL3Yn641xrW665emengW4q6YS8FKHcXVBvyVoNbFtPdptozSpWTnqY/2qg08sp/sS3NmfedHNiHnR0S7gz966Z9t8+vfkMWza3dTVausu/+52oZebL04g8D9scvYwXNKbggfln02rnwPxbxRyMO9Z10LFqpQzlMd+1a9d+8XJpBjoht45BNqOjiZu/OA3BzoOUQwItMTfCdQyIuC8d6AzgJQF/x41dy5eA3yAnxpVaF1q6gg6+XTYOCbqm7KoHvasrbTRP0J/1oHOijh4L5wk6FcOcoANxhu5Kuruju6J2Jt2c+CgbzuNmDtGm05v6kD0BdaEcdt5d90lFOR+BmxvmRjnzcAFD51NM4PpjYK6ge0v3oGOwSbqjXCAXzItnTqt0bh7n/BNcdXVCLd2ck3OiHjD0pQfd1towV0+RgF8q0OujetDe70kH3w9GesyMom6hu/9+26bVuryWW5Na6UP3bAHK0tHBtfQ45hQLZjACbddd6H6eVbvSwdFfxUXFF9SSwQ4XyZmzG+YWwMPN8YmlN9E0aOfUfKGjux5H3beYm3+8a9db6M7RTQa6CZDzAFh18zP3GucI2kOqa66DhFrFnKjT0YMLa0seujOAf+QGoJ5iWX1pPn0YdQru2130Divvw8cc5JgZr8I86BtYubuq5uh08/ShOx09THmHVzbg6CHMtTJOMbcKWDL+WgMEzDE3fzXu45RfUXvnOX9wq16p5+ixCpkhjN36ehBF7ZvfhBC0I9UOusk5Ogl3IylfdPH8w4/3A/FdAvr+D5Vzgk47N8otaG8XzJV0TcHhinP+kXD+p8k5o/eADHGD/B8C/Wdk5bDW9sD1y7OBtRMlsIq6gg7Cs+cCeg3euR9ds+78DkRulTl68v9w0zs6Me/T3lGIgy6PxLzHOn5t24HKOJDOZBzd/IBgzupWpZwfSX05WO1aRkdLv6zG9zJfgPle43zagnYTyV40dLceSLUD87d2SYOffzz+F9DPNtAXuHmxbu/eveDc3DyEulD+0bqP8gsS7fTyUPjuIKeWEnSaulXQXL8cCfi10Sa/pA7Q7wLUJz4YlTR65y7VJnX01bh77Q/2zjTE2jGM4zO2k5jsZBcfGB/GsW9ji6HGVtYw+CCNffuAiCzlg5QsYRZDNLx2SjK8lvGWJTWW4iWRpaEwdlJS/tf1v+/n/5zbPWee4RzL4X/fz/0858wI9f7e/3Vd9/L8wWLICrs0cfT+gHm41QrQD5/XzvcC/wzdlaMzQ7fhI53ULjUE7jdko/BqmP++Ikf5KrjDpm97NmAuN1e4boOUs/MUc9Tg7o6cf2icoyWOzqCdkHvUfhv0FATOrQlz2bmrxzmXnStwz06rsW7XFtDFOgvwg1Xq7/VWWDon1QE6dPbAKjiAAowHQ9c71v/XYkDPO3rN8JajQxF0xxktYi43x7cOOta6y9Gt83ruC3i21sYkuDM5n0zPgGqaquPdx83B53lR302/eb+rcHOl5jJzAp+vxWliTTNqDjk64nbnXKATc+ggCZgb57cBc2g79ERkHIa+fLlzTonvlPWNkvQcY/tADwX484R6xQxy8eq+5kBBf7GDfvHGzMyhWuQc+mM2191dh7q6/oVveqnXq/5W3tF3yXOeqhZAz7u5w299r5PW4H50tJijU5+PjyJGz4sT5+QWt8b572oe7p2Kp76y0r70TQ/a9zQ3L9s5RL7ZOQhxUZ64OTH/0C39Y9j5MgKeOjqychdn1Mj5U9ii5qC7eCPmsPPjnfXlNo/uCmgzY88busy8nY6uAvyJC1fl6vU/Cc/2bunUlrZ77eyBfkjHuocUXS9lOmKwqrGtuOqqq26PveznnjBYx3/pvyi/r3dXXbBwwuB8jp4BfZhsy9FNAXSHXYQ78QY4QUeOzgRdoEM+Prf1/KCz0i7OKxn65HzUK24fO6ynwPwdUi5pIZwepYbA3UcuZ58B5cAclOPmbp4Bnbk5Rcwh2jmVYB79HJgDdEXttgzWK/DZMhw7/byNoGsFTfMCfIvecDp8jf6AguqBk6zUjqk1TACBc0Xui14Hyre1+0r5U045ZfBf5OXy6SqTbws4+rbsTM8FuFQ4OsN2Ruz2YJjzggx0he6QHH1rvQIZwCuM18R5/vw3XgvYeqYUh1L79PI97zfQn32fy2OkMIPO3mSrmvXGoP0RMA5Hf4RBO75r1DIDXZRfaZi/n2JeUi8Zd3GGTVE7MEffLUM5SefVZkdf/GYXt8qWBO+rmqH7HDoo34ucE/RtuypLf2mIdEe9K6jjz5wLjr4t8M77eQq60nP5OY0cjXerusfTIfcm4aQdjs7THlOlpXZG7egLaaLpF8D88eVIzsHVs29bCS4n2TkfEtZ11qswpz6EAuboCegHSQe8ctvIyMhtvbc9hZjdwvYL0O1JmEe9THdn6A7KuakF9OYPmkCTn7cbdBXgUZVrOtfWgvXnG4L07uPWc+hXGjg7zJ7XaizHqea+eM6lYSf9X5Kn1xcX5OdBPxKgN1g6/DzV+QLdUI+L3X0A3/RyykCf19EFuYiXm0uTHJvX2/IWPxnvY999s/xNgAXSDfMM5+S72lY15eYQCnDEPC5vl5Cvz2xWxnzEBcqhnKETcRsC5Rtttw4xN37xLg1ynqGcv4FWaN32gS7WuQL+osF2uTrr7cetB9BNB7qhG+WSg969uNUy3as3ahUL3zvyZU76n8qBbqbOrjpc1tFp6NHSaePsfLaqe0jRHXSJjo4uyLUMToTqo2CuKk3ITYwd9opj7m4uO89wziHh3BvtXMvgnHLU4MzPvy2Cdh9FOrepEvOekfffH3n/thEG7VKYXuulnfegAtfbS8ztW3P06ObEPFuFY6eftwJ0HDBTHfWvMddW4WDSP0r6elj3upafTnz28JYkM3nL+soV/yXKAVKB9EMFxeA/NXzvboH9K3Qva2BB0Ak5cD+cbPvIgY7OUyf8VHfV3eXo5V2pE42zaWj6UGET6kS2AD/5HTB/801j6qn35eaJNMFmY2rnxUXMWYODPEP/1lbCsSWYC/QDdntjDkLY7nYuFWYuEXDYOR7X6d1Kb0XOL4bjiG4JvCj/c6AfW6b5h6aoV1gBT3pURFp0nn7tNQceODxw9oFdKycxtxv6qn80cJdWM08vDocfPPmfHr//yRz9SIKuwH0gL66NY45OzjcV4mXtJEc30B116nM5ungX6Kq525V/8cotTywYu9tOVJTajfM3t+ulm+c5X2B/KqN3ahkx94tBuzOehO2uh77fjG7+xtwrc3OvjGBOLQB+QXRzYW5TatHHebPvgS9D8ryZa1INmENF5L7uuq0C/YcfFizAY67t1Aqufu7gH8zTLx4eHhjeHn6WkF6rGeeL9TkW3BMdeApqch3Hd73e1NG3RfBuLRe4a7k7wfYD9fGoeL2sC7nWXTl6FvRxzZ7n5tPyIPNdicLfb8k71szNlxvnwPz9TA0uKbtns3NhzqD9W7p5wHwZS3Bpdm6doEc3f+WVOXBOxjWr5o2cLy9y814fI/442RknxWXPhvNLmJsC5TD0FoBOzI89tjnp3OzSzmn1DQfWS+fFlKCDfwXcizV0aZVDoXM7jfRsjr5XBN26t4F5Zb9DuptqJ4BOedW97Oij45xWyzm6JEPPq2k9HiW4acP8xTffvG3O3XzXQjnO5etROtE5CdoJ+ozX3yDF7fibQKh76L7bGxA4H+k1zCWtblfQrrIcKvC96/T09MDRm+TmdguYi3NS3gLQqWN//eUsoL6ALv/UV8DXq7xDZPFaoWzaK24b7XzYCu4OJy4OFbRijvP4+uV/fJr+p7N6gY5mgww9BzpUmi+fl3kDPXr67x09FY6FU8hOy1blvOJLEzV17pgD8u3e7H2f62MAulSh6E7Iy3aew9zxDkPEfJl1tHcAuTAv5+cXaFYtodyfgDk4J+la85pbJ5Nw3nJHP/aXz375FajPw/qP6Ka42aWdBXgtalsJFrzSSiuuuEK3/vqoHrnndbRbeoeBTqWgHynQmxt6DT+u6OgvyNFzVXd0WbuOc/PxFjGOoaKXT5Dyye/GpuHl1teZe+dBufmZ7+U5z6Kule0YOKPmwsO3vgyObi6VKPfHd3420F95RW4uzOOCuF5x7oTjMs4hYH683Jy8i3K2QLn8nJxDrQP9s89+oas3X0HT/gK81N39RyeXux304Vre0jtsjq1ez4PO6bVg6Ks3i9wZukNNce8n6MrRd87k6BJBrx6l5zHnovbHe5a/CG3XO/fOQ3JzIn4meLc7GddmlgalZ8M55hQxh7KgM2wPWTpAP+0V5uaSM14uuGNCrVAvZtqCnQP0HtKNzocmnLu7rxt6S0GfnPzMXF2mnuHc59qsAL9wVa57kLn636Nuxv08XTKxdKizsnSVP3Ogg/MFDJ1raQR0FdD3DpDjRkePRk7i6egss7NnQWZXQT6rscOmX375zRfh570jn8PNCTj9XMg3xu25CXSOJt9wXtj5jAPOzibI2Sk4+uwbr/Qa2c8WVs5iOzqFB2JO6MH5cvNyNGAO5c6AjKiLckXtPkCtBt1QV/yeJZ0FeKBe4bjYE/6eCrfq9v08dU7qC5beUSdY5B0dR6AAdMg4bmbo/J3+JoCj+aBiXJhHr+jok7nFcdW8fWLsS2D+oglBO3LzJDWnocvT510noxOdlZtz6wrpJuLoEhHn4Ld3UGqXjxN1oC3FDwKdmJu8FJ890Zk9xZxluDaA/hlAB+zfmavPjzm3sLagAN9GqRZXO//wvbKWHnOCEzr1TCqCvhfzc/TheTlf3TBvAno/R7tyoO9sDaCTc/FOR8+zXT2I/27scWCO9vLyEayPIeSSAS57dxHx/OJ2Be0zpDxyXvLyVBF00/fvI2q/Jw3bjWbauDB/0zEn56F5ok5Dz06q/c7N2dqQoz/6+gRR/1WunmGdN73EaQGdcnLXXywti+PbH7Kx+79wc/riQT8SoEMgfX7Qa/wFgZ5YOW9m6SrGofL+GEB31r/GWDj6neWTZSbi9HcObQXu87M+OfHdUti5kb78lbl3bBlcAvmZvKHzQY6er7gD6G8/RIUd8boV2m0VXMDclETtuNhMdPT3t6ONC/M9gS8VURftPpceo/bejbxIt1VOqZ1T9kzIWwz66+/MPv1dTNWPzVLOgbqKc23/KFdfL+x86Qbo1F6Hn1/LFd67Oki5hQHdBvrB0dHnT9GHHXMMzcN20n4hT5jhyjgl6XT0oHG9jiVPOLrU5NS4Cbx3pWf5y6Z1gHlq56Jd0OvACcEuyHHz9TG08qIEp8A9Wd4OtHEJdYKuDB1i7S2ZNxfmYByD/2wjop6L3POYr2ufwHlbQH/nne9H3dQ515ZlPT6ELazc7LIA63/dO5mHrxjekEX3oNo8lt5Jb3GrdzUBneprErjnHL2fcNPQ0f3zTgBdoTujdt6KbapxW7r1CYEtwKV8Ci/8xx6Hmzvm69DNBXoGd7IeIvf85DmTc5g5OS9hLr7LjAc79zs0Y6CDcmLOifNecs5BjLPSDrmZL0eqvjx8ru7mFABvC+jQ60smPoOQqi+4Vg6bXVSAb6Z4uEv7tcIVT560QgG6efn5fN2LtsMl5bjBTijH5UA/mKAHjuc1dDq6QOe9IDwM/TYQ9DXRIBCu7qBTWiBH0KWEckXt+dz8pYD5ab4MLgs3ukuOLjcX5LyZmzvnmlCLTo5bjnUbGLPPeCfoQJyXFdhJeWYpXLnU7ie69y53S49HR6kKJ8y1NXU3cd4mRyfqdPVf4OoVUP/UCvAnVJhWt7H9OnpoaKAAfWCvWh8s/fCQrfOYyb7G2P2Uf//rGrPvR+8/uJmji3M5OtkW3OXmHaCv73ZO0EU6QSffek/LhNbGyNCfqDJ1PlZg3tOD9THNzZyYs9PRc9tYvgXmEObVbIyYk3W/Ukf3MU6uydHp52QdlLMnoLMEF4ZeNBuYsDdxc3yg9NVm4nyzloP+PfrrSz6jqxdr5X7MYY4eN7tcVK8UX7Zf3ScNXbFhBH0vwM16HHA3OemrNJTj6v/+clw+RxfopgLtDOfB0dFSLxfouOjo5um4co6u49wJesOZzrqL/nkXtQNzl2EuN0/hTlFnhg7ZjU7Oi3Y+MxPqcN8CbQoP6N6kZQQ9oE7I3dRn6Oje6eeGtJQeE0fM4ePh1zZCF+Spm6ec08+lFoNOzX685LNJI50BfI7zH4u7raCpVIAf/CvMc62hoSsEOmQDYPfHmmL3Djojvj4P6MeUQB/O5ueSHJ09+LgaHd0YB+l5R5efa8FM9PPJxM6zxNPND3M7p5ufWSE3VxRf3p0q1lFp//ZbAI5udi7MGbrn/Jxdfk7WWYyLKbrhO4ImRT+P82mAHB2XMU6lmAesdazzbpLF627m7QBdqD9NU2+yVu5HNKo01/b3G/vA0NDRcak7Aafo5wS90+ru2dD9mDLoq+c5l4hz7GxxsEuOziSdhTj2UHW3i5i7tS/0mqXcjycd87vQXu554/sHhXke8tTRH8wcGoWtqIjbKR4fI8xVcS/n5XLyBkO3efTSajirsjWKnKvSjr8L0NE26qWh48rbecB83QRzBe6tB116fWtU5bSAprku9/e1VTg17uS27iMZXK+7a4V9hq6o2/QatmsF1M9HC9Nsqrt3FWtmujpQcPQG0FfJrXCf39HZbIi8Q3lHRyscHSMYJ+zu6DTz7CaW3BOS8x7HfBqHOzwEZ3aZV8/v5Wzo12q5zIMYTUDZMH8EpM+UMY9nwlnPuTkaemLoMzMGOim3BB0aSVN0+HcM2hnak+/i15ScL+jmkDhvE+iqyk1aAK+5tryvVzttSmFm++rcx11x3GDXoUNDx62IStwVr712Et+zbtprvgm2wX876LarIA/6MQ66LH1YafrR+Cp19Czf6BRBZ4YO1B8LkCtHL4mOrrc1COnSc6Kx6+DmYPz4l196aWnPOw8+aNg6zHe8h+czE8h5Z2dzzmXnwc0/dMZBulfaZeWK2nHllr2Sd2rmHXBuoD9l0+jAHJzD0F9pNHQ5ei93oLNLoD5gns/N5fEJ6OhtBP17Q50B/HcLuzpRP/WMCo59RNtcfXhoaOjCcy8cumJ4+KTXhqaG3n1xoC+gfr6m0/uOPvTATtrYUvcxD7p0dL4KJ0dXNq4niF8koMPRdxbpBJ2FdzY6eqJJrYTlhVHEf2du/qqRPv3G92eeibgbOfeuxixI1zy6EOedT5FzzatFN2d6XmAu1v1JQbtG1uGKsH3GLvQI+nYM3H8v7lUL62EJOEY0xu0C/fcxOwP5dO4cj8TcrraCju4F+InvFpxW12aXKq7ers0k514B0q/AgOvdoaGpJ08/X5m6xe5K0g/soGpcU9DF8nCgnJgnkpGLdn+Qknn02OToOiGSxThBvaCYmwP0l5YunTvzDvKtGwZxTsYFODpL7uil1a6k3AdwrtScjbfUzYsKnFbJ+A3CwNAdpAfQR36foXuDHHi0wHcczc4dces60jmPORQdfbPWO7ow/x6yqtzEZxMTE4zfK502dWqVN7u06WTGDS8dMh1l/d2vTmfM3m+jP8Zj4g9E8L5eVyeru/+YAnShjs17Ss0TR09CdREuBUdnjg4lK+Pc0DGY8Kb0iSapeTK9PomJc8Tsr74KN//5IZLN9l5EXaSLdUIO2f1BYY6inLs5s3MbgLSkfeey81yaTtJl6AS9l1NrQSnoRjkfSHoBOSt3ZJqs08wTzH2zGi5NpINxI73djo42u/VnRL2Sqy/8Zpf2rkk7dwAh+1FHYfhqYPUBpudw8xDAE/Q+gH7gWsWSmX97kj442AT0qiLnGqTE0R1zzqPvzEELZnxwynHTwje7CfFM6v7EA9MA/fjjfUYNxIJhch5E5s9MHZ2MPxgGi+6Ncc6oUca5MJencwxcJyfDRTuPoBNzgs7znQm6oSv1Ot1QyNTZAu+74Rfs6jEfj27udp6ugC1jvtRBB+ZQO0AX5PFxdlSuvvARNJ9WnGs7WfvaWld1d9Snjhp68qijhlexd7GqFLfX+RF0VOOOPnStjjk5TsW4FPT+ypz3ycZ9IO+JAujejW9ecnRa+vj4ndYNdGXhzd+e+sQNDz8w/fLxPW+gBmcVOL9sfJCwK3gX6xyJORXWyghzN3NhrhJcsPOskYv2bzmvluTo8PNnnd7fc75d4NwJZymOhPvYA0Wi0wPilLILc/g7zXyzdhbjELUTct5fL1BvTjq3sH5qm11OqOTqrY3gD736uPXsdtRRU0c9iZI7FKruNT4KdDh6JwugHw7QV61MuhDPK06vOeYE3TEX6CzCjRvo0HhSjCvbuWw+6Ikbbr3hsIdnsQwOpNLLyTvE5/fOBMBa184RA90cPa5wB8Qy8wJzCYDDwa1Alxbb44Ve9nPJQXdLD5RLYJzdmts4MddSGeN8eh2P20F5FnP6OSkPGXqI3dvl6EIdaTovK8BPqCoHnJsV4B31CgX4+smntBb0t6a2uHS9rvp+U1PvTk29dbVX2lV1L7/K7cANujpZiwa9pur6vMJad4BusBP0KOXo6PRzz9GTKnt2/pyg458dHV1GrtnQ5eUcLaRn8Z13xPJCHUG7MGd6ngva0eIbmDKc09DJOAeauUBnzX27lHPaOS76uThnZm6YLwXoPQa0jnXOnCmzm+ROTktvL+gqyPEJy2Ll6gI9o2IFfLUCfL11CfoW901Nbb7DuQD9wn1unpo66uphVd0N9Qg6LH2DTlkxo3n0LOjoGNCSB3QO/tBXI8tNWK+Zo1PbAHRm6HJ0FuIwum4E6Nn3MOimhwmAfsOto8sejKR78C7KwycDG3xHJ8ct7mNxS2fQLsXlMamjfwjZFrZiGZxK7j64SPk7uKRZFOO2o6P3cg5doIe2EYYiPyfuGyGZ7wmaZqU9f95rkZwvjem5KG8f6ArfCbsNWAHvpH/H02IroH5ehZOaBjEf1zIN7rD/1NTUFnDz4dUGjrp56vqrCbqq7gQd2r4rqP5v3782D+ggvZ9UpyLmqaM3F34eQN9kzTXg6QJdjm6Yj3vkjiuudZeb65bSb44O0MGhHJ1P4pyOTr4hJ92bMLcZNWlZjvKHfLMqVITuSst5i5D70KAPPUcvNqILc3q5DWGljKwcEufHIzkPlKeYQ+kK2M3YCXsbc3RcEfHi8+vjSyYWMdeGqtx5J1fa1zbYOlO/FKQb6KussvqFbwXQVXWnDPTOz9EPD47OoeHOZ7n8AqDXatHRgbnL5tGhvRtBB+osxEE6151XvAl2Ae+OPj7jMDrakW1yTjfHwlYW4Uh3fOT8OY+JKmOetfMZneUuLxffKrYH2AU52szs+zwpyhxdIuY2roO78nMMjNqnPW632zru5mh5N1d6XkBuvd2hu8rukfjZ72dRlYPCCviF3teGVzNWK8APntPCohwCd+jq445eZZXhCy+JoHMvW8nROz9HJ+iBdN35HbvutTzhpNxGdIBOS98EoTtVTK9xlQwgt+akT5RRTmfaJIXuBD3E7wrbQ4uL4+jo/gz6CT0PlpDCDrX30CSeMCPOJebn4l11uDLqHyJHjydAinQuj0HbyIHvTQ29h4hDqLsD9DRqz2Tn60rgvO2gE3F0JeuzpkdHlzjqH+gIyTznXpW7rFJVrj7Y0gL8oYeA9GeuHlgdrh5Cd1blzu9ER+8+IT+Pbvv1IsoaOIZLTwI9xdwf2BscHXosKcYZ4WhaMJN4N0cR31iMg6OTx4i6ynHm6O7qLscdTZtTk6AdlGdkJTi9TzHdruawi3I24F1gbo7uVXdA/ZSzHhWeMTrmYXTMSbj3daw1TpxHyEX5Usccl+rtfwnoEXKId3j6O+bqCy6L1XGxXEHzl+5rq7unI0E/bvVV5OguOfp6pfn8f7fyC2YOp6MrSNeDKNco0Auy2fiIHhxdoEN7E/ZPADowd91oqGtlnODmJebTHP12gk5KFbUrW2chzlPzaw1wWLlNpENZzN9DV7V9GU94zsbt0cpVcCfl0vczs/h7gqCjuRix+20rBx2IG+Rye1KO3ByYc4t6YuYEPcGcjKMb51IbV8Z98vlcRJy8w9OBOlz9aVblqh8sd2KVAjwK4PWWgX7p7iD93qvDXHqxd02OvmHHLJjJqbt2OB3dW0zN9ahv+CjQ5eQp8AAdUTuD97Ufc8Tl6MAbqBeGPp7Z1CLs846+LNTLSLvycyDNWhtJN9iNcwpR+0IlOMveeZY7y3AAWfW3MCYxO7oEyPl3BEAn570YYeT08qfo6xuR8lJ+Dsjp6Kfh2ToeM5xrPk1BOyfWTBz3aCvoz3/0yeff/8wyXDB2UI4O3c6q3Hcf4FyK/HGxku1rw6vVK0B8zgmtAn3/c+vHvRWq7qlqR5s66RzY+UFfVXjrrqfQBDotnFeCea126fpOOR09ko6bOTrYZnLOwP12he4y8rK0En7Mc/RRFOOIOZpJrm6io4v0ay01VwlumTCXl5dyc8ow9xPjJEGeoI4Rv0rh/siMg84cHRdTc7p5lKbVIE6neczujPOb8kGQEXNJlDvg7OS8zaB/9Pzzn8/NzvIjonZgjsv1+tNLaOoV3reMAryh3v4CvEA/ZLCr+2ivumfUWaAjR6/i6LrjkscHEfTEx8W4f1gtOPr6Xowj5xwJOgC/MaJ+Ox1d6Tj7pIrvQl+O3vhGU5KuuXSuduVeNdy02hWMknPBLdQxo+aIg1cG7eJcR0A2ZucQBpXbH0FHlh4cHaKrg3Jl5zRyjOJ8qQ3MzWNVTpznT4IsZs9tlNodun8EPf/J3M8/s+juqEuvj0+YdNpUE7EAj7m2CgX4wRaB3rXS6qy6p+pz0Ls65nTIZqCL6ryl42KrqcQerFygB9IBOiB3IXSHStNrTMxxEXQgT9AzNThpcgx+3gi6s04KibrOf8NjEEzd587h1fByYx2k+4QaCedFzDmjZh3Cu1nSs9t9FObZ+XNP7zEY6JAzjhFmTtC3Uswuzpme+wc0oxwtPb1dUtDuXWp36I5Y/fPP4emQo45dbCFyl27nXFu1FfBAvdIK+Dr6n2S9vsPU1LnhlarzOfrKRS3u375epmnoLm2rW/plAF1djbBb37e22qU/MXIPoNPQo6NbQ4+OfiNCd5l5CvvEGB6kInR3xiUF8PhRAJ0L3c3dH4wxu7FulKeYc1E783Jr2e2oxFyGHqvt30ZD/xCQzz4CEfTemJ5jMNiZoMvSE8qJeXD4pVkzh4C2SA8NXWon6Ghzhrpc3Uj3LlcflasveARN9QL8n331Yf1cL/6tPD/oitwH//WO3gz0qtpWNo5BlBNxJ91Ap6Fv4qAHO3+sEfTA+Xgyjy7OdaSM8vXg6I2IG4FEHc0ZpjiTDppBtxHudi7KS5j7Ic++3JXvbEjXtrO5dKYzWadAeTT0WYKO0psTTsrtgZSDcHaruDnlp5FydKbr1pfmOVcNjoaemjmG9oIuV3/+c6DuJXdibhdJ/xioL3HUF9zBCtTPqzat/udd3ejlqc/ScGl2bdWujlGTHL0m114JDY8Y/GLc7g/8ScnF2XkBc/tqXzQD3RN0Qx1Vd7S9MaB71Z1+Pg7EkaDfSEcP2bh6lApx6HT00duXBT9PiQTq5t9h3zmn0C1w9+rbhxa7Z8w8vpqFSjmnlasKJ9YbhMQ+1urp6GD7KfN0BO1FGW47zZ6HUvtpgD3OsJHzmLI3K7WT9Jyf77EHSF+lHaALdZj6JwXqRrbbuhx99nVW5UD6B+mbGX9Y4LSp9u9W7+5rqLaXDH2Frs5RM9CVnCtaJ+3+rG8TIy9zT4F0A90oB+1rG+G44OsYADplXn6j72kh6BlNZrap32CL6jCPnq5hiUga43b5DdQ79wAcHTLPR3dpORx+EF+bCglzyvHGjxM7R5ec8ruZ4AdHv83B3tMGik8F5abTdouYRzs/ngm6Fd2bvaQBcBcrX1NbbyPogBxi/B5Qh6nT0QW6s35ntRXwmms7ceHYvN6SqHrlVcR59HMZukHSma9eM9DPJ+jVQ3dizYS8X3jjQjd56L6+5tGLTkdHQ7/dOXdHT/ap6sZHWfoSLLeBowfAZev6aBk6dYeTDq4dcw/tM6X2Zc45mmnm9/Np6Hw9U/YoGQpof/zxTU46RNC32+6prQxtVuPM1DcKZbgRj9rd0dcR50Z39HP8IBu0K0F3wnmR7+jnbQSdm1o4MlUH6u97/A75SNKZqnOuje9brjDX9vUZf1EBfsV8ir7CfwB0aDGgq+xG9QtzEr+v5+g0dAMdNXeL3h+DBPq4Yy5H1ywaHwQ9MedPbvB1dcuyRzXGm8XvoftuNVBu+TkzePQAuTBHM869HJ/4Od3cCAbf6cyaML/7JgikR9R/HvGqu2xcGlGUTsZ3M8zp50Tdc/cs5oraw9Agw7x9jq4tbN6vLVflEkNHh6nf5FW5JdUL8F+jKte+ArwU35Su8N1L7p2kUwbzjr7XH3R00U7CObLqHrX2GoDcC3IYfXqNJXdk59yPjuk1vbxBeOcn2AD6jePK0Qk3RxMr44Z6qT3o9BvjiaEvC5ijWy0tc9Qrd7eg322gi3J0cX63Y07QuS7ukdkRlOK8XaBVMozanXC7JC1zB+yA3D9Levl5OneOR1FO0gl6+5bAmqVDNkRX/+T9uZ8Bt3L0CPzT40uMdEd94XWxXoCvclzsnyzAp6X3mk2ir9jVUTphHtAHFgW6wGanSp7eF6bXWHUn49yp6qBDYJxxOy4HPaDe/HgZVt3HkaOTQ0XvUMScHxDAR1N3wHHJzpWbA3MjHfKlckI83GbCC5TRdJCM96gPzc3RbwTojjkd3avuNHRNrXlyLjMX5UTcH2IInx7rnKButCduzoGgt3kJbNjG9nOjqytsJ+/Qo0vc1DnXBuOudNpU+wvwK2xb4nwVcY4TJzo0bnfQz1+co/e5oe8rV3cTh8LQB9IBOlfGAXQP2RG8uwg6w3b4+o0hdBfk82iMffIG/FMEvZykC3OXULcGS1esLswfasCc72xIN6SWi/E6uz2x87vB+Y1AnTm6Xa8/8voc+PYcfSNnnYoxu0XrAj3InTx+Wjqdx1xnTOS0h2nHtoJOqpmoW67+vgrwRJ1ebo2oY7PLkiUWwPtauR+bmjqrchedUCE0PedP/qFfecuAeW0YdbhzBzt7Cj2C3n/4IkFPTL1MeZ8cPQh4722oo60B0Flwv/32228cv5EC6EmKLhFvfcSpE9BMkUBHvp12u4AeyLsbruu5On2cK2ki7wZ1PETKUfdJeLQouTnRvRtNR0w0VNoh83NyTt2NPjvXWGk34OnmHAoxYrfhNPzAP+7WsxQqB+0YU9RTwkOGTtDbvwQWUBN0VOXsO6L+ekSdLQjxu5H+ATa7APTmqXpAfWFbrf/phaorr7rt6tvayu4VV+i8LWv50P38vQb2WgzosHOxzSc8upPbDW0VOjo6F8zQzeXohrldmERH0f3hiVycrs8ydAMdlk5H18Yyou5me/fto9RN4BKMk3N0bmDxxhIcNIOLJTjtkSHkjjmtnIP2sBSk4/sy5oFzv8HRR7hljayjm3W/QsfOuTn/Bij8PDg6D5qAhLlC95yhtxp0JuNSwww6fgjcfy5Qh6n/LNDF+qOjRjq2tVU6bQoF+GrT6he1eKFqvXOidmUgCeiLK8ZJsvTVa2Qcjm63wtHXRzHOLB2hO8YA+rg4f/rGGx8tneueZ31MH56gozuMitwde8N8fPSGG5bcAN265PYZD+BJuY1BcnOQXmBOypXzO+Yk/W4U6jR9jsE1Sze3BpFzof7z3Ah9nKST80C5RDP3ER+ippcunQ6nwMrPJWXnklt54LyVoI+/k6jBwH2lDFHXCvjX5ehRqMqNInxnVa7i+5abVuUUZXcOm+2TQIehDwD0quqLbq6UnJ/7rPlAR9emFiMdQ5xeA+WQY47OJbBJmq6nMXm6h+4ICBz0GKwb43Tzm269oaTRcWeTqKsOJ8ztsp8H0CWe8kzUvRzfsO6VYoIAyHmX+QN0/Mxy9NuKDejar1J6MbLn5JR9whgwJ+jAPPXz8ko4bUtFI+m4Wgz65MSj3yegC3UtgUXKrgL8aY56sHTpJqAOLWKzyxkViuv1Izo3pW65uvv2GugPoG8YOrReeFxRX/G+bcDaxz5cVB+bQnfIYYejm50LdJDKmB2y4VGE7vTyjJ2LceoJP7XCzRqdIuwzN8HNG0hHom6QJgdLUDM+EvAkQQ9ROxN0d/MiP0en7qYUtQe9bpyjEI/QnX5OzmNgTsjJuS9/RecqdzQulpmeBuh4Wjf4OVlX2E7K837eYtAn8Sr0JcmaGVyi+vNAOlR29Y/dxX2g7jbSbyyhnmNd3+m0qYUX0HRUxE217bjn1Qfk6MY1ux7Tr/pIOeN14q3G8H2V49zR6ekI3d3Tkxx9nJzT0atozHBX1R2Klm565PbAuXQ7oQzb1d5zzDPHvxroaQ1Odp4cDvdtuQbnpAvz6OeQg07Jzano70H2aKxzzxoH024ZQ0fPYJ5w3lrQP5sYndVambhcpnFaDaRDRQHeUb9bsfsjjvrdH6MqB1UI4H+0VP1yLKCpWoD/XynTJ+RA7xswR1+xIuaquuNeeLgw92eAvv7a27ilw9FDek7Qv4g5uoH+NFBnjp6Yuex9jEtl0Ew2vQbSZ5xxxu6B89HIuTQOKIU6MZeh+5eEW0U4395CPxfmyeHtINlljH8cKP/QGUfejhEtAd2rcGRcJ0dhQCf0xF6cY4hWnuxXSzN0Ru7C3HrrQCfqT3/faOk+rVbewkYhVy9KdXJ1mTpc/c7RiSeM9eZVOZbmqxfgO+GkiN/YO/cYq64qjPMQtUbio6OGiUHxNZX6oJoovqKRahV14pUSI8ZKpwqjaMQxxjY+atT+0xQNdxpHrvfiHRGcVq3EOLR6EYYaVKKSGY2oiRC8I490pOr4IlKN31rf3uc7d3PmzqVBU6Df3mefM9Nhmnbmx7f22mvv87+UHP2VBH3+fHDNxhsxTz9HtEW6tTiYHktHN12BTkc31j0Z16jVwaqH7Y0aOppn3UU3qY50+6Vy911m6EzGucLt28jCFYNOWZRvgEtkXzG7cw66jXO5uUTOaefUWWbumFMCPbPzLekBcVCgXGH77riivnt5V3qacxhTyjFK5xf0kwH1kZ00c+1VhXJUj0fShfrp062kN71hqk5T/wNMfdYKGkd9YycJ+LddlCdFnEfJ0R8baY5XfEw/w9BdrIt0EA4pdMfrmIx0gG6QY6Sj12oeuwN0cG5X+a7cOrpGVsrBzkU+Puy1CtiesLzmTZynqn5bpINJODu9XEF7yMIpBUcRc25bi02YS/GL0QLpbBF0JeIcciqibJ+VnS9n3I6H8JjsPmfXPhYpTzkwP++OTtTHWzFnVi5BHcpl5YB6HvQ47JwpK6ePhDqm6u/qLAF/UZe6nJ85OkF/ARjuTNHRUSPMhwi4N5ccHQ3JOOhxaOgEvRpAb8jRCTfvViGjlXPF9Jyj1wPo+VeTa35eDPq3B21lfVvyahbVtmtFTZi3KMG86X7eAvk4mrGfObqqZC5vPSFueZZq5xVm5/tsWI5mHQUzCelsKeN2YdQE/fyCftIgR0f8Xj2Wge7drxaqIWblSr8fVVYur6ajXu48Aa8z4B929QdfMCPQXwnQM44XkHjF63y0G/+xA03WiTdZlwS6OzoAZy9y9IY7ehK581LOnchzHb1eZzJOCILzzYWqZpzXbQaPAyvM1Ul5YuiYmxNYHf+qDJwNmpvLzaWjYXKeydbRuYKOiB3i9DxQ3g87d8UcnNwccsyxxibOFbNrV6p1tixiR4POb+hOKSsHvtV+wxV0xeokPZeAn2o2U9TtMzVHvcMz4D8aEvAPu/qDlkB/HUJ3agEvPuqBd+8APTo543VSzlGgPxWMa46Oi2MAHZT7HB334OitsNPYhTmJt+OewXkZoGt+jrAcFBeoUnM8LW4fikvrzYOam5NyDMzBHVRVe8Q8dXMp8s0GKXJ3NbOCGXNzaxAgdsqFuebr2o0eltLT0L3I0K1J4Pz8h+4nGb1jsKm66uTwdCzua5GrW/593Fx9b4n4A3UhznHbOMIhJuCVlWuH+uex2UUJ+Pa71R9eapNmCt3Jcbh4E+v6DECHnHI0yIcUdTp6yLob4Bhyjl6Oji7QI98qj2HKXR+6kHUn6N+KFP7m21VinOI+NEhCj3pkT9C3HczF7RnnR0Wr7W9xzPOObt+lGWJyC9vti0E+Rd7Hj4Lxo6mjE/aIeahpJ+R0c1w0dBfTcLsZxovzkG0vDNtx2dh9uIucn1/QSThHTtWzdybzAdJam+riclm5/mbO1ZvoSMCj9qBcrbip22aXdphrs0tH+9owPGzqM87R179yPRx9gRBXy3/EG0BHzO6cC/PC0P0KUA5LL3L0Wpyj4yLo8nPM0B1qzdf1oS2v1cvVwW/nZ8/lzVJaMOM4cumtUsGfI8hAPILumJudc01N72aRpYNzEhzcOuKNfkxpOOvZlwzC0c3Ju0PQHqHWea/LafAUEV/ufo6onY4uzIt2sahQBo/de0tj94FyV8+DB33u5/6WztFJOVrIyvX4uxuEOW7HRLWh7rvXEMAfzhLwcHVZ+rYmiw9iAQ0T8DNS7qDjCajrJU7tdMPb5jysmefor/TQPcKdIo8u7LGQTr4FeKqlAP0KME6Zo9PVYeoA3RmHSHmjphNmviza8YyuMtjYKl4wQ9DptscqZyNO+4btuldvq9DNs0Sbo+4i5qyAQ0OeziGXfsMt55p/B7LtdiyJ2bXwRtBN3Vu28OBHNGEug9/Nm3VyDsxNCwW6MJeAuHdMzBf3T5ae9aySQH9xDvRl5zZrTUEH3IBdsqxc41hMyfFlqqx2V1ls06tfzdU1f++hqbNyBrR75XBAvaJauWLW+eCbXTa+u6Nl9ZWXfAS/jLfU0devR+ieGLfYjp0fA/TXEOd2pGOO7pYO2j3rHmEn6ITcezmCzt2o3hWoK/WuEthavQbQSTnEytdETvYgQCeWtQrOpcFds3CiHsrg0EyOOSmX/O2oWiDP72jjlXIu0Le4nQN0LqS3YC47l58Dcpq5L66lp8loih7NnEP/fcAcGihw9LlvedvHPsaM9YN19EQ+VW866mhBzLWbgXOq3mS1+7jN32MCfoqGvo35uLAVqFYbaZeAZ+DeeQJeFfAPu3ox6I9av55zdNKsm+xcT3B0B1yIi2+OcHQDHaR7+B4QT0GPq2sZ6MlLVEl+4ujbexG51/KOjhl6sSqYRoN0hzEXb1OciWNbCx7ZDgY3R89XyMSiVqJswqf0zcZl6jkN5pJxjjYxp7q1xGZ3+TkwJ+gLZef2YmRBLswj66cmiXnp0OIAek9DoC/69LXvf//7hfo5OjowR/9iK+lb3dX1isXs1WtAPWblmk0WwDZPnxooxU8CdctxNJ30wagaA3hsYW3/Ykai/pmNbU+bUhxzqVfAzzBHxyQdoKdWLrpl9ASdpKeU+8D+DAvdr/Bi9ysIupOeOnoZg0AX5rTxxNEZ2G+2DTFNOnqblDsNnaWskn+kT9gRz8GiY6pdlKNZIs/hplsLch7qbDe6uQ2SudVOA521cCAcXZn2uIy+O1LO0V7aYLLq16DiEhmtqvUhuf0s1/B9FsVTLaA/+iZH/Z0PztGhxNVPEHVk5XJvafFKGXSgrmJ3VsuEtbZRX2trDNoc3VfYBincy5aA34ypur2Z8e9Fjq4PM1fvJAF/ER0jcb7m6OshZd2FNT9Q1xzdMOdAxnUn6kvjphY4+hPjDD0DXTVx6Kh237k1v5yWnvssR0eHo1cNdNWklmcAvUoixbhGR7Pqk3YeCMcUXNjyKtL5hTRz3MB9EOMAYo4r4Rwy0EF65Bwtkyycwie6WP8aC92FOa6zQ3aOcPOuPY45hr1dhjnV09MC+qNvuulpjvqyc3d0US5t5c0KaGDp5ByWjjtkZbFKwAdh/u6ojx061WiMD4JytMFx//uw3Bwsl4G6qfcPfDNjgnr6cTxt6uHd6u20rMjRl65H7P7I+QsWLVqwCJqPC08c00f0+UudcFwRaz7xOTRfR/cWHT2fjCPmRnoD404DXVizLi4+E3I979ppqbyD8tzqTCl3t+9jBwlkIuyuMNXxRQFztLiq9hfOzfPl62bs/talyHmGvCgH3nyIoG+xtHvOzbtxZYz3E/LlaKEwDpeC9tnzcF17x5zyUmlvVx9LZpLQnaBH1FUy3rmjn8hcXOJnWCsHtPU2JhXLyNV96xrX2sbQT/WEyD2em9v0IL5cD1k5Q70N5tzYFje7dHII/MNLba2gQ88AwcB4wYJFWeNz9ugDQZcSK48NoCNwN0+/gpVxtHMHvREcHQLnZVzJppa8iesDH+HoOxs76egHTdi11i5wP5ZYOlWu63AKM+rsHRAEPqTgDGJibH+UC/L6XvHwmRDYM7fEoyjQGbrH9XO5OdUf/Lybd5uUe1eqXfXtity1Vc0+NTDMoH1scgCzc6kHLQEdqF/7MpuqrzxnR5eE+22wdTg6Inhk5WDobuqSltX6gToV1trGDk/58pom6XaveVHFkKE+1XeECfh2rDvq2ML6tpUP71Y/V0eHHjlvvnx7QZGn8wnAPzKYeYI5mw0M3Zl2R6OX25WB3uD5MhDGnQRdK+bA2j8S75qvA/RGIwf6DFN0AJwKRHJUsO9rcDqihiPtnDQb48Qc6Mc3IsdquHHLxufj9fIgHqjGBPycpB/I/LwlZre9q/zAN62hK2iXnRdtSu1zzKnhAU7OhXkauregvqwjR6fc0U8kmOvRSN9aGT+mOXoQqGZWrnRYy2q21gbQPSHXNNoBOcL48L8NoNPVpysdVcBjs4ve7NJe73z3JenqmqOnoL8AoHeiefNef+ON173ulY+KjBvXCts5IBmH0N2C96eiO+E0dTm64+4i6DLy7UAcAxnHM0to/KKjN3YC9INBxaAPifNEdnikFuGGzIO9sj2DXJjT0I865eT+LB3NKC97y7TzAGfoAPzAgcu3HIh+LsiXo3FujnZ20L482PnZk/S+/j0zuTk6lDp64urn7OiCm4DzE0K9VfjYYnXl2ln5aqhP3tewqB1+DtDRoJB6L0NeK1ehq7dDXa9mfNd7O3hf26VZAT+zoy8V6G0xv+p1H6Te9ypN0XOYmx5poHsqDv0KS8ZlrMvRvfxVoEMOOJpyb3rMXN1C94aBHlAfrHTGOazXMa9W5OZ1YO6KZ00S85ZiN8McA0vnCDeHeMYEl4TLNlBlgm6Ojin6r7EP3TAPEftyDET+QADdOzHXQRNxFb1gVY1uXsK1V5iLc/TU0YU619o6d3Tl4uTs6IjbcXPSDXUk4yTn3qm28F2ou6sfY+RuyTg5ugfv5Yh6xVFHVq59VSwG3+zy3k5esPq2SzoBfzbo86AFCzhANqSPl0XMu1ate4nTzW4Nd4OcsL/jyebotPSAeYujl73VnHM5OsY0+UY/5zPn6DsN9INtHH1oaDCun3kX6/WhSubnlUo5YE5Tz7t5JFmck+9k/zkn50S7vq0eScf3rVnobp5uZXGw9JBpDyl4PmnfGmP2boXsy3m3lqydK2g3N89F7T3kvMjRRfqnPQG/8hwd/eQJwR6ftqJBRH0nt6JH0L0yLpeVm5qKBbAQA/emZzL8XkbD7wNVC6gjK/f2dqhTfLPLDR3sVr/kKuBncPTVBvoC0zxrfEgfgfn6Dwb1/vx5z3uJQnYSb5RDeDDQo6MjdH+iU86FdDk6/x4Pji60E0sX9j5sjaD/sBB0Ehw5zztwOjevIHMmNZtEHTk4nfFsVTSUoU3Wj9moyN4xJ9x+q3GiXi4D9MsZuW/xyXm/Ozoz8Jye08292HVhOAIyPSAuFTCfZHkM5uZaUZMA+cygMwH/bE/AL+vY0RPI3c75wVY2iPG7/JwtVwEPU/eSOHA+OM4pOkbPudtkvcwD/iGbqlfsb+OpI0jAz476Z47rtKm2WnaeXX3unIe0Cv9z516Fl9IA9HkZ0D7okQ/CvGv3e97wvOe9wR3dAeclOehXQPB0ZN3l51A2R+c5sIjDQa7OjJORKzsH1oV83tHdbYdSzqt6BZoEzIeGcqYfMRfqln5vdW3HHAM+ixtIhzgcs5vZucL1ujPOyTosykHvbjkIcnmsgMVTxHwfBpq5pCOdZepGOYL2vTEFd6gruLkQ51Ds6NJjHPWPzVQyXlQCy3BdMsSBOx+EOi29GPVD/Y0yC90BOUnPEnFlPNRq6C6P36ERoK4EfBHlOm0KCfj/78FyF8AWuZUzzNENdFi3XXJ1fcaC9tXXBc6vXvWc57zhDW+Ao0PyckXwnox7sq+he0YOji4B9AzzBuWgM9FuzSP0CLc/aNeqQM9ILyec17fFOnRrfASSmptrci4hRWS/av5H+Wdzbn5Qwbpq7ZSEQ+ddN/wFdgCgO+s4F5KY6+QoikE7ObfmWr44x3teff0DWDjnyvlAvybnmp6jtQvdRfpnmYDvtNadO1RFOfNwsW+9DZifwFJbw4N2Ya5lNRTLDB86PdUYDwWwgz45p5mTdY/tcIX9TlWAjoapegcJeMvKfe297175cAJ+Ns29bLU7ulNNxvEUgecwf33E/Jor173BMAfo9HJnPNUjOEcn6FpbI+hZqTsVHH27Xr7WGq3nm83Roeaxg5laLd0xF5FBcImc45dTzH0n1ZAZfZllNhDNPPi4RCs3zJlGwi1m27f5UKZ2AvTu5zrrtHOjvJ/U67hXUJ4e6lz8wqW+/Ny8/+WpnSvj3hZ0kv6YxzABTzbaOTridENdIvXinIYO9m0Y6QkBPHJu4RXpsVhmFHVxyMoh6LHZOkDHTwAjBMgJeqtYz0RX//xs+qi9Wl2ot6mAv3SOiy38a/wqcL56qdycozjPY75u3Tpijjk6E+y4mIFLQbe4HcPjMUdHcwn0hoXtHre7o9OvibUycCqU0c0dXaB/24+DI8IEVYops8G8mysFJwHPeviSapkbWV2M2wvEP2SqBSNnQafdyxCq/Q5ktXDGdqhyP7CcUbuqYwxziZ4u0jEQ8+4YtFsZXJ9Af3lf/2l7pJvP7uiPQQPqN2lZvZ2j08YNdwnm3VILe5tjzgB+hFm5o8CcqJvCsvooEvAI5jBF98ZiGaqcqo5eJemzu/rfs31tnRj2yhsu4Tl6cPTINiTM7cqC9i66uZNuju4S4qmjo9HRoQz1SYKOfNxOb+hxjq5LXs6RnY6egu5l66ahesBcbKoMjhqp1DPOBWs5YK5aOcpwZwbuVldwd71Btb6tRhtXoUwdsNcM9IkD8HM3dGKulfR4Plxq54uJuT21Ko95N8+aCJRjV8vk5ESI2md39MdwhID60y0rl1bAp6Bnho5Hiem423C/jYTboKycY85OoViGqJ+a6mk0fXUNl23mZeBeroWV9JYX+FSDqR/hVL297LjYzrawXrpz9DlXAXR3dHIt3v1Bc/Mr4ebE3FqcoxfpssscdHQHPXV0ch7jdlteE8mhC3Z2Qi9HV5rM0COz8nEVwiEin3FuboB6pfWQKmgqQ+VBLqo57p5rB+M3m2699bR/2ybphp3j8gcaE7rZOtcNJ0A5UKdsiW2hZ98pz7R3E3M0EE/Uk3w77wN7S5mbL4abm4KbT46VhidPKQ3XyRw9imttSsAXO7rycRF4Us7QneWwaBxMVbq5OA9b2EpGemlv/1SP2bmn3CPnnoOj+OC/IHXF76qAb4e6JeA72rtzwyW6rA5HJ+j0cetydK+PYQqOmIt0gD6jADri9tBo6E/EIEcH4t5wD+voLHNXmQzDdxviM+6aoxuK6AXK17vkg/ahFHPnXG4OVeD44LW5LX5zcv7AA/8xPfDAAFDnlJ6G7spXytTq4fe0MXFgCwm3i6QHcW4uyCPmWjpnj24eMR8+1Zc/BvLlpw4Nl0rDw5P9wnz20J2o426o3/8yoK65bZGjR9RFOj3dLj6ScKE+UgPaDNz17rW4WxVrbYb6YM3X0iH8746gC3X/uI5WzVDvKCuHZfX3fuydl9gbks9hjv4Egq71tEC5lcG9L2B+jWEutQedjp6Aji5HdzM3xhty9FgWQ+FJnQ09Ojq3knFhm5col6PDEsQwg/YEdcX1YYYOWYqtaabOcOHWm4k5Wb+1Gf0btwRz9OBGZQNdO9YQuC+Xm1tmrhsi6u2r27sHYtDO+hhSbkP/QAmYP2t47FSfBe4dgu6Eo4fhplc/TVm5Qkdnx5UE7kQ9AC/MiXqZ4Tt2rmVqAnVVwPc0iXnq6PZM2uvg3ETUe6ZYK9eO87DZpbNXq69897KLOnQvLht4ioF+GdBO9PrMza9PMFfongCOhhHdQIecdMbsxJ2ODsoVuSeVceJapp7DPTh661Evgl1Hv2yrFpXHiHLDPB/Y2xyfMpuB5fj3h6FnnH/iP/9Ze+R0xnbuOBlaE6eYBB1zdE+zmzLKcUMF7ESXME9LZGzQuVGZm49Nam6OCydOHALmMPnS5GEP3IV62zk6L1Iepuqv9gT8smJHl52rYEYL6BDoZikse1SlEUL3o3r3mhLww0jA95S5StF00oV5wL5eMz832KtVZz1UwAPntrQT9Q7f17by4gWdc/TC0P0RKeZLs2rXAsyVjJNIuNNujh45x3nPAp2OTkOXp+fm6EQbwqg1dOv4wD4W6BH1lHbuHG2JyKuJm3OazRIaYW6eTFhtBOr4hsfM0KUjZ6bG7Y/iIuTGOEZaUyTdQb/c1e+RO8P25X5FzBPKfSDrMWjfQ8qtqL0rzs3Nzvu6ELTD5Es4+rWLmHc4R5er+8WpuhLwqaPnw3U9E3dvmqEb+XlVBok61eSABLyRjqwcXL1WC+uScnQ8UWAc3YJ3Az24OrNyHW120XykravPucQER18KR2+x9KdkmHNFTSoK3Ym3d9p6DN2tP5mMs//DQKeTN6y3ztFzM/TkkS0BHQVqqQCnY55DuGjhvGlu3vpXQRQ9xUek5cZ/88ADIv2WM2dOlJllN+WWiCLm6K7GBON2qGthVL/NzcV5irlW0JVph4a7mYKjoxNz1/B9p/AJMt556E7MedHUP20VNHyhUQL6SbR0io5QHYNcnU7O8F06MVLVS5Mdc5J+OlTAD+NgKT8UjOF7DY8CHY4ePN0svWaoc6qOtbbPz466JeDf20EC/mLe11Y4R3/KUg/dJVS7vi9grlS7pGQcqUYPLXRz9O8Y53T0e5mM85Ggu8C5HD2Xb3cr9zuvmUE/yEFy8LlFTQwnmDPqLvvuFq2/Bw0mOaHB0zc/INL/eeTMyZP18VzULkXOOdQddCbjIuXojjklzMW6OO8eKOU3nKPjcjdfjMoZNHC+1zDP5udStW3oTtglsv40rrWloEedTEtgeYH51NdF+tbKTho6MefYbJ7uB+qmvRP4+bPUSHP0DHTaOe41oE7B1FUW21Z8NeMN/8ME/NyH+jr6u4v+wy4Lji7MW1fU3ng257gIurHugxHO0YUTZiCiDtBp6gzdSXh0dVwOulCPYItwf8ZdJbDjitTDk+y8xapb3TzLpMHwRXm1Hv1YhKPbayaqyLhH0G++eaBvGsciZtNzQV5z0GtQ3dJI1QA696dSmpsXck7Mg7oOCXP7pJJwi63c3ZNwk4dZKCMJ9NXFoMvSOUif9qk6At4U9DQbxw/Fu+jGkAqoO9/Oe9OaPzRCAr6ECviqF7kPlotArxrpGOtVayS9Z8pe96AzI6XkYDlU0HS21vbgXH3Zkx7ipBcePPEEcC7Q56cL58WioxPy2Ch/IOiE/V7G7X7B0T0PZ5dzrqy7MI85+O2JoaMLdLp3qm2tDNfzlPuAuLvcYuaYnBumsnJwinCxXsetTtD/Y6QPHDnSNz0ygrPSpqd7mib/XtZU3QXQ0SCCzq3n3ImeYF68lYWw7ylFzEk51WeHO4+VfG6OOtg+LZ8nKgRdEuQ52O/2Cvj3f/yj7c51J+rKu9PM6eu4a6FN8XtAXdG7/Qyw1qasXE3znVzoDmHgD8FQhxjAN/r+3cFamxLws+vdl8yy+lPk6HMXmZszBYcyOHi5DcWe/hIBnoihexRCd5XM/GMPQIeAuebp7ugRda2ytWbgE0fXFL0Ic7tVtHAuAU1k4yXDHMr9roFyc3T7RRuqV08TdPSb77tvYmTESD9z5kzTX7d6tOnzgLpyxvWouLzGDalYTxPjM2Gexe0DcnO+dCkE7YcnkWnfUUIO3je1GOQdOroYZ2NPUP+0rbV98lMf/buy7g46LlbB8iLnYQObdXk6iG/RCHoFeEusfkUEf4plsfYSl2pdfj6Yc3R0NHJexTA0VMV7ODyA7+DNjDEB/85Otm4vu+jm6suKC2Zev/r1Djoxl5sL8aLQ3WfnCtrzmm9HSUFeGYfSOGCO6957v/Pb/ilVvpq4e61lcu43Gjhv4dE6CmZM44WGXstVvVeqWlHTKtg2294i1ZOJOUJvGwbtwVXpu/kBzNKhmycnJ4306Z6eW2/dsOGlpq/8EKaOuhn/DlRc/iXoBw4c6DJD7541aM+n2z0NN3YIH0fOOTcvjZX80NfDizU5T1XtqQr0wjl6Snje1V/95uPHibqW17xLZD4m3eMjuiTMd9mtrkm6bVL1esQmXH3SSIerNyrVmN7wEaKh1zDgqtHP7a9dwO6r6n2dHCwXj6BZ1smUduXFtbw20zr6Unf0RS0L52+kk+MqloEOZbNy3uTopJzJuCdC9wLza++5Z/ddRByjjF1zdDl4yxw9NoEeJN5bGa4I86ZSZ1Zq1ermJN3g5olGnupFY7g4VJnuN8oJOg5QmG6Ccekrf2micqZeV0AACyrjzw0RdFBuqDvfSrazJ0IC7lQO9L2GuYuY99vcfMxycDw/Sn6eqtre0dkKUffNLscN9Qj6CTGuwF23rUkBrAxdGoGpN0g5A3c/e8J0+vAwUB8tWQV8LaRGKDIO4eairaMNgXdfa+v799uJ+t/bo46ToTcC9fP8vraHfgjwzsJ19KVXLb3qsnkt1a5vBOdGOq7iyB2gF/AtR//OkiUZ6Y+D7n3ykl/deQ9BZw4uAj8O0IW5vJ1NjCvr3hDoPPnFKB5qs+GcO08sSydV65pbQ2Qcg1NeZqyI7zQ1QNAnT03cBTsX5yJ9sCz5XDKA3g1L7z7QfXmKuVBfrJR798DYAD0d3n2ITzHX3udrbcOWhTtke1SBuRxduFfZZknGUfGekn73TdeuXQvUCbpx/sX0PYsZ5aFWBlVO8vSi6N1W1Rm1w9HR7QUtGJpTXGuz9YOpal2cO+HGeM1Cd8JOzt3YEaxVvYKGpLcV19o6S8DfMOci19wnWQj+WLm5UU7QZ3H0Ail0X7JixVvJ+r3A/N4lv7rHdP/uu0C6cu4cAXpwcJ0qk0LO2/azQOdOVNXHVKxgXV7eZEk7i9qlITBN0OUk9YA4RhOn+yN9CN1R+4qVNfwOH23xcxsONnORPznHZaDD0om5RMYTJ7duy2ljA9nuc6ccIuvYu2Kx/LPGgHmf23nEHGOqWUL3QkeX7r777j/cdC1I/8yn/AUOrfvR9bJ0v8g7G7so395KO1fVSTp/HlCzMYW1NnP1sfsmeir8KSh0L9uQEW5xu2EO0IeqxnqVFfDFnq5P833L7+8kAX8xvYW1uNZ96SNsbq6g3bVOmGtIQJedFzj6ituvvRaoX4GKmXufevud99/jctCdc6HOZFwGuDqHFtQVugt0Yl54sAQr1wzzs6pdVeTCLdCVHizfNKqmSDlJH+AS+vTJkyeO5jn/1oZvfgXz9B4PO0l6lb+QQw661csklBdVygBznipBR9fbWFwI2jExN85Lh07lX7xUtIJOR2+/qUVz9GLSofvXHgfq/4ajg+ZUSaW7IvdCjaC5Koa6h+48V6bWxNhsTp26D6TvtwR8TzX7H8npOUE3EfQQvQP2esU+agD1WVbVddoUsnKXkKsvKzzWe36COQW0vUnr1l25atWbshW3VxUizhe00dGvhVYsefKTl1x7DzB3/Wihgx7y7a4JOXrKebypbVfW3a3crmprFj1ZUQP1vrc59yV1LooFzMNJZVMDt9xyyxGsofVN9SBolyp9fQPQxNaTJ0/2yNE33IpFth9u+Aqid/vz5LwaIvdqFaF7aubgvOgQyO54TPtA6/tYTH0DvtQG1CctaKeXJ4inkftQz2PbVMaZmHgvBt11002I39e+8M/0bwGuXBx63s15cUg5945WqYVpugE+7qO7+qm9v//9/tGxsUNca1MyzvevVYV6dHR0i9/xP7nRd6ajtbZPHf8TUT8/s+8L4KCaov+KRQjauwzzxRnmQp2sk/M3XnM15B8KdBFukKPzRawO+u0A/R67JDi6rBzSOjoa8+3qCeXeE0dPOHfMxTlr0luD9opjDinkRq/W+pds3IhM1Nq1Ow4vntLfC7s2228VXpoAQ4elC/Rv9jQaPS++FZ5+FJ5uYn44RJcTBZjLzHOcO+bPl6M76Wx9XXsD5mM69NWtnANuvMQ6wOh53aION7UUg07Ub1m79us7Lp9WPk68q2BGsJ+IlONBmHNE9+aoW9rdz3Un6Diqr+EJ+BLPpeipRtJx2b0aGkEH3UNUBRc+7VP1ztbatKze3gsf6gw/SD0JZ7t2u5075qLcOgN2jGbnjvk1BP15Al2kG+pR7/gXHf0eenkKeiO7eK67HF2yHDuayZ55Tx3d3rxSiLlK16qCnJYf5TXWqKlmVXVP/8DxjZ+ANq7YNLwwO/0dnGOtbmLv5SddIxtyjt4A6t966Vc2GOm1sAYEEfSEc1l6Tn2h1DV1dBMOkNqTHSyjoF2nvRb4Of79PTc+Yu6cNo7e3tPXOOVE/Z5fjW7auxCoJwXvFBNxPmA80YGjowbBsnJ+NmQ4ectVbkz5aVOjpTFDvVon6p7y4CJGIN0Bx0hVAD5S8A1H3XGeZa0Nm102vq2TBPzF8BbW9L9z3usZs3d3Xb1OnMvRSfk6BO3EHP0NxY4OuO2KL1YH6G7otHPpR/sAuqOuUVl3G9Q0QVfXHN0gxziYITkkzMW55uZDyU7UuK2UuyFxVfuOfPIj0CfWfn3T8MRIyOxZFF+dODR84CQ1/U1yDr5/g9gdoOPxVpDOBF7Q5kZLWTuaYnaJu80FuvzcMD80FjEf6BPmNsykevXFxLxd1p2tjaUL9Tt/tb+0Z7ehnohkxxtZTwtmUuJ3Mf/eGDTSXbjtxK0GNU4fLmGqXipNTkxFU7dAi2E7OxhHk6GTevyDDivgifoNHR0st+wCPzMuKeJf9PrrIuarRLlAN1u3WndiDu3ORe7PC6Ab3wvQL8NozTtBF+YSQSfjvGsdnUOofaWDT+Oej9y33xUdfRtbuVJ86GOTnOfPcudOVFXI1Ii5lcLVq3afuuUTxvmOTTtKh6d6HXJcFfg5ft9PBNJPfDOA/pWXfhOHTPGDoz00nnoEvUrQ25W9MgXHuJ2hOynHOrmd4V7K3FyvUdTqeZGjD1VufP0cqiNHL+ZcWnP3j16xf3T/nr4C1JP9a3wuMPUQtNPQcUHYKmQBPGuHqSY2LttaG0i3M+DtL2SL283Tq6Cdm1aHRLpzvrluo8XzU456sO424hmSorj9IfAX9Ak1+Vr3ucDc1aUcXCq4ObSKbm7XqnWJo0cfF+Q2yNHvTBwdobsIRx8PWXe9RBWu3ds7Pe2AqznncnRfPP82ej1dONeBcHaUaCvnkvkIha8yzL08xiz9+PM37dhU2js1fVejYphXp05NDm+xGXok/YdaXtsQH4/WakwVkfMhgi7GY5cG9pDxIIHux8cMPyvk4IB54fHtqfAfceOj5DOzLa/NvL72uwz0r/74q3f/4rf7R4efm5Eu4PVOJjZDfCZTH4nxO2+Vcjwc2yy93ORRHT1T4VyK0uEJbC1mPs7zHv6MMR+3h//NpirU6OvE1XnaFNba5nTi6hdyZVxO81arqF2Yp5YOyt8UgnaX1cXK0edLC2wQ6fMIeoGlJ6CDc/Tg6Nyl9t19dr7avu9+t9dNHV23UBkXHN162WbR5fTQR+v1vJt7Ci5IB0TAy5HXBaL+a4SVtLWf+MTxr+8A6d+fPnli4cTOitn58PenaecUF9kEeyAdgXOkHKosPmv9vMjNyboc3VHvi5izqF0C4uxFq+c3rhbm7ZfXOnX0r5rWXH7n6Oim5+4G6iegNH4PjdgTc9n6SGrtuLmxV6tEnaqR9FpPA0uJQH0/1tqsGMKnQ/bDCT1z9Eqw9M24nPQaUf8bUW+blYOrO+qXyG71uRnm1xDzQuXdfDduqyyQl6OH6XgknMMiNJxgkYXuWFm7qcjRG2in+chad6I+3bvvwK9xJAuGhd8w7IU6r1gw45hDntMJ0ToHfGRMD+Uo5+RcqnmrDrLalUvn9vXTfWs3Hkfovml4N4DeMrl3S//hyb27Zefy9FTfbFbrlUA6eivoCeVdz4yYC3WCzpW1yTg3txMnWuxcSuz8+tXz5kjtK+PaZt1zqP/OQP/x3Wt+sWl0PxLwwlzVrwWHQ86cjTPMvUMVB32nc54dMcMEPObqyMoh5WKGjs6NqjR0uzhUfFplmReaeq3BM+A7WlbvMAH/zmUXrKMzdJ97lYJ2Ul4ox5xi1E7MBXpByL4IN6gDR2944N7A04Q7OlNt31h4edC+fb0qdecdt+jozjkvSYZOzKkEc+48cRsxzg1zi9rDl/5hYMmKr+/Y8X1j+xt7hqEvZZifEekHM8BVPlOrkHJP/FWSZFwubCfmQjwJ3bHn3ChHGRzflpquqhWY+dD1jyXmnTg6E+7WZnf0n36Vrn7nr0ZHdyABnxq6dqvGNTb0Nutrxni4KjUZOkhvlmnqPUB9bD+W2qaGwvKa/5BMRDwN3TejQdWazdX7FL8XU64KeKDe4YL0hVnrvtIx7+4G5I55WztfRcTZ3yTOBTpFVzczXxROkZWjS8q6u8YZt6P5HB0MT0/vtrrR5/4aLxXfB33XPVywK+vuJVbEPGVcqfZk74oW1OgUVTbP8ujLe6f7n3XH1/c/94TzvHvL4d4TEfMzOEhK0XuI2aUNTYbuRF2OTsBl6c/cS6x37OBd4rZUgj7GLWrEnCrMs/fgX3j1emLekaML8c5Cd5L+k1f8Clm5P0/zNWy30dSxNR+321QxU+zoSrrzY+s2VHwv0GBWs8R7o2GbXUYnpywL5zLa0Rm3s7sUv2Mcsq/p4RE0wLm9tNmlA1d/iBNNFR4c9bquLmCuMrj2mFP2xrVE6+jooUGL9Cr1CLrJI3dpX36OLkcHw475geDmBD0AbmPi6II72bpSgDlVQwLOWogIa3Vzc3xAyqUpFML1T0yfJOFZrv1Eb/8da4/kSE8539BT5ZwxAT1fKIPHV5SccrSzUI+HRg0MT97H+hhl29nOEji4/pVPmpPqHE+Ykda0gv47oX4/XH3T93czgOd83Itk2HR2XGrolJHtjajvGnFVYiEyObc7flqogD80BtDjFiEbtHYpyc4D73YkEE+LnT2A/xRQt7W2i2FPKpXWta/vds67EYmD8ytnAp2Yx2S76l4LHB2Uo+udD96s1n1Fm+W10z6g8XDIrcAcby2iFq7Zt2/Nvh8HR88bOlp09CIZ6EWYS1WAXucZMszmZpxrsd11Vy9Bj1z39t6FCfzxaOonQPqGFsxvPTNSzX7lBHqXDpqImXYRDtpT0N3STxFzqSc19AB9tXr96+bPodqBLsrb7Ui/psjRhfqPkIDf/1y6OuN2ODrFZBwxx6NEE0fzITxmF0wdoBvhMnWz+Ubj1OGGQR/3rcnR84buxUwkPayr4Eu5WX020Pm+tllOm1KcfsGxf9V1+IVDzM6g/co3XnklhrPV6uarGLQXgs4JuXGegP6Wfyh0z1v6Lwg67dzdHNdd0wFzBO3Ity/cJ0e3FgfTdoFe+Hal+mapIsx1FpzbuTuFSZgLdTSQXq1u3hVQ3751l7+tafrI8Xet/feZyH6se9/wraM9fX1nzkxXNkc/bwE9E46OSPHmo0CnCjG3LsqZgnvx+gVzEs22jj5r1h1dc/QUdUvAowLeOfcDpbSvRaRTYp1dzbEPqlTIOEbvFBLwDfdzplC8VzlFl+znhIuhe0DdTwBr9HW22SUsq3dYanYBzdGf8Lr3nWKB9fVXAvI32oCrIGi/Js+5KE9BN7YhvWU5jAb6k2PoXuzoE875aX+ammAGDqD/GnzDzxe6pRvoodtA9d6l0F0nPhJ0+HObw+Bg5/VBjD5Brxe4ef43yL0CqKP0c9cufhlI7/vkxoR0FMX52lvv9JkzFf+jEXRxHsY9JcFdDHqfQG9v6OT85a+8bE6xZj8zDr3zObpQf+EmZOUO9Fr8jhYxJ+FhSEXId9kYn6LHU/VION+nzZ9VKHWHtFHVMedIvKEKNELSveMLbKKvCvj2m102drysvvKCcXQUtXdR14NziLC3cXPgzgA/R7c/C3S9qI0dA/UigL5Cji5FR+cCOjTVv2cUvz2veMVzLzfM9/3EIQfsAP1sS99uoNPRU9bLLXvSDfNWzpl/M8gLg3Y2GjoabtAueLkET8fym0g/YSfI0fZ/9rMzZ8ar/udaQTfGHfME7raOjtk5GqX9Ky0aevHr5mvhvPPQPZo5b+3n6FE/Fuq+1uYVNMCamCvfXsS6MnAM28m55FP1yDpID4XJuf3oRD2sr0kVjlOHDi1EXOCY87IT+xpIwH9g9s0ueN1Dhwn4uQ9xuvUjB+Yetl+dYR5dPcVc8hU11sIW6JXzAumCXbohOvrMWXc39qn+L/3+X99Zcscdd/xg9IX0crDOKzo6OQ+2DtAhgi753Fyc82WJyXlwIWiv2jWUBO2g2vAuCgglQD9y5JaNa2/5wxnTSQmgP+c5039FQFGpREfv0tbUfH0Ms3AY/Pls0EG40u1C/ayXNHz4qjnSuTo62jk6ukhfc+em/ftZAc/0uw6emAlz1ctE3DkK9bpx3qg1GcSzYBEdoplzDZTye1zKbEyW9g9PTXutRCyGrtZtqg/UO9zXhjNo3rbs4jiWYtHq63hq0fKrDXCRnmJ+ZR7za95omBN0nULxWoHueLMLczk6OX/1PfcXr6NPYNdS/8Dov77zHRw7BdC/8Io1RrkGd3RevKFv/0bi6B63Jym4aj0wXkfH6Y1la36WQdWa5XVaEa7TwFXvQsR5F+bQyHTfwIrj2M96y7VnWkH/5c+2ohK3VskcPYvZ83tXnm9o+8WHJHTHmhoxbxu1119849I57dTJSxbPEfQfsxnpP7kTAfz3+6azdTYWu1PxLn8n3Ukuzm+SwwnUm5qm6+CJKhsZj7izWqYyMbxp/+ie3hH9sGjq+F6sgAfNs8Dum13e32kC/qFc675s9Qe7yPk1q66U1jnpQp17V4S5B+38B7hMyRx9nhhv1VwDfcWKX5F0cS7Qzc+xjPLc0u8Nc4COzetf+MUaN3RcsHOoNzIu2qOjg21Kx8dIMQUHyNGsXprTcgbv1TRqZ91Fhnr8VML4LvZdMPUjR3BCxb+XHElI/9ltu0bGj4U/4aA753Dz3zvHEhnnII25o4NxdKmHrWXTOatdH7SjR9Y7LpgR6T/+Kq4/332/ZeW+9GeifhucHG3mSnfvvBFwPlFC3fEW6Gh1zdGTyD0+Vg6XNu3Yv3/hVl8vQYuqevZeb2acNQH/p/d3loB/6B48sWz9dV0T7uYI2gG31Mp5moKD8lXvbuoSjnt+1VxBnmruW75jjk7QU0dnzI6gvXSHUQ6tAOe33w7Qgfluh3zNQjp67NlKG+fozci5yTHHpb0r0dDr28K5RH7GICvaI+WSuQMVwbchkYgf8T0a00Wgm/zrRqYNcnI+Fjl/vvgu4HxyIGbhkgX09O3nN76emJ8z6KqLa+voUoGjQxhRAb9j/+gOW1Yn53R0La9JiaHLz9ELUfdORzeJ9Qh41WdZeICh99xX2jT69f3fn64M8QfnGjHm/W/4ht63PBvqcHW8dfGCPV1m2errlodM+/UJ4xwD5WdjXrDFJY+5gZ7aODofDfQ7QugO0tPltQmk4Ka2DMPNXT8A5RAcnYxbi8trUcq674ygs6g9OfQxHBMcDN2cnItp2R61FHPNx2NLKSe66NbQqaklnzoT0nDxhs/ijJzGqRHk56Z3xxL3gVKk/PcC3QJ3Dnr3UpqHk6HndeNS/p6dM+jCvWNHF+QkPQf7mjW/3jE6utcq4OPcnDdhHk1cD3bzO0FP5bVy4Dtz9LL9yLS8xm0t+SlWxR3965ilj4B68/RMI764ygr4tqjz0Ipks8sFt0V19XVdrquvJuarELtLtpJegHnc52K0o0viPAFdtLPL0e+5M62M+wYKZBzzO9zN7/jB7bevuP17t9/+PYbuzjjH3lZHj6fAjluTn5fzp8ERchMeVejKV/ucM+bSSIBc6gPoBJygv+ePX8YHEIpp0A10xu7PJMmSEZ4Y+iTq2vX+cymYuXS1itoTdV7r/qDn6HJ0sv7CHfs37TlgqGtHC55TCXaIpBdjLlNX6O5Zdz6QcYzavVapnDJH3+Sgo25CP6/4+1AD6h2ttTEBr4Pl2mvlhx5Ktj536XXLzc6XLybmCejrAuiqghPmCuZXxXm63XOYM3RfkDAeHwR6lEC3yfleYH5HdHPHHI5+vxz9J7jk6HnaeydQN+uO7pRzeq6adnymNhiOEsWNXl6Nu5rTTHuM2oU4ug+Jp49sRtmmB+a4mUYcdJKNkpov//HHf7Rn6uTWrQ66NTo6NKpdLCnnOMa9zzG3lt/GQtSF+aPaYt55rfs5OrpIp7cH7V7zix1IwC+cJulaYEs8XY+qdcdVKNuILtCzyjgto3uXpU/A0W2z4TR+ZgnqaP7dfK2tkzPgua/tv9Sda2xVWRmGRaOJicfEFDUao05iaOolRUmMoRpjGG9EG1GMsagIg3o00Yn94TVRo9FfTJCOEXpsSdFQzrRJQwgXnR6h/YFSkAwtFmQiGugoSqmSGoeG+MP3+969zrvPYnX3oFTquy57F7xl5OH91re+tfbWjf9nrr7qhe9+W+ltwHz1e4F5UsAcVN+1o9YYzBN6SpxDb12VMHRv0FsOP/Qm3157px9TVfxeq02WL9qO2mHauWuDmzocPahU+rWBHgiXDgB0C93dzP1yCXHObXOyzqNpmIE4WE/ZObM53uTpFv5FqrJBFZgO3ozz+T8I9J/cvIk/9uf8nfa+0HndQEcX6EBdcJN2fWKNajBzn/Kcb3uR1ub/xRq9eUdXLi7gHXiHfLrVNYRtdVuqN6bZi4vj0pRXOJSVk6NDTMYJ8kr2fxq21x573WObAHqEOVVhOn9Un2srrqAh6iuI4qX1EsPcRDdPyjPt21KYowre8OceGxmXnQt0wq0nZggTHH3Dm+Toqpr5W1fLiaOWgxPmv2Az0M3MrVvBjBxduLujT06ed9B7sKtG0Gnn3E/Tpz5sPy3cBp5wcyXas/e71uZ0ct+W5z3OFdwGycLZ1j98+qHv37p57tyFC7+58JMzZ87cPHcBlCN6d+EyRQPd5XtryrtHnG/yM+eCvJH1fAru3ax2fVCOTi+3kVcNe22nUBaLvbb0d5mqOqoaLdIxp3kHm8ysZGlU9LguDntt1G7E7ptOcY2+J5k9rVZI+j1k5Zr6tPoKuZbizZ96Wwmcl2LMG7fXsjsfFbTDx+XmGfrItpvwEOb5NTr55ishd0cH6NMZ6E/ZlLn65sGj5uboFrSTcmqDOzqc3EXQaeJ8CPTzs3R07J1ZKi5/rwT201hTxaRtn25yS1bBxS1OwaH4YrR+ej6ngdk//HLzMz+FjV9Yswb5dhcAx/9YbDfttKq5yblwLDXFN2ZXd5mYM25PZ+Hw7Pvai3CF830APV8Xh15c6y7G+Qic52E/cqurpeOxU/vN1XXns8SfI0MvohwNkRNvjDPQ++ILZhz0SiVUNs1exJ00e+fdwvdkQ39ReyjGDC332oo5R2/uYrmNW9auhErYl777laUSSJ8U5inQhXkctOfgR82MS24egc7km3WJa/SDwdKlzQ8dRgsbaoScuNs+ujs51RVAV85djr5goINp30PvgwOEc6jYT3M3cDfXJ3fp5jHpLkEfJeIqdiYmq9JdZ3AfaiXk/RgIBQ9eBujn1qxBocxv4OoM2W/+ZOcx+xpsHvTuRkMfdPH95Or1acxbG1DvX/c5Yf7fhe6CvdjRdcWMaFfgLsy9j7cMQi3zRB1dkqtrZmsQF0Zknb0PoBNzujkkR3fC+aygBnbTCTP0tKrK0j5+TZ9rKz7swu+1Fa/RV0DJ+3M/93DJovbJhwPWUgHm+BVVx4lz8M3AXZgLdK3KIz0nl4x7ilH7J37+N2BOPeGU/8KTcGzQrnYibh3CoRaF7aJ9eHLy0IJd/d8D1D0fR/knzrFtHq6VgKl72WQyBYfJB0N2dhEO4U+aLshYmA0C6wDPQb/6t2d+ejMk31w/NkffCR07YKdc3iZHT+vkK8MV7ut8xNvn6PzceeFJ1Pt7eq3r98mCmXiTTTqCZgn4ocHBEy22VN8ZY34MQ4CLcb5Ehi5PB+oWlDG/sge9zzD3Ye8uBu/4v6WSS6VirtYLnLK3egC/XbVyRb7+rT8zAb+S9YrPfV5uXgR6tDYH5lqbxyYfMI9Az0iXnQv0j3ONPrRZYfvmXx5+1ateBcofAuc0cTo6H9PT7bUjv3bSFbpLcvQFrtEtTA+c9wP7fqba68l2tNTZFdoBG0mPMu3E/ND5SRT1APGFhbm5KzduzEA35spl0E5Hf93Xn+m6yfSbBNBh6ZCDPjcXHD2N+XqCrnR7Mm5/N+6VuH+gi/V7z7rTzzmRcc5HjngCHqjXzNWpxLl0djk654h0Ym6kK2h3KXQH5wjj7OASD6xlXSLmfPFWxWbJnh5m5ZpLwLMCfmMzvvpArngn5misj2ke81A307BmJ/4QMY/0VnKewtxAl6Nbwp2YQ17uugFmjgbAaerO+VBL7ciRcZp55OhoFB19MiTjGLM77sT8cSzOnXEqYK5onCdQB3TbWBbIS1ZXdWjSNFue674xM3a7rjt3rl69UV4w0Ld3b36m69fnslNs+6oI1xm6Q4768GqCnnT0/TO8Ngp81xXtqtHR138NJ1HvF+iqlZGxL7lGF+SNsbtYB+iYai0dcPUOO+wS+TltvIk1ulBnA+tZ+Sv5pqPbhOslJufKsyxxZ7O3Bvn2Ggh32K1babR9lh2u3nwCfu2KvGHquR/9/ERpHHbO+piEOvnYltn26mzjPHl7FDBPurkcPSlQHkJ3Xeu+eRoBOyhHFg6UE3O5uXF+eSiA3pVYozdm3Q+5oz8OR++Pb3Dmlf99RD0+osa1ne5qTZS74o+XYb4wC8pvzFytI26DGptrddIf+j4uPv/Jdfy5tkMUxwg6HR3a599JRU84+hgwp5krcJfk6Ei184jafXd0qHlHlwS7VugYVA1ZObh6L1BPbrFd100zBYaOTkdHh3Sk2Caijt2P2Ssn92/Cdydn5/EPX+cMMVO25sfHAWbxfYAqGPcG1Cu+1lvgbbHNJOA/+fevrk2D/uiqhh+X2dXjtfnn/UjIcMHanJgHyk3biHmqOu59wjwJOoCOEX+OP9AeOfxQdkoV++iXf/QEMIceMsi1LEf0LswN9JrW6ASdhp7HvRMUYt3c0yieUAPe/TZRcQouZHFg6BVuysWJdsN8FJhjdYC7SP8lytFch5+9M3YDjg7hXqmvH781Xhvp6bePnlV2ytED6MAcpt4d3/Z6spuUu6XH22qEnEfU3v3C6M/P/cq683FPh1rINzl3ydOlWslQb4tR1+WQVfUIdSIuQ4fwTtQJOjfV0Cutc/tPPWY6tam3c98xct5AeWVkcu7iyZP7T5zc23kAXs5OV4epn+deG4EuQh2m/oWVtlJf9dHP1yZwIqQ0/JGioN32zd8mzI3n1Mk1Lc4FdjHozwkNHXqEju6L82nfN8cIXs6Hky7MDfTxTAJdkMvRsUgfDbUx9HLc0I57H/uYhIuDdkqnGylRLmWYl8s3ZkC5ZJhjHEbofrFsa3QG7x3t7S21UUQRra0AfSfX6JmuA3QIwXv3GOCW3M2BuBSbOfNwozy7ct8dnTwT9yYOtWhzzadg6BjEfBygi/XaOFwdWblb83nI8/tr6mlPJ+5sFFH30ywYWJ6D802g/HWPvQ4fa7s4Yp5uXZjPTsLw92/a/xjG/loAHZxD1Qpc4XHE70CdkBcm4I30bKG+Qr7GBsyHgfkwMS9yc3DOAdUxj4N2peCaAt3eRDoGQP+Qh+7A/JdPPPSQ7Zw/RMptUuBOzKnT9QpYTp2K2fmyMwJdddEDGM458nC8ZqyRYi7K3dC1jx5jXu2zoB2Yj/3rX7JzdtftE2XLxVGt202zAB1f8G/dvc+21TCCo4+E7yK/cizC3KW4PRGze9COf4j3G3Ra+b3XuseGbkPRe161WqntBFAvzddRv95QBBvRLhFvmwPngp1fWMQw0iujN6xGxgz9dfbtrEmE7wrecYknvoh56hS+tjOI8RhB94YnSfdLRK/pXoo05NZAukXvK+bjyqve/HkgPlyaBOYvLsR8GIwT89Xu5ky1W6ZdAuZy8zXFoGtRzuYTHZ0XzPzoCcgwf4Jrc+98EHXDnLo8pZR7Qdbdk3GjmZmrWtIzcFYkk8i0M9eudLtNEeToIyOTUPmGUY4uTw+YnwTmoXCG63TDvtUcvb+vulM6EBzdqL4h0McuOuaxn4vyOuYvEOb32dFD7H7v59HD9hqnQLo1cW6oj7fD1aeIejWflLMmyFMi5hhqkFVK0M35TcXRuRkj/SgGql/3T8zvq4ZLtmHm+/c/ZoSzDwL0ncLcRnXP4yZl5YqvhcalFFtTa/S1/3tXX/XyT40fGTbhmqgXv3hx0re91/jOUH8vv9EC2GPM46C9GHSfZOdydNte2wDIHzLSPQUXOBfm07Lzy9MomOkKlo5Za3RIbwB9dvI86ALiPkw8qIYSCxW7SroFzhoeKdixrLOYvTw5Bzsn6RTtHI+xudnZQ4cC5OFhbm6tr2qWLl1fD8q9EXQWtW+nmaNHhi7WdeB8OUAX4nxp2tG5q8YnKVfoXke9FpbqUx2D+/fWiLp3Ya43GwJcj0rm5U59EGvdB7hOr8wa6rB0BPCDCN+Rk6sgvwLML87sNyvHrxvl+H13dL9GgJhDGehAvay9tnSVHPRdBO8rodbVyuBqw855JzA3LYb5NlAe7DwswoE58C/aOG/K0SPK3dHBNnbMEbVjMsjFeZ30POZ+Hl2JODn6zrv30eHoTjfdHI23hFnEnlybY/IRb5lXFLWPcG1+o1wG6EY6GjEn6GM3gLnVx60j62bkzjoo94/8BdAPoKPtA+iOegjdNzFop51jbGe+PV6e97d+7UUqal+eNbpwL/z2mkiXo2svPefo4FsaRgPqT54YPHGJWTm6Oun2B5/Fu2tKvNujL0vAh7w7dkau7D96CjCfQtu0vzxrOfbek5s2bRo8BcCBOtrrotCdxl7tI+iuMpbq/1zioqm/f3Il5OM++qmH8Q+2hLU5MKfSmHu0jj97Dvq27Dr3uDqOv1qI+RqBLjMX6C6C/gQpZ8zucbuaU345UA7MvTKOkAfauUaXCD0LZkYN78C4fXKz/k2PGHNd9cjfEerUMWGOoH2sPOeYQyF4B+Vw8wVwbn6+7nx9jc4ZJbEWug/szkD/sYOO0J2YG+hjY3DzV5LyYjcfHf2aPq+0HGt0mnrza/SzcbF7nnMVzEjD6J6VK1060dHBBDyw5iDd4ZlMuwt2POrWTnErxYWfzNU3AXOQDdRPnsCGm4Xrpwx/83Q8GLrTyUX6np4MdJsXlrxt6lupVfrG//Ea/eXvfriEf66GeQY5RpJzxxyTgc50nVJwBZgXO7owj7UWx1Rl5nlZ6WuMuXMORyfmLt7rTiUdvX6D8wCaitoriVQ7QY9LY3TuodOjdo/Zv03QjXFprBtFMrjMEpzz05DrsrCdw0J3Bx1mjsFHto9O0GeIOeN26a7TasBcbr48obvi96VD967URjoZl5+z5UXSh8dLU0ODJyY6DfVj+Usn7Ml+LK54DwWwbC4+Ka+E5cUTmLCbvt8D+KPu6w44ZlBur/whgM4GEXQnnbPttX0sfG8Zc8rSP7PxwX5k8fmfe9s4/plybS4lOQfk7MDcxXsl7nFtbue0BLpi9oj2tR981weeoJuLcBo553zQTswJOlfn2kePDb0RdPsMH6ZwjtFhlpR3Y1vs9pjOYOemG+UrDnq+UOZGeRacr5ucBeEGuuSog3KQPuqO/mMbaPB0c3RX9wxTcInFOUZ+cf6wzq4sY+h+z1dJCXN2oS5Hx1QLlKPVPC03funJjo6pls7r+3bqSAu7RiRgXch6X+bovDFu4Qp32k4hSj+KJLzRzeU5fg3zKYTu1w10mXoEuuXfF4oPu3yXoD8Qsdr14fFazVbnjZgnQMfWuUEuN3dFH1FsImgH5g2gw9K1oeYzM5Lv+sAHADqD9jzp9PNobb4LJ1TRHXTJcnFLODo/uoIO9cWYBxcX6MmoHSbinHebnbujE3RhPlMG4OfX4aI7QA7ZMt0ZRzP1o8nRATkaQ3fSjfvdg5nbEOy615l75+vfLcyXMXSXoReCrpsn5OVKx8WO7pRLNWd9eBiodwx17C3N6/Bafn8tluMtZ0cn9XJ0DLuru1K/Mq519iJQB+Wwb8bt9sSbMY83ObqycQKdT2hBe22p2P3BgK4javgnCszXE/MiS38vc+2Waq/Xur/Xf0kH0cn5UpgnHF2DsD/6rte+FqDjovY85iqGa8RcOpiF7lqj30xwPj9M0P2LDP38vDk5jxPtbBHn8cGHKpL4E7RzOfptaWYOp1oWJg+5maPbcNoZu6MfgpvL0eukI+v+aukfIQ2HSXfDoVPA/NWfY1H7soEu1hfNuT9c7OhaqecU7655Kg6Y4wXCtjpcfepSSMC7xDjeU6zzIdg5R6a+m9XM1crkDaDuoTsDduy58UVrdC7SyDlB78+B/jPfa1s0Af9Pgv4Aat1ZBleylZBS7YWhO1fnhvlHXtyw0UZtK061E3PjnGpwdCIubXzLayGQLsxl52bmacw3YITtNVl6gaMDdKThdM1QTLE+z0XGMWLKmYWbKJXLM0i9UTPlG3jPLc6tPAeor9fHZRi8S8AcrWf3Plw5YYijm6OvM9CzfNzC72jp9HNKha/m5p8S5sseuisft3TW/fdC3J6hucbrh1riNToMyJ8m7LVNdZyYqM1HH2hKHUoX5enAXaRTTLbOTs6MmaubjwdHB/YQQQ+GzoFORxfo1+xOsoUyy2KbBH3j/6YQ7oWff/hhhLYPf0R4F4FuiSGs4xXJBzNHMM8iWFGell2ucJejBy+XHv3ma17rQtAei2YeZdrl5wfd0YOlx46ujbYROTovcMYcYT5AvNEqSsHhEd8SBTeYmJjADXbknI5+UW5+ZdJlnm6RO3wdT2ednh56v4FeNdAPmJ27px9YB7Ilxewy9PVy84ID58twqOWePrJ41iiXl2OWhLm22IbRa0AdE4SXGlAfGnqyBQn4kIdz2I8x6y7Mg2jkTL4vwvoe2nmohWqdvLhpk3M+aBvrYB09H7ordrcRO/o1vKMs9jw/wpoG/QHphZ/61Kc+/3nbUUspsYWu+yE/q7IZE6vjlgraf0jGY9AjO3/JN1/zpjcZ5m/a8KMoCefPXdNDQZuRgpM2HPQ1eruOrqEv5ei5r+NXEmVwlGpdYzcH5sZ5S/nk7WwzDbot0MeulBcM8/WTC+sB+brJUY/fD42MjBjpAFzqw176MfdzUo45Ap1BO8WoXevz6F6JZQNddt7sGj2RcvcXCWQ3FruTdDbrDOBbpjqefNIT8MHINTdKWbiAe8LRbZKn21p91FA3H3fM3dMxIf8e1uhQLnSP9TNr187zXNtKWqMDdJAeY679tW2y75j5j7BsBrOn5pRrL7JzGXrk6CnMQa4gZyPtqnYNmCtyP7jhIECX5Ogp0A+N6jaCu1PtFZW1K0UXf14JJa/O+f7bddAxbiB0d6FyBv9Fr7aTbMa7xe1u5B57VkLK3XDvB+iILuyyOPBtlNsk0Nf7Ih3Be5RvzzD/2sujIHD5Q/diR0dXLi5x4XPjzRPiXBp2T0cT6uMI4Kf2ljrnde8EJknBO3qC8BTs+b/LbVvdy2WMbyM9PEPoHiZ39B5F7iL9ZxhMwGNbXX5O0B/Mdc8CPSWrgPNQfbGyGdq5YU43L1ybr3njhR12JZq0RqDntPHj39v8WmtvIuVC3YploqL2H8UC5/VknPJxRwqSccY4+55GzGXniZA9/NUOzCvOeQs4J+g+rl6kwZ8sl311Tq1Hm1x3Hm4OzHlZUt8h7bC5Kky5/8Us3R19fcAcHW1Ol8mgE3PM7/7o8mEu0JuvmClOxqHFi3TIYZfk6JDPdPVLU3v39pZYQCPKY2krXS0ivA/dU/B7ZOxoXkFjgJ+ykjijXIdaGmL3PeScpNtMzq8hendXj7JyadCLi+WWH3R4OfZzTOA55eYgnI5etKMmytfsuHBBpMeOrj9QH9wMGeabxbkcvWFDTZj/Qph7X9rRdaiFG+cCPcrAFeTas++nOeZtmwxrsX71iiXmZrqBuYuhO5pn3jvtcIYJ9TB9+VX6wKhtroW4/YBPs6+WmHAX6FTBEbUHsI+uO+MkIa6Xu7fXIEwS/fxu1EsTexG/IwFPzjkwRY6OESfdY9bR0bLL3XeHUWWx3ClurrERdFLO7qBHjm5LdNi5t5+dt6ycHH2Fhu7bSDlRf29c687tdDd0/F4TOTgwTiXX6KqP+Z5RjmlzAFxSTbvcXIhPWwPpFrxzjY7exBqdoPfpHudKOIdaGXBbJ/Yx5Gju5xXjvLelm9dESWNzOIp+pQxNCnXDfD3ycRVgznjAjmKN5oTfyoJ2sM6ZoTvdHA8pc3O7JepFy4r5qjToTZ9T1ek1YY4eFbqjo0Wl7sHQ+aBGMID61JOXap0qgE07ej525yM2dZshvBHy7PBaBRU0IN1r45h8X2wfXZC7oTvnmbDV9rGVvUZHZG6ci/RtDZhD7uj+TQcrdkdffG3uMXtdP1wc9JciaB/cbPrRdAy53FwpOFLOGYijMxtX7OgK3YF5AB2ohwp2bx7OBR9PUs5nteJ+3n31dqy58py5OTAvocHP0ZmPA8xV/880R0f0Xqkv0xHRe8J9Jxgn7VAGug6x/G6BlC+7m4v0ROjeRGWcUI8hD02oh1ScDckAZ8sJSUxz9UtYqk8Mzyfr4uTnMvSkpUMDgNyD+MbSZpbAH/W0nDeCju6MO/PpZBwARyPp2wG6HP0B7qOnQQfLeT9HfziqdQfniNvDRtsSqXYG7XWJdIHubv6NjsubN8POjfIE6OJ8c7SjRkc/6AOk09Fh5exLOjpJF+hcn7NqarEvJXJfDVUyvebnV+0IKpo0A8zLTjkmagEdDXE7Dj076BCgrtbtfGDfdXDOZDsxVzJOF70uLISwHQMnURNnV+63nwv05k+kH29qkZ6zdPbGtHtNlMvR0SBH/VLJUUdP7aSjC/Q05WQ8BPDknKBbAH8FWTkeVo0r4zj5zRMydHo6IEenCDq18kDfZmG79EWA/mpxDnmuXbXubyjMtDvlMvScpePvAGXdP/i9DhQ5bn5nMmjHjXB5zHML8w3W8Jg2Q0eD+AGHptboCwY6ZHeOMGyLa2PQUhtq/Ju9zjkvlAiwY5wsO+MUUV+fTSPX9zHBfwzrez+1EhJxqJSxuB3S7loOdIXsbCYdUbvPbKNzKtpeI+JNrNETJXEivWiNDrpp6/JzjoD6pUvjnUA9qd1ydH9JiJE7XL3VUY9ue/YzrCBda3Qt0KGqO3r/tWuycxtMu7vOb1/RoXsj56u7CXpU6y7Ol3Jz9JSlC/Q1b3/Oe77yzg4ImDMFFwmYa20+bYzT44PI+MGD9qCjq/y1yNEz0FngTpH1cMl3QvUzydVj4Lw34xxdjn6yu1yaKE0A9bJRLtl+XtU476uMdO4budJp1a4A3YT9c8LtQzrQGRXDKXB/9TJgLto5k/qCZFyK9vcWnkdXrTvmPOdx6h2O7p7O3qARj+CB+qVLpRr22vZFiMcXzFAx7QPGuUwdL148I1UrVgIPT89XxuX30ftzlk7K2SDz9RUOemB8Dv2L/hJA/wh31GTnOTfnS4w5IbcXTrm0O3LxTMl/+SsGecc7hzanzLyhpl1uTvOWoTvtbHVHry2xRmfo3nf3dY8YbJGbayfV/Hyit7etpeMqMQ+gX91vmINzc3QbjazjjyRq8Gav3G6bv3jnBEA/cKBihl7dBzP/C62cwAt0Ye7Pf5wn5kseUVv2WveiCtilb4F1V5el3xLlAXS2Wsw4Blod9dOnPSt3LLVOl53zJWHpAwY6P6nsqMf3/1kFDYpn8rXuVHV3nHUn6jalQvd/rrB99PWrFbRTcnTbWPf7JvB9dGGOaUfSzaPVecBejm6Yr7k1NWWgD10uSrXriBqlG56Bed3RKWbdOejoRaG76DYFvvmMymP4IOvVaq23zTmnbvt0dZPtqE1MTpiEeZaPWzDQ7az7wtU73c9cvdN23e6KqhwaHaleZ5UMVuaRDowocA+LdOTglhPzVXe5+qKfTS667rk4dtdSPVTAJvJxNS7T2Uw1sh5IB+rj5urjjnqiCpZ8s+0h27ujpDuekPPOQ8ox6bNeLEdHF+h0dHyHrb8h7Q7IGbw3GbpvfGBrdAXuEpJxAp0n15xz7qiR8ljniLkM3d/yeXf/6+DCmdNT7R0QFucp7Yqq2rmfjhfBPm0JOHY2Zt3Dh9fk6EWg44b26EuJkfRhHoZunaW9bW1tHU/cyWtTd0sLCDfQje0JUp7Tnn3VHvyZmh27012+vX9+3hy9eugYZp5Xg5Kg57TOMH/3y58jLSfkS9a63/N5dDl6vJFeu4ty4zxAHmfew2yonxbqUiUPOj1dkAt193FgbjOXcXejPndyLDuPnpVJZWv0aBfdo3Y8qCJHl5af8xh0ca7APd5e2wYzV9Ae7Dwhce3SNjp6LnY/d+v0pUvtAH0IqfaULkdurn3z6el67D4txKk4GZeujCPoMnSebkgx3tgg+Pkw/Ly9AxfN1ym/vam7rYVWjma0E+6Ql1vvK/SB1vJM+Q8zt8snrz7zzP6Sb6cdwOw750y5R2v0sIkeyl5b138u+ora/Udd54b5U8H2GlqS8+JPtSSugFVXwQxRh3hYlXZO1ikG8HT1+SXOqcaOXjd0DGedqsTXC/n2ysXJfQrnvIfKOAmYo1tb8cm4+sYaHordV2sbvY75+wPTCdqN6x0y9EToTtBvli4Z5+2ofklAHgXtLqK+a5f9Dn/poGOOp0hnMq7JrLs4x0gn2sOUu1/EOW8D5wD9WXI+ZphTc+WM8xJaXp37dvfMztwe2z73r/LFlu0evLMQjvl2jhj0hnMso+u/+INl2jgX2RKvBPmPbphBD8ojrsi94QMONQNcmI/X1+jWIz+3Ls49gMdKHUv1zsZ8XGM6Ljz3NKTjaOoB9Eo/75Ozvw/yfwDs36f0TOoqKbFu84pfo8vQu7/oKfcvzilyNwlz8s0uWbHrObCNyB2sKxnn/TcN2bib45ec858T81gx5rLz7Hcu09JBOYccvZ0xexeGHD1WloxTrj2dgdNQwtU435tx/uzhZ1/lQXsbovaWCfRJ9/NSCaCXjfWygEfKvWcBq/qZ2dn5+e14qdkJFkqIR6DrZKoXtb/8pfc5bJeDx56OVrS9RtKbrnWPj6nKzzkrFaesu3caOjox5+xNpA+XgHrpSLRUjww9qZB0x+LNSOcujJfRKAer2on8/hodPbdIp5lzFOyjP4jLIQW6MnHMta8m6ozcY85jF9+h13M7zoFydErLc8kxvwXMjfOOFOb4pRzm4jyHuTl6iNrxYo+68o5eS4F+U44uvsObdCzMOolMddLPX3b48MsM9TtHO0B574QNqFzqncRspKPn0u4jWKH3tM7N7J/Esq8yefVky3xIs3OkWDfQKWTaCz6WuDyrdN7xlc66C/EI9vfK0GNHj3NxZJwtefEE75Jq5JyMswfhew8gfXy4s854BY/4sOoeTFJfNjEXx7fWPvo7WiX/Z0CYU7u5veZnWgQ6LT23Rl9J59FzoPMgCxfoNHSL4WXo0Y7aDtBOxgP4gBzddYaw08sFOS393PgEKG+51D6UdHNiToUUXPThpctD2bFUG2gmgV5zT/d5sTvjtEavZ9/SZh7qHjlM2Fhra28/+Kz7+bN3jg62tfUC816zdKgEym2eLJdo5u7rAXS7n6yKbNzkfOd15NpjvFNr9FDaTsyF4v1HXG5uhEN4s5Zao6vdQ9adkzCXEpzXiLq3Rol0sW5pudOnkZVTcZxJqKfcnHyD7iwph95qsA+4qYc6SKEeMJejx8k4E7fRV/A++rZg6Fifd/s7YncZujD3iB0TX7U2J+VnqHPByUW5CZgfKU2gAfPpBOeRmxNwtl1xOO+OHirdGx2dn0aXoxes0XXJa15VYq6FeVC15JzDzl8FzK8Otrdd6r1kXt7rrp7JKLfsu2NODWOJPtA6Ozc3O3n7Tmm2XJtnDk4j1g9//BdzdGL+UUZ5L33P/eabsyaMtWs31rV27aqXLuboPu5lH12LdAzF7nL0GgYmG2bnysYdKXB0CsfVYesN8XuFPT7WIkcfqPPu8m/oMnrHxUN2ko0ZOJuhbNY+Ojj3IQH1lb9Gf7Vy7s46/Hw1OY/dfMeOuwL3jPGbZ54+8/TNDHVF8DL0c0fGS8C8dKk41U6Y8WNG+i488n8B7OKxVNXJSO2OOFEX6OmCGdaz5y290rCRFsrg8JJpvtTbbn7+7OGXPXv4YEe72XlLb69Rjk7Syz4mJ7jFFny98/runtYbt22JPtNtS/QT10l3oaM754c+VT9wvpa+vjy0Y/DP35ZHtj6ydSunLRsBejIbd0+LdMkIz3t6+uIJhu1oNsnLY0dHl2ow9QTqaInQPV8YNwrk3dH7+/hA74etc6mupCwxx6wPOESUM3pvdo2+9QGs0RG5q8K9nnoH6DHm9YdMfQ0DdgIuAfTI1c8Q85aWRTD3fXOKZs5h0uE1Yg5xga6oXaBLizo6LP38aPiUWvLgig9+f0eGPow8HPz8ZS9D0N7R3WZyylsC6mC9hOaYa4ONoD++MHbn6my1Oj/fefJZgK4NtVg/9AZHp5snql2XDXUY+pZHPixt3fJoHLqzNeno8Y1xaNFFUg3JuJpid/T4OHqBozMB72v1znkSziY3j5Lu3FxjMo6JOOut1oA6uhXQHCsI3fszzBW+e959he+jI3In5XMewHeTc6XahbmEHw3zHQrZoWDoTrpEN4da2joWcfNcUTv53iDM9Tsy88zR0aWjFrrT0H0+UrCPjnXYXaBXo3pXBe5coE+1dQ8efvZlh4/CzU20dHDOZTqeprJ1EI7hsBP0/tmZsfL8ocnZKyPz+68i6a58e5J2ODowf88y/HGQgWvOOfojH/5SXR/e+sHvJP1cjn4PV0kpgE9+SzVdAnukwNHzOmRnWE/j0prg6qqX0Q5bI+oOO14IOgB33CG8trJWjpE7J63geJVUXO2OweB9Ja/RCbokznFhu1MdcnAXWPdK1IG5qU45jf2cjwuSYU7OpxbD/HJ0rwTahizTrrPo4SQLZxtS5Oi1pbbXyHmsrKrZYY9Ure2dah9Etv2Xg+3gfC9J39tC1ClYOnfSbYUCzok6Q/e+89cqszObtt++MT8/vEgq7i9GePD0zq99rhHz93wQ0zIAr1cQv3ELQBfpb0km45R0bz4XRyvno+ibTONgvPHuicRWekw5H/jXwtV/bQn4ikj3Z0KsisNLcPRW3vBvt/3b9y/t0x57wkquqjU6b4FFz7k5KceUAH1F3Rl3F+hz+cMrRFtlr3y/YDk4Ru3oUoa6MP/LTdg5QO+aglkX23lIwaF7fUyUgxfm/iLQ5eg1oV5YGVeJCEeLwrQoETcMzocOE3P0unrbLBdHyrVQN9Z5KL2Uhe57YB9zt1EAOzaPSvekifMR+jviovZH33zfMY9Pp4J0xO550hOOzm7tXm+BReMjcnSMSGnMtY/uEu+8WpcJeNtrm6+jnjqQrixchbXu2lkz0iE4ek8/NDDQUCEJ8SOLPdhDR88pt0S/toLX6AR9tTeT3Qz5YmIuO8czdnMoRhyDc+D8J/hb2r648behNOVw77png2/tqaXuieOhVCuDVeAutYNtEF4LvHcWOHq63pUPdkqBe3vHL59ADq7dSHdHp1pazNHRTVyozwF0NHDuqAP0ao99KODq7e3bb9++db1geY6JbccyfJFhVb5HsIcNNcTuOdK/mqyMs36vN8wQ8OjOuHGVwMZ3Q0LEPHlQFSP2dEzOupn6OGrlnHEOTrsbUTdVWsm7vwN02DwER0e3qQc/5RNxaMy6J+6YMQH3le3o0Q1SiNvJebrY1VNwf2USjmYeSaCfu2lf0AJ2U8zBJTVNy1aq3aZ0gdwuFLoetDLYXYQ8cnSkcwi5w05HP7eko8vMOaNH2rlvfG97x+AgMBfnZB0lNMQcy3SKe+lcplOduHQCmrsztn3i9kznzgOLUJ4nfcfrn7N8EtmqdiXn0Sr9C59IJeP0jfRiQ/99RHrgXRWwqaKZ4bqnJzBnT4Tvo+A8c/Wa7bUhgK/scVeXkvfGwdO5LvcKOQvdW83L+/EG9Vj8Xm38qz+Afi2HOTuE6drKXaPT0lcjERfsHJwTdCuNoa+r083jbDvfz+WzcTePkPNLl4l5WpfNsh1zpdovR5jL0PkXwHQj5z8C/9OPtVjeNlBeK16jR24epqT2HbMFegcxn2LkLrW09Yasu1Fudl5qrHkfOXD9GECfHJvD2UfcOpGkPPL0u0B/6bvW/rdgK0qPfT6A76v0rSJdoDfp6F151M8Kcb2Ic31K1YcEvm1KoT6SXqOPgnR/OQSNgHQri+0sXKMD73ppHGU5d4TuANyScfat3R7IUK8C9QC73RmnT7VQDNptXuFrdCNdaTjl22nmMvQdaL5vTpFt6Rxne1qh3E+4adLVJTdPyzDPV7tOm8cHzn1DTXe+Zr9KuqWj0/DbriO36OiFp9fmAuiivCHVXo0x3zeMy0c7pjrap0D51JTRTjunLB0HzvNL9Um2wPkxVLbvttjdarZ2xobOJbn83J6Ro/NG7Pt9TI14K5hnW6vgPeHo3otq44qX6OzRV5OjT7UMK4BPOzrpjkN3frwSzTLwNauVswBekO+Oku46ko4InptrYaEOS8fAh/kyT+/BNnxwc+6jg/R4K12cN+PoWz687KTHoFN24nxO320Q6Ia2P7ShRoF3+bgVy+SJt+4J1PGu00thvgsjIK7PKBrN+sAai17Db8jQxfkQzraP09CBOnunIncpC92FuV6Sbl7FCXRA3gHKfWbsDjnsvdZ7bZkuzU2UaenO+XDnAWTTD+zzLL/f6Z5en2t5bh2Ofr+Y1k/pXxftLIFd++jWFOgSAb/302uYVBknR7cpEqtl0mt0tjgZZ/KvVx5y2bb6r0/7Xlt6f60PnZS32kTx6TE7Oe8x0F17lHavVujoeUvXAj3h6N9dMfvoPKiKiw5w6hyvAh1sN5bKYNUtOeaE/OnjZ5966uzTMvZbAA050Npibj49rV93yDGjL5qCA+jhL4BB/E5E+alB+/WOUg2OLtKLKuMqhDsUtKMvwjkwh5lbQ8cReuMc0TvmfPDewui9Ral3LtCB+XXumR/YydV+cmFOS1eToyehLZbo1SOujmn8XTV0s/StadC1Sm9ujZ647dnfiy+HrGWox5iPCHKxLtJH3dQprtV/DVcf7lStTLxCh1QBa2K+3Ry9Dw20I73u8vhda3St0PVCwgn8yl2jO+km//SaQI/K4C5cQAruJ+IcmFPHn/q56VdGOlnvGpxqKXVp4zwugmP6Lfq+WgpzWr3snP/OPOfTFrV3gPOhLk/GcX3OZFxCNYFO2DkrqyrtQ9TeOwXEqXZr7fD0J9H2tjeCPoGeK3hHB+pYnf/lgF8TxY8yxJg3vsrOE47+5o+vugfM3TLWmlalT69IgpyzWTrycf+po/8+gbpukhLmmJSLS+2txYv0kTzuyaS7ebqbOnpIwI8D9fTJlj6VwWqNTsytYsb57u8h8Vyq0w0YugPvfpGuY6pJR19Ba3QpAl2b52t27MhS7SqTIelPn/15prN1S+/yWyKml6qOib+KnErBHWz0+c15ypmb6+gA6ZhatIduvdDRZejkPKEqonZQTkMn5973hty79tIRu7M6jpY+aaQj204z141wd2OuZTnERxr0l36wadBJ+EaTkx74loeLdFk6OofycQD96xHjSy7R6emSPN0GpwZHh9KsWw9TbOl8CnTv4JzKBfAl7OER9WStu0CnsQ+wBJacW/TuwTtX6kS9ao5unMvRbShuf7wQdK3RH9SdccIcXaBT7+O+OTlX4E4d/9XPg556mpzD0XfZpU/pHLukf4VgdgXMYzfvGIzc3IKDQWvY/Drapso429Jb0tFVCZHcUps3zIecdCOcPWP8ScwCHVUzAB2Dps7I3bfR9O2VSII8WHmAPQ1682YeIN8CGeoBccl/VNOPmZ770ke2ftj11YSjA/XCffQi0hnCJ+riRDinIkcX4nHu3cSFuj3d1ZGBR66oMwG6ayAri7NCOTk7N9ExQbRzhPF4Y/zO02v9qa+prvis+2KOzrAd17bCzm+CbrGuzFvG+ScIeqAfjp7i3MC0/nNG75aI24Dmbp6z8/hiGRfC88GDsZ1byI4GzG0fnYE7Ohod/dyiji7Ihblk1zrj+/tGOSaSzlxcBwL3yNNJOZPvFPbOLVgPmC9aCpdPwSUdXWw27+cOOWVnTfXvJc0iPXthh/iTLdMf3epSCaykffTkIj2BusMeKI/X6FkvdPScoedr3TnJ0g1uiUn4kZIF8EfudnWyjWdrBWg76nhY93AdmMPc7fgqcX+czm6oV8B9MHR7nuebSI8dfWWt0RdzdO2bpzn/28+lX90KhXHHp61+rcjOgbotw8M1cQ0fXlKFjH4DGozW5pc9BYcGzP3OuJJxTkNvYo2uG6IwYnXWsrX5kA0m4wi8L9P3Ouh7Q+jup1UxALwJV038RXAXlLtiqFHpNfq7Pt68oQPzR7YQ1C1b6OhZo/gqyNXqeu7GR6Etj3wwWevepKNLMnRxnkc9NnQ2KL5OSqdaUmt0N3J2V4+H8SPD3FYX46053OnppB6hOw0dHZPXzZgcdlq7FcDjN3QgPdpaS4G+ck6vSXEyziXOpTNhV+24MIej36o7OjBPrNDNy93RbeIRFvh5XAYnzJMpOOooMafRg3OIjk5DX2qNXtVH85LJ9oknhyxSME2Bc3/aYPD+pFXN4CnQW7y5pU8Oz/+lfjotVR2jp3x8CUd/dGPTfg7Mt2Z6BKBHjt6wKM+9QHoB6c99henl6W+vhdY06krLsYny1PdUOSdqZWLORTqrZujiGJwN9R5Qz702xe/6KBN7hUZOyg10h9yj9QEQT/Vos033ujvt53V6zcb/yxodagA93BCFMjhx/lcgTqBD2K5knDv6MwI9beg6kgpDT1wsoy11atB+J1cmMziIX3MUBx8zzF8H9B10Re6LODr30cF3kvKd5LzdlwoYhJ2cG+ZTVPsUMWfy3RydoIP04Z2+cV7g5hjycfZIrIy7V/GGGOP8w5SBnoXqcvRVanqI8UA6WH/uqhcK9PhDLc1busJ3Sm4eHF2YRyt0vkhJ1GHl3EaXn7NDPWR/xOL3BOpoXKC7qVOAPOTaSTh6K9577Gc7uGZyxNGyp9fJ6BNsK/sjiynQUR+zI4rayXmQJ9z/ltH+q+PkHOMZ4zLBOQw9hO7GNYm+nKx23RW5uXNuQ6l2c/NT+BmcHzXQwyVSJL3Y0cl4EvN5lOY76B0kHZY+1J6F7o46GCfpdUuHDHRg/hNPtfsoCNoD6zHlaUdf++ja5hfo4hyh+8a1ghyDr5ycbhGe/SjS0VY9L3WopeAWWKJeZOrR7ZDQLWvZXvo4SWejlIyLLb2B9lHOdHLrxJyuDtyH7aS0oS7KDXEl3a06rt8wx6vZ+CiaKxg5IMfA6+P1gplr5NwJD2dVV/R59EVC989m9TGcJdW+Pm2ZOGKO9tQZCvZ/S44uzpmCc9TxpuR6YQqOn0Un4wraKcOcOkXQ8cdGpp4E/Rwd3Woa00G7he0A3ETMNabYaOiZo5Nzk2M+71fH+JROwHFWyasW5mQ+CfoHv/nSpvzcsrkE/UsE3SJ3Vck02rheYgl2Onr6kpkmOZe68tWwdd2ijtyKl+nsxX4uT8eEOTDuzu6ko41a41J9vDbSWOzeis5NNhXMuKG3ZojT2ft6Auzk3KXgXQt1ezS1j968oS+/o3/Ea2N46DwCPeinAP1vwdOfOl4/1HIhsUZXAXt00Ws4vZa621nxPI+uZG5ujNe32l5H/I8e/dXTf/zj037BDJPvizk6BNBjJ98XSl57Twy5hPoUMUfHYPId0habo+5Bexrx2Ma1OOcTvdDRV92DoW8xzims0QG6DJ0t90IrTxFORxfokZ8vynqXUE/KI3cfXabjz7if3+IwT48dXW8jIp1dmGcKobt83TDHwNQP1GvjLSeu5AN3HVId8AvetbkGAfXsXIv94I/HWw1v/JrNUWVc0Z1xX1gh59GTjr5tePxInm1vFM0c448euYdl+nEZ+oVb2kaPQL+cX6IT9OiLLDjGkg/adwU3txqcg5d9N30IIuck3TCfHjr+R4COv7VDWzTr/ic6uiTiq7VL8nPrHUSdE0J393SvkEPWncdV0TI3X1JkPWDOyUYadKl50GnoitxBskm0s8naF8Nda/QY9cWvjTt79qmzZ8/+lqAnlZ1t6frb5V8+8cQv8f+ZEY7mj8jROQXpIthYrJaRn+PBV1q60Tpqzvxv5s42tsurDOOZm9EtqXsh61gyX2qyVTQLuDiziZIsjRin1Dc0Umd0zCnug1MTZ5CYqJ/RxQquBdtUBLq2ibLCZNJWVzJrS2c66v6QEtBMu1EpdE0TxaAfvO77es7/ep7D+T+20yHXeXmewnzdflz3uc99zjNQ97EnfzObvwrWWe+iu5ufe3dDHxjoyLbPW21ka3Xju9VbOL+mihl0w93C99jRH7o899Hf4JgfrRPoWqFHh1MnCpk4XToB0OO6uEoWtkv2F9C+lWmP7ZwxO4m239jr+GFMFbfUsaB/6r6TBN3kpC/J0WHomHYO+8qcIuc2VR0diKOZm6+wEdSGtflMyXdXVM6uyZpUAvqqdauWsrcmQzfQlWP3FzUhbiNycxceAl0i5AnMDfIJ0ziUYHwaY55L9ZYKLtns778FV/b0TpN0xe+F7TVJjp7AfQCdjo4ZTygL3gcAujVo4NzTLxwz0KmwRDfUvSauKyTe6ejgvdXkMyh3J3fM3dKLX1MNeXdMCUe//Nbo5un2UcWjRwdxRCTHNrrcXbk4ujk5p3hf3DRAn4oycRfl3HVrFB7JGyeM8HA5XJaDJ+raa3sSrRuYb76PoP+Op9Gt11qjnzv6YsrRlYYT5r8Oe+lE3THn6RZaulFubt48U7ZxrgNqUa5dsJeAfu+Whxd3+5tzHoOuk+aFiD3MeKbjdigBepJwYv78889fA8ZtAHiSnlYLOAflJqDePTftdu4i54M6jp6M3Cm+cYlO1A3uatJdjm5yR99koBNyNnQfFEDnNbCGedeAP412zD+ymdBDWqUT9Th2v8jRL799dIB+//3NfWNjg8N1gwcC2HGxjArgqo5+MMc5dBAWS0sX6Arb+dQnz9Fsim+cIN9OOp5ThE8pOOh2unnvU/eZCDoIh2xOOvogOIejpzDvbF6h/3aAfLJuEB/snNQyHVpJ4J3zFSibsaC9eSEUv2EuK3aVj2sqAV1a2hKdobtfzE6WQ+QuMxftEeIBcj7Sjq7KuALmGBPX0M/N3JOoT9vYPHRLvVNO0ntWtxB0zEd+p4+1kHWpxNEHiDshxyDqfLQGdQh0iojjqfNr3FFvDbvnysl1OeXoWKcHzoV5RHoE+uW4Rschtr4+XJFSVzc4NkxHF+oR6LR017jycLxbpsVA3xaBLrH+VZ9igZpsilNw2jiP6+Po5ECdmFdBP+Kg09Nrgo6su4J2dEzQnua2vQL9122DzQtQ84E2gC7KYeb+YptsznnfwumZMh/XAxObIF+Eo1+xiDsk+LqKoAc/l6FjFuCCPJbTjS4J9NKk+/OQG7qh7phTRcApcF4xzDEQumMy0uepbKdtEFc968648htmRDrGPho6H3xFHq6qxiLoRLzq643ZHnr2aAwlcTRyhv/MwQVHF+tOOUkvT8Zpjf5/Bv3+n/cB8rHBOmw7HpCjF17AuXWdXJs4iJfsNBs5R9Y9cvRKjnBl4uTp2jjXZ9EhwxyjwoPoJsXsAN1ukCLmBUdHxxQ5+hGBfs4cXajz0WmcT1X9vG6hs9OW7nu2Nh+Xm1OI3Z3zybb2vma6ecnRFW9xOfuiHf3eex5e3N0SfuFbHvQHAujy8rJEOxrDdvJuvaajC3fHnBpHA+OZpfMt9nP06bl+5xyjATM93XLu6Fil09J1UFVSrXuE+wCadXp5hrnNdPR9NR2dAbxn2xuJfIeF7t65Sm/FL7Ua73jtsrS7c89cHGbJGE86+t9+8L3LbY3+Dtw+YZ8RogYFulLuLqbcJf2ADfbsUsiWDHTJN8+tKeNON09d+mp0u5q8PsbAc9T3VioB86xyxtYOmeTo6Klk3EK2Rpejg3IMbp8PTpJzR31ycME+gG8XA+JQOuP2XtbAsmjGJkvB4V6JkqCdPh5oD1Ocby939IdXLSVyB+ju5s45I/dg5Op8LN3RU5Xuryfk7ufjsHNfpU9gQCJdssA9p3qSPpeZOUkfNE+HEo4uwhOuXuW8ccCfXKQHdTRueiEHOilHJg7DBN59Ex3qoKO7nzPtDuqNb+8kPWHpNqUKZi6zNfr9wNwoxxi2Pshk3Bfk6Ard0ZLCX+mcC/TEp1h88tJXKU7B8RR6UyWUwSkFF0C/3eN538CPHB3JuPI1+jmt0YG4D3COfXmI//VWG+ePuX7Y2bkAS7eGvpJ+jglbasM7Z7BvvidNuQiXp/NNesVrdJo0hwyboFM8owp6xbngThIuwOXpJQUzNgXMr0GDnOyMcPl6bOpP1QdHt7nfBpLvvkwH5+hy9CBZuhy9kI1zU+fGmo0B7/R3xu50dIIuaSddNTOM4L3gHZ359uz5Iy7YSTpavJGeDN3/drmt0e+//6jdU1xnqI8NG+jVNfpfi5Z+RBWw6e824K85mMi6S8a5HD2qj8mW5sAcL4UzqgHz22npFWBORY7uAu81QIdefPxxd3IOdPi5Uc62F3H74wb5DjQjfd78HG2ScbsZ+qHjg83xh5X2pPfURLuq4BYL+qp1i0m4y9GN9Ace+Az0MDkn6IH10hQcVe7oJJ0S5hBxJ+ea+AiIU031RUevbzBP35tl3R12fh9dJ9coBe7o8fLcxO0165Bq46oaOFdwdHQrlBmoZuH48QZeMMOjqjZTzjtYt501Obo9aeigvWSNfjnVut//JnBuoHPCKj2AHjv6xYZ+Qn5uwkOOLkuXWBGXcPNQIPeo18dgbU5/Ncyje+LwOyA8BXpYodfYXutzR/fdNeXhOpt/ndm57+CNGefZPw4gfevCmP2XyJXGHRo7sDBDKy//WKIuj1GV61Ic/aYtpWzr1YEG6UAcg3fLkGrxXWLmolt6rUAX5Oxyc4KOMW7hO9FW9zYK1KXN8HC0ouDplpCjqwfSIc4p1CPtg6ljJt1u6jrElgK9uJlOdWWF7iF2D9vvjX7zs7zck3HoscIa/bLaR/9yDPr9AN0Ip4YN9L4D1T10Y1jApw2dCXeCnlijb9OBc3LOKcK8mn/vDsk5DKbaZedQBZhLhdA9W6EnQD/CghnbXnNDV9594fiUq2L/cXtXLHT+8LEd/zjzk8ZTf8E9wb/cerqPiXdWuh+Cm+8sq3Ul5XxhE+mL1czV+v5hqZXrXZfLrIIC5WGSYi+3XojYhXqt0B1yvF9ftfPxrMnIw9uoqwr6+uto5Dk1GOqPWj7uiIHupPcJdfQocmfHiFhX6G4zugmIpkFnMs6DdZa/cp/NPrBooDMbRy831r1gprGVYjJOVz5rhZ4I3f+fa/Qvg/TY0Ym52XqfW3rfTjl6vEhHT2NOQ2fWXdtr/jbFRJvKY3gSNV/tqq8id+M3lGq39LpUCZhLOUcn5oljqmd9DqDTzjlhge6c97qp/3oQ6/Of/OOF8/tmz5+ftTX86cH8gVVgHi6D45w+uRKaCF8C6V/80k349pqudixjPf+dFSpYuCAvy7+FjfPY0NFSte5kXSH7Nehi3RjPnDzz9FGgPi7Ut1Uxf5vid/P0OSPdKUePqmVKPpzMtwHWzARLx4zOqaN26K4vOAB1NJi6ddbMeILdMc+s3ZfpaCqME+hC/TKrdQfoKUcPa/S6o2A9c/S/XkR67TwcQUc7eLGjo+s7DU3bmmjneTeXuunmWC0HN1fQLsx1h1Xs6OjJ0P2sr9EZuoPgwPnCCnJupIfA/dyFCxs3XXh6wVbzexbC6fTJQyuGF2bMzNHKMnAR6ktz8y++95033XTTjVdsSV39qnOm8nzVswflz6mpHq6Ucv5IyKHaa3TjXHF7wdGtBys3yK9xR8eAWhz0hvp6ObpQh6UfPBJKYQeViwsvcvQE59piC5BjDp6eFcYJdJGejeyKGQLP42tgvRUxPAZr41DlHphn/h0BPJpAJ+Tp7bX/zxq93NFtUIPDfdWi112GMbrOo8c6a5hT/iJHF+n5xhRc8XPJ4ZPn+h3QRcwVt+N3LsJ8zp5ydGpYoMvQ5eikHM0rZWDolalMq5stcN8xe+GFjX85j2+a73gcob1jjn58uDlbm9dycw66eLwyX1wajphD16+9sSRgF+DxaRU5edniPEIdXV6O4bTXAF1GXkB9gpgrenfWJ9BcI2bq1U30J27AJDXUY5Xu0TtL3pWKE+VydPZEwYzCdkyOeUA9AXr+DFsj5sbqUr3D8u4GNt4hZzuk3EO6PQrdA+aX2xo96ehV9aEN1nnoDoKfHR3dVTT1syeKmLudE3XOKoGVMu5p6Ei1VaIUXBNjdsTv+Ytl4usggXVCOUcH47Uc/SxacHTjnKhvPX2gd0o6vvA4AvdG+/bp0+f++JenZx/HnwRMCU4O70QVXHnMrmMrbEJ9cfrg+xxzkn79zQlLj1BnF+qhk/ESzIW2Xkg4GHfOL07GoYFzG/B0T7RHS3QxblOI20danPSR8YNzwc3v3H9dlJDrPphl3tEFeGqNTumVlKN5sC7WnXMjPAW67nymOqq7a3ZVHGbfQGcMz/D9RzzAFtbosaPT1C+zgpkvg/TY0RW6s2AmOPqzz/5uZCRCvfjVtYC5NK3QXZRX7Rzj0eiaON9Kw/CgnYyjCXOl4FKYx45OzlNr9JCM0+ba1q0LwznQ9853/nDHpvNnZjedmv3H7F8unM9A59o8uqV9Jo95RLvaEtbn73jfWgDuqK/71trrwfrNitfTqEPRFXCYa0Oue6LydF8RXort7QJdAuiknKNYGMclujHON4buCt+n+jPSn9i+PE+5r9JbPBkHDVo2rmSNjibWRfqAttA5gLk1Z70jlYxjyUwog+X+mn07Odw9MVC9YgadmBvxbJGj1wzdX76c1ugOelW4+d730ck5HH0UtwQUUE9hLv3TQvf10Rq9Cd1JT90GCRWK2qfi2yD9T4Ak5FAR9OFAuhDXE45O0Nm2AvaFQQcd//54TsLQB878/cLXN842Lpw5f/7MDoB+AJgfAOalIuCy9KXn2r9omAet3fBO8/Trb3xNBHa8SJeLF6tjKL1pYa7FuGajHGLc7q9Xvpagx5QHPxfk4+zW0E1EnY4+4ZhTc4/WH6aTr9m+fY0w9/n26VA0gyZHD59vMIntxKGWsLOW2bo1PEA5WU0k42zWqRb0DmbhG319DtQH3NPD6pwn0hsJu6mDoPMoOnr6UMtuB/2KS7pGL3d0N/SjaMAc/YAH7gB912jL+DjuAymYuig3zNmDnjXQixUzBBx6NCqDy2FeCZwbceI8HFGbQ4PsIYUf4tNr4Hw+2zrPovZC1r2Tdu5CUl1r9DoH/cKFj208c2bjuVOzSMZt3XNgcpiXRHEsYkNNVa+Lx/wjnzQ3f+dNudgdjahLIjxrYZKp6z1t51qYc0ggnN1AvzIFOt2c+2oR6kq6K3xn8M4lOtQydBgy1Nc884yTLtX3TE/PD4bjqoraOVHBz1OXSWEm31IrhpbXAj0P+wAX6U54EBhv1P2QP2ltDK9AO2ykY5aj21tm6BgR6HJ0wX6JdLVxXrJGZ8XMPDk30MdbUPQwuiuYOqDmzBy7S5SjT5ujbytw7p4efV5JlINzRe2qj9HaXFTHjs4uR6+qeWcksB7W6J3m5eh7MC0s8+pXsj7YaSVx/zg6+/Xz/9qI02sOejOKXbeWWzkkvhcPuDD/2icBeZXyLRsMclCOTtRjD4+z8GK8bGVOQ5eEOukOi/QrITm6KA8NXZBzRgs3T1izDjc3yKU5gA7Vm6OD9Bvk53jWb56GssS7Yx1hrg30KGrnnJXIaKHug46OKeHo+soig3d+tcEGS2b8SS8n90Z6dgFFvI+u02u1QL/i/7GPDtVaox/FPGjNQH+WoB/0G75anHSKiOMZ3nKYA/TuKHRPfi01z7ly8NBUHLSbjZvIuijXm0pg4zX6We+cDHQ6+lbK1+grwXiFrPfOO+gLswvHzp/ZeOY3m5oBekZzOeqycL1yLEIznwLmUNXQt9xhmFujblS+TSLaBcTDVLY6DxNb8PGMcIiUo10p0CPYZeZ5S594foIKeXcaejB1OjpJd9CfWV5cpVfA+TyuoRiGpQ/S0w+U1bqLdFo6N9QC7rR0gp7aXlPaHfK8OwJ2isS7fkIrR2KOgTtkVl5wdBu67DkN+hX/tzV6AnSIqTivmDHQ/0DQx7EHCtAxA/UAeIC84ObGOebpJw30bYKct8EVvsiiMrgi5pGd2yl1Ruv4F6WzcanttTjrfpazQCflJpTLWOrQVxurFzof29H4j6//ZePsqdlNFy5c2IQlOty85llU5eCiyx75XJS+8KnXGeKBdPo4Hph90NSVeZOJJyN3CHPazjEn0uxsNl35GgBOyqGUo9PSI8jZJySVxTnrWqMfpm65E5xHpPf3TFNYqg8OBi/XNrqScQnOMfZ52l3lr4zdAThX2BHo4TB6Fy9+7iLevrHGWvdsDp9pyVXMZIn32NGd9RJHp664tIda0mt075AdaRk20J8l6ITcJqA+bwtz9NDsXW7+LEH//tR6XhXF9Fvilihgn6lS3VDDHGfat009BSP3sjkI1E8l03EloftZwa41+tZMe9Btia7NtV8+1nju/IW/zC7smN349QtPz2KffRH3Pfog3uyL18xHvhQgN8yhDVuqS3TrQTfr5rcC8WylYbtCdtXGUCTcJr4Ic4Iec07YY3nGvSiG7845MaejC3TXmkLF++Y/ZqQb6JBYJ+lCHeJjVsk4DGIuU0ejo9dYo3dhUvBukDNw92V6Kya8c5EP8S1cGafQ3fgOKnF0tEu8UlfoHlfGjTEXR6Ey7g8BdCcdOoIxD9LJuWC3Tsr9AdA9dA/fVhPmFDB3zpuyqvYaH176rZ1qAeZ2DUVV26bwK6K8tqMzGafwHQPPvuDoEkCvoBH00wD9zIWnN5557h9Pb5w9s2khi9ylPQXGo8ybz7L2RWG+lpyTdON7i4OuyJ2WjmaoSwFwNvakl8dHzcV4sPTAOjmHBHqsmqwjcLcuOeMGecrR1xjmXKYL9PXTQU66MnKkHEo4unbXQh6uYOm1QA9XQ6Jxtq77pHSVlAHuc6iQ42WwgfT8Z9JLHf2SUl6+Rg8a9jG8E8i6fsfIHW3+4PyJEyc82y7EZeho1PTU1Pr1uhHO74/R2jz+IgvPqHFHLXZzUO1m3i3UKylPT++jE3KJybjI0bNt9EoA/SfnzmzcdH7TufMrFh5HLq5sca7cG5u/LkF/eGMe85CMI+7WhbmTfiOycgFr+nm0MBfqKdKhCPnAt7+RcKJ+NXrC0dmhKBlHwH2mBLsc3VQxym9A4h2O7rK6GdXMuKNTRnq8RBfpYl2O7hvpYQedD7l6ugSWru6cU56MQ0HcAAy9kSZuM34KP6CbnQN1XvmMbg2I/7kk607IL/2319KObo3yq6TOPivQ0eDl4BzXRu06Mg/ShTrnjHI+5p2cUCVjXZw75lLazXGKhSm43krVytEwY5oqXaMLdBm6OkFvlp8DdHd09Ax0FFDMPn1h47kLv7F6+FqUA2kF7kvZM5e+8EEG7QVHX2f754rchTpJz2rltDQX5pxLTpvjEcsRx8CELLuidnCO8dbvJN08oJ6w81wAP2I/knQ5+lS9kU7QqTvzhbB/nP7nfM7U8xn3xVwaB6bzaXeolaB3xKBTXWihPq6RsPNkiy/OW7mtBvSztH2XWzpadAMs33SopVboriVXyRr90jn6WHD1nVXQdx30kH3XvEGO5spH7pBDHjRvjk47r1bIaEfN8KcKH0WOj6iZmzvnxFzaFh1rQSuCPhw5uh4LfUXQf+mgg3LI5pWnt1rS/cyFj00fu/BTgJ4sdyXe8ab5Umn/4nvXvhMtCtwfeQRzgnJy7qgr1x4eZSXtxUpX/chw3bpN7uWRbtpyTboqzudIEwFzgc6SmTzqLb0R6MXd9H4ZulAv+YSDzrQo7Q7hIW/nKr22o4fI3QHH0Ok1IO5Cjs6tHKA7/qDbC2A7QLZAxw9lWff0XQKxLpGj+yIds3Pe1zeTA33eSQfi6BnnLJYJQ2E7Q3eQnke6IjdnNB9jntk5Z5g2MLfVOQBHJ97eXFPxHltcGUfQBTlntELoDorN0QenKrR0z7pv/eFjjz1ux1nOvDCGkvjyvfOllrpKMx/8GhBfS8yFuiTUY9KBuu5pV08H7WzaU4trXf315hu5PqeuNje/6sqrNtzz4edrcS4J9EgjGeZMyEGY5wA6RdCjZXr/5umi8Lcx5px4x9oXVukqiyPp3GBLXzwBrIk5xWej0e7Zd26x8ctroejGGo+0ZEOkl63RI0Mvg/3S7KPzyrixYUxHd1ZBP4uv3nrUTjfHmD4yb6Cr+pWUy9EJOi09i9CFOQXPDoqrXadQBjcyYpxTdHSpkjPz0n10iaQXQf/xLz10n19NP7e+t3nPLwH6wD9mH9+xA5yX3C0hvvEqwBe5b/7eT66F6OjifO0j6wLmloqLQKeIumrfapfAydDDiDFHhz730ENf+fjn1t1045XSOzfc8+lPf/g+8l1u6RMYYRtdqt4FOzIyoqz7XL8c/WLS+1dPx1LpjDbZyHp8psUU9tbw5JsugU1l3ZmDg/T95A5wzu+qMhlHzLPL43KbbBAm6c/loJN07aN//N405pfG0YOhDw/aKdXTVdDd0OeNcvXfo2srnZxL/yyE7p5yi76WGh1Rwy8Uql2Ncy3PuTofwgxTt7m37OIJCt/gLazPWTQj0EE4mk0LAH3bFDPv3z+wp/OHP3wc+iWU4FwOHrk5x+L0wfeuNZFyCSdZ7l4X7Dzl59eL9FUFA6+FOuBmF+s0cULOdfn1Dz1oeuihb96xbt31TvtVhvndBD2CHI/I0yd8jFsrbq5hgHMTHJ2a64kdHVp+Xf11adC51RY5uk8JU0d38atM4VhLAL3mefQuHWnJWzq6G7p20tkRsnOd7mTLzUtA/+YqMq19Ua3R8ZOQf3VA/0Ds6GP5ZNzRhZkq6EdsjR44J+bWKPp5pOm9IL0Crom6xF+imwvzPOi2Nh8xIdtuVLuaHHWbmtAcdEG+qGScQvdzaI8b4YTdSmBBOS299ziufMzd+b6n5PCKK2C+FEs//ZFPivOAuvLtlChX0t0k1IFxSQ4uSq9fITeXmWNY+u1hwzyw/s1v3nHTlWu3AHP0tKPHmHMC2wBdX1/LMAforix637yNlXGH77TKOCXk6gn6+j8GvJOmzpvdUxpg6K6z6Izd/fgaDV2gC3U2iIYOwq0Z5hD9HJ2mjto4XuvOSyLzhi7aa4IuyNFKAL80jq5Dqn11uGAhF7ofgZ9LpNwmZeIiR9/rji642RNBu0ft2/JF7Yb5hHHOTTUzcBNR746zcWQ9XRkX6OaTo+9iRz9dZ7XuCNsP1Z21g6eB9DzaM1W+2dVeQX1MoDzy83VbhHnWi4YuyK3dzPi99rUS5FuWHjBXqatPN39cnD/4lYceeuiOO+52zOPQXUfRI9Sdc4jF7jJzrNNHqqgr7R4cXdr+BM601AP0vQ66pKycwnbHPcrFea/WwELKxhHzhKN35fbTSTi/1uKTmXqrJd8hC+j9k6pdrRCRh69zd02Qe6sBumqbBDsl7F8NXf0BOXr6PHrf6SLodHP5OTBXpXvgXPq9QHe+NaA85vwqMkl/dJtjTs1VjGpi3dTUNNTknJP18tBdoJPtMJH5kHXfs8ct/cdop3f+eu/evZPHBxeAswm/Y0rZeLw6XzLm7uYkHUOObgVx37I5bekhcJeIelKinCrum5N2iGl2M/SXq6gb7A8CcqCOdut96d21QvQ+QdRl5Xh4M9B9Csql3a+1ghlpf3394VsOX6eN9DTqEOFObaTD0XWpuwftPgXOBbpkOPPiOGOdmPu3k6vr9MaBcKyFkbuXyzjn9uwInAv3mo6OLthXPRB+KaL80ji6IvejzTM50OezJNx0wc3zpTJUtEaPMUePb32FTdPPjXNhjqfn27Oy14aGhv7+Bjo6WsLRU6AfaI7ycPEaHUD/mJY+WIcF/Qz+JzvmpcWuwpw/LkkfpJtTUSbOJcjTu2vUKuMcHXrNoq6IEuRydFIOU39g9+4HqwLma972abdzkP7mix2dds6BWaRnYgaOlLPlNDpSXaTnQd+++9p6rNLrr6vvnq4pkF7+jUU8ddmzbnsm5gZo4oYZhu+qgS1+wwH76H7bjG+lqzYufL4BQ2K9DB41Qdfnq1Uw82pRLkf/QOzoAfSjwdBzoBejdqLOUy0m7a1JR8B55OipcnfKKX+yYpn2oDl8azXsqfVkiVqSbrAv1tGJthxdte5cowN0OvvMHrTyr6FypvJOjscrxhyqGvoWbJ8rcrcpNvTY0U025ylPLM7R45J2S8GxQTd9+pmXXw6Wvmb58v1rMj+/9dZbBXrR1Qua4DAf1yFVurnNEeqbKxc5+vIbbgHl9ej13S0t82Wox0F7nHZ3vunnVdAL22u/IejxOt0p7zK+fXi83jXQigfPrwF1TOyYGLkXFuqseYeSoAc3T9e887c4XlXQ48q4o30LM3nQcUXcvJLthjkhl6Ojpx1dqCe/fe4NqhQxH3mKlKM3NVis98Thaw/XDwF+hvOVKBmXdvQDCUMH6GbpnfDxLHAH7+QbU1QdI3enjadS7cR8sWvzlJ8T9A1WECfFdh6v0cMyPeXqxDvOwGHkY3YMat2a7bsf3P7yg2bru3fv3//gGlAOzI3z9bYmP3nypCDPmhQH77pICpCHJlVj91zBjHN+C7qBXlfXUubqiaT7LO0cg26uG2bYgDhGGvRwqIWoozeGDt6tMo7yShmibm90dUzEvFAblwZdRQ8EO4Je2F8iR+cC3b7rXwS9moLjNXKYY8qLoN82bY5OyJOYTwlz6wjaQbdA9wX6NvTupobDVfXQ0oF6JWHoKUcPC3O9ZI6+4H6ORrqJemnMrvo3TkveOBfm4lwi5eH6VzYpMvMQuK+6cZXNGepy84hybaf5RNCr1THffGb79u0PPgPM8QToyxG43+qYf7hnG0HfBdRV6l4N3Pkixm02wvWIMPdsXBa7h0MtdwJya5wqLbbjU+bqgFysi3hALkPPMGcMr430GPSfZBMDd3d0CnaOwS8ne+/iNluXWbv5eaPtscWhe9kaXZ/G4mPVw2byicwcxqVz9D4L3Iuh+zw5D2bORsw5AXVhfttt/5yqEHTBHmMeonbbYp8j5QrcQ34dnMPLM/XD0ROVcXPg3PX6mjfMnNXgefROZ9wHmqy8HHW0CHX0xVA+88X3r01wrrj9zWtZABsUYY5hTZTL0SNXF+CRoWNiObvJZ+rhNQAdpGOAc1j6GmBu+nBTj4MO0neNg3RHHN2m1D46Gvh+PgTwBU8v5N0rOUfff4NtoIv0vS11d901nCC9mqSbtfg91oA3PN3SOfPZymxciaMb4vraYseODvp5a6Pd6o6GbBycnWn3zNAZsqOzGFaH1xbl6Dbdi2RccqtNsfyr6uhcpGNrLeXoIDxYesHN0QpuDtHRjXBJnFecb0+zewoOlwGPSNxB3+ZQdyNup4z3Buyg228kcnFy9AOJ02tcn6sy7pw5OrnGEOoJReXsS1mWC/OFtkfA9ifRkkt0PNbRzdOGLsSlAuQ+5ZfmetMJNbzgVolsba5zK3eAc9MznB/cbaC/+dYP3z7UQ9Cha4D6rpPXFBNywjxk4/gjJNTF+Sg5HxnJqmCf2A7Mr73uunrk24H4YSP9hvreFvj5sB+fnK6ljXT1mPUQvOPhmOvoGqvZEqDrbsguG5jQmYfD3MqLYMk3xJq4RqbhMGGOrpMqd3QyrhYX0fDx6ofud9HP7SstMxHovw/J9rNAXG5O1GM7d/2zsr5iji5VqvfEOawM2gEzMD84jr//6Jho6FPkGefVq5grG4eJkXsS9Pki6Irbc45+7tS5BfdydimJudLtbEvHfOynH3tEkOc311w4rgY3T5S5q1aGTZDT0SHB7qhreZ6ujyHj4hx66BkQh+ENWv5VRu09QxBB9/B93FF3vhW8F1AfxyhIhXEA3jHnumyIjr59+bVO+WE3cxxRx2N1C3RX3V11dceXJVH/o3n77Gzh5jh9p4UyY2fwTns3UlOhu4rjVPLeNWAu7ql3Ys7yOFJO7D0ZxzW6CM9F8EnQ5eZoAfEU7P9z0D8Qh+53EXNE7gsJ0OnnlDh/lk2UB32Xji5LrxTOqDrkZue9c7iHbhc5l6GDcQe9Cfl2qb4pJOIVuYvzMkcX5gD93KkzZwS6aQ9aaa5doC95eT7TPPZT6BEYesx58PMtW4C5IndVwEoiXX4O1EU5Gp5JL+cUU07Mr7pqHTB3BdI/ezfcvMc47wbom93GiTr+Rp0k4JxjGehCXa6uqD1bmK2vtwDtTluSgW2CjmQckO9f2dIyDFMfHl52HLpLgCcq4LNUnPzcJhbAqmCGa3R6ukAX5wza/VEtgTXQOUg6k+/VK+P8XEtAHX6+iMq4G/X5O7ZV9/IJuJWeexVOtwn0yNG5hX4x6KRcjCtsvy02czr6VOzoxJyrcntA7ub4x2d8tGrnMnT0bhp6tETH70R+XnD0YYGuZBwf1hfqTp05ZaDr6ubS5TmpVltaveuzC2PHgDkc/WI/J+ZgnE95uuxcK3Qq8nRpldOOHtfHOOjhqDnjdpn5VQD9m9rMds53f/XWtxjmrp6h3s3aVxv3AJ6Q09rjrzfEGjHSeUw1cP4ULT2IK3PIg/f+nmXDcHQ7UgXMx463L2tJGTo64vdCAB8wR2fO3TiH/Akyazn6YzsEOuxcrKN7ubtDzoOqRL0RT3P0WkWwyUMtAfRqu/HhVQrfI9RF+KsGOg399MWgQ+T8iFbnCtqFuRy9AkePj7Bg5U3Cs+8ows1d/s+AOMcKnZx391+b83Pto8PQk47++rSjK4Bf2HlgDH7uji7M03zrRYv0pWbad9b9GpTT0dMp97WPbCDuiXoZoX6xobulA++8p1sX5HG5K6SY3cdVV1911VUPytAxELm/ze3cSe8G6tvuk6kjK5ehLs4lmLl1UY6Gnt0mNT4SNIlVen+WdvHlOcJ3j9+hR1sM9DqgfpxaQdRj1l2Ds/nIfV+2Rsc78VbZTPj4gkAvGnr4qqqpC4DjQUenk2MO31MN18YxfFcaDpOqYKMvtQh0T8dxoEOalJT/3ybgrzbOU6E7DT0GPWHnhrjsXJjL0Q30WE3VtTk2zkfNze0fHfq5Uu5GuXE+FEXuLHxXKk6XSNVYoyty97EwONbWDtDh6Vbsqk8fpzBPfBR1aZz/YaavnZzT0T8ZkY6OsQWgR5F7nImLKCfnmAQ5H8Q9F7azx7dKEPOrHfN33vHpNbth5RnqeLuhoWGoCZhTj4L5X90XXB13PLupI0ZX+C5Hn5DEOhfnWcymtdlh6gbzdJbKGPPIxQ3fNWw7bMsMciNdri7Mw7RxdjY6j65L49jo7Bmm6e01nVEF5f7CQy2ej4N9Y2K5DA+m4wlXt5hd31+jdBlsEnRKabjoVboiLqX570CHUqH7GGviTDnQ5eZ5P7/ttqSdK+uuWhlnvNsGvJ31MR60k/QRKizheD8sUu5D9Ui1xyt0XiQ1Evl5tEanmgm4MG9vawfoIP3UQlmxa3x85ZXl2g+0t7URdDl6FLiv07k19BrlrxefULUOFf2cnLMJdUysghPpcvO3bkD920svvfTVNS9XaX+poaHJg/YwNRy+s7+KOoj2vbZrilYelugp0kPgLkOXpUP13oz0w9fV98/Z+nx0WQsMnWo73ta2YlmBdMFuqA/qUIv20R1vbakbnvH2muGMOde0i+73u/PTyXgY4Hhwoc9NNta7R8fRaekpR98dQNdKfVX1QgFdMqVE/Ku+RmcmjphjRKG7SmRu0855inIl44S5T+bmvD5mNIvaD3oqrmDpFuFj3w1DoCPI6wH7Ork2fnAiDTrX6FT+Kqn5+br2sXbIQIejl5i5NTn5K0y1N7cfakuALtahDXfDzqnym2Ugch4QZ4tlhNtgHRybYx5n2oE5L5C523XrS58H7Z/9LGj/7EsNWeDO2L0BXz1dvn95w33aWGMCHlhHrCc9nUv0XModzR5u6RTD9sMA/fBQC7bQIfNzCX/TNkVLdEDOTlcX7OHsmkCHUgUz+577xY86CltsIH2gq9Fd3Rg3xH2V7qTD2+0J0J10JuLIdwfYDnbOkV6j68IvS8Y9/BqC/Sqk4GLQE6H7GAL300CcEujh5nbOz9qQRHfC0Zscc3upAHNw7mVtpDwL3MeFub/0Os3dGD318vMhM3lyPgdDHz1y4uBI4Hxz3tFzoM+r9hVuTjF0P9dZ08ij3TT2pWlmD9YIkIO+V6DHibi1G9bK0MU5mwL3moVxeUt/rU0g2ycMQo6d88jNQbnpyps23OOQf9o7BNZNDVXMe5oaGurv3L/fymINdbn6SQ/gTwpzUu5fcUhn3XkePb9Mxx/iEij38H01QMcBN6TcpRXtUFtb3caUo6MDdWJOFb/VYsUuumRGoP+ws7nvxRdf/NFPdEekk65UXPgmkzbYQLph7uATdFk5Zl0xEzn6N75N0CURz4YXDPm4VvD/FfsCnYjL0UF63+nTp2nnkaPHde141MRca3RVv3q5K299dswl+6OeXTl3OnpT/bXBzxuc8xC4z00C9BM0dRm61uhydOpAXXtVTMadLs+06wQqKV+imwNz16maoTvsfEvh8tfax1NNcSYOXYrqZjwBZ/I52LnugvOofcMWYn4rhpe1v6WppwFRO/2c6Ti4OTAH6Bj799/5q/uyrBywtq02kT7OeQIDiuy8cB6dmNt4qkekw8vN1GHoAH24YOjt1hz1FXcRc+vEHMMfG99jqGNA4dq4KuitAJ1+XgAdn/5v3vfci8856o/teEwb6cY4iOcmOuZwdo2ItzZqfw3tYkcH5ilHT1OeuOWTWGv+bx39/uQave7oAjBPOXpUHoMmzEscvYmYw8oJu63Ni5wf9Jy7NWIu0PHot9MskJXEZZxXjPORydETpvEJgZ7eR4ejzx8YC3YuRz9dXgYXEPfBX1oC5u0G+aG2Q4eORY4uWdyeQU7Ky8riMKUPtESrdHQbhJyYJ3bUwPm6LXLzrNx1CGxjNBFy9/Nrl4NzFx4w9cO/2nxNtSaOAbxQZ74dL1XSCT0ot0FZFD/J1zkjXboBoPcjFTfqW+jCHGoD5eB8BRLwJD3v6BhoG93VeREsGedU09Gbd/71r7/f2Xz0xV/8gq4ejqSHC58bPVqvbqTj1QN2su6UYxS/pRpAR68JulBfhacwjwDXVIb6Kug/fazxKge9wLk5OgL3PWnQ0ShRLs7Tjg4FzCtcnwPzOWE+zkdL1c21uYZmmXk/uYacLEtfyXqvG7qBTtR9Wy0NOh19fliQt8nRy3fUCHd4eSVuDthXHDqUdPT4NAtbcg+dhq4luqplCpDraXZOQ6eZF9Pt5HztlntIOQYPqcHHnXN059zUDzuHwPhy0o73w+s3bzbQM1cfH/elus6vGdhEXVfM2Khq1MQXJeSgerP0ihv6aHF93uaG3mbtUNuyjRnlIFyYQ1yqW+INc5VyPMAmHT0K3QG6of7z5577xXMgvZqYM9wNddCNVq2OY97eF+owc3d0zCJdMtJLQ3fq5nuVmCtMScCvSGMOEfalOvpY30IN0Cm5eYR5iaNnqiDZbpgb57/DkMLSDQ+B7nG+Xy0Dk8EbS2LR/NMNI5OTLYD8iJF+8vnaWfd5xxx050k/JtCjjyvlHV3HUJeimYXhtqBTp+joEejcQt9yRwH0ooA6ugw9eY2UpFoZdDB+MymPqtqJOYJ23O5KyjET84/SxIl6d0i4N3ngDr4xU4b9Les3MylnclPXoRYdRofwIObxMVXIJ5DeUCB9aG4UdTIFtTEXRz/3Pzs36YRLoFyoA2xdJ2UPOvq+yNHBuTk6Ue977sVf/KyDaXewbd0SckDcfwhfSNcmOro+ytTx52iN/rOSZFws8CvWtc0mR489vsD+qlX3msh6bUf/EEGPDrWI8xToeJB0YV7u6JVtlGMLzO1brLEOqlhGV0g56k56N0N2zE0YXKDPrZwcGSfoptfHa3RpYXiMNr4iYB47ujAvptpfUaZ9T58F7dIxd/S9cWUc4H4kWqAnLV0rdCm9RJejqzQG3YeC9qsB+tsD5jZxcT5EN8fAROStN3z+8zcst3OrRdKX/+qpzSx551Idpu6uTtAxEXaCHjDHkEj5ypHJuXxG7u/9vSsnJ48n1EZHN8zboE3OuSD3p1DndxYzS0cH3sCTX2Arhu4Z6s1HDXW/6pmhu/He1RH8nJc+O9tMu//IQHfM0Yi53Jywpxz9NTVQ51S8lyJCPi1w/hmX017T0T8h0HVMtc853+qjM+HotwF0YV6qDxH0SlPgfApmnhRB907ZUXQeX/X9dF31vI1+PjeycuXIuFNOnawVujPVHgnVMheDHnOOjon8Ljpor2s/VsT8UNhei0BHz6mIuThX4B6TngL9taTcv3pM1gsxOyiHHPMgHjlH1C68Gb37BDVgz203Tq56Ro7Cy/blt6BYLpTLYP2FfhKIe8tE0GnoPiLOIUvIrURtVD8Trv2V3kkohTpjd7N1wA61I4D/I5umgLrhDYXovdUHWQfom4qgU0eaf/7ii8856uEAW6O/dYF0aMApp1ohnymQHgRrp6eXgI6h2P0i2r1jVIGPWeebDB2QP0DWa5N+tTn6JyJHZyZuK1oMOhhHI+TCfDGO3o3urTfh5lqic1AVujkbJ8h+JXCONm6GfgSTA3/w+STode2x2sI++ulkdYxI94F5CdWu7VyZB8yPtR06FkDfC9CF+T33FDAvCpinL4uTiLkQR+cEsnkQtbhxjpi9mINDy3JwAFp2rh/sgZeGps+/9NX92410CT898StbqlPjRJ3+LdB1Hj0CnYE7BNDRV+Mr2T092IpZuTKJORPvbR6LKfmxTKZO0oOQlQPlbDbR04l5DLpIx2UkMPUfgXTTADNyA858Y8cA1+sM3iFBjiZpIz1Z6x6+W13l/Hq+RqSziXb0Mkd/4HMmJ30pjv5zcm4i8AJdC/QI8xJHhxx0OnqvUX1SK3MOTBnoQn3KUu7dHr4T80A8OIf8r5SjG+5/OnHimucToKPgNVYMOvGOvp62dMy3+n+W9aBDYL2NoO91R9cSHZdGYU4E7iqKS5TFaYFeMxVnLm5SKRyjdvdz5uA+jVG18yZnmlk4nWPpxpv3zNSX75elu8FD1xrqaAH10V2G9cV3wVKK3APkAXW4+uTK3tVzq1fm7HwyFbybo6Nn/9+u2Gh4sxVMHXttRrjn3qkBM3QrjjPQP5YAnVk5X6r7oXRPuoNyC96dcYj5OKbe8WJSFWzO0WuG7q8pcs5XAs5HmArxe8nNM+7ohjlJl6XHoIP0yNHfs/W036PGgS7Qy9fm5Wt0XhfloAt1KZxrklAww8210GjpgfM5v8NAa3SIpl7u6PRzgR7Xx+Qq25d8GdxMHyFvzxgn5ra/pmRcOmxP7a1FkMcXQwJza8HM3clfgwHh1SiXnHHunL8TmLu0pdYjI8cj+8Gl5DuW6kDdMNdCHWP5ckvAb14/R9SN9IOFbbXxgHt8www1ib+HDN+l47atNnpcxCshx791IWIC7itg6rRzWbpc3TJyEK+RctCpWqCfhZoN9V+0Wu2M5dzBeitgB+gDvkhntTsy7ayBxRk200WGjp50dIIu2CWhnoHOLl+PeRfpBjolS0+A/okY9F8iWjfASXrnVoJOLTpql6Mb6fnQHYinZJTPAV7B/pRF/EzAydRZ+Eo/l6Mfsc63I0BdoCeX6Mq6y9ETXzdnX0IZXLO5OTd7yblNCNwPBdA/5qBTdz8CO0dL763Fjk6VbqK/lh0tOnCuEhmm2sk47dz00fzanDMFS6epYyLqn3XMKbo7snK3fP7w/gaA7qjD0TEIOgnnK7rMnMr20sk6ndzm0VF3c9choi4tM8ZXYPBpM/bahHoRdsvKmaFzarUGONOgi/W+febqQHtHBxfp6PhXeubdZlerDW6vRat02nlNR4cEeSRCrhbtsQl3vmuRHkDHUn1RoFP44GBnp75TlHL02xatf/auh4xzGnq8Rj85Xj3RcrD3ydVzI9IcYnezdDb/t+C1r3MGehb4EXSHXALn5Y6Odkqg5yyduKsvXlYfQ62A1eTjdhbMCHT6+YZ1kaMXFEMeL9AVvGMQcBtXImpnyB5VtoNyNGCOCrh7nHJiTkOXbxva3WhDYfbuFs/4/bPLt2uNzqcfgQmgO+otZuU+GLEXbp4YVxbOnXwEjdRDI6PiHFoN1gPjYxiFP0hXoLmAukydEuo6xZa5OUF/UqAXOUdvBuq/8ACeO20WwPNIOk+usdA9G7xkJnWsJXnxBDAn6mjeb8RUsHQXjTziPh2/G+gP5EBftWjQzcM70fZgWM+BvoTFufbR3/LmD+PTKzyZWhHokUZHpnsvvLB35WihZAZOHvbYCt9UNBdosa/wMhkn1P0HuwTnyHASdEmgO+aqg3tFbo4cHNUG0Cn6ObJx8PRi1h2Uw8rxzEfu8fnUGHUfEeZ5Qwfq4Bqsx1G7m7ltqTEHdw86OafeTMhJOQnH/+mYe5x1Skv1l3CcVb4eDrt9tZqVA9JIurTsCmYuOfejQSqCBeG0edj36HHjHMZOg6erF3fUDXRyjhfq0Ios/36RvFYuXCPFtDtB/20SdGBu2mnxux12seI4puAHwnl02rkfVOVR1bCT3lHEHIpPr3375W/qQhCt0SkBnpuKVPMpCXRZ+r21QYcIuBydIuZQLuuOftuS9N3bb737ng9328lU3jJRC/SJk3/qvXDhwpB9WTHUzMDToZCIs2z73Bz8HLeTTBjp0Pgu4s3BDtCxM5B39GWRn2NoH53Lcjq58750zRyoG2tXfW3AnGZ+7BimCPS7N0SXudtAq30QPZl05w4bCDcBclg6prhExmem2gPooFy6PW/o2M5swoCGmvDGd2bgiXrTSy+9XN1RB+Wu7V9t6uUyXVk5JeC5uQbQzc0Ll09Mzk2OrJx01p1+B31SOmQdK582c3Tm3VfgvUq4Q3+s7dSxtnau1dOoD0CGOTgvA12kc6n+IhLwkOXldPOEb7F1Gd2I5k3B0RW7+5TaXhPopet0RfDFM6uK5PlTYpGOzfTFO3ozHR0zXwqOftvS9K5P3no3okOF7gJdeXfqTwAd6ununZOng3QKlANzgxydhm5t/CQ51+ygYxvw97VC9zZvcnSl2hW6L7Ha9agoz/v5Cq7Q6ehGOUEH4utyH1BN3DeRzLlHZ1RBOB7aVePDY/eimzNqZ7mrzByDYuHrkM6wEG1OHrqbrSsnxwQ8ttGFuTl601Cll64+jp4l4APnGGhm2xNOOq+SmgyhuzUrkgHoBc5Xi3RDHR2jrR0Dk/YvQ/C0iZ6eRH0fUTfIS0EX6czKmasDbx5TbeXnVENFnL0AaWNeoAv1xHl0A52UU6DaJlEuzCGxHYXtsQB6IP0BbaUnHD0CXZyTdIJOP18i5lde8TD+kTJHD6RXeg+eSBn6+J8M9PP2j9uTU3ObnXOaOj5ZjtHLSyYMfiuwAuRQixydnu4THT0BuhzXpgz0GXLOtoTL4LRxfnQMah/TnyOUW80KD90Pff03uX30DRuEOVVy92vp/a/E3BRScOwx6bhAJl8gY60gbK8J9aah24du7769m36OwTydjQYIPwD1zy7n2rzq6C811D9x+Ffu6sy2g/SWlvHRHOpcoI8TdAqIC3QL0YH6ZOToJH2SFTNA3WFHM3E+5e3YMQvgk8Je24A+1FKyRj9rLWgnl+o0c8OdzSi3xkuf2cS5SuNqOLqhHTzd3q7HWywZOlH3JuBFPSeL3R8oAb0sdMfwBxpB9+sfl6Z3X43/gIfNPAB69dNqvbuSOuGgv/Dk0NALQ0NPIn4PpPMN5THgHE+k4vAYPzjegoZ+Uk5O3uXoB2o6OrpAj7+tJMoXVdReN2Y6rn97rRxxmsXsHL2adf8+QL9ni7t6VBGnuL38y4qS9ta4oUZHLzCODjfHBTKUJ+JEufRmWjZFT7/dGnDnrxL0W67d/8Qt8PQGQ91Al6N/9Ql8rM322ujplmZHDdTvdvm+GmEvlsMRcyiAjt+TpUeO/m/mzgU2y6uM41NkxksFV1ch1owSjPk0WDFiYuq90cQLNVWmAYPWbbpFjUNwmjmm8bJ4RbxA0nohMrW1xRultbPSMqoF2wUdKEWWopZh1QFdgxNhy9T/8/zf8/2/93C+j37zkv3P5X2Zuqnlx/85z3nOeRuxjcaimQz0jlLM0TGOH+daPS3E7wAcfIbQfTgCnZyPFznvc1Mn6oje/UsOPNDifw+7jcKugsXgGt0/5hDOqVZ2dELuHSMJOWb0BOB6lVgbVzXo7zTIt2/HvB0vPzHY6ehVYr70Mgigg/Q3gHFe+wpHT9k5AncHfZmng/ph6gScuoPdGrpxjstHfjlwF9rtDN29SXR0gV4bLdHzoJPqqEhmjm6+k5iLczk6dNxycVBp1t0IB+dsyT30GPPkLVIhGTevaOiGeHxTlE9rbnmW7Nw5x5TnPKCO5p2cN6PT6DEB75Hd27CbtqDBNX1/ztFZTbNoJSrgb/bz6LYmR9h1O1x9/8zNRrty7iKdoXtItzMVVyvUjXM8CrWOeXu7HJ0/RWqCtB+3GsTasqifOuWH0suBrshdqPe17MSxNhxW5yEX5zxcMMNy2BPZdxzk6DqPnnZ0GXoY1irvszF+L5+OI+nXXvuOa68tt0h/zpuvu8jRWwz0n/yk5Qs/afneF7a3fK/FHb06zJ/5PPxXEuhAHD3n6JOCHJp00LunfPvW1N8DoIP4+ms8fG/t13eBdMfcQZed80FHH6/g6DYJ9OigeZWYd2AgbCfq+aK4gm+hu6EDdOqTa1akq2WinHteaT+/UoyDcu2ey80xveYW+HjMeWzoNi3ppoqow8+dfo6GukW2c273wy5saAD3i0pBX7doN9p3zNR/eseMbazx+2u3Hzhw+9qZ5iMzZujIxtkinZKfWyPn6I2gHDMNnaxnZl4YNFlZHIh30CmDfALTBIS3jhuuKW/qwLwy6CK9LyMd8Tsq4AE1v6fKXNy3MONmyBPP9g8yYcDL8ze7n6jo6MHX+UgpzsUlI3eRDtRfp3L3FOiJ0P3LwLxle8v2L2Bsb/lCS0vLX6p2c/x3EOi4zqArCI5OzCVyDt3RP9Vf/PfhWugZUe52jqdzPjCAczGowMIw0Mfl6NkMPz8NzpOgt4ceQFfxW/WYO+RowhxNe+hmMdTezNFbl90CysG5DP3pEebivNLtrxjU/Cst2x4vzMO4GpjHdo4hXcUJ7SocbKF9M1SHmxc5511Sln9DwyUzC+obcqDfD9D9xLppV8MdNwN1Fr/C0tf27N59ZMa5t2ukiqQb6wQ9ZNzDAj3bYRtswmgk5u2DmbivhoZZeXfgPgjYzdUnjt+QBp0FNGEfXaDnY3eSLlPH9yEcdcvKfUu1MpA5O9/l6bJ0k4MuCXRpse2jp1fpnJV+Z0+n4wx1iqBXcnSB3tKy/XvbW6CzLS14/qTl3dVhfvljL3PJ0XkbJB19IL1Ch/b39wfMj5lo6mSdD+N8/8Dt8HJr1ieLfi7U8SnIPu2iz3qtuzDnIl2OTs7Vq8Ac6/NaBO5KxcloXGbmjnoI3Ts7ub0mzEW6IvcU7DqMrtDdEV9sdh7DTsyZan8lmpJwyrgLdWJuY7kl2LUqDzLM+elFkm7lcPW7Sw19nZk5L5WDRrYiWGdZHNKmA0d2/6L7Zl7qjn7Xfn+VrYN4+rlC9kYE8LWN9lI46vKVelBBgTs3M+nqmCfAOqZKqP8MO+KVHV2Qu6eDdEP97rv9++hE3VLw3mDnz/ayOKuKpZNriR6B7qG737BfGr/Px1DwniyHlaNTehXpJmJOztOgPze3Rm/53vcQtANx6Hvg/CnPrQb0Z16u/xJ5R6cIesw5HZ2g98PNqR6YOtfnFrfPcBMdRu6IA3JrhrcPm/w50FS7b49Al6MrcIcEOlXdjpq7+VFG7vRzij6jbXRyHkL3/v7NHwqGXu6iOPSkpceO7mYOyjGH5Tmlg+dKtcvP8xtrbE45tYQurhIaw7x+l9l1BjpIJ+rbSjC/nyXwmaWvXLSybvXNLHS33gPQB/wwQ1ijl9bNYHLMD+dka3Vm4CCHvEmkI1oi65iUDsFAn3Adf1p51HEQrYyjn7aRUx8c3QTU74apM+NOF8ewOXyTiY5e+RbY77ijk3Sl37WjXin7jpanXe+C3ZX0fICOFmXdjXBSDszf/NznVgH6M1+hf0rO0Sk6+mSUiZvMQN8/lAXtDnoPOO9xU+dwyvHqnKNPeuRORy8WvAPzX3ZOFWTnBD04Op9kMXb0Oeu6v+xkql2OPhZH7oMT4bY4dHDO0P3BKQNdqKdIJ+WclIsLTY6e1cooE4dOyEMODmjLzkF5enlOR49RJ+L+1ty7CHZuTk7Q8QrtDpzjY4zT8HIHfRHScSaE9s3HZgx1N/WZ+t3HxsdB+l2E/K5i8t0HHb0x7LIFmakX7XzYxiBlz/bM0NFJOx3d2gTVcU2FAL5CMg6txNO/DgR20tQNdQsH7FiLHV/jeRYeXuP3k22oANbmOBlHR0enlJJzzn0i3rGpW4+8PaUk5AT99dddnHW3aD3oKc+tAvRXCfPya3SLt5OGDkdn1G7qBOYubKzBzn9trNurGfpkcPOM85KTqgONm6fuJOiCPVEwgy5Hr064WMK+WUXWQ0FcrbbWQqU7EHdHH4YAubLuoDz2c4xKjo6WKHS31fk8r4hDk0j7KsvBvZKc23hWCnVCjpbT8gj15vqXbZNIOjoxf9n6aZbFIiEPLbK2sr6trRlfwcZS3XXzHcd+PYmv8JqpKx8nWQ5uvwgX6cTct9Edb5uG2Yg66425TJ/AhLjdGp4YN5wsi/pcQve1a2fH+07vBOYQ43cItbSok9NxdOTd7aE1upR2dH40R9H7lSWZ90tn3+NbKNJKO/p1b/56lHXPhMQ77HzuoL/qhbZxHoN+VSp0F+sHmImjo9PPO9HMz8l5D3wcstks/df+Hx0wyF3aXMPL7NrhqTshgi7ViHLdW1Di6FA1OThCTtWiAfNoZ60wwWQc/TzLxN2JyUG3HpW/Vihy5+WvpH1xMWz3ESjHc36EORA35QJ3tDTmEexL8En06ICqB+7eIaP6ZevM0leiUAayb7zY7hpPrl5R39YMNYwgAc+sHIBHZdP4wXuwrR6hzvU5MYelJ1D3zDtQV+xOa88W6Oh8gYzw4xj+gJSAj7W5/xIlsLOHtwx1rsXWjUAH6ocOAfWfwc6LH0t3WzfWA+cnWC2D+WJHX+SOTlNHd9YXR+G7CKdIOJ7Vf1w5Bj12dPdzTE+Bm5vmtkZ/5jPmX5bQtW8w0MV5ojLOGKejHwl+HihHw8JcV41hZ21y0kICEH67N2rcxsBMZ+udJoHex+BdoNPMrQXQq6L8upadcHPrcnRiXpCjm70wE2cdlLs67/xHK0FfwZ5IxekGKUHuij/FJNBtlQ7IQbvq2g1zBz0Xuaf2z70xbpeWXLXEUJerO8n3lxj6bvPxbb9YN22Y87KpNri6CYE8MN+6Ffk7LNVHms3VeXccqt8PIoBnSk6y5bkbOgP3xhj02tqCOzo6IXcVCjysyhy8N1+gH7dB3vEsn4Bf3dZ08lQi645O9dTZ9XWNZ2cN9T6STtTP86pJsM6T6Z6N+6Z3WblPCdDnPVak09bROLOXv01OXf5eFeho+RJYcv7mp7yToMvRK7o5MU87+lUCvT9ydBk6HP0I/DyPuVXC8QP6XKmD89snB+6ZxBIdlEsWtHeOmp0L9D6HfCdmnSwLsxy9qqB9Zw005o1rcy7Px+K9Nd9Zg5htp1qNc4KOISlwF+oVt9DnO+pMwlnS3TGXVryAQTubvFyQV4rbl4SxvHSdzlK4ELYDcHy8ZeFCm8O/odn/Dd9Zaf+SufkucL5o5cpdI80zMzyu6q4O0oG6tN+nWgyZuVLvJqIuDTvmBRBu73io4t1IbyfmGJjKo97Wdtv7Hr6mrKOPr+2ug871zhwspuP4uVaQDjnqcPSfMQ9HO8eLPtjiS/Q4dAfoGeWQlupap0Oc5evJbztQeKvK0a+LHP2H4Nz/0nPl6JfCfN5lZbQKdkHQ4+01cS7QnfIc5/BzF1zBDN34Rpsk5njJitxn1zaNgnCBTtIz1QhwGm/JGr2KoL1v3z5hrgAenKtWRqk4DFucZ3H7qM0EHU2UJ77OkvosOpow99gdb2AdpCsLR8zNy2Xm8nM2dJm5phzmaNYdc7k6wnNDHZ4NI3f4MQexLHah/0vNcPNFwBwDtO+qWz0D1hmuO+r33B45OpGPc3Hk3N6IensAvVBrnCPDiT4M0gsqh6Who5NyPPIJ+IdLQH/grQ8/dKrMGn185lydkz40O4vYnfJPukGHzgN11s4rGSfWSXny4gkDfZ4TLqlWzn09jbpadHytGtAh216TsDZ/5zvJ+dwc/UV087SjE3SJoE8qcM+B3umcU9gzD5xb7GekDzjhk2ig2ye6+drOqVZxXnaNLs6VdZ/72rwGmMvQHfDcHrrsPMu4E3OC/uCoQI9Ip6XHmbileKhYBt3GPKIOQ/ecO/bPxTlT7cScqItzG5EEe+ToJB1iAh6dMtSxjebxeojr1Yx0s3LI7oF3zCF4+spd9W2rZxCvW0NN7OmD4/f8MicQzmeJ/PqJApbn3EwH22Frze0cnAehVi5gjkHQqQkTLhiJXZ2gf/EBoH7y4MEc5lmt+2wTQHf1PATOFbm77j4E7fwhXF2oMxlX/jy6QAfp802OOyehXm5LPW6kvFrQc8k4ROwtwHzOjv6qD7CovbyjX5UA3Vlnxl36dUnYTrFUBmGfa+AuEE4vD5BjBuZN/cRcoGuBDsxBYrzRXWXofh2+2kaFjLukwB09UA5Z1C7S+zsD6CQ97egy88+89TOf8hdl4sC3TXR1uDn9XEl35OAcc9l5iNzl6fH6vAzmnHypLp59qT5NO1denkOb7712uiVsqDvpiOIXrp5hvYzp9Pj46dtLgvdQAwsJc1Ojcc4OU68l5s453kT6YKiU4yE2S8l5g3zCtd4brkmADj3wvofGU44+2wnQaeknDfS+ALqhfjfCdxNujsde21e/Qc6jehm80tGlAPo8hu1o6IrbZelCXOfTY0enq1fr6E9Jay6O/qLnVP6n3WigL8kl4+JMnEB3zOXn+8W5UT55lxk6Kad4xXPTZmEu0Ge1t6a4PcxVOjqC9pqgfWBbS3SoJM8neaod3QeX5wH0fLEMhjBX6P6pBy5ceOAzeE99nUUHVGHpQfMtBydFkTtGmfU5p4hzaTkxphpMRcT1LDX++isWMfmeaSXC93XrFxwxT8864nfLyhnbM6Tc4PZS98N8y4rbDweBZaAOxjGOFjyAJ+MBdTp6yIXS0Ak7hhLwMejw9D/kOadmu4KjIx8HzEPkTku/GwLoNVyq21qdhq6N9G8zek84umk+JNBJefo6CilapD8SRwfqKcjnAvq7P/CES/0DVwn0yNFl6AI9LM6hsDbfT8wHjHRIkLNAZm0nNs6hpKNDY1HpaxS6n7k06L8B5pD83DG3oQOqsaEP7927g83U+Y9/MH4Pji4Rc87cW6Ohf+oC9MCnhDkDd4LOgpn5wJzlcIuFeWkaTqSnS18D46KcVq7Qnahnjk7U+YreHD7z0IVJ3Pth9ewLy5Cl5Nat27RpfZt9h8s317hWt211LswxrEFZwfsvVfTehAbcMYHlWgisZ0v1Uu011CeCo2OWpfNptwkF1AW6kU7QY0cX6Oc6z/YpdrcV+s8AOnQepMPVUUKTrc85S0D9Ykd/AisYmYyzQdSFuUOOOZIOpatXv4+eAD0K3at3czk6BNCVdV8bZ+IEOigX6e7nCtvB+mRMOqpdhXkMuqJ2kW4jF7qf+culML+uDy4eluc+jbGbWBQXl7nTzSUEHHaeRWt0KVkVR9Cht66It9ao+WbpmH1zLeHmxnsJ5JokQO49MvSIcooJeCbYOZrRtmzB1MXW3eWsZwdY29Yv8hvgaen3b4LamrdaBc2MkU7Yx0+P33OXk44GY8cM1HFGNXcJrDWIm2sFK3wfHKahs0vFkndw3kFDl5/f57rhYkePQD8dQD92ri5DvX+2JBlnfn6eoBP1PYa6I/4VOfoJozzh6ASd93xBTjmfsvR0Ray22FQnV2Uy7jpTGnP0So7+zMfhn1Q16EeaBlKZOIEOyJWD259RjjEZOJ8scn6yEUF7Su1RQVzutvUqknHYOO9zM0enxrRGP4qme2W0+GcODg2uTs47Fb2bo8vTdbFMfOHE529yS18axe6L4erznXPwfaU5g7v5ijW5kN2m+CxLBHliZ02Uc45JRyuqudlunmH31kXORxbUW06Ou+qwdHP1deB82gpo6hb0HpsB6pluR/w+ezsW58i1z4Bz778U5zqP3gTMG3333CvgjXMgLtT3ommXLYvcmXE3MzfOj6NhviF29Cx0l7LQvccYX2hT9+ysU56Bbqyfv/uEk/6nQ4f24PfEzh871SSdIuxJ0F3+KZ3M09lLYI85J92JQ2xVrdHN0Kt2dB04/88cfTIGnW4e6tuzqN3t/CLOZwcOb9aOWsLRxyLMw0uQHL382ZXTzvmejPSx4hKdg4n3MUXusnOHnLrzwYxx7aMHzG2KNteod2zaaKS/FaA75fFCnVYO1Im5IOckyLOeLJUJwbsgF+uxliv7RuJBujcwTs4NczurustQ571yiN/J+fppYL5rJZrttRV30G+ftaU6EZ8B7njYZhpsvVGkB2svXidVWwi5OKlQyP7/n3BHh9o9es9ieMOcmrimjKOrYuagttcy0PtKHP2Hd9sanZwb6TUQjrzAyVnuTsapsqDPtx521K3rmAunaENdnPP5SB1dp9fSi3SBrrMrOIk6N9DfsCQCfSDiXPqtG7py7eJ8EpxT4d72Abh5zs4/VvLeIcxVIWMThOccHf2601ycK3Q/qiwcLb0WpCuZT8wZt8vQp6ac8HA5ZIUPorMB7c9uhD5x4cJnnq7jqfO1SLcyGcu3m6Uvfioxl5/7A88Kpa9qecHM2fORe4a6Em/+hKujG+bNjnndyuxY24IMdbuM4mXriXn9rkW7TCsXdGeo29rcUD99gBm4xkYl4n5ZS9SbOJHzdj+xis00oB5IJ+6I6fkTHfarJwA6UaenO+jB0/G8JunoKoxjwUxvCeiBc6biADpR/+OfTIb6vp0/RPgOzCU39DKgz2fHhzAZuRN5ide+x1vpYpxz1Y5efdb9mSiDe/5j5gj6klLQl+eScffEoLuf78/k94DTzrPluThHDm40YJ6AfYOtzSXfaGULwmtlR/8LdtTAuUlLdB+Yw3GWXAaAufaQhXPcqU6ftUaXoac/w3TljZsy0N/6OC7PMVHzbCLmeLffK6+JUu1hCHUG7ulD6PHy3H5YsZdzwjBXD52oL3dZSq6hfgGPuJmNrxwx0tvapq+4YvpWxO34F1dCu6iRIaTliDri9gOz47NAfb+h7pts5uiI4Im61ui8Tqo9u3oCqBNyYs5DSsN7oYlBL5tBY/geQLefNuUJ+LSjqzRudsgsfWEcuiMRp0X6n37kpJ8/ZL9B8IeAgvaKjo4eaKfS2fdYqQ8rU/9x6B7Vuitoh5vPWauWC3Rg3i9HF+cK3ZWDM8qVhEMn5ZN/mATmM50EOo36vXtZlSo5hgqvOy4NOjA/cGDfvj4cbK8B6/kFujJxuowOlHO1SNCpvebn9iLFjp4C/fMbTV+8cIFZd3N1R5x+Hki3Iljl4MR6aKp/TW6vKWwX696XpLXcUOd9FEXSDXX8usFPrOOkC9o2O8EKV+/N1upw9HW7PP0u1kcaUNccyuF+eQBLdft2g3/GwQydZXHovo9OznkyfTDIUG9X0B7+33dZ9E7xSdBzrG+4eXXC0f+Az35AtPSe4ka6IneE7nR06o93/wms/+pX5ur7YOoolZubo/vkNXIWv4eVeoQ6egy6bF28VwG6FbtXEbq/sBrM4egEfXlie+0Pse4C5qqEg5sragfl1v9AN6eZp3XvxPGOWCiIVj4OwyTQk0E7OD+QGXqQiuI6bID00i30bKMHAt7sUOvUP/hEwyzQ5eh5yjEvdtA/+PcLn3lcsHItzn2gGecriHns6OgSSU9AjilmHIO5ONHtfFvziajT02nszRiGOc+2gXKKrg5Ng3Orm9mNaTc5t7l+a1iqu6tb/E47h0oPtBRU9e52LtmWuj1Y/4pQijk5og4/l6dj4irNJmpvZ9fy2NH/MD5wR0/PsTsGxg/6IdXurAi2C6BTWeh+KITu4BwXv/8KpP/NAvh9e8zVL+nolHbZotCdSn7AhTOm6ixdoFfh6O8OZ1fmHLqvWr08t0YfDaDL0BW6q+JVi3MoI93kQftU2syJOXgGhZJOoEeengad9TGI2sH5HoJO2hW5Z9tqfHRQuCwqM3QMhu5crWfZds5y9PRnFdE8dP80QN900wNPwjubrpuYZ6buH0t9OhfnSdYVt7OlTq2VK4mLnTw0yOau7lj1vJjiO8WrKcj6rl78IWCgW/r91ptwN+I6J51q6Cl+Ofmwufqs1cplmIt0XidVG2E+jAZTd+FnqXJYgg6FKtj2gLrbubRjqLvto3J0mPn4/q29vViY9/Z2rT0I1McbuUrvbZotOdOSLdFP0NA9cIf+9re//e7MmC/VgXpQMuv+OFz8I0t3sUgOcsJJuelSdTNE/X+yvfaql8wrubdmrqCvXgLQm83SbTB0n2QmLtIkIjorkeGW2gBIVwpu0tfmKIPT2lx8c7Kgncn1FOYYfAs6ngb9uuv6XHvIeY0sXbUyJF2ba4Pc5cGgnWPy0dpamocT6PLzyNGpxW/bBH1+HjfQI0+noZfFHA29nKOrJI5dnBPz2NC980FPl6kXhRV4uHfGZjTX7pX1DQ46rqXYfeu/TDdZAG+ODrtv23rMTN183bLuaxEzH+ClcRJPrgFzaPCwGMdAK/5MB2nmBjmHiRl3n9lzrHf2d/fWf+KmL/6djn7wDwNHYN6hGO7Y7EGrgu11Q0cJLK+YQSfo2eYaHufPnLlvw3337r0X8cKZQ7ZWr/mhSE85Or5c/YQniHRrYPric2wJT3fEhfr/ztHjI2pzBR2ky9H7u3qShk5HVymckU4/p+jmwHy0QtB+74aUm/MBifOyoftvvnSwz6J2co6mlLswB+TaWas1zGkpO7JUHKbiUZb8Cr1VWffUCj3A/poX3gatoJf7UKE7b4966qpXllF8DL1S0l2YQ+UNXQ3dxOthSw+7rHTEA+5G+/3rURM/ZKG7LdT/7qBfWL+boC9sw5n1Ld1bcN0UQDfcs6xcTLrbenw35LB1V1a34MoI50+BpCt6Z1JO+bjO/qHeupHpT9z0wMPjZugz3XUS1uVrjfSe7t7eodrZELg76thIJ+jnDfJ7p/6Bj4idO3fuwQf/cd/ffndorGbPKUbuLINNgQ7NK0nJZbUzbJSIT8H+yNfo0By2117FDzI8EtA/uWR16fbaAXEeadI4J+TetDp3O7droiouzo26iHPVsoQGla+M+7ovzsE50nBS4NwGEnBkPLvOnb/TFDiq9BVTa25nLV6jJy9zB+avfufZP589e/bjRrp1eXkofcU9UeUwj3PuEG+ElKOnK2U4R5ALdQbuQr3kDnjumjvlvsGGFx5lRS5+PUBHAv7Cv1y3AvSV2Gj3G2h6RzwBD8aRgsMw1A+sjVBvdNQLvos+TMxFu1fJFAoMp9Scd1bFkfRg7QJ9R/9WQ/uKto8a6OMzvaK8HgM3TiB8n13beHjtnj3m5zZ0fM0xv+/OfwDxXlDOPxzu++PPf/47C+NPVHZ0WPrjLlqp09UjY48ozyXkBHm1jp5WEfSXxm7+mGpA91QcpmUGurbQE47uyfYBGvpkENfmPRUx37uhAMzFeezqKowLPQb9Lyhqhw6gWbrd/ByMsxvibLnFOd1cAuaM3Nk7ATalMF6hO4L31HGWJ7/zC9RP3li6NtfdMkq1Jzh35SlHz0nXR0Wkq/RVcXsAnRNBJ+rEPEadW2yGOc+rov4V1j4dQLf75KYN84b6kbDX5tG7H2c5uhauLtT1zWQvhwvBO7tNzMQVDHXG7kHDLJDj1lrQfVqqI3Tf2sybJW5G6L6/t4Txhf7Xz3WeNFNHsUwfQ3eC/jOrjTt16szeO83Ii/8hgv4D6L3v/bksPa51J+jgXME7umrk4m02ls2I9DDYHkno/uaynFMvWaq/Z9XJuJejbTEvN9D7M9CBdcrRtadGN6ehG+ZNFTHfsaG24OCNJVgvMXTpYtAdcwbue/Ag6FR+jR4USrTk6Dv2Qlqh4+6oWALdmlS8V+b6li8EvfM5ZuiK3LmzplR7WUePDJ1NlIvzxBK9Quguyol6bqHe7GdZnHTeMMVcvIF+RcN0MXS/YrqtjW6eaUHdVqBu8rK4A7ZUF+Ylt8w0AnSRrioZO6RaKHiGJLj5IH4vuJt7AI+OwRdMGehbGgjozB/+ek9PcGWMhT4g5OQQ3qF70l3ba8D83qkHw+ZbhvlCd3SA/v3v//zEiRC6JxwdmDvrRJ2ko4HwyNF1x1ROVUTt1SfjXjKvyr9pnIxbvcSDdvRlGeiTadBJuTWAriQcUnBe7bqsTK5970RtrcpXclLZa2nuPZGM+83pjPIDmPcocg9rdDk6hle5FzoC5uhUqIYj6qNe+8pid77B1D9kha8cunBCx9Cvxpfvgt58dXySBX3FKytzTtZzkMen0KM8XIJzAc43Re45CfQhnlZficU5MHfORxbhFwY6vu1wxU0O+t/9Pjm/aKpEI71hr63RjrWUot7umTjK/1gV6fDxsEAfdFd3zIfJebsfWytNwBN2ejpBHyqC/td79ncTVzR/uLpnDo7Dz2npBB2Y37ChFWYe8NYcgU7Uyzk6lumGelBYpwt15d3L7aST+P+mo7+UV7s+YtB7VsPRwwK9f9nmpozze9B94sNeJu8y4TssKoVTCk6cR2odRtCehlxn0PNuztB9QqCjPgY6baS7o8PN2WI/l6cTc/TSwF2LdLf0fB7Ofk3QyXmiyH0FOae2P/niTzE9XX5eORuXQz0Zugv10CTxLuRj1rlUl1j2up5uPmJbbgR907ZfrL/gnN9KN2fVe3B0R/3IDCtoDjvqsyF+L5Dx4q56xjnQDpibhDoxL0zY5RPk/F60iaKbO+1Mxm0l6L0AHcm4gTu6e0kvyeV7z+xZHEaXo+M++AmY+TkF+guzV4H+XoBeOeseonconGUzR2dGLjb0BOz/SeiehNynlz6narRj0MH5aiAOOzdDH+0JmbiANwdkoE962O7Cw918pjMftC8T89w4d8rL2rlS7npQBJ31MaCcy3OTQnZ0CmQ76Zm0rTsctMNj97A+x3DMxTkNnaCnttac9Zd8d3sJ6NfnGLe2WNn2CpG7KJejx7WvmKLq15h2OXra0FNZuQZg3s3LpFg9Y6Dfv+0THri3NeB62OaGXSshR12sWwW8J+WOOupYG+8j47zt2XRYJ9cO5zAX6u32xL9knINxcg456jq5ask4ge5XSeH34B3dGeZXAPNzIfs+exaGbjLKbxgestybAJcA+q9+4I7+q4zzE2nQDXMOch7id2XkyifkLotYr87RsXH8pXKO/sbnXSZVv0aXozNwRwPoNHS5+T0EHm+TzjkIR4fsL50U5int2NvBJLhA50vqgGruLCmDd4D+FyzOQfmsTe7o9tk2R92mmngX3YUkXMw5d9GNcDYL3DELdFMAPYW66cbbbvv9SXzcMsvGvbpa0BP3QlbYWxPmbJFIOSfCnhRJl6sPdfeuZKEcBEf32h8HfboBZ9ibm+sXWEFsztQxGnpAOnJyOLRqS3WgfiBsrIF0W6D7JZFA3aN2xPG58+h76fLo+MnSzck5JpB+X/GyGfK+t3+LVb6dm9pRMzvuqB88OHCst05iTq638+QszqO34HfEDYUdU6Bc/zp7+CVAZ+j+x699o5KjO+naZFNGTnfOSBWugAb0/7Vk3Esr3ytRDehbssC939fohjY6h6NO3A1zpeB4U3vFTPsEVubohLuio2Mi51JhEEcZO85+3b+wNQvEvUGGOQYgtyHIMR/1FToxDyt0DG2ukXIHfaoE9Huj0F2Ui3MWuW9qk6e/NH82FeOxa148l7Bdh1QJeppzKc05uk/aQE/D3py7Wgp7aovAeQB94wchd/Sbdu9qwPUTzW04rA7USx19AVJ0W4/gozxIydHU92lb3e2c22pGPlgOte02RDpQ50FVYm6E8+FiAt5Bxzw8ugXm3N1ZsFseTx8k6vjt1iuOMYh6oQYf2B9eNtRLzCm81p8T5yVr9BPbt3+Llp4E3aVVulCHSHq8SOcc7bI9shLYLz035eb6Jup/GrrD0R1zDHd0cO0dpesYmLzZGj23paab2tPC2lyQ8xG/i2+fqAItnarpG++jnZNy30KnodcodHcv9wnnWBi1xyv0HZZzxzDQnfjOyM8xEfRElTtJv3ajgf7nwPlPPkDQaecZ6EuedSk3x0QlrnhmjyFH90lSzJ5KxkldHIa5xK89CHQj/e//urBp3baVdUC9GajX5yy93tbuW7t7PQGP02sQ5llm5QbZrBP1WvvpsThOytJw7ZDsHB3Dw3fMMnWAjmRc97Lhwhno0KG+0yDdUV+bufpICe+9+NPLimJK3L6IuBzdt9cE+okT5UN35uPQc5tsRnqceifqaUOvvmAmGbp/QJj/p6C/3EEn6mg9A4zZCfckgaepe8hO+dq8P8n3suDnlmrn+rz4zElf4OObTN1qqrxjHN0HzNHBOTstHd3GRXF7EfNhzvmcuy/PWSsTB+6Y0OXo6FIwdIB+m4FO2Ua63BwNoK9efdUls+7o5bLuTLjHkbuKXxOcl8VctHOp3hvi92kk5bxAjqAHbbp/96KA+vTClSaz84W+4zZkO24Lerc2NfLOOMiycnuO2sWQjnnTYIa6l72Kc4HOD+QUhLpW6eCcOu7a2znaOWzvZ46DdKGOOwiPGOrKvsvCRblycOUc/UR50JeSdMIu1IuFMzrGlk7HEfHwqGaNrso4ufmT9Xf4T9fo4JzJOMvGQT2A2FPs3gx3X4zbL8La3DBf26krnFOamhqGnxPtnK2fKbtCj1Qw0ol6lotDp6GTcdta00F0d/QO/imhwF3ageaIu6N3qvhVdXEK3ZOG7sfQb/19CN3Ptrzx6QrcCTtAP9az+lllo/Y4cA+cK25PODqUjtwjR09CzjlfFcsbZoA5QRfp2/wGmmYIrn4FPH2lRe3L/Z4pi+GxWu890tSIpByasnLOeaMHUA66Xz0xnF+jozFUQ3IWSTliTs6tZ4yHZfow/kYB+jNEnUt1XEX9y67egLVW4aIcYl0NgY+TcXL08qE7SbfMO1ydpMvRMV3qkw4YbP9h6P7Gx5d38+or45ro6IY6HR1ME3MjOvAO4ZcuvOiDDDkn19uyqX6A7ojnrDzl6olS94IM3cClqxdj9z0HWBZH2F3cPs/+PlqhR44O2sk52mY4OpbmkSpl3a98h0fuDzno28/efNtt1yt0Z0eR+4d6IKEes445cXbNhxw9Yl01cTHllSAX6l3kPY86bohcFzn6xk338waaXri6LdUX2LcdWCdnmXcDfQR7bZ2NM7zVHaqZNVeno/vnko+aoxe8HC7HeSigMaLbZepGOjfTDXF4O+m2P6yLDs/4fazvYIb6ycYh7bUFrkM8L9qF+TkVzMwB9KW56F3LdAxirnV68gJoBe42qgddmFd/dqWyo2dZd1+jj/b3kGpveiHykLt5Uz95TmsZMO8H6GBch0uS6/MC0+zy9Q45eXE2tdfuyxz9ABy9jyv0+DjLUf+3F4KhR+tEP0/hjHPirF30VpbBco0eQQ7xAilE7mc96X72tvWbPn8j4I4/rLji7T2dQH1JMilHyoW5j7yjJyvifE4cWlNLr9CjXw4JdHQu1TeJc4C+zUAH6g3NW37a3IYQn5iD+LDPBtjrhnpwMpV3zDQd3QfSa7zOPVwnVXDrLtSW7K/tRSKOP0zfS7fs+14KbA87zsDc5XC3+6rLXh18R/3MztlxXjAzPtvI656ZjxPZBrkK6Co4OkhPZt1vAebolJFeUvWOpk+45JT+cAt61aCXYj7/v0S4HB2hO3NxvpHeZHRzcQ4LF/HOOdfmm/uFeYJycO6gO9emfKwuEXM5efzNpIxzhuNjcHVHHUbeV6yKE+duJIOHFblH5a8gXYVx8b0yqp6JQVdd3OJPW+R+klvoJ9s2bvz0667Mg44BrfpQ5zGYepyV08aaDUp2Hq3RK8fucTKu8vpcM1En51kB/LqipW8MoNs10CsXmKlDfjksb6NwTyfsdQ3HGhst7+Zp96MewBNzo3yQ6gDq/H/ewPZFVdHHYeqFDRMM3Cf8I6uOOWW/GvRbvxjRK4Kv6QPlpx31mS5Lvyk+17JdjHPiL4ug/5GgQwRdctAhgT6Pq3QVvc/LPF2Ms0ecP+LtNWG++LI56vlzB70Jjm6QQ/3LRpvAdGi5V3a/VwI4p0B3/EE5NNQF0H1tPmZol6zVY+rj2lfjuyDaA7Z4qd3Tx/OpGebsLg8Y24/iP9oYYY6uNTrtHFBPPYhnjLm215J3ub9uIwRDN539/fqNGz+rsN2fpvkWvq/5JEwdqMvV7S2+5jl9+yt62eMskvxcG2wVY/cwVEATUN+Uc/TvEPRFuy0rh802FNDQzqkFBr0F8HVd2QnVRqTczdUP1PDXxUiK1XCGOoP2jnayi8kJNlfH+4aCL8zvE+f2L9rfAD8qvJpEuqGOwyx09aFoVz3jHg6Pljm7vSkZB10C9KVL6emGuYsHXOTpRnocu1PJuyIfWej+kv+emwv0Rl+jcxPd5ib4OBfmjNT5xqX5ybVW1C7G00E71IWB0J2EY/K3SAVzdHF+saNzJuSEHTumWTKOy3OOMXLujt4uytmKnCNyV71MayvmSAI9snO0APqmHOhZ5M4HP6sI1NGe/uqmHkgJeGEeRe50dEXu3oG6ytwTW2tqnCp5OZp+PRSVxfpdUoFzgQ7SYeq7LAG/dSv22ujn2lXHXNe8uudwOM0C1PfA1S0ZryiKpJvIOeyclFP3Oupcs8PaJS7a7ScG2ZtY517b7OmM9LVN3VEJjXjnL4O7C3Q5ejp0v/zyx12uhBw8HaBLIWznrO+mp9bofD6Cgpm3vIRF7f8T0AG4dSbjmHRj3A7maehcm4d98yTrrfh7EPOpIQM9W52zly+KiwN4WTk5Z+d2WTsW5/D0fJU7KLdWyBb0pV/wxQgy0HW/TKiD1SFVdIEu1rVEfxtQWP/7DPTbNhF07aHbbJBDeDzn7UI9EbvPydFV/Vr5CinOSdb5IO+hKyvnX1uOQV+E5h3xOxPw2GsztqUFdsYNH3bpYfxeaEQKrsYLaLijGWIp+xFmbt6enWnJyYofhXme9B3DrVxmRbZ+aGysz0E/cBoH0ju7zwlzPkOXdHoNqgT6tIMOwdchBfAqhdXHW6LMe2ToVdfAznvja30f/Z3C/H8Aeg8oX5ax3qOledb5JOaqZI/V2drZ2U9NeaejownzWErFUQrfs0mBO4Wsbg0jd93lTg0e1c4axbg9f78J4V724Obk+txYv0WQy9EJuufcCfpJA125uMXolMHu31qbf/UnV0cJ+JSjg3M5emipayHT51gIPJRGXYT7NMRf5FCPQN+2mwLwKI4z1JmAZz6OsXs9MLei+N4FvVyqA3aMfVyqQyBdrh7q5JxYoe40O754zWTbIHxDOVPnZvw0ALpcXfvqO1tOs17SUK+TZOgM4THHybhLgr5Uju7Na+QUvQPznKWT9rLfW6xCj3vRa6+r/uyKRQ5zBL2pCaDL0T10x4i09nBnfwXMW4G5gT7UzyFHh+TpyR10EU+81WXqHEzA15TE7mMsuDbKCwr1tbmWSLrzY+h8k1oVuqMFylkrY4Og34bNNdNDt27a+PnXFTfVmHJ3MXg31Beverm7epyVizfS019RrVzoLtjZK0fvxH1Iv1ACvmE6Bbo+zIbb45oh22sLgbvvuP20oW7E76U4ho+ju5AINdRr3dGLp9KH/QfbMUjMY9GnN+wl5q7wit9No5s3e1myr+xLI/gQwPc56qN2KnVEWXf0ALdsnhdPmC4FOkiXpXOh/nSICfj5PMmGRvkLs3EYkoCvRvOfg2+iVg36nB29kaD7Lvoyq4yLGR+Am/eMTk0hARehzle6OUGXDPSozH0siTq6T7kcnBw9rwm6Ojgn5lTH0Q6u0F2Dye95Mm7PWopz1bqXGnre0X9/9mzLdrB+8taSyD3ifB5Jtz/+r397j2k5Uaejx9m4+EhL4pAqp2Tkrl55Kx3K3szXvYKGoK+PQAfiFEJ4oc5tdQPd3Xxrw4jn5BYgAd99rJGg29fXas3V25UFxaOQ/XiZibPOgV21DQS3vQDUd0jm6OE30yhYJ+oqneNifV+fu3oLCt0ZwDvtzMGR7lSt+88Fuu2wlQF9aW6L7emvWQWtWLXixhvx2wA/Y6EOyMve8c72qBFAP2ygd2WWHoNuQTvulegn0SQ9klMu0LsC6IWOAHptR0ph1xwPUc4XbqmRWrm5ZKgXMW/HKPh/juav8tfBOOlOxju1PtcaPRTMJOJ2gf7wQ9TDBJ2cE3OKkC8ONZNPuP7lx0oS8JgFOUfFSyfk57GbB8wvjTgg3+Ii7BgZ7c1J0HX1+yJrfrql6OpeDQv1Oufsvq3Oq5/bvbQJ8bs+x1QIa3TUyu3NB+4bOmyB7gCjfiYH+vAwfjN1DVnRbj9JR9+bgZ5F8GNje/q+3nd6J46uzdZuflDrdOXa6fEK3Q303337ewT9BMbdCdAhA31p0dFXrFr1Atc73nHttasAOwogJX1hVZCH/mji/LLXNDbOzPganZ4egz4w4NfHTC2L3FyePhowP5aF7kXQlXVXAB9vrUHuxkkVFIoTXfLrp59rjkr+t/BCG4yicoZOzt3WsbdG4FM76bfEn1tTMm7Txk+87+H3ud76iU2ff51W56Icw5rqo1e8+uX4Xp2jrla6iZ7YR1fozlmsS3NKvANs5/zIkSNb0bbQ1rlWN9pj0Nd9R6Qv0hfULQHvpAvzEUOc9TNWQdPUWLx5whLw+2rJOTHnjilU4ucTwBzb5Vyf0+vDTwA76wZ6V/e5Xkioeyq+GL93HPcAvsUvl9mzp9Dfqwy8rpySALpz/rtvV3Z0kwwdes6KVS9403ve8+H3f/hNb3rTC15w7bU33mikz48K3stUvFev/9Ua/erGxkY4Okg3U0e1C0EX542bR/tJOFGP9tPWrNncGXTE/Fyg6/ooXf8qyvlIXTihlbkMvZ1HJlhnOdw03Ll5R1Oh1hhHN9ALCttl5znUGbT7XXFy9HytO3rO0YU59LpNmz768EMPB9A/+9gr844uQ59vpk7SISTgHfWruMEmR2cX4rRzDEl+LtRVJzOHKvetW7YAcGgrGmDfqvh9qAvDlugC3a6QhJfT0WnoJJ17bZDtq2ubjR0xvFXA+17boKPOrBzg5g9SN08wJwfMC4a5cc4fhFG8gW9cZAF0HDt11B8c6rfFuv3siLpS8GOHdva1OOlAfepBGbpeshHW6L/7HSvjKjo67Fyx+3Nes+oF73nPe97vA6y/49obnwrQo6IZSY7+fwJ9zo4OAXQu0NEMdHQMmPnamU7umwNzkp2jfcmaxZetctApN/SuIYFe/rqJGPRBxvFS2F6jrFTKnxuGgfne0VH8AzqbCoUQvNPRSxf1Ufmr5eJo6Ba5pzNxdHQZeo7zKw30a06c/72D/tEPB84dczLOPt8jd4rPq2HqPTN3OOo5R8eITqNHl8soei9r6Bxl4nYj3ACnoR/B69Yu8/NmO6hijh+BjgqaBTitTks34sE5uy3Vt9gfG811JN0pH2EFDUy9y0k3Cx8cNtT37BvrYJVMCKnai6jjXItjzsQbRafPZvyMjmRHVzLUR7lPwqyc0nJAHZS7q5/a0zTVq0skFbVrje6OfuKSjk7Si6yvMNDfZXrPu97/nvcb6VcKczf0xCG2R9kK3Rx9Bum4UZBO1D10z7qfRJ0S5j5JS255Kv4GOdAphe7iOyWdS5UmaOgObWg54U/+VsMc2jzcCNTbLRsXDB0th7lYVwVsKnBv1aGWtKVjZfb5W9/6uT+eAOimJ+TzcBIz7paeRQ9aY6jf4Ql4Yc6ex5wNPfZ0Ie4TMa98QtU5N7xJO5rx7kv1oeYhnDzFIw96Q7eXxe7eBsQpt3Rr0EjDkFk6luo84YLhT8u+T7cdQQFNrYXvdp0USpvOzu7rsJMpOr026Kib04NTpuCNc4qL8A3A335KmzuPAXRX7zkF8BHqzMrtCZ9kOlUz3H3Ow/aFEe0K3efi6AzeI9Apku6WLtS9R4zz8Wgi/erD+x10YM7eFOzcMJ8C3OykXZpasubKy0xp0FnrLtATGTmVyUSwD2rkt9Hh5ha0u51To52NhczRFbozHxcH7iYn3JfoeOGkmyGtw9ETGXeCPu8zb33fNeevyVbpl9PQTXgIc4JunBdJf4KN6xHA41u0q5+Vc/Q45x5Trox7mXsnoDTpXJuDbZvRgDkme0CWkYOpA/XpjTnQWRY7DdQNctbNZKw76r3NIN2+t5xtqmdlcg1YvFuwwJ+GH2np2OcJ+GGATplZ8z4pvxkunFwz0m1wdW6yNyR8ttYtGOG2mXl6b2//KAP44lIdRfKujkOHThnp0J4bhqeUltNRl7yj8/RaenvNKaejYwTQP0zSifr737EKls7EOznXBltUG/eoWqPjK5kAnaXuU3B0A/2JwJzXx7ihE3WpFX/1lhvxD4hBzwhU6J4M3HWcxWc2icYcnkLX1NSEjIFk2y9WSo0DFH4SLpe2y5Nu++gkvb+blm5TLIGu2leB/r73PfwwOHc9yTl3V49keC+26F2Obqeal17/co/f3dXLVLvL0IW5T6nz6GopzM3GSThe6OUeudvTUfdy2Ob1pYfX1qsCHkv1bb5MxyDn7HVDvIJm2jj3DqO3HbctuCR6gSXgDx/tYHzl59rGJvQjIOodCNuJuZOeSaR7Ug6gN4/YyoCsmqkPGemqliuxdUvLAXTXqRvg6nWxFiZAP1EedAxiTr1mzZtKQIelX2vpOB1LT10/8ejbXrvaPoxrjr4slMAyaIdxgvyQc+MkfQhBO1UpdGemPb1E54eSMV3EeJxXI+d09E64eazNTYMFLtHL3jrhlAfSU2Xu+szimnzxawQ6RdB1Yk2Mo9PUMQVHf4J1K6S8/NUw9Rk716YVejp0lwLpqUOqCt2TnINqhu6OvDk6nR0NM0wdqLcxct9ETU+ZQLqjjqoZiCk5Um6CfauCxsQyOd5MgaxcV09joSP78XXUIEl2lD8Bay6sz1Hlzl+Ic4qLdKRNNxdBH6E39y5fbj9qos4UPFYFNHWW0PCLTD8D6nv/wTNtiWOqcwGdi/SlkaUDcVm6YneaOTGPY/dHFecO+kxYoxN0YN6zuXXZ1JTZOVsOc7j5ZVRl0OXoMesinLusEevRmZbDGb3AHJzHpOOvbB401BW3i3ORjsHIHXZhwCcKZjAEugw9DfoLQ8o9gfo8cS5Lfxx09dt7PH6/CpRTAl2kX0x5+YMtacw9QAfXxjfT7ngj8lscdqgLypboG2+9te1WfLKl7WPQnUPdRdRZ+E7QffidM/UZ6vVwdPuAE8J5q5Pjih23NTbZH+KelbO1+mxNezD0cJ0U7vxEVs4w9x5Ap+lDw010dNOCEUO9Af+jrObSbB0/J5m6V9dN0NX56bUf/uzUDa1WLKfKGXQDfU6OTksn6QKdlr4tI13pOIqso5Nyzo+2dNzVR0F6ozt6WKPPAKhlo/0APLWttuxDJZjPLRnHOf1tRVMuehfkSsVlmPcnKOe8w3O6udg9dxTdG02j9cFlO4Yjzlv1eE3O0DEofHwpD/pnmG7nkMI+OkZujR7qpn2p7gl4MJ78LnoucnfFt8vkm1AX5xneUIa6B++2n44XOrpBX0y63/qxj7URdGjKwnd+7YGUa6MtXPhut8UC9YZ67KzbKqDBoGT+HcNRx8UTtfYTOLoP9SyD9HQWynVMZHGbIZ4Nd+jhkJ4z0gm6b9jjT5blQByX3kHdZus7KFus83oKujpAd+ETi3c66hdl3X83R0fPr9J9g02W/mGm4+bn1+jQozrtbqDPBNDh61OdPWQckxDPeIfFf3LVZVJl0POI15a/+lXqCNdNsBeFUG9zf1qEvXXHoA6pJrfXzNBZ6J6K3Vs5Wj+yImXozLrnQQ/r8zjnHlgH7EI9kG6ov/wOD+CvyvwcU/nQPb4ZUrSXdfUuC9uBMVH39xC0+8BfcNRNwdGNcITuAh1QGerrgbpVzhBzH056KItF1D60ZYj3yTnonHBPc1MjUHZTH4Sp7xnzs+jZZxf91ij7k2CCZ9XCFbB7bV+dkVVnz7Hmuuxw7ML6abuNvsGuczbSh7pGhbr/cIU6PrII4cPoNxwX6tWCznScgndZOvX+D8PSF8c7bHF13P8rdn/MnEN3Orqn4iAnfMq4lpWHeerOW258/mVzBH2UoIep3DY6JFcPxerxSfThHYjZ05R7M23utFukxHpc6U7UucDjI9K9RvpHksUyMHSMz5Dw7DEPoLNJfkz1sYtZNCPMrfMwlCnLytHVo/01KIV6uVycmjB3lDEINTr9GzPaVghPrtiN9E98wkD/J/hG7D4t0HsxmIAH6ln0LvlqvLmZf1jQzTkH4ke6Nzd64qRg8fsYluo1LKDBj9aQdjhtM9Uxn9hgnNpfDyeGN6NsGF+SwD/pimnHPNwHWe97bUA9lMtlq4LicRd8H90/kH7i/AahvtBDd6uXOXPm1NmzP7s06FHifc2buEq/30lXOo7SUj1w/mh0dFzSDUd3xKeAcoY7K2MUuxvmU59cFWOezroTvuHaSmdZ2BLSYRZOBWFuZT1pMQG/t6kgO8eQnxvqCNghFroL8+hI+i25WhmBjhaB/gSAHgs/fHA+H13XD5XE7uhEHWWxdxB12ro4j3fXEkfSE19LFuY0cuLtLENMw/HNODfks/KZ5o/etNHW6OB72rJxBJ2Wjk7UYerfoaejF8P3kTrstXlUUL+SmGe4k/jeHiO93RbjdPXZfWNZpURYibutTwD5AiB3/Is/CSTjjtg/2zCH6v34DNVbX8cAvrWIuv8di65+/vzd5++2T6Sfv89Ql6MT9IcefugUKKcSoD8pQ103zWSWrtjdimYYuycrZh6la3T/TOboKEE3qJ1zE2kP6n8WMa/s6CKdoKdRR9NHVPkSb6OjoTvnraMR0WVRb93RJM4xSzvC+bUdD06lMu538vmR/BJdJ1rQn58R/iQ+l8rPxbnPDNy1SAflZumluvztM5aV61lyFSmPLp4Q7KT8DYnAPXFQFZgHEWwJgBNvN3ku1/HedtMFkO6gt01nwfsyUo5hMtxehiK5EL8HS0fH1XFbtngFDfiWsgKaZtTKwcI73NSHx2bPzs6O2U912HbVKMBtpg/IIZp7li+Bo2+tq5+GGmDhI1mkMEJmSTp+2iU1NMMlqJ8H6qY/AfXwzUWB/vu3PvDwNefp6OUr4zCBcqXj1tDRqfd8GJa+OLp84mLKH11p9wz0LHDnQ3WuqpL55BpiXhF0oUjQyXjZL6L7I1cHG1rAHbButlS7ANc751E9uK0+nArd3dBp41O8zSC5v3bnh1YI8ryfI3p/RhazE/QnCfIc6mjm7Fqjy9AZvHPxdz1RX73kKgXvicNrgh0dwCdjdy3ORTk923rxXel3dHsD6B+9cOEm8o3YHTWwGegNmamHBDy8nOG7daHu91JssQT8iJJxmKe9gKa7t79pMFwo1TEGU+8bG9TpNUzcCZ+wZvl3tMzRcefekV2LFtRbpF4X/gDhtrpQH/W0XDjvQldnAh6gO+l/+tvfDHWt0Q30By488L7fA/VyofuTVBwnS1+DHTY5umJ3nVRNFME+2tboDno/GGe1q6HON2vE/apbiHmVjs5t9CTqdPWUiDjmxOK8srFzqT4cn2jJzkETbwvdc0v0e7WH3prbRS8VMC+CniXlXhgScc8PjKPz6fd/5xbpYL0YuBP1yy+//uVNIH2mB2hTwj1mXZauRFyO8iV086S2ytQV1uMXhvq/2Tv/0DqvOoy76gSpctNI4527oLdWUCFYRwPKJCIXFWaL7ajWttQGy5gOcZ3QidZV5iyIUvtPAt2fk5BLBiJNCLbD22pcRlX8CZ22OGdRAwo2oF3UgeDzfJ/33Oe+p2/S1nZdiD7nfc/7NmlWbfPJ8z3f8z3ntA7+61//euFwgD5P0AcZurfIuF1dqNvTg/Rhss6heueYDnGqdR2dBTTaPbaWsnJMwmmoDkc36z64AZxL+nc5StCnp4cAdGO+31vWOYIn6BRdXaQbdcbv5PwXf/rZn/751z/8g6gnR38coL9weadQrwBdmNvRSTotvUS6ymCzEXpG+cqbR+cYfSMlwGHnRlyPN92latdrd3Q2OnoO+Nu9lCWXJtS8kRRT7U8cNdbu4sqRt8MfPaOjFTNHF+ZOxGUTbCVDJ+a8yo6+tphX2/C1eG5Kkbtpvz05ulB3FWx4etfSefFb6QPvA+lMwOeOrm6Z/SFNerwac2MttBmk2+eVqAvcRXxr579I+pHPQSMcpI98+fszk51WcSijUR+Z3zs0XV+QpzsnJ9RVFtvHXw1xA5odrdHOlMicnZwD6hqePfvs63E4ZmHq9G9yLdRNelECG6DX+2npzfnIyiVbF+dNFNDQA5iVS5vQZK5OR//Od372+9///Q9w9RcBOqbR//p6gv7Ny5fh6hiqLzFG31DMpLNBsvR7P19Uwj7wAFaxaZDeNXT25WTcygzdHbULdC8+RwpOQfv1OjpBr5CH5znr9vF4YdBebd3Vcbze9GFOu3genTeFcTpn1y6K8ZKjo0FftKFrCt2g09I3FKDfIdBvN+YWMI8y6JCO95Cj82x93GHo4en8fgLqv1IAbz/nbfl09GXK3dsVdn6uAN2Uy9VNPrkH6NTl0MGvHJgfvHixw9UuOqxNmCdX70f4btJP4JJmG8UhrKigacSUW7PhUfvi5NG7VRbF6pbH4eqYVnMFbKp4efuz9nT889wN0Ps1Qm805ntRn52tzTab2CEH9TPY3ZK+PrFxsj0xEZNtvWm5X/wJ+hn09b8igI+Cmd98SqBDl3f++3efWiYZR8h9bMs7tm4l6hTWpmMmfeuDd5Ty7hW17itueu3s7gD9Ii6BLsaF+Zvt5tft6JV5OD2q59E9vQY3LxC2g5ttSz/W9RKdHkLdhq4xeqx/xH5xlGm3pz/c9XO2jHODvv6r8XwVQ/dNRlwtsu64yTmao/cseIdpUK8F6krAF5k4N0uhe8J8SwH6FrRwc4jgnkrT47m5i/D05M0xO34r6Lz8L0m8j7SarUkUpzQ7eAp1tF7UvcYlSEdTVq4j1In5aOxMYaECfiJQfzv2gdRc2+Mao7PD7jIQ03KfA+ph9MT/nXefbxJziX+2f7D0NVvNJk+AnkJkT9QHp1CZO7lxQqTrZwdJ/ztA/87PqN/89ft/+TtBl6OD6gL1y1VjdAmQsxWj9Hd8EKjv2nUXab8Xhu7Q/baUdV/ZC1XD0S+hUEZjdKp4BPu77rnqXlTbDXrCMJ6nTbnlTV9zzJ2BC8yPCl7/3MC7IvN4xC8Rt+HyVLpIF/sYq5eXo3vLODwZIWaUw9C3gnGqFLYb9NekIvdIx33tq47ab0cn2Em6XD0bpQNzx+4xRi+cY+0HZOoK4CuLYJ2MQyskyLeEnZvqIgsn5S/q/buhK0DvkO+WOsAdrBt1npw+3RO9G2auVm9Ro1zcoiDbs+pA/Z1RFvssy2Zej6H6cRW64/yG46ScATdMPVw9JkfeeenJzlSP+FNGf2I/J9wmcWsZK1BvtU7UoRPNNoqbKfQF6v8sQP/h33/zmx9yjP5LgR5CAL/zcpWjK3Z30l2o8zTtrdR+7ijFZFza97licm3FrWkR6K9HwYyksD16cP9+u/nyoJ+3o89159E9tVa5k3u+KaT11BNFDYydvMu26CfJ0MQEL+IeTt7T8aufcOweoIvyicLa/8CrpIfX5bUytvRQGPmrMX9+Z7yJcvFtRzfmRl2ObkOnUXAQKP+48xMngfolxu/pNFWzvqXAnZ5uydJxt0dL8Jp2v6Mz8E7K8zEq0F94IYHeGe10WtrwHeEx69HQpnBLSLMdGJahazc5tkJTcHWqKKCxaryxMcVTmlXH3z6m1YU6K2XSxBqNHT8IIPy7nH7nMyc7YBitUEOon0A4HxpADTy1yHxdfTw2qB5abM+B9dMKFZ6DwtSD9B/+8Nu4DLq1jKNr6zjPmED8HnlQG8e5NK6K9ZW2qqUAfa63UAZXYK6i9utx9CSyJkfHZS1fJ4NGnT6zXTgzp4qOJs6nES7sfIINF0CX4odDj6t3SadIN3T0xUjTUkZdxytWFr+uTw36WoCOFNyrBLoMHW1N3MnQ4xbsJUf3twslzqG1TMAXqOd7TyTawXQydVxFwUwpB2e6/SKo/SG/lh394EGBvnNHB5+AnbdIOX2TF/iWpXeKBLxS72imXKjH/4ZIwGcHPrBmdsfdd2uPGe7pxXVtrJ/RRjM+XZGosyD2nb9+5mQwnrl6A5zjJTL6CBSSpgn6OLrpWnMuXL04zomo/12k09AB+o+uArpn10i6Hd3nOFAI4taUi93LgK/IZapnvyVHD8RTd1FrV64ZdFm6IHfoXpmJ8wQ6+6RnxTpzcF33TkF5PNURez5o52x4zBWeLqWgfiY+hB/vaUdCpWYJurw983ME7kvNrLGFNgt0WHogz7E4Hd1Ru14KyrPoXYtVQ8rninOhvjaycpcC9aJRJh2eDsYt4i7ObdaaK18C73P+eYBev0qOfviwQcdv4FnqxBytNWnOIZLemp/vo6V7Qr3gfbbJ/7iycp4O66biR49NyNSxHSyoxrQ6tqB5DoeuWZF+h/7y7FOvJ+hEnbddXcN2LJWDvFy9f3p8LLa15Lb0izPxL40OKlAn6BBBfx1Bf+GFa3B0V7u/Rpc59+lMVsnSV+Qy1Z/8ZDdAd0EcMR889Ab+j7xeRxeN4lGgZ5SX8NarOSfpWrtCUtGC2dQk8BuYy82jJ+wm3J30hDeX8VlMXUu3NLPmEbrH6Ab9TuK9gaC/im9b9z2Y2EZLtIfu6JKeQndhjsuxO8bpG8Q54/eHnIAn5flUOkN3sY6OV2vpWXPDX5LWtFgEPQA/cuSFFLrrw60WQW8RdQmsW0D5wAkvZmOn41tGRyOTP9oi6lZsEh1F9hM0ddW9Pv44y2Jfp1x7d27tL8D8c7iPv/7syQ4g5wW2S2o4LYdZdbDed2J6bOzpp4N0aCCWITMHoAieqP+Gjm7QrxK6K+uuavcUuUctBDtCTsx1JcZzzldi6P6TswAdZe4pbMfbw167cv2OrrDbq9csY14Vwb89yuBSqs1iOC5w7dcanqMvmnzegOs1rH+7UDfp6hW528/fpQE6ekPuZJz01Ui2E/Sw9JGx+/aR7U1iPXq1COvQodnROUbHLdjt6IE6rrV3fuDuX50k6hU7ShHyYD3l49oEZ2m51D1PwVWA/kIOemwhGXautFcLoMPZpQ7UUrFcfThKZ4a5Rj0WsrF6nmtdtNuUpJNd0sxecnWeoYpiOQTwZ3AMk0Uy8amnCHpRby9Xt5qNlAfUznV9/UOgHCq6xYn41xXpCXXl4q4OemboSdxRoEfh5j5TNbTyC2a+9ZPdu+cC8eJ+a4b5dUyvOdIW6NWZOB/cYD3FVLtRxi12NSbnxRaWLszNOS8Qzc+ZdSk+DNQprWWZ0Dy6Gc/9XM2Ysy+0oQAdRIP5nUfwffXA/jXdwbkNHd8ECXUZAM0A6s3GQbQNOTo6ov4JLHYR6rmjb0mYh7S9q8fhKXLHi5Nt6jITz0EX34zglXX3zwTm5GjrTUqRfFedWHDi0vfEcquDHWGaCP2Lk11U9R57TqdZ/aM8ehERNRpidaJ+/AxItxhuh6MH5tFRpl3TfL1nOdefBt9UPAfaKozlPB31l79wnh4LVOnoP3rd7n9fk6Nv4LGqTsaFp9vPI3BH711mVvw+sHR0gE4nV6b9TV67ct2gF3DOEK+K1WuiPIvaPaM2V5bTcKY2UI5heTQbuz8t3uXm6SMasMnL/3FxOxdPGHX8wpxnfg7GcfGmXiXQMX++777DO3ce3otvrPpnH1xDxN3Z0nnd3jNEhzM4eke2xyLm1OZP310Uy3mD9y3J0ruObsYBuIkPyP2+ZAzvlWytAP3wSPOgQfdUXacTfk7gQ+ac6boWTFvD9Np8YI5d4xSwDzTJdFTAM2oPKw/I4545ClfXnBpYPK4EvBgXl/wUHP0Ssu6knH00WzpRj1GDOCfopBy+zntg8Gha2kbU5eoRv/8QoP/gdZ88cuQg5tGXdnRn3S06OjEn58nRq8fnYnwlVsZ9i6H790PG/L8EnXQFYwLdhOeo535+N2bU0pea8/Bvj831Ak2QdT54d/Pu6PVk46V3XDB1oQ5NZEP07X/oLYhTy1NxSQH6GmA+Nja/8zOfmY/vr/q969aI8bKjq3mUjlvjdDs6lEinqRt1rmsrBe9w9BS8DwoZw56vUrOVi2nLv0d960iA3mriCb0A0L1hBX8QhKkTdz7s6ceAeqdJ0x4a4hHK/LJO03UyKICHRqhWR5izoOfUqN6wyx9M/fHIygl1pd7FOaCko1/S8FyI4yV1iBkaXNeGLAFhh/rrgThRF+htby6HgUFKyxH15z61e+LFxaEDh4X68tNrkBydDawnR0dbUxm7r1nZoftZgL4ddo6CmTex2vUGQFeQLU836HnOXbelNWopEnDoTkzRUyJZH5lQEk6XmtPu6Pli5FN31KY+Qc7l6tAXaed29KzGXZyXQN//2emnx6dPHEHsPj4Wum9/TKqyg9iTcfWlqfTeNeloxjw8XboTFfDKypWz7miRjGun6TH3DtFt2nb7hHUV8gH4kWMdPj1Gt+uPaiZdQ3U9k6lDNG1hPopyuNoJa7ZBV4eXn+r+jz2lHk1ZOU6bx2Sa5toQyD8BzEk5LP30boTuie1JT6g3Gn0ouT8RqB8YjsR/re9AXWYujWH7+ZnuchdIA3ah/tzn2swe1scOfOVgIt2gP1IqmHFlnFi3oxeBe4+hm3NTvrIid4buBJ0T5++xm1836MrG0XfTRDdBV+BuUzfkLpKJtStzxpnhdmKVT706HFeynQ90nkk32abdLb5we4zS53Q4ujhHebsxN+flyN362s7LO78Re57T0ncePIAXmjqyckq26xbrOjFfS1u8GaxQ98oWW3pi/U4k4AF6FMslzFPBOzk33XTeQDpfwWKJdzu9NpIz6JGL6xxDCE/hLauWbx/j7Lko5+3wnaxz2Vok31qNE5m0glWSj4eh640B/GkUwsHVmXZ/9nigzv2kipOaTp9l6F6M0nEJ9SZK3qcpHPHa0OrZoX4gPy7EpbHaALebSutdJLE+sfHFRWC+MM6fCge+YlOvrHXXv5An0vlvKM4FesY620reYeZd4ehzKGqXm9+Qoyc0Hbobc1ylsjiXwfmr+LQ96y2eduxscK6OdbABuyJ1N2jGHyHpE3MvxkJV7TPxMDeaeFd1Jk4y6ZxV+8ojjwyP1QPv+uHLX9mLOg1lgcY/u0cRXPJ0+blYF+khcp5IV3lcYenmnPH7o28R6pxWt4j8ILlhcwBu2cGl6k/qB4RADx8HqZft6P7derQcvlPJ0oP0Y2ijrHpNK9Qtbjbl7AEb3ZwS7e2J05hIO07U6epcwsrjVVVAA9BPDjQKP3fUfqLOCjiIrg7UqWYDjl4CnYWxIB3qLliHiHmNbj5dmP/Y/GHNpxv0odI8eqp0V9PUmiJ3Y068jfmaFVwZd9trPvDG3a+/uPEuFLXfMOiicUZ2StCry+Kik5vffXo7MQ2GjTqfsnVRGk+9pBoZNBFe5OIS5nqKcT0LQ5cQuHd/ygNzQM6rRHqOuDl/8N4v4cDROtim9n7pSwsL2FENAunTw5+9R35OEXCxTrlgxsG7h+g56nfC0+/c/Il3FqiDblxojNth7G2H7Q6zMwv3Gzo9c6m4pQv6QTu6lUjXUD1hjosS5xyBd5pcW8aWl8o5iS/O+YgrvL09M3GaqB8n6se/97e/Yaxe7DND0LHxRAn1Rq0+Dc7Z8R460WABDT5+YOwK0BengHrh6rL1iY1Ti/hfN1zv+c0LjxzOQN/l0F1ZFDt6yrMkR8dlJcwN+IoL3aE7PvrwIRa13zjopougX3lYso1cU2xwc0hsikeRaSOfiRd06SMC3NNrwj0+mQ3NedvicUUeD7uXMB2XMAflGea88tA9ps7X3XvfGJZsj8nEx8cX8IuFemy9EpUaTw/fu36NZEN3Pq68Lj3pitl0o/5p5t+Bep58H2wlV7RcGVeWP+a43aYv0HciX9Y6bEfPMDfqkkCXZOnt1khfBea1ZiTpTiXQ7e2AnqP/gdpi54nTiNa1gI21ct87Tnsn6LtPzgJoTNalMplZ/kVHmWsdjRfi9/hMfwZ6X1ECPwnSA3UGbzOTiyzmm9Zw3qgf7AX9bR99dTntLsbVnIpzMq40ubbC93u+QeVZd5vo6ePVW0JCenCrdiFox03Rt43YxEqqiFNL71b6Gkh4p19ZnUn8jN/4xRxzk96birOb77tvfO8jhw8eFub1+l7awVdiL2ReIH9sug9ZOckRvDC/3ZYuU5eji3RbukmHPvCWZ+TqW+jpUfHODqbeTvPl2fSaumpVxfTB92HSfcSO7s9bwDJQdxCvfNwo+8lWTLUF5uxcJzMKt+8U02v0dI840lLWqZkJjMyxVTezcI9HAh6G3gV9GmNwVus0ZmNwLsgJOzq84k+B1+eOXusfkHCMU1FdNcOooFGb5jx7GfW9X0ECHg2gH972sDinocvR0UkK3IN0OboxT7Cv8Kz7TQUdUBnVpyo49xJVYE47d4he+tpyCG5YPaWmK0A35Poq/7JSL744txE5uBBgzx29pIT5+v334VsiBrKPPB2HjM4r2J2vh6YJP1F/YGsXc6fdcfXIiXfdit7X2tJJemjzQ0Sd8XuBOju8ov61Xc2vo/TlYT+XgT46YtCXQt3xe/Qeqas+ptGfyt5rLG6fT/tJ8QxWSFYucVDf/YEwtfH0555Km8wA9eMEHVn3S7NAOQbj4doxRppWQ/yOjtJeUwsZ6LVZkx7qTKagQDPuJTEB/wLXrH7tfv7928/RcMnNNUYn56nO3cG7V6Ov6GzcTXV04Sp0T5c4h0ppuMDc89+2YGMt0ssflJlDgbseVga4I3dJybmZx+5ad4fsHFdm6OWdXxPmcPM6fvTvRKL98CPTcXbJIwdDR5qNvj7O2OCD1NPT9+3PoveQLR3fN4reZeq4yLkoR7OjC/VPoywWi1082bYlqt0HB10YF1dRGWctteeMZNAvB90jO5cC3R8g6pJo73RAOlkf7ajqtZb8PDAf7RSuPcsEvDCPgQDwd3zPpN3MmdMxrRZ1cVh9REcH6MQcVx9Mm7Np4Ds0DcrRoQ1jORsBxkET4wY91s6J9UZLlFNY11rrrwH10FiG+uWdO7+2FpTz8jGLZF2kw9JzR2cnlUE37Cvq2OSb7OhWGqOjXVErwxk1Kyd0uU85YvcI/Ro1BwHzwchHbFpnR7dEuTHHBc73fHb86WlUhhyYHwk1efw/AsT+vkZDeV+IO48L9+HPP3ibQY9Gynsr5Eqr2Li6JS1Nz4J3uTrH6phro6nL02HwYD0zdfV+sbLfpNugj8TbZwS63T6TSuVMuqL3AF3Z93D14ToLWJKbOwHfbKWtrIi5d3+XFhnAQ9hjBhLouwE6zbsfMDdqNZK+16Ye2bgD2mqKpIP1A3vHhHDaMRapPOYWCszB+YkadGI8x5y/fs/mzZvXQinhnh2zSEOXo4efp+RLvhh9zQpPxt3MMXoOugtleMUTObgJg2uSr1kTBv7aOPcfAczX3bZn3ysgmjoN3YF7xZkNHJx/fvjpMQA8rlkdfPfsgEZasPLa0DDMvMZR5JROBOnnOcL1++5a30M6xIr3Xk/3wnSP0l30XiKdWblnALoS8AQ98u+EXYcpWp44W27E7g8q2X6wpbRcF/RRXVVfSNQ1oZ4aTD2hTlfnDpHCvDNQ2nwCFfAxSsdyd2HuVay8FyefOI3wvSA9knFfmC1gRrYdmkWUcKCu4XkYfb8wdwF8wfp0cdojRw9NUi43p2q8hxy6W2O71lLOxGmMztupOGGOO6VZ81NaVvK+Ey+1o5v06CDs52+wr1N50h3tekCfGYy9NPbsRyfUs1xceQcpzagNj00vLIzXOammxNtwc8eOJ8/v2DFI15qKwzoLzPsa/fQMGPvH95WWtyBNa0fniM+qzryb9M1oD336GYzVeeAyh+jo5OlA/VjbGXX7dSXY/n3n7Og7NUSHDHqWpc+m2krxe2lCHRcLaEb09wKcTfqQUFdZ7bw/btWaEyT9uc9hfXrX0ffOE/Ohumpk+ujqeI9NJvYWmFuMrmj7xcK2/iZUcJ4Y58XK+ApP/3jE7b2LVF0UBwXmCfW0XsmYx2PlT6/dREdfAnRhzpuY34A0h+52XZH7xscezGoI7lgnR8/Wp4p0YL6OVe3jVD06HWOAzQlxuji3ZFQs2ygOFcBovT8snSs4H3iw6+kQQE+L2Ci5RBG8C3VcNvU8fN+MBDxRp6sTczSItPvUhuWU02/QBbe2oNC7F5pVa7RAXZ1Y13Q6bqDOVDswF98lNeJP0ro2Ey7Dnx9p4+yNiN/PnJGjN+DZyPCFhYeHnyDK/XwbZjw/lasRnMcWV7R7Vdkoahfmemo4n+kBgl69RjVyccacoXtWA5sYt1bgSS03Dvr2qzm683FxjtqNcc7Ote7X4eY4B7b7176p+7J+qUMVee1/YHqM0zlMpwNzawhHfDalFLY3GuAcoXvE7sVQ3YXvrpqJ7xnIfh6FM96EIhrl2B2kMwHPrNyTg1si897FfbA1apY9Wa2n3/2Wgc5cHGXQM4l7dVIb6a1sqI6rFTm5Dr8gCmgq1NRwQkerZztT8FOdjWeC9TNMxn1hsMBcG8KFakR97zDj+WLFSyZ8AhXwNdt9o4dyjNvRTozZz62H5egiXYXutnSm3C3NoKPZz3mXKF+BZ6/dPNDPVzu69BxAfztzcDeoLuK4r5Xz7VwV13tA5D33+h9gTaBuNzfr+x/Az/5xusk4eKeZ+w7VQDcFyo05PaoINg8lS/deMz5E2aWwYt0Vci6R62Ed+vSlkzJ1oV6k5Ii6l6V7vwljatxzsfL18ojzcpWgK9D3kwXwzsrJ1MF5MU4vTBsBd0V0rrVx2W5T2E4u1rgx3F+cDFt/7gwdvcWK11BdmXbG70Q9MJfMul39bQeIud3cpMfLdAXmY81H7xTlIZXFlXaMs6PjgirWtMDWRbn61Zd1v4qje0HLmRvC3KRT10S5OX+/MaePc5Ceo55n4t7VB8yL6fHk5hY+JpqRjGP2nUE7xPTSEEGv15odgk4xGVfk3s26MC+RTtSpzNQN+ycS6sJcHeSpNnlvNivm9wrQd7aqQb/KYL3V6+otwh6cS6MkOTf1WOYGnTp1arTTc7ILP45yWOXoed4yTf1XcPSpaameEu14UzpU6TcJT7yX95VrTGU5OLa4+k9MV/h57dLzH74Tjs5WqDB0h+4O3GnprnSvmFtb7aBXO7pOS0UvN79hXXcWDphfbb3OpjizIdtwYmsT9RUohEHNm1zchj4O6dcU13PUwHm/MK8R8xONVlugFwM6rmzxelWvWE2w56l39FlKDhdm1c+C9Ax1PkVrG3elOkuk0XdcRi5u1NWwR662EV0+1+YiGtW+s1GtSMA7Fxc4t1juTs6P6bi2JnabUv1cTLn7uIfTp3+1G46uynb2Yp1v41rOIs57l9Vl1u6onRLniLXq41diXj/13ecJenJ0bekepAtzL13zrpDZfnGl85hW5i6wt8LR386JcyxeuXmkX8/k+Zvt5kY7L/cvc76eoE82YowYnl4wjivoTpynl6G6dk4D6cPMBg00saLi4iF9F7guGpxbxjwc3ahnC1wcvlNMwD9D1OXlDOGLBLw4b+d0GkzwlPMP0I9M6tPIxhn05eQ/omPM8YQQgAP2oF2nsdXs5kolkHTFHTqvjXvT4A2YW7XFmYm7d1/C+ejY3ZVoOx03HiMpFssZ9R6VWO+lvIYLUrVMGfXp5heef/7Pfyboyc4BOh29InJXQpWkV2G+oo9HvwWO7rG5qtRujezmd1RY+L59+SK+9eUqd4DO2LRRK6pbE+bF8Bt9l3MdZjDNTq8DnTY4J+iSPKA0Sk9HKTuAh7BNmVHPcu9SoI4EPLNyCfU329WvW4D74Eh635mBProE52xpVGBXZZOrQ+iEen9UvcdWUxLsXJiHrZN/18Ma9alWK4bb88MqkUlj9PTQujb7ue4KzD047+8fBuZF/Ss6Y07O//wR/IXb0T2HLszReYCusL0UuWeTa6u0BHZ5RyfmZ7Yb81sJ+szRNy+x+nbPHr97ri1z9ClGplwJ0Z1Cl4vzIdShhbpEI48PIucEyiGB7rl0PmUJ4j0h7iK5+B7rJuRwVWTfhfqvngHqoNuOrgKadlXOfInYG9rx73//+wgGyMHlYYO+NOtZ0MAlLeUEfAuU63OM31uN/gFg3olaG+f/tVy1eB/IJ+JighIsaxsZFb4mU5er46GVa4opdAt0D84tDc7HyDc7Y944+UdQDv34vRoyCfQIsHoNHagXcTubHT3ZOSD/n3X0uQJ0YX7LNRdufuiaDqHwXFvCvHB0rdhqDNHUp4vBOfrEueWPYQ12GwLnbYfuLnpPlu4zmko5OdW9G3Xn3g069QmUxV4S6pJeiDqlDdqWAhXAnYOePA8Ff87GHW4Z8KvJFTSJcpHODeXk6Zo0V9TeQrXBFOybxXHs2fBCj2/2GfNi0qKu2rdAfW993CLuuLXJzECAPsiNKnsxbyjVbkeP6uSA3IzzZfbkhecLzh8i5OW5NXMeuTg7egrRLDu6GQ/MVxXpuaMb9Ldz4vzMLfRwUw5d3HjonmWgtqWXA3hyzibQqQ72SZpOqsI8djjvwfxYoN5u71pTJp2os0LOG0sRck2zbcim2SC5eh69J1c/i7E6i+VKqG9bIn43vW0yfp46l62B6RyRo+e70mR3hRLqkykpN6qcHDpt8x717d5zZhSKKB7M4xdaDWM3F8r07eTqgbo+ite6MvBAXa7eBOgVbm71D9eLqJ1NHTB/8rvPXwDkQP1j7+2Olzag6R/CmTjt1O3IvaourlwWt7pD92yMDtBvPeZOwQHz5f6W93z2nkrSA3U7ulJMLbp6aCjHXB8YXhjnJxvNtjX5/ih4txS9K/wrZEd39t2UxyNk1jezQUzA/4ppuR1BeOogslStc+fBeFBuxkkkodOA/TCXlF6DqfuTGnJ3xLnj9xZdXajzN0WyLY5Lk6unLWfIvApoaoIcmMO1IXTswXKjCVfnOyEP2NlIerGENXPzgRzzfqRZSLlA5xtUP/fdMPMLf75w4SFl3NFJrn4tOuVURDrt3AtaSqejr/DjVF86R3+KmfZbr40sg3t43W1XidOXC+DXQ+sObRPpOn9koB7fgsI8s/OF+CCKuTlAbXeIeWtgaPj9t6+5zZSrU0aON7952Peub+H3WNiKHT3PyQXoQv2NZ0m6UE++vo2oX5E5o4t3Gw5mMuRWB9m4Fw6PXDUdN7r0ujbc+VBdD1fCseR9tMjFsYn0AvVh/jh1nj001E/UD2D41HX68HSiL9StRh6z84HfLMrVQtOcUQPocHRg7po4iI4O2dELyMV57wJVezlaBeOrLHIP0F3rvgIEN8falRvQHSqAfbjdFugdADPT0rQ6rcRKiXZ8DJliBK1F3N6ZWjzRmHz4do3fEuqCXabuSbbCNiQB7yo54S5l2XfNtQn1LSVt81ax59pt+TjFvipVdw5jdmbmjuy8fPnf5661ZN6vRj0pBjw9pTotTbVJWp3Or1dtPIPvQB2Yy8x5iWo8nZXjh1SoqE9F/D6wXAoOJ7XLzhW58xE5OKbaL9DPf/woME/jc6fcRbkePqEFl/4FeeW5uDX/O8m4zNF5vQyaw8lxW1+xjJx437Qc6uvfsIXWrIovgI4xd7NWz0Efop3HN2MMTtu4gDmqvBbb7YsAvbwzrMbovYl33LINz6drks2V73Z0Xo7eUwKepHuonpa1tds8QA2gs52Xo7fPkWlADfEjoSefPP8ketw7+Nt25EvbszuXj14fZeay472mOnD1gvU0q+5aWHxKht5qzJL9Jkk/sDDOmUxxbJo9VA/SxzXbpk/tbTSX5jxhTsRDRar9Eii/EFH7o1yE7mVr3s49CKerc14tM3Qf3IAW/ZWGvir3jKt29O2C/daKRe1v3XVtf7v79xn0irm29eu2TE2S2jbHmXGgXLuFuTbKmGv9CgpkmioMw29vNRdPqGDmYXFuS1fYh9659+6yVZ/fwvDd2fdQZukiXfo04nfNtdnRCXwbAtjnjp2fAesUnR24UztE+A40ip/NXD5HvdrWswMkUk4uoa4ZNZW/lxatYY8nfV2aQp9taCyOn6SEHeoZq/MvOEjfW9fHoHgO989rfN50VbvVT8wZtkfjFdtS7EDUjhQc3PxDiNqhUsIdcEfb8I5gPTP0ysOS2Vml7WVWVQ1sth79ZZI2i5uZ4zmwNyQn4LdwHp1JdGgmdHSijfgySuMCcw3YgfkkVGx+jF3SAvMZgu7Jl+Tq6TBlNinfAxpNOTnedvUcdc+qP7r7mWd+/nOhrlE6Ovyi3aajt2cAcRqis+OFTvF6Fqh3cJnsq25Yk2960SLg5Wl1b3/REeoqgW9wOMTRuUCv99g22Ay+5eqS5tqUlesO4bmIzWtXctVicC7IRTk5D8zh5c9f+OmjD62lUsUx1ePnAF3/KMLchp5tCylHz7Ual6MD9JUxRp84qiVq166rFMBvm4qxJqEN0mPrOgy/h+qugQ2z0ZiUpLeA+SKn2GYS6I7d0+BOoJc9Pc2yuUQuq5FzAJ+TLlcH6c90h+rbFMMPqoLmHC7qfEE6PhQZsAxv3WY4d/X87RTvfE7diOuKrJz+44rfkZUb4nFtTMhBLIlnBg6+63lzgC7HjkeifvrEQHx6uOC/ro2kjHnu5ulsjXHBzm4oMIcuXPhwuLn8nJ2kmH3Da30QEw3dqBtzz6Cry0P31ZiMWxmODksn5tejffdeBXQdPQRm5egAHUJCnaiLc6yx9HkGrc5UbVYFMxzTM3TXt4GBlyOkGjmXw5aTcVBm6eir0u/OyoWpA3VATg2SdB6v3AbT+WJ0m6yuHHnL2C+XifNucNAUCC/Pq3ezdVrrUivWq7UAaBPsA13iSJg1mXZgQaCLdd3oukeu0anH93qtaiXnzJsWA/N01099ARm4C8E5MLed87KhQ6/23q9ydFXEQanIUZSrX6osbtUVzLzMjj6X9na9HsxdNLM86GS9I8zbxe7zOORxchGMqw5TmId1sSpkqgPOmZDbONOeeasgL2FO+Ug27wCt8B3N8Xu2yCUL4HPU330WrHuuDZyD9m3bBls5uaJey08oAy/IZcCiGxc69fFcWnBnLxyFiLvjdy9gBdpafT7LvVoRDc2DbAIJ84ZtK35XVi5Jvu4Cmr11byRVHbXHLvtSKpOps6r9QiThLnxkMxKbJr20rcxrEU1J5Zk13Nkmz07E5X6+GmfRV4ajz8286a41r7hpMugUiZixpUMTg80TXHIeQbt+F5ZnD9ChjrWTobe2bL0NcpAXKgwBd0/unTeHgzb1tJ4tz8nlK9oEulB/p4bq5wpH5zAdBr8NVOWEEjw4ffDHMjYrse6RevQdg2+VAvdTHZyNBMjRkkw6UC/+FNUkwPwHVOsaAXmgLmmjdnyApI91PV0RPCTP90ZSA9WpdjMOjbOfjRk1kI4ZtYfwFyfKU/POrwXoXsviTByUB+7/d/RbKBW1/3cnx92zZxnQ39806EE6DZ2Y44GsHFLr/A24oU4TmGPNFafRpc5A3/7iZ70H6madnUhPJyqTdbQy6voOpOtA6PI6Od6U4vdLkYDfQcpjrA7M0eDq7VEzHswlk+2Id4/S0emjfMlidr9liqi9AZFzNhIvV1fPeOeYdUqnrxJIsNsX+0PJgYcbRJjx+94FfM7JOL6jwfP5eVHeNOZWqoNLivcaBueg/MfgHJiT8y7pPXrV2tfib91Sibsz7pB3nNBVueXEqqyLe3kdXWtXHtv1354cd89yo/Rdgx0VzEBlT58g6cQcEu1TMKJmZ7KdQOdM+tRj+jawnZdYR9ebedeMemmDqXzfmbjz6L3s6mfl6kAdI3SgzkZXN6BknH0wX861d0x6npljz2kFvWfkA3PCiRY7uYny6C2mMEb5p2g4zzOcku9G8RtQnx7beyDtDhOHIqMYDn7METmZ12mWC/JyqFE1Nq8NYWuJTNOzJ7/L+hiSLjd3Hg5Kds4EaAL9NdmOkMJcoGduvhTpq3BRy8vp6NzC+a4c85uTeN+0pT3RBuodVcaFLmKGbTtJB+g8GoAXQAfmOs2gXRTATmEjRCXjzHlWIhegv7K8kZwm2iRlhbRy1Se5VBzwoFbKygl1aZtax1E7uqqxecnVSb74xyWwzb7/G/wcJ9WmGlI8yTiaNVlk4PUnKEWgofnTIr2OefR5KNupnWk3UK7huoplKmfU+tMLT09fOLCQcT4CN4eUai9xXipxv1+MJ85jcWpP4O6qOGOurkQ4+9RWF+cvp6OzqP2QMb/pY3ROrUVYK0MX6sX/zTbtvuvm6RhhGnprarGG3LtAF+tZUs47Rjp2V/hOznWnemu7jiydbcnydy12OQvSNa2+TaTHQ67eIsMO3UWwPiDU9S6KTXcnDF1NSubcCTtvwInRyLpIN+2ebsNQneIX8UsUr1NKszXDzb23a2TYibnMXDPnTZfB5arFvCfCgrEy6Mi1Q8R8c3BuzF0Qh/t+pUW6R7PY0CGNtbLi1wR5jvqqxPzldPS5ucFDD94ozvfuWS4ZR3/uDtERuJP0mQkk3idmOuJ8SnYOtTpQq6WKmaIyzpSnR3L1lH0vmTqTP+UZ9egUvZv16pk2o+4EfHDOHrBzxajG35Ts2pY+yoctPXm6wQ9ENU/GN30I1gw2G1KTmEtiHZ2e3gF+lAvbAlWhPpZQV806ObZYIbMAT5eAeTdsn83VV4OdQ5x521u29Fk5+qPEnLKd283Xvqq8dVR5cWrKwuWYq7MS5asycn8ZHN1F7cD8RrXnnuVAJ+k98+hz0EyHJXJH57RjGu3c54rGFFuxk5RAlxLkeniKzXvDFuaR8nHoPFL3MFKOXppnM+rWp98SQ/WTg6A8NbJO0uXcmTT2DuQdwotpwu/svB1ec2UEk3Sj46P7QrzNuB/cJMIgcyQOkKHx/oYoDz+3urY/vsDxu6N2XHkdHBXD+AMZ6c3nibkg7+VcPeycoCv7mf7qddIaLsklccsVxaUiGbX/Z91v4dqVG59eI+ozxFZZd7LO14mjbZg5lThHo71h2xPNrhl0eXrJzxW9J3l7WHbl+XSn33FVR+8m3ZKpY6guxnnFC8kt4vXM0XnpczJ0/Vr0K9CPruPfzVQ7WBXeVIG8RC/nnU22NQbs1wXIC/UFDb2Nun+hdWulOrjZyhwcIRfoIL0cvI/teFRRe88A3cPz1742ptXYhHlx1Fo5D5c7ule0/I+k4m6xoxvzQ15wfoPat+dq8+hk2zl3sH6xMyPQtSdiCA7fWMRMuqbRWRn3Hn8XGHUrzacj+W7UdQl1iZizWMuerpaZek77o8rK7RgE4WzsqEniLZlvPRPVRj8fq+u34AsYtoNaYM7Gp5HvPsLURbtunEsJDTQMM0mm+CH8EKjhP2LKm8n2qYYxR9A0kA3OtTWvNHbFML1+aG2ZchUgSWsJOimXnYt0/WMUydL4Rwraobxa5n9kEv3lcHSMlI9q7cpLDXpTlXGFp7MwjmLcrkO3I5esxHsnzlssdpIi5hjM7zLk7KGsGLbIyOULV5V7t3zmqvefWbpQzkP1nwB1ujpRF+e8VUFTVelq9j0TF1B3r+gUtU9GDu5t5BldtfhTwMKRNn1Fw0+CycS6xvZ49g0pKTeVq8EvvmJniYEgXmXtkZI36FcM04d3BedJRZ4Dbn6/K9zRS658hbJ8u5WPz23jaKsS9Vvt6LDXt269BX+Dm960mEbfo6CXoAfjuPloqyROPUgn5k0tVCXo2OPmXfo+MOxCPHd1tnwnaEaO3o6Cjp6frgxVB/Al1MPU5erCXEp7QiQft7VXGbpT816WSsxFeYPalhM+gBZyOo5HV/U1cPVRRYLdGhiKRShGvUIGnBeFczNs5pS2phgZGcoOS6Wb91bJqL8foG/QijXXw4F0YW5DZ/OJDW62dCfd/z9GvwlWXhyWuOlmM12ZkLvn/dtiAH4MKi1rmeDd7iTK4/s46l8nSUMk3Gcee1eJckgWkIfwmrLJF656ps3r1FX9bksPVzLr1ai/5axQt6VLrZbLX2zn/rXd3W6enppRg5ELcvUZ5j6UrhipN8g3DpZ2T5zNeqM2RrE2ZqivivRGnmkf0OB8um47x88JdPXmpef/OJIN09/jWbUu5a+1nSfOVeBesnMB3su5lEfs2eh89U2w3TpHF+Y4Xulma8/nq/+bDwJ1lcC2i0n0MHXdAF1Kbh7za+1Iub9p1/rbykrRu2stbOjsqTx8x1VdEuv6mczTK7JyuwvUtxlzqtkS147O0Wv/1vQB8076+ehi3o3XAbtepEriAXq8wsYDcqk/ULfm54emg3Qt/V3yfKWBaAlz2fm0/Xys3rjEctc/NrKymV09YTsl0DfkebiI210o4xl0h+63d39kX0G6ulWJ+a1wdBe7giCY783XUv/R2/a/B6C7APZiD+qdGJ3j5nyPxvLgnBpESa6rJ6ysINak82LnnBybJ9qMuufU07qriko59tajqSzWlh5qBbngPI/hSbV+BpQ8XUcwMGjn0Hwbu+TpZr3C2AU577L64eq9lo6jzxfGCqGivQpzyzm4+rgsncQjHOhDVftvMWv+3UtZ8H7f/cJcf3VItYPyIgtnBeTmvBS2Z/u+CvP/JdRvkaPPcYmag/abrU2blvj41vcodtc8erh6gD7TKaJ2FcyEnU+S8tZA3733LAW6mqQXsc6HB+rlvWc8p85Ltm5T5zOp2tUfAup09ZOj28rqFCYt4nvnzhy44yLzcaUUHMBGQ0/YeamzBqLDFSbOtz42+blBnyXqlMvb6wn1+gkP1QegYlBuO6ebC/NxtrimB7h4hUJV+6F6ydHruwS6BNChwFyX7Fz7TCjdLjfXMbjeJm6ZKvc8GbeaQX8px+gvjZt7B7kl17akvaQwgx5RRQeoa4yepo803R6O3kJWqT708X13CHP1lofpCfNy/P5KtYojVwV7Os7F9e/5DpJJWQL+59BJZOVy1AW1OYds4XwvPl7Uz06RcGLNbjn1FXfBdjwbvZijUaUAXrvGQeNasFrIEbsfkYMD5Orl6NgnCogH6R/CxPkI/lM4UL12AGe/vf/Q/d0iGaXaxXlBucfnXoN+O5uD9spNZSx5+Sr281vl6HMbK8bmL2E+zsP0QdS9SsXGEyh/h7lPAHRgrmOB4jo2WZwXyM3kPr6n2tHZOZ+TpeRc/m4R9bwmllm5ylOWzXqO+od+oqF6K0O9Jaot/lpRfNxSBO2dSWBOL8cVrKcXIY9ez4GEOps6IG7O+816f0Z6g6hrJXn9bfp4YK0m4dlXGxLgcnJxPnTqC+Cccftvf/xQDF8eG3ns0K777y9m1roh0P1pTs2ca/pc1e2Wd+iWbOZXT7bjXm2WDtB9UsvNxjvtITNYvXblpY7e1++amIuAvZhJL2ILGOHc+c6k0saTEuvcdZj/ELdFmx7+7IPV0buuPPkO6eH8u77v0LKN32M6qLR6NauKrQ7gd6cEfO7qLc6XiXAyLsLRlRe1tZopYifpahbf/UK0BbtY58y5jF2c9wtzXuhmiXqjm1xH/O6tosC5QU9iqh2ttFx9qPmFWHIOzj+cqtpFeJ5uT3YOlbLtqoYr7xzlpYbGvEC9AnahHrSv9s0hjejNXYl6aN0rXnJtuqJw5p5dj23frv8F5dXo8PhJV8zg7uDRwsGr6ShQXFhrdddtFZgL8mygXkCO55UbUrwGMuqAnB2UoV61fhVdCfX/sHc+rXUWYRTv9d9ChdhASoMFvaKQjXAJuhA0UIoUQgMaVEwDZhFC0YVXN5XqSrp2px/AIErdNSKti2yKQaELVy4UN36B6sqFK8+Zc5+cO08m16ituWlyZt55X/+i1V/OM888M0NXZwV8ra5CdiutsPG3iTn0khGXucfblJ+YOTFDGxfYmIdnMw/I8VCcq3Oqjq7tMSx6fecdYV4m56JcxD9CzME5QZ/bRh2p9uvAXHr3GXPuUriod32RqXZ+xZIlpfPhnIXTr38kT1qOXt+1Vkftd2Xcficd3TtR+8f+D+XtLQvAHJdKgfUB6B9FZRwaOFepzIaq51jmTs7l6AzeJ264BLbh6mz5hFifBm3UOSh2t6nHfYyphKa52WVYZ8+T9J2oXzmjvWvOyTkpxwU3RO3gvNYpPlSMfDtqR1cT5pZcXE2kTzwyOfHIDZXKR1Fsl19KwtnT+WaBzOCuepq6/PwGJufULzpARqCnEyYwcJqu+kJl4SpHH/xKp2MmMuauk2lE7m7sd1027s45+styc2D+f6k3/P34159/+umnBh0C4ToeErRvCnOKH8gPQSKdno5KkefuOTYa9DCICvV8dKTqN2g5pv0Jb3XB4wMOs60/U569JOBt3y5/D38Pyhm46y0bV9cgwGeIdZDu4hjTXjk6W2jiBlHvnig+7sn5qQHjMaDcFY3iFWyK4LFwXqbmP6/rAJlnTLnXzrVwHnvPBXq+AN12nkBvhe3J0I342E3Oe+Pv6C9vwc17x/439RbnK9Bh4UOh+694ADgox7ildfTyIPdOuxHn0EkeTNwl6Jq0qScNIZ6L3zmKcy+zsVkBuz29WUAjzFMCXlP1L3eutSnPvpkPk8EPMaBMA+/KyEV34G5HF+qRgRPY/NCSeZqgC/Nh0iduREWczZx0e47OOjjF7AV06eqP14qX//IL3NxRe30uHAZPzunovkWRDZ2QV2F74xr0Vp2MGN9R4j5G16P3isbZ0be2sOH8//2lmu8Ng45V8UE2ME6XgRS7a3lNqBPzEmFejbt/b/B4WIHeQv2eeGwTKQGvKXuC3UU0rn/3VN0RfGtVPSfgta+t1pWPy2K5z59RNE/HfskBe5COHqhzVg7xLbAD8/SaJPPRtiHHkRGTEwQdqJ8g4+wE3YXtfFQgc9KB+xpRV6qdoK+XA2RCzsA51S7KvYXFWTgxbjsX4uw5bMfQCNxNuYbxSbmT8fl5jmO7jg7Mn1o49v+r17OjfwHpXBlQjr756+bg1AmQLtC7LIyjdHcnNHFDZxwH6AE5x5x7hzhYESzey+g9F8VG/XtKy/lGxqiBD1MfYr3OyiGAv4ll9ZesmYGrOwmnhXO4OP7YgG+Oeqk5FwfCkYaLQlfJkHME1l4/J+AeoInBi5P8jRMSAvcylmGSh0NTzHJq77lS7YScdg7MUxIuHTBBxc5zr52zK3D3NpY4Naoqk4mvjLn7GB45Acolsj6ejs69K8f2Qb33livQqa8lkX4FW9GLpxN0EB2cw5igqwjahTlBd0WkPlp1curW9p5IKEgP1r2i7qpYdFlVKye3W1bujfPf33QC3qx3Gb2HrZfTXbfhhql3zXqALtTLy1E7G6QZuiWs44ODNQFHF+zi+hRexPxU/OJeBeIy9Dk8pe71WaTa5ea/1Ctqw5xTFy7yrSojUZ7OmBi+MFWgs3FIGrn/XE3DOOAOysH58ipVSB/D+9FZ1N47ti+a7yTQKTl6MfRNol4cXZyH+9wQ5qUoVsn4E8/14r88e3upzZh38iFT/DDpRh1Dq1ZOChMT6M1D5TRVfxDh+81LgXpVAR93KHW7BBwdLWTaBTnD9vjkDD1n2vUtM2fTK0GuR685hEQniDlHdIKP8+ACcw3w9JOnkGqHlRN0YF5NzocxfxXjw76IxcXt2sHCMKment+Tj5OJ/0SNsL3l5Z3xWF8D2KB8eWVlZXFxcWV1eXkZrN820P874qo9O42i9v3T8nLM0aVNtGLovwJz6ApRB+hlQhmmwynm9g1NGyyae2klIFfbRVVZpZNyeqVzpqh0e5NiUbmV03LJ1WXpKQGPcymI+ith56FyfAzXC/k7tXjOoY7dLaXgoBmG7ZqlS5l4rZ07E2fQpbnJOehZoD5xotqLOvcsfBwpuKAdmJ+IhfN15uCynXvl/OGLGJxrL61h59587sutq91qeNp+rhYvfIzHFB2cLwfmbw9QL7Y+Po6+pVvU9k+95VW+Ok9tGnR8hqfD0YHy16hqLwrQrxLzrjBH3+ie7uPvYdLtACOW2jxR11DvdIn7GNUsVXO6fIatMVO3rTsBD136MiJ3dSFfKJebow3LRbARrZN1cI7OBy0wN+WnRLlgN+aGXb/nWYJe+oQ4L5TzGvqSb4fk5hOvXKKbI2gfYM4nV8LxlCh2T88jBHK+Xb+i9fJ5/OKz53Tc7vcvjddNycXNRTkl1EX6mMzRv956HEH7WGjqg6c3xTlJx8NJugz9T8Es0gU6g3b8CIgzoJ/q9/wTfuh/hpx+1+i8bpV+jxpMuc3worppd/kMhKG5rc2so+dauZvcrC6+xbnY1rcgx1hLpOuDbBfiZ8R0QtxT9Cp8hzROoMnQ5efRrl7li+K0nI6ubDsWL5FqB+JEnStqGXMfIvPixWpFLebm6ebz5OdG3LHWbnUyjtYC8jHZvdYT58A8BNKF+r+ma+k2Zt23xgXz1ZUexvmCOo6HIt5lfl7ScSB9oxt+jkZt4HyZM1colsydW9W/RZWmGZ7TJdiDcssBvOL3KisHCfK0ta1GPZfFivScgAfoNy/FWltQXl6G3qw7GRcfJVifKU2WDvF3iHhjHqxTTsbxqTAX6ujgGw/4pomzs7E/2yXmEFA35qTciuWH2s2NuZfP2ShTriEvrQXqrc0sgXrAvv9VcT2ALs4T6aucqe+3o2/xssSpY2Oh+Xm9+09tMvu8WcSa9vLeIMz28z+AOf4AGNcfPDfbC7zRzTnHXY+jQE+Ozi5jL4ttdQjvabo9/b7s6pJJb8bv578X6jZ1QR4NwvJaU6Rbg2N2jeZb4NvQrcjCM+M+RwXhhfWCuQD/LSbn6M92bwFzNubgwLndnM1LahfCzVXXzq4hfuGUg8uXKLJzcBrOht6A3E3DmBwixQm643bI8TtJ3xdHN+WlqH2MVFy5twTUz2CtiSRD4j0CdyTj5OZnNq+w8Xefm3V5XUePSfeaeiI9TdSNeuyg2nFQbMrJRXP1TGkjt696s/rNkoAX6XrNRCaOnb/RwFyBO1s494yGXCmj0ZPzLGMepi7iMTkvrMvWATpT7XLzsxXmYjw4Z5r94fBzrUGWJsnMWSZj+U5kvZI60bKXm/Mh1vff1Dtw9NVEOiXS5/fT0bd+vbx0/Ng4qbc6r/fCORzmrCScBUcPcQ5/5Ywsfxtzz9cMunr7QIoUvqczoXX8u6fqvtYlg64D4I26RpGeA3gn4M/flKsDaHOODjWn6DJyPlCdhZucmSzvUyZcH3qEuh5uZ4GG7TwekU7G2ejmc3iAeXZzm7nn5ki1g/QohDPonp7zvqV81KuzcClsb0ftKQ3HHnDvf+gO0En6Sot0gL5PlXH4q7BFbVyC9nwcRZmqE3KRLP1pzK988TFm8RR/EJR72jvR/V1ahj1LeHus9q8qK1cn4D3frC5gdQAvyNFHgq6bGUE6KuAdsqurWY2cXMTv6HiE9SnH7MLbNTNQoD4xcHOhHlYefn6SQ6EcyK+dPHnjFUzOnWq3bOeF81g4V8pChDvVzsGlcNKoVDvUWDyPIde+Qon6/VFvO+2eOSfo+7GOjlOZiPnF8XLz0PJKeXVwHGyhPEjvhqPzlDju9YKQbX+uKs13JIeXeUd3q2L3gF0dj1k36mzGHV2Um3WquoA1bWC1atRp6jdvfel03IzDdz5JxJuv+HLojseaqW09ZeAmiDkegK2Bo1uJ2r/idB2wn7l07RdJqfZWCo66fIGjIJdMOf08zDwdGJVq4VTW7ppXPm0312vcjpQR6bWpL8YkfV/W0Z8E5qf74/Lrk9Vjp1bPOWoH6MZcq+ycwz+n5f8Uv7FnxKFmqZzTcpRRD79R/btPleMjW1f3qdDo1VTdnHsHaw7gI34H042MXObcH2iO3BW26226+WhIubg5y5CHs+NRqp0raszBUeteUUspODVJUTtUUx5HORtzPJCvw0t2Pvq+VGOO3zkeda8JdZFuPy+G3tsXR/+VRe3jrMHBM73Zx7ZJp6ETcwmUw+nPLfVM9jDi3rPo5g/L1p7ycl7aTQU0Qp1haHJ0vEW7bd2s289z/A7UbxL1H7svzbwuR8+Ut4G3lYNkvvky3oF4PUfX5HwSTcqWjt/AST3CvCvMobPv5lQ7FKA/gYVzX3he3c0g2NXD0CPXTjkJl2oaWlWv2dEb+9D3/xTYjkw9cnKLwpycd/bB0bl3ZTx+AI7auqp6oqnZc6piB+ZQuamBmKNvOtXeSLuadaPuADBxLtQ9UXdWDtJX2urC0Y7l/PvwvYyCvRHA5wQ8RVeXo4eztwkH0nL0eGcTn6x/R6qL09ycsAtxQ34S2XZ9oH01t51qX+ceNasK2pVqjySccu1ydCFe9v75V02KSoV0JbJHSajnMpnSh2jf94l5y9WJ+uoKhKDd9TL/M+hYURvfoL0+Tm5ezM+Wixe7XQy6OR2gw86frjHvpCl6juFb6+kZ9yxXYKcLnFTzkSpnqruWJdIQmLMZ9JSA/4GoX/9xNOePxGDENeAlnoN1m3qaoE+Q8CQCHxF7xO3Yo3ZNmGOPWqqDC5Ftptr5Vs/7V2zl7L5t6d4h0CvCy2PMDbppTztYxhF12TpQX3Wt++0ogf36n3COyxL7Y1EGtwdXj33q/dNwdHBOAXTa+ZXNkcv/narXLYouEua2dXbJ/zPeW+ffXUJTFcEL9fuG8u95WX1UVo6u/jEhft2YNz3dlKNpFNjqIX9G7esEKDfq5pz9JAe8KKbahfk6MG9n2qGH5egy8/BzM07KVSBTce7yw1z1qrF1RUNFec62j0GtTK0OTZ0RvDH/L45u7dXLoS8eWzggmBctq6q11z+N2XkhnYYO0p1qb6iTvmre9b17/QyVd7vEkC9gTVc4haM9IAn19r3q2taWA/jzt66nbHsD9Wim3JjrpQZNOuleAMfQtvTCOBvX1r4B5pGDs5en4+AwvO8DZJBrz27OtTQn2++Px4mPVoFM28tztsU/y8ejVKa9X5XCu/PftqlumfMn9w764wcKczl6b54fs+fKJF2h+1MLoykfLp3Shwfn5UYeIKkhJ+DzBazlcfpdoqtXi+ocmgfLVRpk5S4pAQ9XR29TXlm7nJ0wB+amfODmmqPPRcuoK+N+Ut/PTpyxm7+7e7UrBc5dCAfVITt7SrZX29Qy44rbm+l2jm7ueMb2ipYetB8nzDAF9/jS9LGDJ+xfpaY/eGlDoD9+en7PQZTfqUK6WSYnU6+Ur3BSRZc5L9YVqAtyvR4ICfJ8KoVIz1P1yMoF1/ow5XlxzV+UOfd+ltKgufJUjCfS5edItZPzn9fXlWpns6Gb84uiXKn2iNjt6PfysXJhO7sR1zsY5ysbes35GC2njUQd7T+r/7n1xV4w152oB1XzyzFV/+Lpp2ZnZ5d7eyQ8X8s1emn9nnhDMdjUXT9TrarL1a1IwRMCwz76sCnXygn1j7sE2qaeWTfeXl7btnRH8NGB+IRAZwCfYZehc5zYeIWYU2c/zKl2h+0oaX9CnDsFF3G7j3Gu3fx+StNytaTm/Nxzc7Wq3603otc6/rktfQ+nx+BcifHYifqv97XxWTh97qXnZqW/zyh29CTOhbkJ16udgHetXMSbShmnmTrHqgBexu4CeIqINGbqaMnVbyZXz6DzyY5O2I15fLFB+Jqgoc/hafp5vE9u3OI5UQzaeRzc7kH7hfcfEuX5clSnJRm0JztXVXETdOdCW7vV0uyLitc4FL7eWU09ufUP1te+fnxpHIva/5F6s6dnpUU2oL4XS7fazo5ntxie76T6/ibDzmfnsRRQvc7GsXVbW3tZ/UeG7rJ0023YOZpzr6bJw6uVtTk2UR5PQp1b1k68ckl2XmFOxi0uqHE3qjBHS0fCCXb9+Ksq4fjz8R6Dnipe1ayWnTvHQo3RuTJ3VtOXP9pzMg4XMhzcoD0w7y+R8dPvzUokHRvdRst+vlvhe2NbWz1V14f3tPlcM2GebR3CINgpu3qzAr5dFvugAvjrmwrfA20L32l2zo/w8gp2Ek5DV2+n3JmDw4qaU+3tM5wVtV/GS/Lc3CtqcWuiMHfY3i521dOAPBjXV9p73jkskFO9i1vbN7X8Tap9XPeu/BPNL8xKp+XoI1Fvh3GBevNgCsusm3bP14l6eSEStatTsXCcymIJeS6A97lymXSjLlP/8ooJr8rh/GVLD1endYtzDM7D2cxT/SuzcFc34ebC/LV06mMoKv2chNtxmZoL4WzmuprBCxc2c6PuMGrkic6VjR+cnNx/U2dpay+R+9a4nSvxb9QB5hZdXbBrqr73OXr+PTXtSeJczVk5z9TZhjDXqySbjbriWmflfKhcIl1tWEjAU2WtzcrYOyFXNIB7Lmbqgh7dTZgnTXYHdXBKtddhu/ecM9X+BN4MUUS5MEdvX46qQb9gaZdaPNFaso+7GfCxXD6/zcoVMwd378peNL2AqB19SIunw9mxpT/tXmvLqLtzsKfnmbqG2n3MeqCe0nJiXah7rl7ASL5u2kMZdZF+/czGzOteV9NjS6dmJgN2G7nCd3SpTbm01o1UOzBvp9pj1eBC1MGhuUBGmEO+G9WGHjFQ6ZZxt503NrCY74764QE8NMVJ+mjO7wY3PzYFzJMW0fF6T/N1o57Vaf1GPT0fvaVNL0eYGXS2On4H5wA+nys32NaVSDfnJr29rN415+ztPS38CLjnzLsxV8dgMWrfuH7JmFeT83rh/MLFKGlvHdaukyXyge1h5BjwjFhNy5S3b1KkOocLc0zSP2iBvuWPrQOyd2WkegXzJbZMe+GdsC/uKSuXDh9qz9TVzXpjt7ph10IbVJe/V8fKmYcHDHq+7WFUWaxQPxM5Ofa8j8071lKNDP+AOW8n4k5tp9p184oprwpeyfoFuzllL1cPL3cSDgrM1fLZj03UJedM1XNQJo3H9Sx3WH2D3szBXT5g1a4tPvvCvE25SKezLy5m1EdD78etzbneeaqey2Jl6qLcx0LXvv5EA/XmEZL5ElYF8B8bb9FtzMU8fVzVrr4dWbl2vEproH5DmEO/A/O8bC4v18L5IGYn5vz3SYe70suNer40cdjMfUVOe5NaNH9XsHcOl5vL7C5HOq51uOvFuwDz4yUHtxTdWgzW2QH74ux7b2n3S1Y6miBdxZc43/2wWPFdsW7M8XYCXrDL1UO+wYmkGPW9TdUHFfBfdiNcR1cLziV+ycjnws8x2NCFuVHH56CqfZ0nSygDJ+VUuxbOJZCuf6HYic8hToNDd3mMWp6ce0uqekNCu3ntEqVxrLe03F4tPdmy9C3MzQ94GZxT7Us7MV/0S5gvloeuTtZ7e8zHZdrtI5lyO3q+gVVdEuZSPhbaFzjJFBsz9Wzqw3qznDZ1DbVyrpmxr4cUwUfOfQawoxHyQD1j/ohT7TkHlybnrnaVnfOpAndVvBrybT/3rj/Bje5mNT09L6sdpiqZvJQewTvororaZw885ki1C+iltqOrgXB9La4sUsjK9bWJ/W/L5PyMXle363hN3fINoCqAr2514dJ65eh5q8vu1y3nS1gHWbmnN0S5Y/ftpLtz7OB7LT6C8p3FMhOnvrxkzO3m6QAZdqbaSbmL2osctqeydjQZuShPcoVM+47UeHlVxPHY4ZmX70b68IraXTA3Z6rdKbiE+WKydTaKoxLw8/N6Or1Ed8PWc7FcdnXTni5Vz4vqlFHXxjbJB0gWFWQMe07AG3V2Z+VYLIf72lRBE42wx+Ia3iVcXwvGo/6Vb8XutnSsqP2S3Lx5VvuFFyNgR9PPK8/NywDl010L6K6Rydp92Ty6A3Z1DIfSyocy79jaYk9Hov3X9w9+UbtS7Ut4EuZtU2ezSlauh05nZyw/36sndgl1jSZdg3pG3ZaU5Ym6WecDeQerLnpgPistqlsV60G697Vd42lTUSfjB4Mz7AN7Xxu+YM2kC3Sk2kcvnMvO8U/58Ku+/jitnKuo3ZVwIefZDXpHXU29dboEem7olamP2aGvd1pG4v2PCuoAnqfHfLBwEDec51T7AjEvbq7B5m7I2c37sPr1sdF9wj6I5zvGXWoUyqm3UYdSAj78XB8YgnNf4uQA3pPbytNH5OXw1An4dQTwXZe9injVt5P2OT5osnK6OXuK2yd/FOZaUbM8MR+E7MMZuJiBDFXHaNHcp7uWVu0HkDr14RJ/l4Cr0R7H09v3RdMLFy9//uSTT75y+fLSQTkLbqSOE3HhPcLRw8o1xKt8NUoBex3C3gH1nBYQ/46jwRhSEki9Fb1n3R8PVV3WpkX16qwpTtPNua9gZW+UwEOPpiNoziMBfwqu/npgnvaooot1fXr72sDSz5STJdbRzr7QvHgltt88vJ2Ei5DditPas5uL8hjbu1c0ZMrjlVuT8sOSb6/Vm+r3+1N3A+SU3JxtuC+1ULe7U8J8yaA31NNB0oJ9itR3wus7ZUrvtXN+8LmfgaaefKm65JU2jSS9Sr+L9ZDr4NOuNofvu9fLvVFQv3bpp65C9hnn4vCpLBzGAeSy+LrOvSvM19d/ZtRuyCtDh168gLfrYyLLMOpWBt1K6TuWspxs19h29GaVjNNwhzTxfvepA3iJugkX5Bpt5hps6IH5bAZ9tAsUtsuA72n8P4Tn2DR5nsb/fHzwG9mHcvWMaVfLi231dcvhjo0rWFsZeNFYJeA5V3+FjL8+sPQdR8r4C/JG9Inul3Jz5uDSepohL+P2hYn3RUN3GRB+eOWdqLTz5sGPnp23+R4aEtzsY3ia85FuC+hSuLpgbwbvHNSpsPg9gy5v8Oi0e4TxIwL45hHw7BxAueN3NpHObtCVlcsRvEFPd6uj+2YXoH7t1k8bgXlx9kmrgO7iuO2w/Uxz4VwhhDmnm2vRPNxcrYra084VjrGiNj19vNLU8elpct9pn/yo0U3dsB/Weri7XgE6B7NuGW8vpWPwn76wV8qbBdO5Xs6Yt8+V0+idLr5XPW11iXgXEuhi3bSHnbaudjHxUQG/jrW2H08o4+6VNJu4s/CBOg6QIeW08ypot+Kf4gJS7VSmPOL2WDm3oqodfaq/Cq1wCC33p4W5ZbqhfBbIWNytdKQ7Jzt6yrizNVCnjHnk7gz6nnB3d/Knony3tTa2xrq6RrIuWzcQinpzsVzl6q38uzE36jJ1bnZhAE/f5gI6H6HtdTYJdXA8qx2MxwVLhtxWztejzsBxZp7LY0rWAUMdtUfAjvd0f3Xx7bfeXnt7DSP0Ftri6vFW0G7WW47eifEwVsgcBs1Kzrh/gCFN0itHh1xBt6fQveUYLrKMJsI1ZOWpesfTdFFenUoRKStRriFOhUYK3jF84VxtZ22sORfqZB3nUqQr0Im65AJYZOE3owyO50QJ87R5JbavXPBPHiXbLf3D5wNkImhnA+crb6+tffLJt5+sfQv99sm3+Fpb7E83MK9S7Qnscbkz8UjWHXF0o+snGzr5tpdjUO/v3cxdGlfBblNxa1Bu1EW7WY8uGMx6lNC4gCaZui9mTEn4pFIBHwn4RyZ51PPrIt2xO/uaFtNf0lnt68rBJTePMALdp0QZcZ/uSj+vMY8FNRcC91ffA+G1PltbyY5+LB7HTkE6+hHkh0ELCV0NVkKd8mz+g39dS2DyU/WM3i3aXeOVo3c1QAAU1CmVkVX3ukT+XQdTGHUNifUUxCsBv37t0senvE1Nnv5IWWFbE/MTZfPKujAn45lyRRA8I+oCKffcnIMgj0sZXO7qGxl8KSoNffGt33Zw/l5/iqAnzP2Rd6Z1/JY6h2/N/BBofnXWUbt5Z287umfwe8U8r8xWr/jItVpZOScXb1s6B3Ou8hLdyig5Bx8JbqHeXG1LMTxVtrCur2Nf26lYXqM4+gOYD+bmwFx/k7w9rYwX8BSxoCdui5Tk5zo+ho9Bl5O73PX4ytoOQ197a3X+nlGZdn+mkP2oIO7uVq/vfehNR190t/ej9ef/qYVbpt7v5ob1nJET6/HkrepGXZhrqO5fNesh27pRb8bwrID/HqRfu/XxCS2krcnT+cn33Ayr2tdJOlPtnJdbXsCnuEeNGhi5IdcIL2eTwsvR8Qwb+ttrnyXOf4OhT2fGTXeujDnC+zCp13fqPZ4G7HXYvmDM/0vsXrt7dp3GjnU3dcr170KdbbguPCa9hr28q7ScL22zTLpRX6ern7+1iVD9EVFOd9fk/Gnn4Ih5xbkZd1V7K9VOL9eOc0MepKe9qDD0T3Ya+ko29Pp81ww81TmK1A+JfOqEhkR5ghyvpeP/Fu48dCo7b7JumfaQPvNZU5BRBzViPMXwEFmrq+WqHLxYZ7eYgF/HYtv1GSXf8RBy0P6Nyl2Fuf7yvKDGNzejPlHM/D70J3JxDOOP8o+N5kOcqXxM1BQMfSfni8vTKWpPtXB5en6IjoM7ElFPKTlTvlMLt+G022wk5h2jmqR3voPVpm7qPXkVHk7L1RU0JAxKl7CKdo05hFcLVz8PT1cFvK5mIewnNm+RcnL+5jNBuTF3gp8huxSEV5iz5ak5OffiOT6k/k5D/wQz9P49eeXcCU7/Kh/Nyg+rejoZUl2vZOienPduE+N5hu48XUoeNZPvLpSTnKqiTLleXpn2AZKF9LRjvQl7WDsaUUetHIC+dvPLp7td7lfvdn+kmxPzm2ffzYw7sQ/F0RJycg7ejBq3qGkYXjePPrxDbWp1sWHos8F58nLKfp7SoxwP4fa0w6pePwydmt1NC1O3aQnfozQAPO9cbUuc57W26lp1sy5yqr0ugiwfAu+0OFRj7gewv3tWqKNa7tb1W7cu4XDXdYpV7ZnzQrgGuHlUteccHLvPg6v8PNLs9Z5zgP42HD1n4lbnG7Vwpr2Kmw7l5tMj+Vh3ss4xSRWvvf/A9eg/4kIOjeLcQ/Nixiz5X1ysXomZbJs6Idfos6FNu5FvoM4RWTmhHmdE0c7ffLdOs1eZdoL+cBWz+4rzfPWKN6/oXyhjLkd/6621Yc2tvfXe6tQ9tvJWKdxRsH4kqKPT44A5Ba6t25Nqb5PviLK1wc2ojyiBz6tt6Vho4eO0nAN4cc7VbFqtWffQkFD/jnSD93gJc6Ptujuvp8XtSgzYq4PahfeOdXN1yzt2UebOYzrR2KmVFXEepKdz2us03JGPH3JNDRLwGfTbuaKWEZeqnLA9na2xz6Vp6i6KVSPkJh1NpOMJOTEXUbVJF+f6ZLPs6uBbOv+hMDfq8Teo19Rk5FJaO0+Yo1VXrxh1afp4P6sXnLv5Az0l3o+2nh9mdfqkXKjf7lS71Wm7Sg7hnTPeNS/nsxZC8sA0WXcCPh0BHytcGOS4VDJk9hbuz7959uz582fPnkXQLsDNOJ8kL5rb0Evb4eay83yTmvf1sDWUT4/xIno8RyfCHalKwAtz9NCdPdW6DtahkSvqxhwS57XZ+ebgfK5cVStn1IW7MnM17GrR2fyhuftf7J1BjhQxDEUxDEhInIIlKxZchRVLFtz/BiT5WA9/TLECunv8k0oy04AYiYdTjmN/Wo+26rbpF9zHmq8p/fy/5IhS6WPftJPU1SuvJOvR103ksoDHGz/Xigyjq/07Djl27X9D4Ysm8p1/uy5uqTeHba9T5aaLp5AU6oD+pBdpd83tXhLO6Xuen4o9QFZbyWKJeW8FzM/A1RWsOQWWatrHYI5e5n/jHf2IKSYkbmQBNEtfPv4VtPtvUDZE3S62uYifwSEtQ8gVVpFuHnj83cm6BuFu+olxgYyJ/zESWidhzte05cZcbxDcqG3Sx5wZ0IN6ib0hxwtXo2PmFuroygH/A/Sv/yp5vaBmqa7hAnePnyEHPImQCYBnl0y5B4GuptWWNvHl+jqdmZ5Cx9N+LLn+YC9+vP4OJUWUGqdpEF7e0B1zD5EB9XI/ENifY1GGEXKv3MGcTftfVDAW/xHlGJmR0W6C9c356jWEZu+aBZw55iBdMgNfLDqYF6nUyrHm4A3lgvzMJapdlCfnZ+W0lzBg1AS0N/WP4xlnaR9dBtD0rva/SDkqTjnCYundURvxcqCuyQNoEngwRwTJGuUXMs6lfCX3vK6i/dd6DK+ofby7xI+FBw6BOZxrUTP6TILX0Q3J4eYrTfQ2WazHzmTyGe3eiaChMCNZ4N+aSddwQH+Sd05dQ8Waj+XP24S/+5yEs2NXxShMOcb8NJJKwHmN6eendc5pHGAM2KP/rrj2vjv05kjuVKx5TnivpeQca4pFt6JtQj71M9H70RLAibfZUXbv3j/RwDynBbgIR1RFzVY27Fb72JSX0wx3z8wXcxd1dBsKFmw+SwwN/mUNLiw6oOt1Fxc8ynoPb98m8BoTcw7fBH2WZwX0fI+XMvLm2/7VBfPcNxzKi1OQtBKYc2Fea9S0ttwagEO3Fs+5itro5oWVUsflhCFDljwy2nxT7N9LEPxJxkgYC4QLWIG7+ps1JO1aaBbV+8PPON6surlQL5Dr70LWaj1inEXghOtLJWqyempzP210Q4rmSwamJoDmTzt4IKfuqJSMZRVWsa5UksWsS29yyWZerro15Pfy83ffPjzZizkDNdTqDTUhLnOOIlipX9dFdd8GL+ox1nx0C4r+O2EmvZCu+eKui9d7kFUXT8TFYth16CbLDqGJrJjulZBXvJnkfZMM9SVeLrrKx/B9VZIB1qfYyuguFV7CF84ZURMB35ZgNQ+8RtVcTjKd42PGd1vSQrOaXs4/P6W4gqoUUdo68F6eLV1vTZHz5Fy9Lcmwm8XBDeqjG1f0c/BcBr/3eSmw6PuhbZlXTn45lU4Qpibcc+oWO1sh39L/FxRQK6rRMTCOqBtvmGvSgqiilu5Yffbso5tXqIM8PUqEiPvem7RyoK7BskiK9c2k9u/ZNTjvvk5rTmKo48uXKUdEuoptzgP6KufqHhxTs0rk5GTHvJePblzB0F9qswB4F1ddAh82XO3FQc2SyyXrh1E1e+F2Qfd7fsN6Tj8XYt3NrudlGvKaJoq/slq7ZfdQV5YwPniP7kTBwr/oS6vDOE8S7kdtSgtd0sAX1jfnNAgG/KP85nLA48NTU34ofG9WQ416DHuF4J2fw3HvLp3bJd+5gD66JwXLenc1jPQlQ10D3EigTpCKbGytu0xGmoZ1YGZTXz4ix4WdpsmWW9kVO/i/uIpa0z56juzhenQvij/feTHEXzQnbaBuATTs4M0D37C+2+H8FVQLe1FtpU+TfYLoE3Mo1yTOOTyv4ipqjzrOdjCft/HRXSu6KDlIv6zTBibCxrxy1CvUpZfqlhOqLNOua07jnbjbKVqpg2p54GpaCTVzwLFrNzWZ2ulrmHvmo/uWEG9O2sC+OVdHwhyK2L4n7WtJejnJdvEqiKbTdvnYdMX1w/Hbkc2CPbsHwCXkgA7hOYfGRvyAGPR8Yo7NR3eraHzwLJjVBEEPuTqE9yWXId1Zx0GXUlnjpz2XT+y2ilGekex2lhYsuLnS79j7C6lY9XHBjR5CbFGx6LioAOKqhFNAlsjjwE24Q6fRLuQBn9wR+VEH+e4c3FMT1ZxwfoHFBOWJuIapxTB6IEWbJZZ/6ck99q4I35ahJUFfgrgNMLA3MrKf/FMoJ9mjZXuUIBxrDuWcpVXKwTxYH8VcXhk9hHJX2h20Yc81drirmXJXzYlba9nZnfds+zmaMCdnMyvHnBAZ04tizQ3z9Uz42+gBFCzarBRYNIZQ7wTlZayplRPzNW1YobZnHhEOkz729L/Rodyzu3L0b/JQ3zDMp/jK6OFVABfyrC6KsIYgYwHiWuzZ766jSxuudTr4Eu4EvVHsB3XGHNI9HxTz5H8c3bnClm7QtPA3dEYgZ8SiIgo/gHompamNJd/ijVxjgr66Bmc7V7+/iGrRMb59mSqJo2egaGNowIItvLHO1bCCnBDHou8Hq/zqAHwtXYfDtafnjK0tD97MO3n141oKlWloHz2kgoW9q+dIUzfWNROHpgVKxHGgMR98E331JRJV8dsIgUPmeeM04Loeg+eSiHknHz2oovmKtRdvonfimneTc6q8o1u19SXNLPxoLuHm1oqWbUC7HZp3qNN8tz71lUbPRd/ZO6PdxmEYCIb//9N3wIIYcEHIhuGneke2xDTX5vowpSMpNCXLOTFC7UJ4XJ8oNfstFVp43NdOeSbsu+NbtoROxwUG8LdKg341fttk9PAZyh/QFZ6TGwf4pWafcSNGaMq0TqGJ9c8R/YK6enPONbuippK/w9foPKcTxS2bazBwvSl1xAKFkRi1+Qtgu1t9xZxDmh8dX1bNp+C5F3L469Rl2anCdHRXB9RkK1rtq25siWfOrQfzWyB66SSuOpeO0aBwSP6fVHcNH8feohOUDk4Yyutghd0/7AYYr9jVhkJvtWI4S66B34sjm13D5yC52boTjYETJF2PJjbRAQzfqR7UralcmOVqawmZyjx7+BDlIX3RF21gttMEKf0J6O0JXac6GNcdPxwvjFaUuyWGL1G30ryld2TXYGC5LaxvEvvT1QfYTZwvFs3luaVxu+1KikWFj1M9clnrTQapOyATTVUc3t+/M9g34LjoAPgPecH6YXgydwjrchPCm/jo7lAJXoOtuC2+99OMPEVdqHtr5ghuW3oz2R7CUfsiHNvNds39gy9y3boOUNqv3dWjvr3CJriO4TkHguceLOHbVPfkQV+aQiNTbOApuH21mTXgacSW/+yoV7yD5jQkb805cxEfPkd1xwhFmSky+qkM/G78MB/r54V7B134jaBO/CyP73dYquTwEFaKyAtISiQunC/X2yhLs1yi2xdGFud7V8VnRQm1kcazgBbC2XAvymBCEfR4BZPmXmQSsbu7ZtxuwrbC6STKDc5DMI7VpvgiajH3TnC4fpfRBKRuy/46dsXxe2b0da49O15DOFAjRCJfaLMHB9sZ6Zimx/sD/HTfmDtWB1LTNYST144lR3Q3uZmYY1iYOXuBxH89Bbd/BNXLXWb9PIQTcgZm1vR8LuTaHTyrw3lPjEafbveSj5E7hAeJ3u0pwq3gFCa+AYKjOF07Pk8duYAP4c57cwKkGaNJ3hFOvsRvr+qqZjt9kstDeKN0LC4hHo9wnuce8mNSX5HPtPOyqC7mw8qkewi38UpT9qBoHH7DlBtgdOH1VlECvxWnbnMIz6ltcxx6lbceiIrujuXue2u+uo7jpZZF8xBeKQkNteXzdhFfXWAODYS+tfa3qc2gw5J4Ja2H8JDqwa+XidbCsV6bZoz4bM8VP4gH3vrlU1UihBctB98Bb4vru+6L6VhOr+8gIGyj15PP1uaGiSG8Kr5rxzFEHzabzx5N7zHdNNeD1HIN4X1s9xmY5ri5Jnliv9mCpW4CHqC3vXau3EN4Th2rSC6f/95n5Pcpc7wmj1tjsJm3fgYqF+0hvMuuFDoO50crAm9roRgk9xJ2vCSkXvu/9u5tp2EYiKKozv//NEh+2MrRKKogyq17NcB4aMOTO8ZNbOkY2cSg1SWdkB/zoxdwzUpVwU62y9W6U6J0vJ7/mpZp64/fegBPQJtTDR+Xz4OIuKKrdKh8kqKzVknvHRQ4iLZ3zmx+zamdfJPOF6IhwQCbjRuH9wEOUr1QTDh1XJpdOkvmuW46JT2WfJVlgqrrqa6+1FsBf9fJN+lM6RJPOxy9ItVwLQwvJxUn1KUTpdt8B+jK484vc7DwCmfWpQuFkM64efRYu4s+QcjM/5Rb0aWLhWBUJT0E2WRWam/sEPdgke6Gwl4lfa+iE3rfinStDIn6yt5CVDsbQNFYXMVZegC6/KcyTfa5grN0mXyWC1lUR46jdOmxMs6qZazcNLxdRbqp/OkJXgwjvUToucO1cb/cDVG6vfz3ibGcS2+QKY5bJklvYM+VhObmStLDxNIvfRX6szelLcsP3qd6BxGzz3sAAAAASUVORK5CYII='; +export var ErrorImage = 'data:image/png;base64,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'; \ No newline at end of file diff --git a/packages/material/es/utils/constants.d.ts b/packages/material/es/utils/constants.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/material/es/utils/constants.js b/packages/material/es/utils/constants.js new file mode 100644 index 0000000..e69de29 diff --git a/packages/material/es/utils/index.d.ts b/packages/material/es/utils/index.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/material/es/utils/index.js b/packages/material/es/utils/index.js new file mode 100644 index 0000000..e69de29 diff --git a/packages/material/es/utils/types.d.ts b/packages/material/es/utils/types.d.ts new file mode 100644 index 0000000..69d3304 --- /dev/null +++ b/packages/material/es/utils/types.d.ts @@ -0,0 +1 @@ +export type AnyObject = Record; diff --git a/packages/material/es/utils/types.js b/packages/material/es/utils/types.js new file mode 100644 index 0000000..8cec2e9 --- /dev/null +++ b/packages/material/es/utils/types.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/packages/material/lib/algorithmConfig/algorithmConfig.d.ts b/packages/material/lib/algorithmConfig/algorithmConfig.d.ts new file mode 100644 index 0000000..9c0101e --- /dev/null +++ b/packages/material/lib/algorithmConfig/algorithmConfig.d.ts @@ -0,0 +1,53 @@ +import React from 'react'; +import { AlgorithmTableProps } from './components/algorithmTable/AlgorithmTable'; +import { TimeTemplateTableProps } from './components/timeTemplateTable/TimeTemplateTable'; +export interface AlgorithmConfigProps { + onAddAlgorithm?: () => void; + /** + * 单选的图片数据 + */ + drawData?: { + imageKey: string; + odRect?: { + x: number; + y: number; + w: number; + h: number; + }; + score?: string; + time?: string; + }; + /** + * 单选状态圈选后的监听事件 + */ + drawListener?: (data: any) => void; + algorithmTableDataSource?: { + id: string; + templateName: string; + operatingCycle: string; + algorithmOccupied: number; + }[]; + timeTemplateDataSource?: { + id: string; + templateName: string; + operatingCycle: string; + arrangeWeek: string; + algorithmOccupied: string; + }[]; + boxList: { + id: string; + name: string; + }[]; + algorithmTableProps?: AlgorithmTableProps; + timeTemplateTableProps?: TimeTemplateTableProps; + selectedKey?: string; + rowKey?: string; + type: AlgorithmTableProps['tableType']; + onSelect?: (key: string, info?: any) => void; +} +export interface AlgorithmConfigRef { + draw: () => void; + cancelDraw: () => void; +} +declare const AlgorithmConfig: React.ForwardRefExoticComponent>; +export default AlgorithmConfig; diff --git a/packages/material/lib/algorithmConfig/algorithmConfig.js b/packages/material/lib/algorithmConfig/algorithmConfig.js new file mode 100644 index 0000000..b21feb9 --- /dev/null +++ b/packages/material/lib/algorithmConfig/algorithmConfig.js @@ -0,0 +1,122 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/algorithmConfig/algorithmConfig.tsx +var algorithmConfig_exports = {}; +__export(algorithmConfig_exports, { + default: () => algorithmConfig_default +}); +module.exports = __toCommonJS(algorithmConfig_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var import_theme = __toESM(require("antd/es/theme")); +var import_meta = require("@zhst/meta"); +var import_base64Images = require("../utils/base64Images"); +var import_algorithmTable = __toESM(require("./components/algorithmTable")); +var import_timeTemplateTable = __toESM(require("./components/timeTemplateTable")); +var { useToken } = import_theme.default; +var Title = (props) => /* @__PURE__ */ import_react.default.createElement("h2", { style: { margin: "18px 16px", fontSize: "14px", color: "rgba(0, 0, 0, 0.88)" } }, props.children); +var AlgorithmConfig = (0, import_react.forwardRef)((props, ref) => { + const { + algorithmTableDataSource = [], + timeTemplateDataSource = [], + boxList = [], + drawData, + drawListener, + algorithmTableProps, + timeTemplateTableProps, + selectedKey, + type = "multiple", + rowKey = "id", + onSelect + } = props; + const drawImageRef = (0, import_react.useRef)(null); + const { token } = useToken(); + (0, import_react.useImperativeHandle)(ref, () => ({ + draw: () => { + var _a; + (_a = drawImageRef.current) == null ? void 0 : _a.setShowCrop(true); + }, + cancelDraw: () => { + var _a; + (_a = drawImageRef.current) == null ? void 0 : _a.setShowCrop(false); + } + })); + return /* @__PURE__ */ import_react.default.createElement(import_antd.Flex, { style: { border: `1px solid ${token.colorBorder}`, backgroundColor: token.colorBgBase } }, /* @__PURE__ */ import_react.default.createElement("div", { title: "盒子列表", style: { width: "13.9%" } }, /* @__PURE__ */ import_react.default.createElement(Title, null, "盒子列表"), /* @__PURE__ */ import_react.default.createElement("div", { style: { borderTop: `1px solid ${token.colorBorder}` } }, boxList.map((item) => { + return /* @__PURE__ */ import_react.default.createElement( + "p", + { + key: item.id, + onClick: () => onSelect == null ? void 0 : onSelect(item.id, item), + style: { + margin: 0, + padding: `${token.paddingXXS}px ${token.paddingLG}px`, + cursor: "pointer", + // @ts-ignore + color: selectedKey === item[rowKey] ? token.colorPrimary : token.colorText, + // @ts-ignore + backgroundColor: selectedKey === item[rowKey] ? token.blue1 : token.colorBgBase, + transition: "0.2s ease" + } + }, + item.name + ); + }))), /* @__PURE__ */ import_react.default.createElement("div", { style: { boxSizing: "border-box", width: "46.3%", textAlign: "center", borderLeft: `1px solid ${token.colorBorder}`, borderRight: `1px solid ${token.colorBorder}` } }, type === "single" ? /* @__PURE__ */ import_react.default.createElement( + import_meta.BigImagePreview, + { + ref: drawImageRef, + hideTypeBtns: true, + type: "CUSTOM", + screenshotButtonRender: () => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null), + data: drawData, + onDraw: drawListener + } + ) : /* @__PURE__ */ import_react.default.createElement("div", { style: { padding: "84px" } }, /* @__PURE__ */ import_react.default.createElement( + import_antd.Image, + { + width: "62.5%", + src: import_base64Images.AlgorithmConfigImg, + preview: false, + fallback: import_base64Images.ErrorImage + } + ), /* @__PURE__ */ import_react.default.createElement("h2", null, "请进行批量配置"), /* @__PURE__ */ import_react.default.createElement("ul", { style: { display: "inline-block", paddingLeft: 0, width: "51.8%", listStyle: "none", textAlign: "left", color: token.colorTextLabel } }, /* @__PURE__ */ import_react.default.createElement("li", null, "· 盒子批量配置仅支持同型号盒子;"), /* @__PURE__ */ import_react.default.createElement("li", null, "· 采取覆盖式更新,不保留原有配置,且预警检测框默认全屏范围;"), /* @__PURE__ */ import_react.default.createElement("li", null, "· 人流量统计默认检测线为屏幕中央横向线条,且箭头指向下方;"), /* @__PURE__ */ import_react.default.createElement("li", null, "· 优先选择拉流正常的摄像头。")))), /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "39.8%" } }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(Title, null, "时间模板"), /* @__PURE__ */ import_react.default.createElement("div", { style: { padding: `${token.paddingMD}px ${token.paddingSM}px`, borderTop: `1px solid ${token.colorBorder}`, borderBottom: `1px solid ${token.colorBorder}` } }, /* @__PURE__ */ import_react.default.createElement( + import_timeTemplateTable.default, + { + dataSource: timeTemplateDataSource, + ...timeTemplateTableProps + } + ))), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(Title, null, "算法应用"), /* @__PURE__ */ import_react.default.createElement("div", { style: { padding: `${token.paddingMD}px ${token.paddingSM}px`, borderTop: `1px solid ${token.colorBorder}` } }, /* @__PURE__ */ import_react.default.createElement( + import_algorithmTable.default, + { + dataSource: algorithmTableDataSource, + tableType: type, + ...algorithmTableProps + } + ))))); +}); +var algorithmConfig_default = AlgorithmConfig; diff --git a/packages/material/lib/algorithmConfig/components/algorithmTable/AlgorithmTable.d.ts b/packages/material/lib/algorithmConfig/components/algorithmTable/AlgorithmTable.d.ts new file mode 100644 index 0000000..baec10b --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/algorithmTable/AlgorithmTable.d.ts @@ -0,0 +1,20 @@ +import React from 'react'; +import type { ParamsType, ProTableProps } from '@ant-design/pro-components'; +import { AnyObject } from 'antd/es/_util/type'; +import { SelectProps } from 'antd/lib'; +export interface AlgorithmTableProps extends ProTableProps { + onAddAlgorithm?: (id?: string, record?: any) => void; + onItemSwitch?: (status?: boolean, id?: string, info?: any) => void; + onItemEdit?: (values?: any, info?: any) => void; + onItemDelete?: (id?: string, info?: any) => void; + onSortSelect?: SelectProps['onChange']; + onDraw?: (id: any, info?: any) => void; + selectedKey?: string; + sortList?: { + label: string; + value: string; + }[]; + tableType?: 'multiple' | 'single'; +} +declare const AlgorithmTable: (props: AlgorithmTableProps) => React.JSX.Element; +export default AlgorithmTable; diff --git a/packages/material/lib/algorithmConfig/components/algorithmTable/AlgorithmTable.js b/packages/material/lib/algorithmConfig/components/algorithmTable/AlgorithmTable.js new file mode 100644 index 0000000..cab3dfb --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/algorithmTable/AlgorithmTable.js @@ -0,0 +1,126 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/algorithmConfig/components/algorithmTable/AlgorithmTable.tsx +var AlgorithmTable_exports = {}; +__export(AlgorithmTable_exports, { + default: () => AlgorithmTable_default +}); +module.exports = __toCommonJS(AlgorithmTable_exports); +var import_react = __toESM(require("react")); +var import_icons = require("@ant-design/icons"); +var import_pro_components = require("@ant-design/pro-components"); +var import_antd = require("antd"); +var import_theme = __toESM(require("antd/es/theme")); +var import_schemaFormModal = __toESM(require("../schemaFormModal/schemaFormModal")); +var { useToken } = import_theme.default; +var AlgorithmTable = (props) => { + const { + onAddAlgorithm, + onItemSwitch, + onItemEdit, + onItemDelete, + onSortSelect, + selectedKey, + onDraw, + tableType = "multiple", + sortList = [] + } = props; + const { token } = useToken(); + const columns = [ + { + title: "模板名称", + dataIndex: "templateName" + }, + { + title: "运行周期", + dataIndex: "runCycle", + valueType: "select", + width: 80, + valueEnum: { + 1: { text: "黑夜" }, + 0: { text: "白天" } + } + }, + { + title: "算力占用", + dataIndex: "powerOccupy" + }, + { + title: "操作", + key: "option", + valueType: "option", + fixed: true, + render: (_DOM, record) => [ + /* @__PURE__ */ import_react.default.createElement(import_antd.Switch, { value: record.status, onChange: (_status) => onItemSwitch == null ? void 0 : onItemSwitch(_status, record.id, record) }), + /* @__PURE__ */ import_react.default.createElement("a", { onClick: () => onDraw == null ? void 0 : onDraw(record.id, record), style: { display: tableType === "single" ? "block" : "none" }, href: "#" }, /* @__PURE__ */ import_react.default.createElement(import_icons.ImportOutlined, null)), + /* @__PURE__ */ import_react.default.createElement( + import_schemaFormModal.default, + { + type: record.templateType, + onFinish: async (values) => onItemEdit == null ? void 0 : onItemEdit(values, record), + trigger: /* @__PURE__ */ import_react.default.createElement("a", { href: "#" }, /* @__PURE__ */ import_react.default.createElement(import_icons.EditFilled, null)) + } + ), + /* @__PURE__ */ import_react.default.createElement( + import_antd.Popconfirm, + { + title: "确定删除吗?", + onConfirm: () => onItemDelete == null ? void 0 : onItemDelete(record.id, record) + }, + /* @__PURE__ */ import_react.default.createElement("a", { href: "#" }, /* @__PURE__ */ import_react.default.createElement(import_icons.DeleteFilled, null)) + ) + ] + } + ]; + return /* @__PURE__ */ import_react.default.createElement( + import_pro_components.ProTable, + { + columns, + bordered: true, + scroll: { y: 240 }, + dataSource: [], + headerTitle: /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { size: 16 }, /* @__PURE__ */ import_react.default.createElement( + import_antd.Select, + { + value: selectedKey, + style: { width: 320 }, + onChange: onSortSelect, + options: sortList + } + ), /* @__PURE__ */ import_react.default.createElement(import_icons.PlusCircleFilled, { onClick: () => onAddAlgorithm == null ? void 0 : onAddAlgorithm(), style: { fontSize: "24px", color: token.colorPrimary, cursor: "pointer" } })), + toolbar: void 0, + rowKey: "id", + search: false, + options: false, + pagination: false, + ...props + } + ); +}; +var AlgorithmTable_default = AlgorithmTable; diff --git a/packages/material/lib/algorithmConfig/components/algorithmTable/index.d.ts b/packages/material/lib/algorithmConfig/components/algorithmTable/index.d.ts new file mode 100644 index 0000000..42d422c --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/algorithmTable/index.d.ts @@ -0,0 +1,3 @@ +import AlgorithmTable from './AlgorithmTable'; +export type { AlgorithmTableProps } from './AlgorithmTable'; +export default AlgorithmTable; diff --git a/packages/material/lib/algorithmConfig/components/algorithmTable/index.js b/packages/material/lib/algorithmConfig/components/algorithmTable/index.js new file mode 100644 index 0000000..8c7d5fc --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/algorithmTable/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/algorithmConfig/components/algorithmTable/index.tsx +var algorithmTable_exports = {}; +__export(algorithmTable_exports, { + default: () => algorithmTable_default +}); +module.exports = __toCommonJS(algorithmTable_exports); +var import_AlgorithmTable = __toESM(require("./AlgorithmTable")); +var algorithmTable_default = import_AlgorithmTable.default; diff --git a/packages/material/lib/algorithmConfig/components/schemaFormModal/index.d.ts b/packages/material/lib/algorithmConfig/components/schemaFormModal/index.d.ts new file mode 100644 index 0000000..b42d137 --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/schemaFormModal/index.d.ts @@ -0,0 +1,2 @@ +import SchemaFormModal from './schemaFormModal'; +export default SchemaFormModal; diff --git a/packages/material/lib/algorithmConfig/components/schemaFormModal/index.js b/packages/material/lib/algorithmConfig/components/schemaFormModal/index.js new file mode 100644 index 0000000..c0d23b6 --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/schemaFormModal/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/algorithmConfig/components/schemaFormModal/index.tsx +var schemaFormModal_exports = {}; +__export(schemaFormModal_exports, { + default: () => schemaFormModal_default +}); +module.exports = __toCommonJS(schemaFormModal_exports); +var import_schemaFormModal = __toESM(require("./schemaFormModal")); +var schemaFormModal_default = import_schemaFormModal.default; diff --git a/packages/material/lib/algorithmConfig/components/schemaFormModal/schemaFormModal.d.ts b/packages/material/lib/algorithmConfig/components/schemaFormModal/schemaFormModal.d.ts new file mode 100644 index 0000000..2c2d7cd --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/schemaFormModal/schemaFormModal.d.ts @@ -0,0 +1,8 @@ +import { FC } from 'react'; +import type { ModalFormProps } from '@ant-design/pro-components'; +export interface SchemaFormModalProps extends ModalFormProps { + type: 'fire' | 'smoke' | 'traffic' | 'face' | 'destroy' | 'wander' | 'gather' | 'cameraBlock'; +} +export declare const SCHEME_TYPE_LIST: Map; +declare const SchemaFormModal: FC; +export default SchemaFormModal; diff --git a/packages/material/lib/algorithmConfig/components/schemaFormModal/schemaFormModal.js b/packages/material/lib/algorithmConfig/components/schemaFormModal/schemaFormModal.js new file mode 100644 index 0000000..25b7dfd --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/schemaFormModal/schemaFormModal.js @@ -0,0 +1,173 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/algorithmConfig/components/schemaFormModal/schemaFormModal.tsx +var schemaFormModal_exports = {}; +__export(schemaFormModal_exports, { + SCHEME_TYPE_LIST: () => SCHEME_TYPE_LIST, + default: () => schemaFormModal_default +}); +module.exports = __toCommonJS(schemaFormModal_exports); +var import_react = __toESM(require("react")); +var import_pro_components = require("@ant-design/pro-components"); +var import_antd = require("antd"); +var SCHEME_TYPE_LIST = /* @__PURE__ */ new Map([ + ["fire", "火焰识别"], + ["smoke", "烟雾识别"], + ["traffic", "人流量统计"], + ["face", "面部遮挡识别"], + ["destroy", "人员破坏识别"], + ["wander", "人员徘徊识别"], + ["gather", "人员聚集识别"], + ["cameraBlock", "摄像头遮挡识别"] +]); +var SchemaFormModal = (props) => { + const { + type = "fire", + onFinish + } = props; + const getColumnsByType = (type2) => { + if (!type2) + return []; + let arr = []; + if (type2 === "gather") { + arr.push({ + title: "预警人数:", + dataIndex: "alarmMember", + formItemProps: { + rules: [ + { + required: true, + message: "此项为必填项" + } + ] + }, + renderFormItem: () => /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Input, null), "人(3~10)"), + width: "m" + }); + } + if (type2 === "cameraBlock") { + arr.push({ + title: "遮挡百分比:", + dataIndex: "blockPercent", + formItemProps: { + rules: [ + { + required: true, + message: "此项为必填项" + } + ] + }, + renderFormItem: () => /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Input, null), "%(30~80)"), + width: "m" + }); + } + if (type2 !== "traffic") { + arr.push({ + title: "最短持续时间:", + dataIndex: "minTime", + formItemProps: { + rules: [ + { + required: true, + message: "此项为必填项" + } + ] + }, + renderFormItem: () => /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Input, null), "秒(2~10)"), + width: "m" + }); + arr.push({ + title: "报警间隔时间:", + dataIndex: "alarmTime", + formItemProps: { + rules: [ + { + required: true, + message: "此项为必填项" + } + ] + }, + renderFormItem: () => /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Input, null), "秒(10~600)"), + width: "m" + }); + } else if (type2 === "traffic") { + arr.push({ + title: "灵敏度:", + dataIndex: "sensitivity", + formItemProps: { + rules: [ + { + required: true, + message: "此项为必填项" + } + ] + }, + renderFormItem: () => /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Input, null), "(0~100)"), + width: "m" + }); + } + arr.push({ + title: "灵敏度:", + dataIndex: "sensitivity", + formItemProps: { + rules: [ + { + required: true, + message: "此项为必填项" + } + ] + }, + renderFormItem: () => /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Input, null), "(0~100)"), + width: "m" + }); + return arr; + }; + return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement( + import_pro_components.BetaSchemaForm, + { + width: 600, + title: SCHEME_TYPE_LIST.get(type), + shouldUpdate: false, + layoutType: "ModalForm", + layout: "horizontal", + labelCol: { span: 6 }, + wrapperCol: { span: 18 }, + preserve: false, + modalProps: { destroyOnClose: true }, + onFinish, + columns: getColumnsByType(type), + ...props + } + )); +}; +var schemaFormModal_default = SchemaFormModal; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + SCHEME_TYPE_LIST +}); diff --git a/packages/material/lib/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.d.ts b/packages/material/lib/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.d.ts new file mode 100644 index 0000000..102d04a --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.d.ts @@ -0,0 +1,8 @@ +import React from 'react'; +import type { ParamsType, ProTableProps } from '@ant-design/pro-components'; +import { AnyObject } from 'antd/es/_util/type'; +export interface TimeTemplateTableProps extends ProTableProps { + onItemBlur?: (value?: number | string, id?: any, record?: any) => void; +} +declare const TimeTemplateTable: (props: TimeTemplateTableProps) => React.JSX.Element; +export default TimeTemplateTable; diff --git a/packages/material/lib/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.js b/packages/material/lib/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.js new file mode 100644 index 0000000..a4c1075 --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.js @@ -0,0 +1,82 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/algorithmConfig/components/timeTemplateTable/TimeTemplateTable.tsx +var TimeTemplateTable_exports = {}; +__export(TimeTemplateTable_exports, { + default: () => TimeTemplateTable_default +}); +module.exports = __toCommonJS(TimeTemplateTable_exports); +var import_react = __toESM(require("react")); +var import_pro_components = require("@ant-design/pro-components"); +var import_antd = require("antd"); +var TimeTemplateTable = (props) => { + const { + onItemBlur + } = props; + const columns = [ + { + title: "模板名称", + dataIndex: "templateName" + }, + { + title: "运行周期", + dataIndex: "runCycle" + }, + { + title: "布控星期", + dataIndex: "arrangeDay" + }, + { + title: "算力占用", + dataIndex: "powerOccupy" + }, + { + title: "配置路数", + key: "option", + valueType: "option", + render: (_, record) => /* @__PURE__ */ import_react.default.createElement(import_antd.InputNumber, { value: record.lineNum, onBlur: (e) => onItemBlur == null ? void 0 : onItemBlur(e.target.value, record.id, record), min: 0 }) + } + ]; + return /* @__PURE__ */ import_react.default.createElement( + import_pro_components.ProTable, + { + columns, + bordered: true, + scroll: { y: 95 }, + toolbar: void 0, + rowKey: "id", + search: false, + options: false, + pagination: false, + dataSource: [], + ...props + } + ); +}; +var TimeTemplateTable_default = TimeTemplateTable; diff --git a/packages/material/lib/algorithmConfig/components/timeTemplateTable/index.d.ts b/packages/material/lib/algorithmConfig/components/timeTemplateTable/index.d.ts new file mode 100644 index 0000000..fefdc38 --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/timeTemplateTable/index.d.ts @@ -0,0 +1,3 @@ +import TimeTemplateTable from './TimeTemplateTable'; +export type { TimeTemplateTableProps } from './TimeTemplateTable'; +export default TimeTemplateTable; diff --git a/packages/material/lib/algorithmConfig/components/timeTemplateTable/index.js b/packages/material/lib/algorithmConfig/components/timeTemplateTable/index.js new file mode 100644 index 0000000..3ec41fb --- /dev/null +++ b/packages/material/lib/algorithmConfig/components/timeTemplateTable/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/algorithmConfig/components/timeTemplateTable/index.tsx +var timeTemplateTable_exports = {}; +__export(timeTemplateTable_exports, { + default: () => timeTemplateTable_default +}); +module.exports = __toCommonJS(timeTemplateTable_exports); +var import_TimeTemplateTable = __toESM(require("./TimeTemplateTable")); +var timeTemplateTable_default = import_TimeTemplateTable.default; diff --git a/packages/material/lib/algorithmConfig/index.d.ts b/packages/material/lib/algorithmConfig/index.d.ts new file mode 100644 index 0000000..7f2faa9 --- /dev/null +++ b/packages/material/lib/algorithmConfig/index.d.ts @@ -0,0 +1,5 @@ +import AlgorithmConfig from './algorithmConfig'; +export type { AlgorithmConfigProps, AlgorithmConfigRef } from './algorithmConfig'; +export type { AlgorithmTableProps } from './components/algorithmTable'; +export type { TimeTemplateTableProps } from './components/timeTemplateTable'; +export default AlgorithmConfig; diff --git a/packages/material/lib/algorithmConfig/index.js b/packages/material/lib/algorithmConfig/index.js new file mode 100644 index 0000000..2f05c2f --- /dev/null +++ b/packages/material/lib/algorithmConfig/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/algorithmConfig/index.tsx +var algorithmConfig_exports = {}; +__export(algorithmConfig_exports, { + default: () => algorithmConfig_default +}); +module.exports = __toCommonJS(algorithmConfig_exports); +var import_algorithmConfig = __toESM(require("./algorithmConfig")); +var algorithmConfig_default = import_algorithmConfig.default; diff --git a/packages/material/lib/algorithmConfigModal/algorithmConfigModal.d.ts b/packages/material/lib/algorithmConfigModal/algorithmConfigModal.d.ts new file mode 100644 index 0000000..41b21e2 --- /dev/null +++ b/packages/material/lib/algorithmConfigModal/algorithmConfigModal.d.ts @@ -0,0 +1,8 @@ +import { FC } from 'react'; +import { ModalProps } from "antd"; +import { AlgorithmConfigProps } from '../algorithmConfig/algorithmConfig'; +export interface AlgorithmConfigModalProps extends ModalProps { + algorithmConfigProps: AlgorithmConfigProps; +} +declare const AlgorithmConfigModal: FC; +export default AlgorithmConfigModal; diff --git a/packages/material/lib/algorithmConfigModal/algorithmConfigModal.js b/packages/material/lib/algorithmConfigModal/algorithmConfigModal.js new file mode 100644 index 0000000..4ca5a6f --- /dev/null +++ b/packages/material/lib/algorithmConfigModal/algorithmConfigModal.js @@ -0,0 +1,71 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/algorithmConfigModal/algorithmConfigModal.tsx +var algorithmConfigModal_exports = {}; +__export(algorithmConfigModal_exports, { + default: () => algorithmConfigModal_default +}); +module.exports = __toCommonJS(algorithmConfigModal_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var import_algorithmConfig = __toESM(require("../algorithmConfig/algorithmConfig")); +var AlgorithmConfigModal = (props) => { + const { + algorithmConfigProps + } = props; + return /* @__PURE__ */ import_react.default.createElement( + import_antd.ConfigProvider, + { + theme: { + components: { + Modal: { + headerBg: "#EFF2F4", + footerBg: "#EFF2F4", + contentBg: "#EFF2F4" + } + } + } + }, + /* @__PURE__ */ import_react.default.createElement( + import_antd.Modal, + { + okText: "确定", + cancelText: "取消", + ...props + }, + /* @__PURE__ */ import_react.default.createElement( + import_algorithmConfig.default, + { + ...algorithmConfigProps + } + ) + ) + ); +}; +var algorithmConfigModal_default = AlgorithmConfigModal; diff --git a/packages/material/lib/algorithmConfigModal/index.d.ts b/packages/material/lib/algorithmConfigModal/index.d.ts new file mode 100644 index 0000000..873cc35 --- /dev/null +++ b/packages/material/lib/algorithmConfigModal/index.d.ts @@ -0,0 +1,2 @@ +import AlgorithmConfigModal from './algorithmConfigModal'; +export default AlgorithmConfigModal; diff --git a/packages/material/lib/algorithmConfigModal/index.js b/packages/material/lib/algorithmConfigModal/index.js new file mode 100644 index 0000000..820ec00 --- /dev/null +++ b/packages/material/lib/algorithmConfigModal/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/algorithmConfigModal/index.tsx +var algorithmConfigModal_exports = {}; +__export(algorithmConfigModal_exports, { + default: () => algorithmConfigModal_default +}); +module.exports = __toCommonJS(algorithmConfigModal_exports); +var import_algorithmConfigModal = __toESM(require("./algorithmConfigModal")); +var algorithmConfigModal_default = import_algorithmConfigModal.default; diff --git a/packages/material/lib/index.d.ts b/packages/material/lib/index.d.ts new file mode 100644 index 0000000..8d44736 --- /dev/null +++ b/packages/material/lib/index.d.ts @@ -0,0 +1,6 @@ +export { default as AlgorithmConfigModal } from './algorithmConfigModal'; +export { default as AlgorithmConfig } from './algorithmConfig'; +export type { AlgorithmConfigRef, AlgorithmConfigProps } from './algorithmConfig'; +export { default as Login } from './login'; +export { default as Password } from './password'; +export * from 'rc-util'; diff --git a/packages/material/lib/index.js b/packages/material/lib/index.js new file mode 100644 index 0000000..37156c6 --- /dev/null +++ b/packages/material/lib/index.js @@ -0,0 +1,51 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/index.tsx +var src_exports = {}; +__export(src_exports, { + AlgorithmConfig: () => import_algorithmConfig.default, + AlgorithmConfigModal: () => import_algorithmConfigModal.default, + Login: () => import_login.default, + Password: () => import_password.default +}); +module.exports = __toCommonJS(src_exports); +var import_algorithmConfigModal = __toESM(require("./algorithmConfigModal")); +var import_algorithmConfig = __toESM(require("./algorithmConfig")); +var import_login = __toESM(require("./login")); +var import_password = __toESM(require("./password")); +__reExport(src_exports, require("rc-util"), module.exports); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + AlgorithmConfig, + AlgorithmConfigModal, + Login, + Password, + ...require("rc-util") +}); diff --git a/packages/material/lib/login/Login.d.ts b/packages/material/lib/login/Login.d.ts new file mode 100644 index 0000000..cd9701d --- /dev/null +++ b/packages/material/lib/login/Login.d.ts @@ -0,0 +1,14 @@ +/** + * Created by jiangzhixiong on 2024/03/18 + */ +import { FC } from 'react'; +import { FormProps } from 'antd'; +interface LoginProps { + title: string; + onIconClick?: () => void; + rememberPassword?: boolean; + imageUrl: string; + onFinish: FormProps['onFinish']; +} +declare const Login: FC; +export default Login; diff --git a/packages/material/lib/login/Login.js b/packages/material/lib/login/Login.js new file mode 100644 index 0000000..86e9497 --- /dev/null +++ b/packages/material/lib/login/Login.js @@ -0,0 +1,103 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/login/Login.tsx +var Login_exports = {}; +__export(Login_exports, { + default: () => Login_default +}); +module.exports = __toCommonJS(Login_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var import_icons = require("@ant-design/icons"); +var { useToken } = import_antd.theme; +var Login = (props) => { + const { + title, + onIconClick, + rememberPassword = true, + imageUrl, + onFinish + } = props; + const [form] = import_antd.Form.useForm(); + const { token } = useToken(); + return /* @__PURE__ */ import_react.default.createElement(import_antd.Flex, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Flex, { align: "center", justify: "center", style: { position: "relative", width: "40%", padding: `30px` } }, /* @__PURE__ */ import_react.default.createElement( + import_icons.HomeOutlined, + { + onClick: onIconClick, + style: { + position: "absolute", + top: "30px", + left: "30px", + fontSize: `${token.sizeLG}px`, + cursor: "pointer" + } + } + ), /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "56%" } }, /* @__PURE__ */ import_react.default.createElement("h2", { style: { margin: "30px 0", fontSize: "30px" } }, title), /* @__PURE__ */ import_react.default.createElement( + import_antd.Form, + { + layout: "vertical", + form, + onFinish + }, + /* @__PURE__ */ import_react.default.createElement( + import_antd.Form.Item, + { + name: "account", + label: "账号", + rules: [ + { required: true, message: "请输入账号!" } + ] + }, + /* @__PURE__ */ import_react.default.createElement(import_antd.Input, { placeholder: "请输入账号", variant: "borderless", style: { border: "none", borderBottom: "1px solid rgba(0, 0, 0, 0.06)" } }) + ), + /* @__PURE__ */ import_react.default.createElement( + import_antd.Form.Item, + { + name: "password", + label: "密码", + rules: [ + { required: true, message: "请输入密码!" } + ] + }, + /* @__PURE__ */ import_react.default.createElement(import_antd.Input.Password, { placeholder: "请输入密码", variant: "borderless", style: { border: "none", borderBottom: "1px solid rgba(0, 0, 0, 0.06)" } }) + ), + /* @__PURE__ */ import_react.default.createElement(import_antd.Form.Item, { style: { display: rememberPassword ? "block" : "none" } }, /* @__PURE__ */ import_react.default.createElement(import_antd.Form.Item, { name: "remember", valuePropName: "checked", noStyle: true }, /* @__PURE__ */ import_react.default.createElement(import_antd.Checkbox, null, "记住密码"))), + /* @__PURE__ */ import_react.default.createElement(import_antd.Form.Item, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { block: true, type: "primary", htmlType: "submit" }, "登录")) + ))), /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "60%" } }, /* @__PURE__ */ import_react.default.createElement( + import_antd.Image, + { + style: { width: "100%" }, + src: imageUrl, + width: "100%", + preview: false, + fallback: "data:image/png;base64,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" + } + ))); +}; +var Login_default = Login; diff --git a/packages/material/lib/login/images/ai-suanfa.png b/packages/material/lib/login/images/ai-suanfa.png new file mode 100644 index 0000000..848fc3a Binary files /dev/null and b/packages/material/lib/login/images/ai-suanfa.png differ diff --git a/packages/material/lib/login/images/ai-video.png b/packages/material/lib/login/images/ai-video.png new file mode 100644 index 0000000..99304b7 Binary files /dev/null and b/packages/material/lib/login/images/ai-video.png differ diff --git a/packages/material/lib/login/images/box-manage.png b/packages/material/lib/login/images/box-manage.png new file mode 100644 index 0000000..fcaca42 Binary files /dev/null and b/packages/material/lib/login/images/box-manage.png differ diff --git a/packages/material/lib/login/index.d.ts b/packages/material/lib/login/index.d.ts new file mode 100644 index 0000000..189be5f --- /dev/null +++ b/packages/material/lib/login/index.d.ts @@ -0,0 +1,2 @@ +import Login from './Login'; +export default Login; diff --git a/packages/material/lib/login/index.js b/packages/material/lib/login/index.js new file mode 100644 index 0000000..9b816ba --- /dev/null +++ b/packages/material/lib/login/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/login/index.tsx +var login_exports = {}; +__export(login_exports, { + default: () => login_default +}); +module.exports = __toCommonJS(login_exports); +var import_Login = __toESM(require("./Login")); +var login_default = import_Login.default; diff --git a/packages/material/lib/password/Password.d.ts b/packages/material/lib/password/Password.d.ts new file mode 100644 index 0000000..47f9c0f --- /dev/null +++ b/packages/material/lib/password/Password.d.ts @@ -0,0 +1,11 @@ +/** + * Created by jiangzhixiong on 2024/03/18 + */ +import { FC } from 'react'; +import { FormProps } from 'antd'; +interface PasswordProps { + onFinish: FormProps['onFinish']; + onCancel: () => void; +} +declare const Password: FC; +export default Password; diff --git a/packages/material/lib/password/Password.js b/packages/material/lib/password/Password.js new file mode 100644 index 0000000..127eefb --- /dev/null +++ b/packages/material/lib/password/Password.js @@ -0,0 +1,96 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/password/Password.tsx +var Password_exports = {}; +__export(Password_exports, { + default: () => Password_default +}); +module.exports = __toCommonJS(Password_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var Password = (props) => { + const { + onFinish, + onCancel + } = props; + const [form] = import_antd.Form.useForm(); + return /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("h2", { style: { marginTop: "0", fontSize: "20px" } }, "修改密码"), /* @__PURE__ */ import_react.default.createElement( + import_antd.Form, + { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, + form, + onFinish + }, + /* @__PURE__ */ import_react.default.createElement( + import_antd.Form.Item, + { + name: "password", + label: "原密码", + rules: [ + { required: true, message: "请输入密码!" } + ] + }, + /* @__PURE__ */ import_react.default.createElement(import_antd.Input.Password, { variant: "borderless", style: { border: "none", borderBottom: "1px solid rgba(0, 0, 0, 0.06)" } }) + ), + /* @__PURE__ */ import_react.default.createElement( + import_antd.Form.Item, + { + name: "newPassword", + label: "新密码", + rules: [ + { required: true, message: "请输入新密码!" } + ] + }, + /* @__PURE__ */ import_react.default.createElement(import_antd.Input.Password, { variant: "borderless", style: { border: "none", borderBottom: "1px solid rgba(0, 0, 0, 0.06)" } }) + ), + /* @__PURE__ */ import_react.default.createElement( + import_antd.Form.Item, + { + name: "rePassword", + label: "确认密码", + dependencies: ["password"], + rules: [ + { required: true, message: "请再次输入密码!" }, + ({ getFieldValue }) => ({ + validator(_, value) { + if (!value || getFieldValue("password") === value) { + return Promise.resolve(); + } + return Promise.reject(new Error("两次输入的密码不一致!")); + } + }) + ] + }, + /* @__PURE__ */ import_react.default.createElement(import_antd.Input.Password, { variant: "borderless", style: { border: "none", borderBottom: "1px solid rgba(0, 0, 0, 0.06)" } }) + ), + /* @__PURE__ */ import_react.default.createElement("div", { style: { textAlign: "right" } }, /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { htmlType: "reset", onClick: onCancel, style: { width: "100px" } }, "取消"), /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { type: "primary", htmlType: "submit", style: { width: "100px" } }, "确认"))) + )); +}; +var Password_default = Password; diff --git a/packages/material/lib/password/index.d.ts b/packages/material/lib/password/index.d.ts new file mode 100644 index 0000000..b102ba8 --- /dev/null +++ b/packages/material/lib/password/index.d.ts @@ -0,0 +1,2 @@ +import Password from './Password'; +export default Password; diff --git a/packages/material/lib/password/index.js b/packages/material/lib/password/index.js new file mode 100644 index 0000000..2112309 --- /dev/null +++ b/packages/material/lib/password/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/password/index.tsx +var password_exports = {}; +__export(password_exports, { + default: () => password_default +}); +module.exports = __toCommonJS(password_exports); +var import_Password = __toESM(require("./Password")); +var password_default = import_Password.default; diff --git a/packages/material/lib/utils/base64Images.d.ts b/packages/material/lib/utils/base64Images.d.ts new file mode 100644 index 0000000..0cd9cac --- /dev/null +++ b/packages/material/lib/utils/base64Images.d.ts @@ -0,0 +1,2 @@ +export declare const AlgorithmConfigImg = "data:image/png;base64,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"; +export declare const ErrorImage = "data:image/png;base64,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"; diff --git a/packages/material/lib/utils/base64Images.js b/packages/material/lib/utils/base64Images.js new file mode 100644 index 0000000..fab01bf --- /dev/null +++ b/packages/material/lib/utils/base64Images.js @@ -0,0 +1,32 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/utils/base64Images.ts +var base64Images_exports = {}; +__export(base64Images_exports, { + AlgorithmConfigImg: () => AlgorithmConfigImg, + ErrorImage: () => ErrorImage +}); +module.exports = __toCommonJS(base64Images_exports); +var AlgorithmConfigImg = "data:image/png;base64,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"; +var ErrorImage = "data:image/png;base64,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"; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + AlgorithmConfigImg, + ErrorImage +}); diff --git a/packages/material/lib/utils/constants.d.ts b/packages/material/lib/utils/constants.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/material/lib/utils/constants.js b/packages/material/lib/utils/constants.js new file mode 100644 index 0000000..e69de29 diff --git a/packages/material/lib/utils/index.d.ts b/packages/material/lib/utils/index.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/material/lib/utils/index.js b/packages/material/lib/utils/index.js new file mode 100644 index 0000000..e69de29 diff --git a/packages/material/lib/utils/types.d.ts b/packages/material/lib/utils/types.d.ts new file mode 100644 index 0000000..69d3304 --- /dev/null +++ b/packages/material/lib/utils/types.d.ts @@ -0,0 +1 @@ +export type AnyObject = Record; diff --git a/packages/material/lib/utils/types.js b/packages/material/lib/utils/types.js new file mode 100644 index 0000000..f863ceb --- /dev/null +++ b/packages/material/lib/utils/types.js @@ -0,0 +1,17 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/utils/types.ts +var types_exports = {}; +module.exports = __toCommonJS(types_exports); diff --git a/packages/material/package.json b/packages/material/package.json index 5f8b27c..1f5e304 100644 --- a/packages/material/package.json +++ b/packages/material/package.json @@ -1,6 +1,6 @@ { "name": "@zhst/material", - "version": "0.7.0", + "version": "0.7.1", "description": "物料库", "keywords": [ "business", diff --git a/packages/material/src/login/Login.tsx b/packages/material/src/login/Login.tsx index f83f29b..ec32d5e 100644 --- a/packages/material/src/login/Login.tsx +++ b/packages/material/src/login/Login.tsx @@ -5,6 +5,10 @@ import React, { FC } from 'react' import { Button, Checkbox, Flex, Form, FormProps, Image, Input, theme } from 'antd'; import { HomeOutlined } from '@ant-design/icons'; +import { isNumber } from '@zhst/func'; +import './index.less' + +const materialName = 'zhst-material-login' const { useToken } = theme @@ -14,6 +18,8 @@ interface LoginProps { rememberPassword?: boolean imageUrl: string; onFinish: FormProps['onFinish'] + width?: string | number + height?: string | number } const Login: FC = (props) => { @@ -22,13 +28,17 @@ const Login: FC = (props) => { onIconClick, rememberPassword = true, imageUrl, + width, + height, onFinish } = props const [form] = Form.useForm(); const { token } = useToken() + console.log('width', width) + return ( - + = (props) => { -
+
diff --git a/packages/material/src/login/demo/basic.tsx b/packages/material/src/login/demo/basic.tsx index dd1a86a..21684dc 100644 --- a/packages/material/src/login/demo/basic.tsx +++ b/packages/material/src/login/demo/basic.tsx @@ -6,10 +6,11 @@ import bg1 from '../images/ai-suanfa.png' const demo = () => { return ( -
+
console.log('val', val)} />
diff --git a/packages/material/src/login/index.less b/packages/material/src/login/index.less new file mode 100644 index 0000000..ccd5c73 --- /dev/null +++ b/packages/material/src/login/index.less @@ -0,0 +1,5 @@ +.zhst-material-login { + &::-webkit-scrollbar { + display: none; + } +} diff --git a/packages/meta/lib/VideoPlayer/VideoPlayer.d.ts b/packages/meta/lib/VideoPlayer/VideoPlayer.d.ts new file mode 100644 index 0000000..cf56091 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/VideoPlayer.d.ts @@ -0,0 +1,18 @@ +import React, { Dispatch, ReactElement, SetStateAction } from 'react'; +import { Rect, IScreenshotButtonProp, AlignType } from '@zhst/types'; +import './index.less'; +export interface VideoViewProps { + url: string; + maxDuration?: number; + screenshotButtonAlign?: AlignType; + screenshotButtonRender?: (screenshotButtonProp: IScreenshotButtonProp) => ReactElement; + defautlNormalizationRect?: Rect; + onCropChange?: (showCrop: boolean, normalizationRect: null | Rect) => void; +} +export interface VideoViewRef { + cropAble: boolean; + setShowCrop: Dispatch>; + downloadVideoframe: () => void; +} +declare const VideoPlayer: React.ForwardRefExoticComponent>; +export default VideoPlayer; diff --git a/packages/meta/lib/VideoPlayer/VideoPlayer.js b/packages/meta/lib/VideoPlayer/VideoPlayer.js new file mode 100644 index 0000000..64b8172 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/VideoPlayer.js @@ -0,0 +1,592 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/VideoPlayer/VideoPlayer.tsx +var VideoPlayer_exports = {}; +__export(VideoPlayer_exports, { + default: () => VideoPlayer_default +}); +module.exports = __toCommonJS(VideoPlayer_exports); +var import_react = __toESM(require("react")); +var import_func = require("@zhst/func"); +var import_rc_align = __toESM(require("rc-align")); +var import_hooks = require("@zhst/hooks"); +var import_classnames = __toESM(require("classnames")); +var import_downloadjs = __toESM(require("downloadjs")); +var import__ = require(".."); +var import_iconfont = __toESM(require("../iconfont")); +var import_ImageEditor = require("../ImageEditor"); +var import_FlvPlayer = __toESM(require("./components/FlvPlayer")); +var import_Progress = __toESM(require("./components/Progress")); +var import_Loading = __toESM(require("./components/Loading")); +var import_constants = require("../utils/constants"); +var import_videoPlayerHelper = require("./videoPlayerHelper"); +var import_index = require("./index.less"); +var componentName = `zhst-image__video-view`; +var VideoPlayer = (0, import_react.forwardRef)((props, ref) => { + const { + url, + maxDuration = 20, + screenshotButtonAlign = { + points: ["bl", "br"], + offset: [6, 0], + overflow: { + adjustX: true, + adjustY: true + } + }, + screenshotButtonRender = () => /* @__PURE__ */ import_react.default.createElement("div", { style: { color: "#fff", width: "80px", top: 0 } }, "回调DOM"), + onCropChange, + defautlNormalizationRect: defaultNormalizationRect + } = props; + const containerRef = (0, import_react.useRef)(null); + const videoRef = (0, import_react.useRef)(null); + const videoInsRef = (0, import_react.useRef)(null); + const [playSeq, setPlaySeq] = (0, import_react.useState)(0); + const videoRemoveListener = (0, import_react.useRef)(import_func.noop); + const loadingTimeRef = (0, import_react.useRef)(0); + const delayLoadingTimer = (0, import_react.useRef)(null); + const [isReady, setIsReady] = (0, import_react.useState)(false); + const [isPlay, setIsPlay] = (0, import_react.useState)(false); + const [isEnd, setIsEnd] = (0, import_react.useState)(false); + const [isError, setIsError] = (0, import_react.useState)(false); + const [isVideoLoadFinished, setIsVideoLoadFinish] = (0, import_react.useState)(false); + const [playTime, setPlayTime] = (0, import_react.useState)(0); + const [isLoadingVideo, setIsLoadingVideo] = (0, import_react.useState)(true); + const [isDelayLoading, setIsDelayLoading] = (0, import_react.useState)(false); + const latestIsLoadingVideo = (0, import_hooks.useLatest)(isLoadingVideo); + const setIsLoadingVideoWrapper = (isLoading) => { + setIsLoadingVideo((preLoading) => { + if (!preLoading && isLoading) { + loadingTimeRef.current = (/* @__PURE__ */ new Date()).getTime(); + } + if (!isLoading) { + loadingTimeRef.current = null; + } + if (!isLoading) { + setIsDelayLoading(false); + } + if (!delayLoadingTimer.current && preLoading) { + delayLoadingTimer.current = setTimeout(() => { + if (latestIsLoadingVideo.current) { + setIsDelayLoading(true); + } + delayLoadingTimer.current = null; + }, 200); + } + return isLoading; + }); + }; + (0, import_react.useEffect)(() => { + let timer = setInterval(() => { + if (loadingTimeRef.current) { + if ((/* @__PURE__ */ new Date()).getTime() - loadingTimeRef.current > 1e3 * 30) { + checkIsErr(); + } + } + }, 1e3); + return () => { + clearInterval(timer); + }; + }, []); + (0, import_hooks.useUpdateEffect)(() => { + var _a, _b; + if (isEnd) { + (_b = (_a = videoInsRef == null ? void 0 : videoInsRef.current) == null ? void 0 : _a.pause) == null ? void 0 : _b.call(_a); + } + }, [isEnd]); + const checkIsErr = () => { + var _a, _b; + setIsError(true); + try { + (_b = (_a = videoInsRef == null ? void 0 : videoInsRef.current) == null ? void 0 : _a.destroy) == null ? void 0 : _b.call(_a); + } catch (error) { + console.error(error); + } + }; + const latestMaxDuration = (0, import_hooks.useLatest)(maxDuration); + const initPlayer = (0, import_react.useCallback)((ins, dom) => { + videoRef.current = dom; + videoInsRef.current = ins; + const maxDuration2 = latestMaxDuration.current || 0; + let video = dom; + let errorLister = (e) => { + checkIsErr(); + console.error("视频出错了", e, video.currentTime); + }; + let waitingListener = () => { + setIsLoadingVideoWrapper(true); + }; + let playingListener = () => { + setIsLoadingVideoWrapper(false); + setIsError(false); + }; + let playLister = () => { + setIsPlay(true); + setIsError(false); + }; + let pauseListener = () => { + setIsPlay(false); + }; + let endedListner = () => { + setIsEnd(true); + setIsVideoLoadFinish(true); + }; + let timeupdateListner = () => { + let nowTime = video.currentTime; + if (nowTime >= maxDuration2) { + setIsEnd(true); + setIsVideoLoadFinish(true); + } + setPlayTime(nowTime); + }; + let windowErrorHandle = (errorEvent) => { + try { + if (errorEvent["message"] == "Uncaught TypeError: Cannot read property 'flushStashedSamples' of null") { + checkIsErr(); + console.error("视频出错了 window监听", errorEvent); + } + } catch (error) { + console.error(error); + } + }; + video.addEventListener("error", errorLister); + video.addEventListener("waiting", waitingListener); + video.addEventListener("playing", playingListener); + video.addEventListener("play", playLister); + video.addEventListener("pause", pauseListener); + video.addEventListener("ended", endedListner); + video.addEventListener("timeupdate", timeupdateListner); + window.addEventListener("error", windowErrorHandle); + videoRemoveListener.current = () => { + video.removeEventListener("error", errorLister); + video.removeEventListener("waiting", waitingListener); + video.removeEventListener("playing", playingListener); + video.removeEventListener("play", playLister); + video.removeEventListener("pause", pauseListener); + video.removeEventListener("ended", endedListner); + video.removeEventListener("timeupdate", timeupdateListner); + window.removeEventListener("error", windowErrorHandle); + }; + videoInsRef == null ? void 0 : videoInsRef.current.on(import_FlvPlayer.FLV_EVENT.ERROR, (type, errDetail, info) => { + checkIsErr(); + console.error("videoInsRef 错误", type, errDetail, info, video.currentTime); + }); + let playPromise = videoInsRef == null ? void 0 : videoInsRef.current.play(); + setIsReady(true); + playPromise.then(() => { + setIsReady(true); + }).catch((...arg) => { + try { + } catch (error) { + } + console.error("playPromise视频出错了", arg); + }); + }, []); + (0, import_hooks.useUnmount)(() => { + try { + videoRemoveListener.current(); + } catch (e) { + console.error(e); + } + }); + const reload = async () => { + if (videoInsRef.current) { + let oldTime = videoInsRef.current.currentTime; + videoInsRef.current.currentTime = 0; + if (oldTime === videoInsRef.current.currentTime) { + setIsReady(false); + setIsPlay(false); + setIsLoadingVideoWrapper(false); + setIsReady(false); + setIsEnd(false); + setIsVideoLoadFinish(false); + setPlayTime(0); + try { + videoRemoveListener.current(); + } catch (error) { + console.error(error); + } + setPlaySeq((pre) => pre + 1); + return; + } + videoInsRef.current.play(); + } + setPlayTime(0); + setIsEnd(false); + }; + const seek = (v) => { + if (videoInsRef.current && isVideoLoadFinished) { + setPlayTime(parseFloat(v)); + videoInsRef.current.currentTime = parseFloat(v); + } else { + import__.message.warning("待视频加载完,才可操作进度条"); + } + }; + const [isFullscreen, { toggleFullscreen }] = (0, import_hooks.useFullscreen)(containerRef, { + pageFullscreen: true + }); + const showMaxDuration = !!maxDuration ? maxDuration : (0, import_func.toRealNumber)((0, import_func.get)(videoRef, "current.duration", 0)); + const showSlider = videoInsRef.current && isVideoLoadFinished; + const showStatus = (0, import_videoPlayerHelper.getShowStatus)(isDelayLoading, isEnd, isError); + const corpContainerRef = (0, import_react.useRef)(); + const cropInsRef = (0, import_react.useRef)(null); + const [showCrop, setShowCrop] = (0, import_react.useState)(false); + const isFirstFlagRef = (0, import_react.useRef)(true); + (0, import_react.useEffect)(() => { + const isFirst = isFirstFlagRef.current; + if (!isLoadingVideo && isReady && isFirst && defaultNormalizationRect && !showStatus) { + (0, import_func.nextTick)(() => { + setShowCrop(true); + }); + } + }, [isLoadingVideo, showStatus]); + const alginContainerRef = (0, import_react.useRef)(null); + const alignRef = (0, import_react.useRef)(null); + const [cropRect, setCropRect] = (0, import_react.useState)(null); + (0, import_react.useEffect)(() => { + var _a, _b; + showCrop ? (_a = videoInsRef == null ? void 0 : videoInsRef.current) == null ? void 0 : _a.pause() : (_b = videoInsRef == null ? void 0 : videoInsRef.current) == null ? void 0 : _b.play(); + }, [showCrop]); + (0, import_react.useEffect)(() => { + var _a; + let handlerCropStart; + let handlerCropEnd; + setCropRect(null); + if (!isReady) + return; + if (showCrop) { + handlerCropStart = (0, import_func.addEventListenerWrapper)(corpContainerRef.current, import_ImageEditor.EVENT_CROP_START, () => { + setCropRect(null); + }); + handlerCropEnd = (0, import_func.addEventListenerWrapper)(corpContainerRef.current, import_ImageEditor.EVENT_CROP_END, (event) => { + var _a2, _b; + const data = event.detail; + setCropRect({ + x: data.left, + y: data.top, + w: data.width, + h: data.height + }); + (_b = (_a2 = alignRef == null ? void 0 : alignRef.current) == null ? void 0 : _a2.forceAlign) == null ? void 0 : _b.call(_a2); + }); + let video = videoRef.current; + let scale = Math.min( + video.offsetWidth / video.videoWidth, + video.offsetHeight / video.videoHeight + ); + let finalVideoWidth = video.videoWidth * scale; + let finalVideoHeight = video.videoHeight * scale; + let cropBoxLimited = { + width: finalVideoWidth, + height: finalVideoHeight, + top: (video.offsetHeight - finalVideoHeight) / 2, + left: (video.offsetWidth - finalVideoWidth) / 2 + }; + let canvas = document.createElement("canvas"); + canvas.width = video.offsetWidth; + canvas.height = video.offsetHeight; + canvas.style.display = "none"; + document.body.appendChild(canvas); + let ctx = canvas.getContext("2d"); + ctx == null ? void 0 : ctx.drawImage( + video, + (video.offsetWidth - finalVideoWidth) / 2, + (video.offsetHeight - finalVideoHeight) / 2, + finalVideoWidth, + finalVideoHeight + ); + let imageData = canvas.toDataURL("image/png"); + (_a = canvas.parentNode) == null ? void 0 : _a.removeChild(canvas); + const isFirst = isFirstFlagRef.current; + let initialCropBoxData = null; + if (isFirst && defaultNormalizationRect) { + initialCropBoxData = { + left: defaultNormalizationRect.x * finalVideoWidth + cropBoxLimited.left, + top: defaultNormalizationRect.y * finalVideoHeight + cropBoxLimited.top, + width: defaultNormalizationRect.w * finalVideoWidth, + height: defaultNormalizationRect.h * finalVideoHeight + }; + } + isFirstFlagRef.current = false; + cropInsRef.current = new import_ImageEditor.Cropper(corpContainerRef.current, { + showMask: true, + cropBoxLimited, + img: imageData, + initialCropBoxData + }); + } + return () => { + var _a2, _b; + handlerCropStart == null ? void 0 : handlerCropStart.remove(); + handlerCropEnd == null ? void 0 : handlerCropEnd.remove(); + (_b = (_a2 = cropInsRef == null ? void 0 : cropInsRef.current) == null ? void 0 : _a2.destroy) == null ? void 0 : _b.call(_a2); + cropInsRef.current = null; + }; + }, [showCrop, isReady]); + const latestCropRect = (0, import_hooks.useLatest)(cropRect); + const getCropInfo = async () => { + var _a; + const cropRect2 = latestCropRect.current; + let video = videoRef.current; + if (!video) + return; + let rectList = []; + let extendRectList = []; + let selectIndex = 0; + let scale = Math.min( + video.offsetWidth / video.videoWidth, + video.offsetHeight / video.videoHeight + ); + let finalVideoWidth = video.videoWidth * scale; + let finalVideoHeight = video.videoHeight * scale; + let canvas = document.createElement("canvas"); + canvas.width = finalVideoWidth; + canvas.height = finalVideoHeight; + canvas.style.display = "none"; + document.body.appendChild(canvas); + let ctx = canvas.getContext("2d"); + ctx.drawImage( + video, + 0, + 0, + finalVideoWidth, + finalVideoHeight + ); + let base64 = canvas.toDataURL("image/jpeg"); + const blobData = (0, import_func.dataURLToBlob)(base64); + (_a = canvas.parentNode) == null ? void 0 : _a.removeChild(canvas); + const file = new window.File([blobData], `${(/* @__PURE__ */ new Date()).getTime()}`); + let newRect = { + w: cropRect2.w / finalVideoWidth, + h: cropRect2.h / finalVideoHeight, + x: (cropRect2.x - (video.offsetWidth - finalVideoWidth) / 2) / finalVideoWidth, + y: (cropRect2.y - (video.offsetHeight - finalVideoHeight) / 2) / finalVideoHeight + }; + rectList.push(newRect); + extendRectList.push(newRect); + extendRectList.forEach(async (rect, index) => { + extendRectList[index] = { + ...rect + }; + }); + return { + rectList, + extendRectList, + selectIndex, + file + }; + }; + (0, import_react.useEffect)(() => { + let normalizationRect = null; + if (showCrop && cropRect) { + let video = videoRef.current; + let scale = Math.min( + video.offsetWidth / video.videoWidth, + video.offsetHeight / video.videoHeight + ); + let finalVideoWidth = video.videoWidth * scale; + let finalVideoHeight = video.videoHeight * scale; + let cropBoxLimited = { + width: finalVideoWidth, + height: finalVideoHeight, + top: (video.offsetHeight - finalVideoHeight) / 2, + left: (video.offsetWidth - finalVideoWidth) / 2 + }; + normalizationRect = { + x: (cropRect.x - cropBoxLimited.left) / cropBoxLimited.width, + y: (cropRect.y - cropBoxLimited.top) / cropBoxLimited.height, + w: cropRect.w / cropBoxLimited.width, + h: cropRect.h / cropBoxLimited.height + }; + } + onCropChange == null ? void 0 : onCropChange(showCrop, normalizationRect); + }, [showCrop, cropRect]); + const downloadVideoframe = (0, import_react.useCallback)(async () => { + var _a, _b; + try { + (_b = (_a = videoInsRef == null ? void 0 : videoInsRef.current) == null ? void 0 : _a.pause) == null ? void 0 : _b.call(_a); + let video = videoRef.current; + var canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + let base64; + if (video.readyState === 0) { + ctx == null ? void 0 : ctx.clearRect(0, 0, canvas.width, canvas.height); + canvas.width = video.offsetWidth; + canvas.height = video.offsetHeight; + ctx.fillStyle = "black"; + ctx == null ? void 0 : ctx.fillRect(0, 0, canvas.width, canvas.height); + base64 = canvas.toDataURL(); + } else { + canvas.width = video.videoWidth; + canvas.height = video.videoHeight; + ctx == null ? void 0 : ctx.drawImage(video, 0, 0, canvas.width, canvas.height); + base64 = canvas.toDataURL("image/png"); + } + (0, import_downloadjs.default)(base64); + } catch (error) { + console.error(error); + } + }, []); + const latestIsReady = (0, import_hooks.useLatest)(isReady); + const cropAble = !showStatus && isReady; + (0, import_react.useImperativeHandle)(ref, () => ({ + cropAble, + setShowCrop: (dispatch) => { + const isReady2 = latestIsReady.current; + if (!isReady2) + return; + setShowCrop(dispatch); + }, + downloadVideoframe + })); + return /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_classnames.default)(`${componentName}`), ref: containerRef }, url && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement( + import_FlvPlayer.default, + { + playId: playSeq, + autoPlay: true, + className: (0, import_classnames.default)(`${componentName}-flv`), + type: url.startsWith("http") ? "mp4" : "flv", + url, + config: { + enableStashBuffer: true, + stashInitialSize: 1024 * 700, + isLive: true, + hasAudio: false, + hasVideo: true + }, + onCreat: initPlayer + } + ), /* @__PURE__ */ import_react.default.createElement( + "div", + { + className: (0, import_classnames.default)(`${componentName}-crop-container`), + ref: corpContainerRef, + style: { + display: isFullscreen ? "none" : "block" + } + } + ), showCrop && cropRect && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement( + "div", + { + ref: alginContainerRef, + className: (0, import_classnames.default)(`${componentName}-align`), + style: Object.assign( + { + width: cropRect.w, + height: cropRect.h + }, + (0, import_func.getTransforms)({ + translateX: cropRect.x, + translateY: cropRect.y + }) + ) + } + ), /* @__PURE__ */ import_react.default.createElement( + import_rc_align.default, + { + ref: alignRef, + monitorWindowResize: true, + align: screenshotButtonAlign, + target: function() { + return alginContainerRef.current; + } + }, + screenshotButtonRender({ + model: "IMAGE", + getCropInfo, + setShowCrop, + cropType: import_constants.CROP_TYPE["CUSTOM"] + }) + )), !showCrop && /* @__PURE__ */ import_react.default.createElement("div", { className: `${componentName}-opt` }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement( + import__.Button, + { + type: "text", + onClick: () => { + var _a, _b; + if (!isPlay) { + (_a = videoInsRef == null ? void 0 : videoInsRef.current) == null ? void 0 : _a.play(); + setShowCrop(false); + } else { + (_b = videoInsRef == null ? void 0 : videoInsRef.current) == null ? void 0 : _b.pause(); + } + } + }, + /* @__PURE__ */ import_react.default.createElement( + import_iconfont.default, + { + styles: { + color: "#fff", + display: "flex" + }, + color: "#1890ff", + icon: !isPlay ? "icon-shipinbofang" : "icon-shipinzanting" + } + ) + )), /* @__PURE__ */ import_react.default.createElement( + "div", + { + className: `${componentName}-opt-range`, + onClick: (e) => { + e.stopPropagation(); + } + }, + /* @__PURE__ */ import_react.default.createElement( + import_Progress.default, + { + value: playTime, + min: 0, + max: showMaxDuration, + showSlider, + onChange: seek + } + ), + /* @__PURE__ */ import_react.default.createElement("div", null, (0, import_func.formatDurationTime)(playTime), "/", (0, import_func.formatDurationTime)(showMaxDuration)) + ), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement( + import__.Button, + { + type: "text", + onClick: (e) => { + e.stopPropagation(); + toggleFullscreen(); + } + }, + /* @__PURE__ */ import_react.default.createElement( + import_iconfont.default, + { + styles: { + color: "#fff", + display: "flex" + }, + size: 18, + icon: isFullscreen ? "icon-cancle_fullscreen" : "icon-fullscreen" + } + ) + ))), !!showStatus && /* @__PURE__ */ import_react.default.createElement(import_Loading.default, { status: showStatus, reload: () => reload() }))); +}); +var VideoPlayer_default = VideoPlayer; diff --git a/packages/meta/lib/VideoPlayer/components/FlvPlayer/index.d.ts b/packages/meta/lib/VideoPlayer/components/FlvPlayer/index.d.ts new file mode 100644 index 0000000..646b267 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/components/FlvPlayer/index.d.ts @@ -0,0 +1,46 @@ +import React, { Component, CSSProperties } from 'react'; +import flvjs from 'flv.js'; +export declare const FLV_EVENT: Readonly; +export interface VideoPlayerProps { + className: string; + style?: CSSProperties; + type: string; + isLive?: boolean; + cors?: boolean; + withCredentials?: boolean; + playId?: number; + hasAudio?: boolean; + hasVideo?: boolean; + duration?: number; + filesize?: number; + url?: string; + autoPlay?: boolean; + onCreat?: any; + /** + * @see https://github.com/Bilibili/flv.js/blob/master/docs/api.md#config + */ + config: object; +} +export default class VideoPlayer extends Component { + state: { + curPlayUrl: string; + shouldReinit: boolean; + }; + flvPlayer: any; + videoElement: null; + static getDerivedStateFromProps: (nextProps: { + url?: any; + playId?: any; + }, prevState: { + curPlayUrl?: any; + playId?: any; + }) => { + playId: any; + curPlayUrl: any; + shouldReinit: boolean; + } | null; + initFlv: ($video: null) => void; + componentWillUnmount(): void; + componentDidUpdate(): void; + render(): React.JSX.Element; +} diff --git a/packages/meta/lib/VideoPlayer/components/FlvPlayer/index.js b/packages/meta/lib/VideoPlayer/components/FlvPlayer/index.js new file mode 100644 index 0000000..38230d2 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/components/FlvPlayer/index.js @@ -0,0 +1,144 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/VideoPlayer/components/FlvPlayer/index.tsx +var FlvPlayer_exports = {}; +__export(FlvPlayer_exports, { + FLV_EVENT: () => FLV_EVENT, + default: () => VideoPlayer +}); +module.exports = __toCommonJS(FlvPlayer_exports); +var import_react = __toESM(require("react")); +var import_flv = __toESM(require("flv.js")); +var import_func = require("@zhst/func"); +var FLV_EVENT = import_flv.default.Events; +var VideoPlayer = class extends import_react.Component { + constructor() { + super(...arguments); + this.state = { + curPlayUrl: "", + shouldReinit: false + }; + this.flvPlayer = null; + this.videoElement = null; + this.initFlv = ($video) => { + this.videoElement = $video; + const { className, autoPlay = true, config = {}, onCreat, playId, ...others } = this.props; + if ($video) { + if (import_flv.default.isSupported() && this.props.url && this.props.url) { + const reload = () => { + if (this.flvPlayer && this.flvPlayer.destroy) { + try { + this.flvPlayer.destroy(); + } catch (error) { + console.error(error); + } + } + let flvPlayer = import_flv.default.createPlayer({ ...others }, { + deferLoadAfterSourceOpen: false, + ...config + }); + flvPlayer.attachMediaElement($video); + flvPlayer.load(); + this.flvPlayer = flvPlayer; + let controller = this.flvPlayer._transmuxer._controller; + let wsLoader = controller._ioctl._loader; + const oldWsOnCompleteFunc = wsLoader._onComplete; + wsLoader._onComplete = function() { + if (!controller._remuxer) { + controller._remuxer = { + destroy: () => { + console.log("组件销毁"); + }, + flushStashedSamples: () => { + console.log("flushStashedSamples"); + } + }; + } + oldWsOnCompleteFunc(); + }; + this.flvPlayer.reload = reload; + onCreat && onCreat(this.flvPlayer, $video); + }; + reload(); + onCreat && onCreat(this.flvPlayer, $video); + } + } + }; + } + componentWillUnmount() { + var _a, _b; + if (this.flvPlayer) { + (_a = this.flvPlayer) == null ? void 0 : _a.unload(); + (_b = this.flvPlayer) == null ? void 0 : _b.detachMediaElement(); + } + } + componentDidUpdate() { + if (this.state.shouldReinit) { + this.setState({ shouldReinit: false }); + this.initFlv(this.videoElement); + } + } + render() { + const { className, style } = this.props; + return /* @__PURE__ */ import_react.default.createElement( + "video", + { + muted: true, + preload: "metadata", + className, + style: Object.assign( + { + width: "100%", + height: "100%" + }, + style ? style : {} + ), + ref: this.initFlv + } + ); + } +}; +VideoPlayer.getDerivedStateFromProps = (nextProps, prevState) => { + const { playId = 0 } = nextProps; + const { playId: prePlayId = 0 } = prevState; + if (nextProps.url !== void 0) { + if (!(0, import_func.isEqual)(nextProps.url, prevState.curPlayUrl) || !(0, import_func.isEqual)(playId, prePlayId)) { + return { + playId, + curPlayUrl: nextProps.url, + shouldReinit: true + }; + } + } + return null; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + FLV_EVENT +}); diff --git a/packages/meta/lib/VideoPlayer/components/Loading/index.d.ts b/packages/meta/lib/VideoPlayer/components/Loading/index.d.ts new file mode 100644 index 0000000..1509947 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/components/Loading/index.d.ts @@ -0,0 +1,8 @@ +import { FC } from 'react'; +import './index.less'; +export interface ILoading { + status: 'LOADING' | 'COMPLETED' | 'END' | 'ERROR' | null; + reload: () => void; +} +declare const Loading: FC; +export default Loading; diff --git a/packages/meta/lib/VideoPlayer/components/Loading/index.js b/packages/meta/lib/VideoPlayer/components/Loading/index.js new file mode 100644 index 0000000..150c54d --- /dev/null +++ b/packages/meta/lib/VideoPlayer/components/Loading/index.js @@ -0,0 +1,84 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/VideoPlayer/components/Loading/index.tsx +var Loading_exports = {}; +__export(Loading_exports, { + default: () => Loading_default +}); +module.exports = __toCommonJS(Loading_exports); +var import_react = __toESM(require("react")); +var import_antd = require("antd"); +var import_classnames = __toESM(require("classnames")); +var import_iconfont = __toESM(require("../../../iconfont")); +var import_index = require("./index.less"); +var componentName = `zhst-image__video-view`; +var Loading = (props) => { + const { status, reload } = props; + return /* @__PURE__ */ import_react.default.createElement( + "div", + { + className: (0, import_classnames.default)(`${componentName}__player-mask`), + onClick: (e) => { + e.stopPropagation(); + } + }, + status === "LOADING" && /* @__PURE__ */ import_react.default.createElement(import_antd.Spin, { tip: "加载中...", spinning: status === "LOADING" }), + status === "END" && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement( + "div", + { + onClick: () => { + reload(); + }, + className: (0, import_classnames.default)(`${componentName}__icon-wraper`) + }, + /* @__PURE__ */ import_react.default.createElement( + import_iconfont.default, + { + styles: { + fill: "#ffffff", + color: "#ffffff" + }, + size: 54, + icon: "icon-shuaxin" + } + ) + ), /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_classnames.default)(`${componentName}__player-mask-title`) }, "点击刷新后,将重新播放")), + status === "ERROR" && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_classnames.default)(`${componentName}__icon-wraper`) }, /* @__PURE__ */ import_react.default.createElement( + import_iconfont.default, + { + styles: { + color: "#ffffff" + }, + size: 54, + icon: "icon-jiazaishibai" + } + )), /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_classnames.default)(`${componentName}__player-mask-title`) }, "视频加载失败,", /* @__PURE__ */ import_react.default.createElement("a", { onClick: reload }, " ", "刷新"))) + ); +}; +var Loading_default = Loading; diff --git a/packages/meta/lib/VideoPlayer/components/Loading/index.less b/packages/meta/lib/VideoPlayer/components/Loading/index.less new file mode 100644 index 0000000..b6c11a2 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/components/Loading/index.less @@ -0,0 +1,53 @@ +.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/lib/VideoPlayer/components/Progress/index.d.ts b/packages/meta/lib/VideoPlayer/components/Progress/index.d.ts new file mode 100644 index 0000000..7fb0a10 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/components/Progress/index.d.ts @@ -0,0 +1,10 @@ +import React from 'react'; +import type { SliderSingleProps } from 'antd'; +import './index.less'; +export interface RangeWrapperProps extends SliderSingleProps { + showSlider: boolean; + className?: string; + min: number; +} +export declare const Range: React.FC; +export default Range; diff --git a/packages/meta/lib/VideoPlayer/components/Progress/index.js b/packages/meta/lib/VideoPlayer/components/Progress/index.js new file mode 100644 index 0000000..92e0d85 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/components/Progress/index.js @@ -0,0 +1,60 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/VideoPlayer/components/Progress/index.tsx +var Progress_exports = {}; +__export(Progress_exports, { + Range: () => Range, + default: () => Progress_default +}); +module.exports = __toCommonJS(Progress_exports); +var import_react = __toESM(require("react")); +var import_classnames = __toESM(require("classnames")); +var import_antd = require("antd"); +var import_index = require("./index.less"); +var componentName = `zhst-image__range`; +var Range = (props) => { + const { className, style, showSlider = true, ...others } = props; + return /* @__PURE__ */ import_react.default.createElement( + "div", + { + style, + className: (0, import_classnames.default)( + `${componentName}`, + !showSlider && `${componentName}--no-slider`, + className + ) + }, + /* @__PURE__ */ import_react.default.createElement(import_antd.Slider, { ...others }) + ); +}; +var Progress_default = Range; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + Range +}); diff --git a/packages/meta/lib/VideoPlayer/components/Progress/index.less b/packages/meta/lib/VideoPlayer/components/Progress/index.less new file mode 100644 index 0000000..e922211 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/components/Progress/index.less @@ -0,0 +1,49 @@ +.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/lib/VideoPlayer/index.d.ts b/packages/meta/lib/VideoPlayer/index.d.ts new file mode 100644 index 0000000..a1993e1 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/index.d.ts @@ -0,0 +1,3 @@ +import VideoPlayer from './VideoPlayer'; +export type { VideoViewProps, VideoViewRef } from './VideoPlayer'; +export default VideoPlayer; diff --git a/packages/meta/lib/VideoPlayer/index.js b/packages/meta/lib/VideoPlayer/index.js new file mode 100644 index 0000000..7d136ea --- /dev/null +++ b/packages/meta/lib/VideoPlayer/index.js @@ -0,0 +1,36 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/VideoPlayer/index.tsx +var VideoPlayer_exports = {}; +__export(VideoPlayer_exports, { + default: () => VideoPlayer_default +}); +module.exports = __toCommonJS(VideoPlayer_exports); +var import_VideoPlayer = __toESM(require("./VideoPlayer")); +var VideoPlayer_default = import_VideoPlayer.default; diff --git a/packages/meta/lib/VideoPlayer/index.less b/packages/meta/lib/VideoPlayer/index.less new file mode 100644 index 0000000..181e65c --- /dev/null +++ b/packages/meta/lib/VideoPlayer/index.less @@ -0,0 +1,75 @@ +.zhst-image__video-view { + position: relative; + overflow: hidden; + width: 100%; + height: 532px; + 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; + 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/lib/VideoPlayer/videoPlayerHelper.d.ts b/packages/meta/lib/VideoPlayer/videoPlayerHelper.d.ts new file mode 100644 index 0000000..661a7c1 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/videoPlayerHelper.d.ts @@ -0,0 +1 @@ +export declare function getShowStatus(isLoadingVideo: boolean, isEnd: boolean, isError: boolean): string | null; diff --git a/packages/meta/lib/VideoPlayer/videoPlayerHelper.js b/packages/meta/lib/VideoPlayer/videoPlayerHelper.js new file mode 100644 index 0000000..6ef0b97 --- /dev/null +++ b/packages/meta/lib/VideoPlayer/videoPlayerHelper.js @@ -0,0 +1,41 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/VideoPlayer/videoPlayerHelper.ts +var videoPlayerHelper_exports = {}; +__export(videoPlayerHelper_exports, { + getShowStatus: () => getShowStatus +}); +module.exports = __toCommonJS(videoPlayerHelper_exports); +function getShowStatus(isLoadingVideo, isEnd, isError) { + let status = null; + if (isLoadingVideo) { + status = "LOADING"; + } + if (isError) { + status = "ERROR"; + } + if (isEnd) { + status = "END"; + } + return status; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getShowStatus +}); diff --git a/packages/meta/lib/_util/ActionButton.d.ts b/packages/meta/lib/_util/ActionButton.d.ts new file mode 100644 index 0000000..c4f4df3 --- /dev/null +++ b/packages/meta/lib/_util/ActionButton.d.ts @@ -0,0 +1,19 @@ +import * as React from 'react'; +import type { ButtonProps, LegacyButtonType } from '../button/button'; +export interface ActionButtonProps { + type?: LegacyButtonType; + actionFn?: (...args: any[]) => any | PromiseLike; + close?: Function; + autoFocus?: boolean; + prefixCls: string; + buttonProps?: ButtonProps; + emitEvent?: boolean; + quitOnNullishReturnValue?: boolean; + children?: React.ReactNode; + /** + * Do not throw if is await mode + */ + isSilent?: () => boolean; +} +declare const ActionButton: React.FC; +export default ActionButton; diff --git a/packages/meta/lib/_util/ActionButton.js b/packages/meta/lib/_util/ActionButton.js new file mode 100644 index 0000000..dff757d --- /dev/null +++ b/packages/meta/lib/_util/ActionButton.js @@ -0,0 +1,138 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/ActionButton.tsx +var ActionButton_exports = {}; +__export(ActionButton_exports, { + default: () => ActionButton_default +}); +module.exports = __toCommonJS(ActionButton_exports); +var import_useState = __toESM(require("rc-util/lib/hooks/useState")); +var React = __toESM(require("react")); +var import_button = __toESM(require("../button")); +var import_buttonHelpers = require("../button/buttonHelpers"); +function isThenable(thing) { + return !!(thing && thing.then); +} +var ActionButton = (props) => { + const { + type, + children, + prefixCls, + buttonProps, + close, + autoFocus, + emitEvent, + isSilent, + quitOnNullishReturnValue, + actionFn + } = props; + const clickedRef = React.useRef(false); + const buttonRef = React.useRef(null); + const [loading, setLoading] = (0, import_useState.default)(false); + const onInternalClose = (...args) => { + close == null ? void 0 : close(...args); + }; + React.useEffect(() => { + let timeoutId = null; + if (autoFocus) { + timeoutId = setTimeout(() => { + var _a; + (_a = buttonRef.current) == null ? void 0 : _a.focus(); + }); + } + return () => { + if (timeoutId) { + clearTimeout(timeoutId); + } + }; + }, []); + const handlePromiseOnOk = (returnValueOfOnOk) => { + if (!isThenable(returnValueOfOnOk)) { + return; + } + setLoading(true); + returnValueOfOnOk.then( + (...args) => { + setLoading(false, true); + onInternalClose(...args); + clickedRef.current = false; + }, + (e) => { + setLoading(false, true); + clickedRef.current = false; + if (isSilent == null ? void 0 : isSilent()) { + return; + } + return Promise.reject(e); + } + ); + }; + const onClick = (e) => { + if (clickedRef.current) { + return; + } + clickedRef.current = true; + if (!actionFn) { + onInternalClose(); + return; + } + let returnValueOfOnOk; + if (emitEvent) { + returnValueOfOnOk = actionFn(e); + if (quitOnNullishReturnValue && !isThenable(returnValueOfOnOk)) { + clickedRef.current = false; + onInternalClose(e); + return; + } + } else if (actionFn.length) { + returnValueOfOnOk = actionFn(close); + clickedRef.current = false; + } else { + returnValueOfOnOk = actionFn(); + if (!returnValueOfOnOk) { + onInternalClose(); + return; + } + } + handlePromiseOnOk(returnValueOfOnOk); + }; + return /* @__PURE__ */ React.createElement( + import_button.default, + { + ...(0, import_buttonHelpers.convertLegacyProps)(type), + onClick, + loading, + prefixCls, + ...buttonProps, + ref: buttonRef + }, + children + ); +}; +var ActionButton_default = ActionButton; diff --git a/packages/meta/lib/_util/PurePanel.d.ts b/packages/meta/lib/_util/PurePanel.d.ts new file mode 100644 index 0000000..6637350 --- /dev/null +++ b/packages/meta/lib/_util/PurePanel.d.ts @@ -0,0 +1,9 @@ +import * as React from 'react'; +import type { AnyObject } from './type'; +export declare function withPureRenderTheme(Component: React.FC): (props: T) => React.JSX.Element; +export interface BaseProps { + prefixCls?: string; + style?: React.CSSProperties; +} +declare const genPurePanel: (Component: any, defaultPrefixCls?: string, getDropdownCls?: ((prefixCls: string) => string) | null | undefined, postProps?: ((props: ComponentProps) => ComponentProps) | undefined) => (props: AnyObject) => React.JSX.Element; +export default genPurePanel; diff --git a/packages/meta/lib/_util/PurePanel.js b/packages/meta/lib/_util/PurePanel.js new file mode 100644 index 0000000..b3e5440 --- /dev/null +++ b/packages/meta/lib/_util/PurePanel.js @@ -0,0 +1,102 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/PurePanel.tsx +var PurePanel_exports = {}; +__export(PurePanel_exports, { + default: () => PurePanel_default, + withPureRenderTheme: () => withPureRenderTheme +}); +module.exports = __toCommonJS(PurePanel_exports); +var React = __toESM(require("react")); +var import_useMergedState = __toESM(require("rc-util/lib/hooks/useMergedState")); +var import_config_provider = __toESM(require("../config-provider")); +function withPureRenderTheme(Component) { + return (props) => /* @__PURE__ */ React.createElement(import_config_provider.default, { theme: { token: { motion: false, zIndexPopupBase: 0 } } }, /* @__PURE__ */ React.createElement(Component, { ...props })); +} +var genPurePanel = (Component, defaultPrefixCls, getDropdownCls, postProps) => { + const PurePanel = (props) => { + const { prefixCls: customizePrefixCls, style } = props; + const holderRef = React.useRef(null); + const [popupHeight, setPopupHeight] = React.useState(0); + const [popupWidth, setPopupWidth] = React.useState(0); + const [open, setOpen] = (0, import_useMergedState.default)(false, { + value: props.open + }); + const { getPrefixCls } = React.useContext(import_config_provider.ConfigContext); + const prefixCls = getPrefixCls(defaultPrefixCls || "select", customizePrefixCls); + React.useEffect(() => { + setOpen(true); + if (typeof ResizeObserver !== "undefined") { + const resizeObserver = new ResizeObserver((entries) => { + const element = entries[0].target; + setPopupHeight(element.offsetHeight + 8); + setPopupWidth(element.offsetWidth); + }); + const interval = setInterval(() => { + var _a; + const dropdownCls = getDropdownCls ? `.${getDropdownCls(prefixCls)}` : `.${prefixCls}-dropdown`; + const popup = (_a = holderRef.current) == null ? void 0 : _a.querySelector(dropdownCls); + if (popup) { + clearInterval(interval); + resizeObserver.observe(popup); + } + }, 10); + return () => { + clearInterval(interval); + resizeObserver.disconnect(); + }; + } + }, []); + let mergedProps = { + ...props, + style: { + ...style, + margin: 0 + }, + open, + visible: open, + getPopupContainer: () => holderRef.current + }; + if (postProps) { + mergedProps = postProps(mergedProps); + } + const mergedStyle = { + paddingBottom: popupHeight, + position: "relative", + minWidth: popupWidth + }; + return /* @__PURE__ */ React.createElement("div", { ref: holderRef, style: mergedStyle }, /* @__PURE__ */ React.createElement(Component, { ...mergedProps })); + }; + return withPureRenderTheme(PurePanel); +}; +var PurePanel_default = genPurePanel; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + withPureRenderTheme +}); diff --git a/packages/meta/lib/_util/capitalize.d.ts b/packages/meta/lib/_util/capitalize.d.ts new file mode 100644 index 0000000..56a42d7 --- /dev/null +++ b/packages/meta/lib/_util/capitalize.d.ts @@ -0,0 +1 @@ +export default function capitalize(str: T): Capitalize; diff --git a/packages/meta/lib/_util/capitalize.js b/packages/meta/lib/_util/capitalize.js new file mode 100644 index 0000000..9a44513 --- /dev/null +++ b/packages/meta/lib/_util/capitalize.js @@ -0,0 +1,31 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/capitalize.ts +var capitalize_exports = {}; +__export(capitalize_exports, { + default: () => capitalize +}); +module.exports = __toCommonJS(capitalize_exports); +function capitalize(str) { + if (typeof str !== "string") { + return str; + } + const ret = str.charAt(0).toUpperCase() + str.slice(1); + return ret; +} diff --git a/packages/meta/lib/_util/colors.d.ts b/packages/meta/lib/_util/colors.d.ts new file mode 100644 index 0000000..a058c3d --- /dev/null +++ b/packages/meta/lib/_util/colors.d.ts @@ -0,0 +1,13 @@ +import type { PresetColorKey } from '../theme/interface'; +type InverseColor = `${PresetColorKey}-inverse`; +export declare const PresetStatusColorTypes: readonly ["success", "processing", "error", "default", "warning"]; +export type PresetColorType = PresetColorKey | InverseColor; +export type PresetStatusColorType = typeof PresetStatusColorTypes[number]; +/** + * determine if the color keyword belongs to the `Ant Design` {@link PresetColors}. + * @param color color to be judged + * @param includeInverse whether to include reversed colors + */ +export declare function isPresetColor(color?: any, includeInverse?: boolean): boolean; +export declare function isPresetStatusColor(color?: any): color is PresetStatusColorType; +export {}; diff --git a/packages/meta/lib/_util/colors.js b/packages/meta/lib/_util/colors.js new file mode 100644 index 0000000..b066b89 --- /dev/null +++ b/packages/meta/lib/_util/colors.js @@ -0,0 +1,50 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/colors.ts +var colors_exports = {}; +__export(colors_exports, { + PresetStatusColorTypes: () => PresetStatusColorTypes, + isPresetColor: () => isPresetColor, + isPresetStatusColor: () => isPresetStatusColor +}); +module.exports = __toCommonJS(colors_exports); +var import_interface = require("../theme/interface"); +var inverseColors = import_interface.PresetColors.map((color) => `${color}-inverse`); +var PresetStatusColorTypes = [ + "success", + "processing", + "error", + "default", + "warning" +]; +function isPresetColor(color, includeInverse = true) { + if (includeInverse) { + return [...inverseColors, ...import_interface.PresetColors].includes(color); + } + return import_interface.PresetColors.includes(color); +} +function isPresetStatusColor(color) { + return PresetStatusColorTypes.includes(color); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + PresetStatusColorTypes, + isPresetColor, + isPresetStatusColor +}); diff --git a/packages/meta/lib/_util/easings.d.ts b/packages/meta/lib/_util/easings.d.ts new file mode 100644 index 0000000..86c44ba --- /dev/null +++ b/packages/meta/lib/_util/easings.d.ts @@ -0,0 +1 @@ +export declare function easeInOutCubic(t: number, b: number, c: number, d: number): number; diff --git a/packages/meta/lib/_util/easings.js b/packages/meta/lib/_util/easings.js new file mode 100644 index 0000000..ad48853 --- /dev/null +++ b/packages/meta/lib/_util/easings.js @@ -0,0 +1,36 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/easings.ts +var easings_exports = {}; +__export(easings_exports, { + easeInOutCubic: () => easeInOutCubic +}); +module.exports = __toCommonJS(easings_exports); +function easeInOutCubic(t, b, c, d) { + const cc = c - b; + t /= d / 2; + if (t < 1) { + return cc / 2 * t * t * t + b; + } + return cc / 2 * ((t -= 2) * t * t + 2) + b; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + easeInOutCubic +}); diff --git a/packages/meta/lib/_util/extendsObject.d.ts b/packages/meta/lib/_util/extendsObject.d.ts new file mode 100644 index 0000000..66ece2f --- /dev/null +++ b/packages/meta/lib/_util/extendsObject.d.ts @@ -0,0 +1,3 @@ +import type { AnyObject } from './type'; +declare const extendsObject: (...list: T[]) => AnyObject; +export default extendsObject; diff --git a/packages/meta/lib/_util/extendsObject.js b/packages/meta/lib/_util/extendsObject.js new file mode 100644 index 0000000..d69f012 --- /dev/null +++ b/packages/meta/lib/_util/extendsObject.js @@ -0,0 +1,40 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/extendsObject.ts +var extendsObject_exports = {}; +__export(extendsObject_exports, { + default: () => extendsObject_default +}); +module.exports = __toCommonJS(extendsObject_exports); +var extendsObject = (...list) => { + const result = { ...list[0] }; + for (let i = 1; i < list.length; i++) { + const obj = list[i]; + if (obj) { + Object.keys(obj).forEach((key) => { + const val = obj[key]; + if (val !== void 0) { + result[key] = val; + } + }); + } + } + return result; +}; +var extendsObject_default = extendsObject; diff --git a/packages/meta/lib/_util/gapSize.d.ts b/packages/meta/lib/_util/gapSize.d.ts new file mode 100644 index 0000000..c0ad4d6 --- /dev/null +++ b/packages/meta/lib/_util/gapSize.d.ts @@ -0,0 +1,3 @@ +import type { SizeType } from '../config-provider/SizeContext'; +export declare function isPresetSize(size?: SizeType | string | number): size is SizeType; +export declare function isValidGapNumber(size?: SizeType | string | number): size is number; diff --git a/packages/meta/lib/_util/gapSize.js b/packages/meta/lib/_util/gapSize.js new file mode 100644 index 0000000..b329bcc --- /dev/null +++ b/packages/meta/lib/_util/gapSize.js @@ -0,0 +1,39 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/gapSize.ts +var gapSize_exports = {}; +__export(gapSize_exports, { + isPresetSize: () => isPresetSize, + isValidGapNumber: () => isValidGapNumber +}); +module.exports = __toCommonJS(gapSize_exports); +function isPresetSize(size) { + return ["small", "middle", "large"].includes(size); +} +function isValidGapNumber(size) { + if (!size) { + return false; + } + return typeof size === "number" && !Number.isNaN(size); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + isPresetSize, + isValidGapNumber +}); diff --git a/packages/meta/lib/_util/getRenderPropValue.d.ts b/packages/meta/lib/_util/getRenderPropValue.d.ts new file mode 100644 index 0000000..76a463b --- /dev/null +++ b/packages/meta/lib/_util/getRenderPropValue.d.ts @@ -0,0 +1,3 @@ +import type * as React from 'react'; +export type RenderFunction = () => React.ReactNode; +export declare const getRenderPropValue: (propValue?: React.ReactNode | RenderFunction) => React.ReactNode; diff --git a/packages/meta/lib/_util/getRenderPropValue.js b/packages/meta/lib/_util/getRenderPropValue.js new file mode 100644 index 0000000..c5fc23a --- /dev/null +++ b/packages/meta/lib/_util/getRenderPropValue.js @@ -0,0 +1,34 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/getRenderPropValue.ts +var getRenderPropValue_exports = {}; +__export(getRenderPropValue_exports, { + getRenderPropValue: () => getRenderPropValue +}); +module.exports = __toCommonJS(getRenderPropValue_exports); +var getRenderPropValue = (propValue) => { + if (!propValue) { + return null; + } + return typeof propValue === "function" ? propValue() : propValue; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getRenderPropValue +}); diff --git a/packages/meta/lib/_util/getScroll.d.ts b/packages/meta/lib/_util/getScroll.d.ts new file mode 100644 index 0000000..6db588e --- /dev/null +++ b/packages/meta/lib/_util/getScroll.d.ts @@ -0,0 +1,2 @@ +export declare function isWindow(obj: any): obj is Window; +export default function getScroll(target: HTMLElement | Window | Document | null, top: boolean): number; diff --git a/packages/meta/lib/_util/getScroll.js b/packages/meta/lib/_util/getScroll.js new file mode 100644 index 0000000..fabc0bb --- /dev/null +++ b/packages/meta/lib/_util/getScroll.js @@ -0,0 +1,53 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/getScroll.ts +var getScroll_exports = {}; +__export(getScroll_exports, { + default: () => getScroll, + isWindow: () => isWindow +}); +module.exports = __toCommonJS(getScroll_exports); +function isWindow(obj) { + return obj !== null && obj !== void 0 && obj === obj.window; +} +function getScroll(target, top) { + var _a; + if (typeof window === "undefined") { + return 0; + } + const method = top ? "scrollTop" : "scrollLeft"; + let result = 0; + if (isWindow(target)) { + result = target[top ? "pageYOffset" : "pageXOffset"]; + } else if (target instanceof Document) { + result = target.documentElement[method]; + } else if (target instanceof HTMLElement) { + result = target[method]; + } else if (target) { + result = target[method]; + } + if (target && !isWindow(target) && typeof result !== "number") { + result = (_a = (target.ownerDocument ?? target).documentElement) == null ? void 0 : _a[method]; + } + return result; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + isWindow +}); diff --git a/packages/meta/lib/_util/hooks/useClosable.d.ts b/packages/meta/lib/_util/hooks/useClosable.d.ts new file mode 100644 index 0000000..eea0042 --- /dev/null +++ b/packages/meta/lib/_util/hooks/useClosable.d.ts @@ -0,0 +1,10 @@ +import type { ReactNode } from 'react'; +import React from 'react'; +export type UseClosableParams = { + closable?: boolean; + closeIcon?: boolean | ReactNode; + defaultClosable?: boolean; + defaultCloseIcon?: ReactNode; + customCloseIconRender?: (closeIcon: ReactNode) => ReactNode; +}; +export default function useClosable(closable?: boolean, closeIcon?: boolean | ReactNode, customCloseIconRender?: (closeIcon: ReactNode) => ReactNode, defaultCloseIcon?: ReactNode, defaultClosable?: boolean): [closable: boolean, closeIcon: React.ReactNode | null]; diff --git a/packages/meta/lib/_util/hooks/useClosable.js b/packages/meta/lib/_util/hooks/useClosable.js new file mode 100644 index 0000000..7760da8 --- /dev/null +++ b/packages/meta/lib/_util/hooks/useClosable.js @@ -0,0 +1,53 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/hooks/useClosable.tsx +var useClosable_exports = {}; +__export(useClosable_exports, { + default: () => useClosable +}); +module.exports = __toCommonJS(useClosable_exports); +var import_CloseOutlined = __toESM(require("@ant-design/icons/CloseOutlined")); +var import_react = __toESM(require("react")); +function useInnerClosable(closable, closeIcon, defaultClosable) { + if (typeof closable === "boolean") { + return closable; + } + if (closeIcon === void 0) { + return !!defaultClosable; + } + return closeIcon !== false && closeIcon !== null; +} +function useClosable(closable, closeIcon, customCloseIconRender, defaultCloseIcon = /* @__PURE__ */ import_react.default.createElement(import_CloseOutlined.default, null), defaultClosable = false) { + const mergedClosable = useInnerClosable(closable, closeIcon, defaultClosable); + if (!mergedClosable) { + return [false, null]; + } + const mergedCloseIcon = typeof closeIcon === "boolean" || closeIcon === void 0 || closeIcon === null ? defaultCloseIcon : closeIcon; + return [true, customCloseIconRender ? customCloseIconRender(mergedCloseIcon) : mergedCloseIcon]; +} diff --git a/packages/meta/lib/_util/hooks/useForceUpdate.d.ts b/packages/meta/lib/_util/hooks/useForceUpdate.d.ts new file mode 100644 index 0000000..b6b0e9f --- /dev/null +++ b/packages/meta/lib/_util/hooks/useForceUpdate.d.ts @@ -0,0 +1,2 @@ +import * as React from 'react'; +export default function useForceUpdate(): React.DispatchWithoutAction; diff --git a/packages/meta/lib/_util/hooks/useForceUpdate.js b/packages/meta/lib/_util/hooks/useForceUpdate.js new file mode 100644 index 0000000..54beae2 --- /dev/null +++ b/packages/meta/lib/_util/hooks/useForceUpdate.js @@ -0,0 +1,39 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/hooks/useForceUpdate.ts +var useForceUpdate_exports = {}; +__export(useForceUpdate_exports, { + default: () => useForceUpdate +}); +module.exports = __toCommonJS(useForceUpdate_exports); +var React = __toESM(require("react")); +function useForceUpdate() { + const [, forceUpdate] = React.useReducer((x) => x + 1, 0); + return forceUpdate; +} diff --git a/packages/meta/lib/_util/hooks/useMultipleSelect.d.ts b/packages/meta/lib/_util/hooks/useMultipleSelect.d.ts new file mode 100644 index 0000000..d613a5c --- /dev/null +++ b/packages/meta/lib/_util/hooks/useMultipleSelect.d.ts @@ -0,0 +1,6 @@ +export type PrevSelectedIndex = null | number; +/** + * @title multipleSelect hooks + * @description multipleSelect by hold down shift key + */ +export default function useMultipleSelect(getKey: (item: T) => K): readonly [(currentSelectedIndex: number, data: T[], selectedKeys: Set) => K[], (val: PrevSelectedIndex) => void]; diff --git a/packages/meta/lib/_util/hooks/useMultipleSelect.js b/packages/meta/lib/_util/hooks/useMultipleSelect.js new file mode 100644 index 0000000..50139cf --- /dev/null +++ b/packages/meta/lib/_util/hooks/useMultipleSelect.js @@ -0,0 +1,56 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/hooks/useMultipleSelect.ts +var useMultipleSelect_exports = {}; +__export(useMultipleSelect_exports, { + default: () => useMultipleSelect +}); +module.exports = __toCommonJS(useMultipleSelect_exports); +var import_react = require("react"); +function useMultipleSelect(getKey) { + const [prevSelectedIndex, setPrevSelectedIndex] = (0, import_react.useState)(null); + const multipleSelect = (0, import_react.useCallback)( + (currentSelectedIndex, data, selectedKeys) => { + const configPrevSelectedIndex = prevSelectedIndex ?? currentSelectedIndex; + const startIndex = Math.min(configPrevSelectedIndex || 0, currentSelectedIndex); + const endIndex = Math.max(configPrevSelectedIndex || 0, currentSelectedIndex); + const rangeKeys = data.slice(startIndex, endIndex + 1).map((item) => getKey(item)); + const shouldSelected = rangeKeys.some((rangeKey) => !selectedKeys.has(rangeKey)); + const changedKeys = []; + rangeKeys.forEach((item) => { + if (shouldSelected) { + if (!selectedKeys.has(item)) { + changedKeys.push(item); + } + selectedKeys.add(item); + } else { + selectedKeys.delete(item); + changedKeys.push(item); + } + }); + setPrevSelectedIndex(shouldSelected ? endIndex : null); + return changedKeys; + }, + [prevSelectedIndex] + ); + const updatePrevSelectedIndex = (val) => { + setPrevSelectedIndex(val); + }; + return [multipleSelect, updatePrevSelectedIndex]; +} diff --git a/packages/meta/lib/_util/hooks/usePatchElement.d.ts b/packages/meta/lib/_util/hooks/usePatchElement.d.ts new file mode 100644 index 0000000..e53aa7e --- /dev/null +++ b/packages/meta/lib/_util/hooks/usePatchElement.d.ts @@ -0,0 +1,5 @@ +import * as React from 'react'; +export default function usePatchElement(): [ + React.ReactElement[], + (element: React.ReactElement) => Function +]; diff --git a/packages/meta/lib/_util/hooks/usePatchElement.js b/packages/meta/lib/_util/hooks/usePatchElement.js new file mode 100644 index 0000000..75aa9f1 --- /dev/null +++ b/packages/meta/lib/_util/hooks/usePatchElement.js @@ -0,0 +1,45 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/hooks/usePatchElement.ts +var usePatchElement_exports = {}; +__export(usePatchElement_exports, { + default: () => usePatchElement +}); +module.exports = __toCommonJS(usePatchElement_exports); +var React = __toESM(require("react")); +function usePatchElement() { + const [elements, setElements] = React.useState([]); + const patchElement = React.useCallback((element) => { + setElements((originElements) => [...originElements, element]); + return () => { + setElements((originElements) => originElements.filter((ele) => ele !== element)); + }; + }, []); + return [elements, patchElement]; +} diff --git a/packages/meta/lib/_util/hooks/useProxyImperativeHandle.d.ts b/packages/meta/lib/_util/hooks/useProxyImperativeHandle.d.ts new file mode 100644 index 0000000..2004e3b --- /dev/null +++ b/packages/meta/lib/_util/hooks/useProxyImperativeHandle.d.ts @@ -0,0 +1,4 @@ +import { type Ref } from 'react'; +export default function useProxyImperativeHandle(ref: Ref | undefined, init: () => ReturnRefType): void; diff --git a/packages/meta/lib/_util/hooks/useProxyImperativeHandle.js b/packages/meta/lib/_util/hooks/useProxyImperativeHandle.js new file mode 100644 index 0000000..8d180d5 --- /dev/null +++ b/packages/meta/lib/_util/hooks/useProxyImperativeHandle.js @@ -0,0 +1,53 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/hooks/useProxyImperativeHandle.ts +var useProxyImperativeHandle_exports = {}; +__export(useProxyImperativeHandle_exports, { + default: () => useProxyImperativeHandle +}); +module.exports = __toCommonJS(useProxyImperativeHandle_exports); +var import_react = require("react"); +function fillProxy(element, handler) { + element._antProxy = element._antProxy || {}; + Object.keys(handler).forEach((key) => { + if (!(key in element._antProxy)) { + const ori = element[key]; + element._antProxy[key] = ori; + element[key] = handler[key]; + } + }); + return element; +} +function useProxyImperativeHandle(ref, init) { + return (0, import_react.useImperativeHandle)(ref, () => { + const refObj = init(); + const { nativeElement } = refObj; + if (typeof Proxy !== "undefined") { + return new Proxy(nativeElement, { + get(obj, prop) { + if (refObj[prop]) { + return refObj[prop]; + } + return Reflect.get(obj, prop); + } + }); + } + return fillProxy(nativeElement, refObj); + }); +} diff --git a/packages/meta/lib/_util/hooks/useSyncState.d.ts b/packages/meta/lib/_util/hooks/useSyncState.d.ts new file mode 100644 index 0000000..ad9131c --- /dev/null +++ b/packages/meta/lib/_util/hooks/useSyncState.d.ts @@ -0,0 +1,3 @@ +type UseSyncStateProps = readonly [() => T, (newValue: T) => void]; +export default function useSyncState(initialValue: T): UseSyncStateProps; +export {}; diff --git a/packages/meta/lib/_util/hooks/useSyncState.js b/packages/meta/lib/_util/hooks/useSyncState.js new file mode 100644 index 0000000..d30dd81 --- /dev/null +++ b/packages/meta/lib/_util/hooks/useSyncState.js @@ -0,0 +1,47 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/hooks/useSyncState.ts +var useSyncState_exports = {}; +__export(useSyncState_exports, { + default: () => useSyncState +}); +module.exports = __toCommonJS(useSyncState_exports); +var React = __toESM(require("react")); +var import_useForceUpdate = __toESM(require("./useForceUpdate")); +function useSyncState(initialValue) { + const ref = React.useRef(initialValue); + const forceUpdate = (0, import_useForceUpdate.default)(); + return [ + () => ref.current, + (newValue) => { + ref.current = newValue; + forceUpdate(); + } + ]; +} diff --git a/packages/meta/lib/_util/hooks/useZIndex.d.ts b/packages/meta/lib/_util/hooks/useZIndex.d.ts new file mode 100644 index 0000000..856f9d3 --- /dev/null +++ b/packages/meta/lib/_util/hooks/useZIndex.d.ts @@ -0,0 +1,6 @@ +export type ZIndexContainer = 'Modal' | 'Drawer' | 'Popover' | 'Popconfirm' | 'Tooltip' | 'Tour'; +export type ZIndexConsumer = 'SelectLike' | 'Dropdown' | 'DatePicker' | 'Menu' | 'ImagePreview'; +export declare const CONTAINER_MAX_OFFSET: number; +export declare const containerBaseZIndexOffset: Record; +export declare const consumerBaseZIndexOffset: Record; +export declare function useZIndex(componentType: ZIndexContainer | ZIndexConsumer, customZIndex?: number): [zIndex: number | undefined, contextZIndex: number]; diff --git a/packages/meta/lib/_util/hooks/useZIndex.js b/packages/meta/lib/_util/hooks/useZIndex.js new file mode 100644 index 0000000..4654505 --- /dev/null +++ b/packages/meta/lib/_util/hooks/useZIndex.js @@ -0,0 +1,86 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/hooks/useZIndex.ts +var useZIndex_exports = {}; +__export(useZIndex_exports, { + CONTAINER_MAX_OFFSET: () => CONTAINER_MAX_OFFSET, + consumerBaseZIndexOffset: () => consumerBaseZIndexOffset, + containerBaseZIndexOffset: () => containerBaseZIndexOffset, + useZIndex: () => useZIndex +}); +module.exports = __toCommonJS(useZIndex_exports); +var import_react = __toESM(require("react")); +var import_useToken = __toESM(require("../../theme/useToken")); +var import_zindexContext = __toESM(require("../zindexContext")); +var CONTAINER_OFFSET = 100; +var CONTAINER_OFFSET_MAX_COUNT = 10; +var CONTAINER_MAX_OFFSET = CONTAINER_OFFSET * CONTAINER_OFFSET_MAX_COUNT; +var containerBaseZIndexOffset = { + Modal: CONTAINER_OFFSET, + Drawer: CONTAINER_OFFSET, + Popover: CONTAINER_OFFSET, + Popconfirm: CONTAINER_OFFSET, + Tooltip: CONTAINER_OFFSET, + Tour: CONTAINER_OFFSET +}; +var consumerBaseZIndexOffset = { + SelectLike: 50, + Dropdown: 50, + DatePicker: 50, + Menu: 50, + ImagePreview: 1 +}; +function isContainerType(type) { + return type in containerBaseZIndexOffset; +} +function useZIndex(componentType, customZIndex) { + const [, token] = (0, import_useToken.default)(); + const parentZIndex = import_react.default.useContext(import_zindexContext.default); + const isContainer = isContainerType(componentType); + if (customZIndex !== void 0) { + return [customZIndex, customZIndex]; + } + let zIndex = parentZIndex ?? 0; + if (isContainer) { + zIndex += // Use preset token zIndex by default but not stack when has parent container + (parentZIndex ? 0 : token.zIndexPopupBase) + // Container offset + containerBaseZIndexOffset[componentType]; + zIndex = Math.min(zIndex, token.zIndexPopupBase + CONTAINER_MAX_OFFSET); + } else { + zIndex += consumerBaseZIndexOffset[componentType]; + } + return [parentZIndex === void 0 ? customZIndex : zIndex, zIndex]; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + CONTAINER_MAX_OFFSET, + consumerBaseZIndexOffset, + containerBaseZIndexOffset, + useZIndex +}); diff --git a/packages/meta/lib/_util/isNumeric.d.ts b/packages/meta/lib/_util/isNumeric.d.ts new file mode 100644 index 0000000..249431b --- /dev/null +++ b/packages/meta/lib/_util/isNumeric.d.ts @@ -0,0 +1,2 @@ +declare const isNumeric: (value: any) => boolean; +export default isNumeric; diff --git a/packages/meta/lib/_util/isNumeric.js b/packages/meta/lib/_util/isNumeric.js new file mode 100644 index 0000000..7cfc437 --- /dev/null +++ b/packages/meta/lib/_util/isNumeric.js @@ -0,0 +1,26 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/isNumeric.ts +var isNumeric_exports = {}; +__export(isNumeric_exports, { + default: () => isNumeric_default +}); +module.exports = __toCommonJS(isNumeric_exports); +var isNumeric = (value) => !isNaN(parseFloat(value)) && isFinite(value); +var isNumeric_default = isNumeric; diff --git a/packages/meta/lib/_util/motion.d.ts b/packages/meta/lib/_util/motion.d.ts new file mode 100644 index 0000000..db7cff4 --- /dev/null +++ b/packages/meta/lib/_util/motion.d.ts @@ -0,0 +1,7 @@ +import type { CSSMotionProps } from 'rc-motion'; +declare const initCollapseMotion: (rootCls?: string) => CSSMotionProps; +declare const SelectPlacements: readonly ["bottomLeft", "bottomRight", "topLeft", "topRight"]; +export type SelectCommonPlacement = typeof SelectPlacements[number]; +declare const getTransitionName: (rootPrefixCls: string, motion: string, transitionName?: string) => string; +export { getTransitionName }; +export default initCollapseMotion; diff --git a/packages/meta/lib/_util/motion.js b/packages/meta/lib/_util/motion.js new file mode 100644 index 0000000..6f886c6 --- /dev/null +++ b/packages/meta/lib/_util/motion.js @@ -0,0 +1,56 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/motion.ts +var motion_exports = {}; +__export(motion_exports, { + default: () => motion_default, + getTransitionName: () => getTransitionName +}); +module.exports = __toCommonJS(motion_exports); +var getCollapsedHeight = () => ({ height: 0, opacity: 0 }); +var getRealHeight = (node) => { + const { scrollHeight } = node; + return { height: scrollHeight, opacity: 1 }; +}; +var getCurrentHeight = (node) => ({ height: node ? node.offsetHeight : 0 }); +var skipOpacityTransition = (_, event) => (event == null ? void 0 : event.deadline) === true || event.propertyName === "height"; +var initCollapseMotion = (rootCls = "ant") => ({ + motionName: `${rootCls}-motion-collapse`, + onAppearStart: getCollapsedHeight, + onEnterStart: getCollapsedHeight, + onAppearActive: getRealHeight, + onEnterActive: getRealHeight, + onLeaveStart: getCurrentHeight, + onLeaveActive: getCollapsedHeight, + onAppearEnd: skipOpacityTransition, + onEnterEnd: skipOpacityTransition, + onLeaveEnd: skipOpacityTransition, + motionDeadline: 500 +}); +var getTransitionName = (rootPrefixCls, motion, transitionName) => { + if (transitionName !== void 0) { + return transitionName; + } + return `${rootPrefixCls}-${motion}`; +}; +var motion_default = initCollapseMotion; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getTransitionName +}); diff --git a/packages/meta/lib/_util/placements.d.ts b/packages/meta/lib/_util/placements.d.ts new file mode 100644 index 0000000..de2bf6b --- /dev/null +++ b/packages/meta/lib/_util/placements.d.ts @@ -0,0 +1,21 @@ +import type { BuildInPlacements } from '@rc-component/trigger'; +import { getArrowOffsetToken } from '../style/placementArrow'; +export interface AdjustOverflow { + adjustX?: 0 | 1; + adjustY?: 0 | 1; +} +export interface PlacementsConfig { + arrowWidth: number; + arrowPointAtCenter?: boolean; + autoAdjustOverflow?: boolean | AdjustOverflow; + offset: number; + borderRadius: number; + visibleFirst?: boolean; +} +export declare function getOverflowOptions(placement: string, arrowOffset: ReturnType, arrowWidth: number, autoAdjustOverflow?: boolean | AdjustOverflow): { + adjustX?: number | boolean | undefined; + adjustY?: number | boolean | undefined; + shiftX?: number | boolean | undefined; + shiftY?: number | boolean | undefined; +}; +export default function getPlacements(config: PlacementsConfig): BuildInPlacements; diff --git a/packages/meta/lib/_util/placements.js b/packages/meta/lib/_util/placements.js new file mode 100644 index 0000000..8e3c118 --- /dev/null +++ b/packages/meta/lib/_util/placements.js @@ -0,0 +1,207 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/placements.ts +var placements_exports = {}; +__export(placements_exports, { + default: () => getPlacements, + getOverflowOptions: () => getOverflowOptions +}); +module.exports = __toCommonJS(placements_exports); +var import_placementArrow = require("../style/placementArrow"); +function getOverflowOptions(placement, arrowOffset, arrowWidth, autoAdjustOverflow) { + if (autoAdjustOverflow === false) { + return { + adjustX: false, + adjustY: false + }; + } + const overflow = autoAdjustOverflow && typeof autoAdjustOverflow === "object" ? autoAdjustOverflow : {}; + const baseOverflow = {}; + switch (placement) { + case "top": + case "bottom": + baseOverflow.shiftX = arrowOffset.arrowOffsetHorizontal * 2 + arrowWidth; + baseOverflow.shiftY = true; + baseOverflow.adjustY = true; + break; + case "left": + case "right": + baseOverflow.shiftY = arrowOffset.arrowOffsetVertical * 2 + arrowWidth; + baseOverflow.shiftX = true; + baseOverflow.adjustX = true; + break; + } + const mergedOverflow = { + ...baseOverflow, + ...overflow + }; + if (!mergedOverflow.shiftX) { + mergedOverflow.adjustX = true; + } + if (!mergedOverflow.shiftY) { + mergedOverflow.adjustY = true; + } + return mergedOverflow; +} +var PlacementAlignMap = { + left: { + points: ["cr", "cl"] + }, + right: { + points: ["cl", "cr"] + }, + top: { + points: ["bc", "tc"] + }, + bottom: { + points: ["tc", "bc"] + }, + topLeft: { + points: ["bl", "tl"] + }, + leftTop: { + points: ["tr", "tl"] + }, + topRight: { + points: ["br", "tr"] + }, + rightTop: { + points: ["tl", "tr"] + }, + bottomRight: { + points: ["tr", "br"] + }, + rightBottom: { + points: ["bl", "br"] + }, + bottomLeft: { + points: ["tl", "bl"] + }, + leftBottom: { + points: ["br", "bl"] + } +}; +var ArrowCenterPlacementAlignMap = { + topLeft: { + points: ["bl", "tc"] + }, + leftTop: { + points: ["tr", "cl"] + }, + topRight: { + points: ["br", "tc"] + }, + rightTop: { + points: ["tl", "cr"] + }, + bottomRight: { + points: ["tr", "bc"] + }, + rightBottom: { + points: ["bl", "cr"] + }, + bottomLeft: { + points: ["tl", "bc"] + }, + leftBottom: { + points: ["br", "cl"] + } +}; +var DisableAutoArrowList = /* @__PURE__ */ new Set([ + "topLeft", + "topRight", + "bottomLeft", + "bottomRight", + "leftTop", + "leftBottom", + "rightTop", + "rightBottom" +]); +function getPlacements(config) { + const { arrowWidth, autoAdjustOverflow, arrowPointAtCenter, offset, borderRadius, visibleFirst } = config; + const halfArrowWidth = arrowWidth / 2; + const placementMap = {}; + Object.keys(PlacementAlignMap).forEach((key) => { + const template = arrowPointAtCenter && ArrowCenterPlacementAlignMap[key] || PlacementAlignMap[key]; + const placementInfo = { + ...template, + offset: [0, 0], + dynamicInset: true + }; + placementMap[key] = placementInfo; + if (DisableAutoArrowList.has(key)) { + placementInfo.autoArrow = false; + } + switch (key) { + case "top": + case "topLeft": + case "topRight": + placementInfo.offset[1] = -halfArrowWidth - offset; + break; + case "bottom": + case "bottomLeft": + case "bottomRight": + placementInfo.offset[1] = halfArrowWidth + offset; + break; + case "left": + case "leftTop": + case "leftBottom": + placementInfo.offset[0] = -halfArrowWidth - offset; + break; + case "right": + case "rightTop": + case "rightBottom": + placementInfo.offset[0] = halfArrowWidth + offset; + break; + } + const arrowOffset = (0, import_placementArrow.getArrowOffsetToken)({ + contentRadius: borderRadius, + limitVerticalRadius: true + }); + if (arrowPointAtCenter) { + switch (key) { + case "topLeft": + case "bottomLeft": + placementInfo.offset[0] = -arrowOffset.arrowOffsetHorizontal - halfArrowWidth; + break; + case "topRight": + case "bottomRight": + placementInfo.offset[0] = arrowOffset.arrowOffsetHorizontal + halfArrowWidth; + break; + case "leftTop": + case "rightTop": + placementInfo.offset[1] = -arrowOffset.arrowOffsetHorizontal - halfArrowWidth; + break; + case "leftBottom": + case "rightBottom": + placementInfo.offset[1] = arrowOffset.arrowOffsetHorizontal + halfArrowWidth; + break; + } + } + placementInfo.overflow = getOverflowOptions(key, arrowOffset, arrowWidth, autoAdjustOverflow); + if (visibleFirst) { + placementInfo.htmlRegion = "visibleFirst"; + } + }); + return placementMap; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getOverflowOptions +}); diff --git a/packages/meta/lib/_util/reactNode.d.ts b/packages/meta/lib/_util/reactNode.d.ts new file mode 100644 index 0000000..76a8884 --- /dev/null +++ b/packages/meta/lib/_util/reactNode.d.ts @@ -0,0 +1,8 @@ +import * as React from 'react'; +import type { AnyObject } from './type'; +export declare const isValidElement: typeof React.isValidElement; +export declare function isFragment(child: any): boolean; +type RenderProps = AnyObject | ((originProps: AnyObject) => AnyObject | void); +export declare function replaceElement(element: React.ReactNode, replacement: React.ReactNode, props?: RenderProps): React.ReactNode; +export declare function cloneElement(element: React.ReactNode, props?: RenderProps): React.ReactElement; +export {}; diff --git a/packages/meta/lib/_util/reactNode.js b/packages/meta/lib/_util/reactNode.js new file mode 100644 index 0000000..6d6f752 --- /dev/null +++ b/packages/meta/lib/_util/reactNode.js @@ -0,0 +1,61 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/reactNode.ts +var reactNode_exports = {}; +__export(reactNode_exports, { + cloneElement: () => cloneElement2, + isFragment: () => isFragment, + isValidElement: () => isValidElement, + replaceElement: () => replaceElement +}); +module.exports = __toCommonJS(reactNode_exports); +var React = __toESM(require("react")); +var { isValidElement } = React; +function isFragment(child) { + return child && isValidElement(child) && child.type === React.Fragment; +} +function replaceElement(element, replacement, props) { + if (!isValidElement(element)) { + return replacement; + } + return React.cloneElement( + element, + typeof props === "function" ? props(element.props || {}) : props + ); +} +function cloneElement2(element, props) { + return replaceElement(element, element, props); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + cloneElement, + isFragment, + isValidElement, + replaceElement +}); diff --git a/packages/meta/lib/_util/responsiveObserver.d.ts b/packages/meta/lib/_util/responsiveObserver.d.ts new file mode 100644 index 0000000..275cc88 --- /dev/null +++ b/packages/meta/lib/_util/responsiveObserver.d.ts @@ -0,0 +1,22 @@ +export type Breakpoint = 'xxl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs'; +export type BreakpointMap = Record; +export type ScreenMap = Partial>; +export type ScreenSizeMap = Partial>; +export declare const responsiveArray: Breakpoint[]; +type SubscribeFunc = (screens: ScreenMap) => void; +export default function useResponsiveObserver(): { + matchHandlers: { + [prop: string]: { + mql: MediaQueryList; + listener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null; + }; + }; + dispatch(pointMap: ScreenMap): boolean; + subscribe(func: SubscribeFunc): number; + unsubscribe(paramToken: number): void; + unregister(): void; + register(): void; + responsiveMap: BreakpointMap; +}; +export declare const matchScreen: (screens: ScreenMap, screenSizes?: ScreenSizeMap) => number | undefined; +export {}; diff --git a/packages/meta/lib/_util/responsiveObserver.js b/packages/meta/lib/_util/responsiveObserver.js new file mode 100644 index 0000000..7ffe879 --- /dev/null +++ b/packages/meta/lib/_util/responsiveObserver.js @@ -0,0 +1,149 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/responsiveObserver.ts +var responsiveObserver_exports = {}; +__export(responsiveObserver_exports, { + default: () => useResponsiveObserver, + matchScreen: () => matchScreen, + responsiveArray: () => responsiveArray +}); +module.exports = __toCommonJS(responsiveObserver_exports); +var import_react = __toESM(require("react")); +var import_internal = require("../theme/internal"); +var responsiveArray = ["xxl", "xl", "lg", "md", "sm", "xs"]; +var getResponsiveMap = (token) => ({ + xs: `(max-width: ${token.screenXSMax}px)`, + sm: `(min-width: ${token.screenSM}px)`, + md: `(min-width: ${token.screenMD}px)`, + lg: `(min-width: ${token.screenLG}px)`, + xl: `(min-width: ${token.screenXL}px)`, + xxl: `(min-width: ${token.screenXXL}px)` +}); +var validateBreakpoints = (token) => { + const indexableToken = token; + const revBreakpoints = [...responsiveArray].reverse(); + revBreakpoints.forEach((breakpoint, i) => { + const breakpointUpper = breakpoint.toUpperCase(); + const screenMin = `screen${breakpointUpper}Min`; + const screen = `screen${breakpointUpper}`; + if (!(indexableToken[screenMin] <= indexableToken[screen])) { + throw new Error( + `${screenMin}<=${screen} fails : !(${indexableToken[screenMin]}<=${indexableToken[screen]})` + ); + } + if (i < revBreakpoints.length - 1) { + const screenMax = `screen${breakpointUpper}Max`; + if (!(indexableToken[screen] <= indexableToken[screenMax])) { + throw new Error( + `${screen}<=${screenMax} fails : !(${indexableToken[screen]}<=${indexableToken[screenMax]})` + ); + } + const nextBreakpointUpperMin = revBreakpoints[i + 1].toUpperCase(); + const nextScreenMin = `screen${nextBreakpointUpperMin}Min`; + if (!(indexableToken[screenMax] <= indexableToken[nextScreenMin])) { + throw new Error( + `${screenMax}<=${nextScreenMin} fails : !(${indexableToken[screenMax]}<=${indexableToken[nextScreenMin]})` + ); + } + } + }); + return token; +}; +function useResponsiveObserver() { + const [, token] = (0, import_internal.useToken)(); + const responsiveMap = getResponsiveMap(validateBreakpoints(token)); + return import_react.default.useMemo(() => { + const subscribers = /* @__PURE__ */ new Map(); + let subUid = -1; + let screens = {}; + return { + matchHandlers: {}, + dispatch(pointMap) { + screens = pointMap; + subscribers.forEach((func) => func(screens)); + return subscribers.size >= 1; + }, + subscribe(func) { + if (!subscribers.size) + this.register(); + subUid += 1; + subscribers.set(subUid, func); + func(screens); + return subUid; + }, + unsubscribe(paramToken) { + subscribers.delete(paramToken); + if (!subscribers.size) + this.unregister(); + }, + unregister() { + Object.keys(responsiveMap).forEach((screen) => { + const matchMediaQuery = responsiveMap[screen]; + const handler = this.matchHandlers[matchMediaQuery]; + handler == null ? void 0 : handler.mql.removeListener(handler == null ? void 0 : handler.listener); + }); + subscribers.clear(); + }, + register() { + Object.keys(responsiveMap).forEach((screen) => { + const matchMediaQuery = responsiveMap[screen]; + const listener = ({ matches }) => { + this.dispatch({ + ...screens, + [screen]: matches + }); + }; + const mql = window.matchMedia(matchMediaQuery); + mql.addListener(listener); + this.matchHandlers[matchMediaQuery] = { + mql, + listener + }; + listener(mql); + }); + }, + responsiveMap + }; + }, [token]); +} +var matchScreen = (screens, screenSizes) => { + if (screenSizes && typeof screenSizes === "object") { + for (let i = 0; i < responsiveArray.length; i++) { + const breakpoint = responsiveArray[i]; + if (screens[breakpoint] && screenSizes[breakpoint] !== void 0) { + return screenSizes[breakpoint]; + } + } + } +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + matchScreen, + responsiveArray +}); diff --git a/packages/meta/lib/_util/scrollTo.d.ts b/packages/meta/lib/_util/scrollTo.d.ts new file mode 100644 index 0000000..21fd3f9 --- /dev/null +++ b/packages/meta/lib/_util/scrollTo.d.ts @@ -0,0 +1,10 @@ +interface ScrollToOptions { + /** Scroll container, default as window */ + getContainer?: () => HTMLElement | Window | Document; + /** Scroll end callback */ + callback?: () => void; + /** Animation duration, default as 450 */ + duration?: number; +} +export default function scrollTo(y: number, options?: ScrollToOptions): void; +export {}; diff --git a/packages/meta/lib/_util/scrollTo.js b/packages/meta/lib/_util/scrollTo.js new file mode 100644 index 0000000..e37c33c --- /dev/null +++ b/packages/meta/lib/_util/scrollTo.js @@ -0,0 +1,61 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/scrollTo.ts +var scrollTo_exports = {}; +__export(scrollTo_exports, { + default: () => scrollTo +}); +module.exports = __toCommonJS(scrollTo_exports); +var import_raf = __toESM(require("rc-util/lib/raf")); +var import_easings = require("./easings"); +var import_getScroll = __toESM(require("./getScroll")); +function scrollTo(y, options = {}) { + const { getContainer = () => window, callback, duration = 450 } = options; + const container = getContainer(); + const scrollTop = (0, import_getScroll.default)(container, true); + const startTime = Date.now(); + const frameFunc = () => { + const timestamp = Date.now(); + const time = timestamp - startTime; + const nextScrollTop = (0, import_easings.easeInOutCubic)(time > duration ? duration : time, scrollTop, y, duration); + if ((0, import_getScroll.isWindow)(container)) { + container.scrollTo(window.pageXOffset, nextScrollTop); + } else if (container instanceof Document || container.constructor.name === "HTMLDocument") { + container.documentElement.scrollTop = nextScrollTop; + } else { + container.scrollTop = nextScrollTop; + } + if (time < duration) { + (0, import_raf.default)(frameFunc); + } else if (typeof callback === "function") { + callback(); + } + }; + (0, import_raf.default)(frameFunc); +} diff --git a/packages/meta/lib/_util/statusUtils.d.ts b/packages/meta/lib/_util/statusUtils.d.ts new file mode 100644 index 0000000..c66d2a1 --- /dev/null +++ b/packages/meta/lib/_util/statusUtils.d.ts @@ -0,0 +1,6 @@ +import type { ValidateStatus } from '../form/FormItem'; +declare const InputStatuses: readonly ["warning", "error", ""]; +export type InputStatus = typeof InputStatuses[number]; +export declare function getStatusClassNames(prefixCls: string, status?: ValidateStatus, hasFeedback?: boolean): string; +export declare const getMergedStatus: (contextStatus?: ValidateStatus, customStatus?: InputStatus) => "" | "success" | "error" | "warning" | "validating" | undefined; +export {}; diff --git a/packages/meta/lib/_util/statusUtils.js b/packages/meta/lib/_util/statusUtils.js new file mode 100644 index 0000000..2867bfd --- /dev/null +++ b/packages/meta/lib/_util/statusUtils.js @@ -0,0 +1,51 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/statusUtils.ts +var statusUtils_exports = {}; +__export(statusUtils_exports, { + getMergedStatus: () => getMergedStatus, + getStatusClassNames: () => getStatusClassNames +}); +module.exports = __toCommonJS(statusUtils_exports); +var import_classnames = __toESM(require("classnames")); +function getStatusClassNames(prefixCls, status, hasFeedback) { + return (0, import_classnames.default)({ + [`${prefixCls}-status-success`]: status === "success", + [`${prefixCls}-status-warning`]: status === "warning", + [`${prefixCls}-status-error`]: status === "error", + [`${prefixCls}-status-validating`]: status === "validating", + [`${prefixCls}-has-feedback`]: hasFeedback + }); +} +var getMergedStatus = (contextStatus, customStatus) => customStatus || contextStatus; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getMergedStatus, + getStatusClassNames +}); diff --git a/packages/meta/lib/_util/styleChecker.d.ts b/packages/meta/lib/_util/styleChecker.d.ts new file mode 100644 index 0000000..d7cf1e9 --- /dev/null +++ b/packages/meta/lib/_util/styleChecker.d.ts @@ -0,0 +1,3 @@ +import { isStyleSupport } from 'rc-util/lib/Dom/styleChecker'; +export declare const canUseDocElement: () => false | HTMLElement; +export { isStyleSupport }; diff --git a/packages/meta/lib/_util/styleChecker.js b/packages/meta/lib/_util/styleChecker.js new file mode 100644 index 0000000..399b851 --- /dev/null +++ b/packages/meta/lib/_util/styleChecker.js @@ -0,0 +1,43 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/styleChecker.ts +var styleChecker_exports = {}; +__export(styleChecker_exports, { + canUseDocElement: () => canUseDocElement, + isStyleSupport: () => import_styleChecker.isStyleSupport +}); +module.exports = __toCommonJS(styleChecker_exports); +var import_canUseDom = __toESM(require("rc-util/lib/Dom/canUseDom")); +var import_styleChecker = require("rc-util/lib/Dom/styleChecker"); +var canUseDocElement = () => (0, import_canUseDom.default)() && window.document.documentElement; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + canUseDocElement, + isStyleSupport +}); diff --git a/packages/meta/lib/_util/throttleByAnimationFrame.d.ts b/packages/meta/lib/_util/throttleByAnimationFrame.d.ts new file mode 100644 index 0000000..a19c9ca --- /dev/null +++ b/packages/meta/lib/_util/throttleByAnimationFrame.d.ts @@ -0,0 +1,5 @@ +declare function throttleByAnimationFrame(fn: (...args: T) => void): { + (...args: T): void; + cancel(): void; +}; +export default throttleByAnimationFrame; diff --git a/packages/meta/lib/_util/throttleByAnimationFrame.js b/packages/meta/lib/_util/throttleByAnimationFrame.js new file mode 100644 index 0000000..7f0a50c --- /dev/null +++ b/packages/meta/lib/_util/throttleByAnimationFrame.js @@ -0,0 +1,53 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/throttleByAnimationFrame.ts +var throttleByAnimationFrame_exports = {}; +__export(throttleByAnimationFrame_exports, { + default: () => throttleByAnimationFrame_default +}); +module.exports = __toCommonJS(throttleByAnimationFrame_exports); +var import_raf = __toESM(require("rc-util/lib/raf")); +function throttleByAnimationFrame(fn) { + let requestId; + const later = (args) => () => { + requestId = null; + fn(...args); + }; + const throttled = (...args) => { + if (requestId == null) { + requestId = (0, import_raf.default)(later(args)); + } + }; + throttled.cancel = () => { + import_raf.default.cancel(requestId); + requestId = null; + }; + return throttled; +} +var throttleByAnimationFrame_default = throttleByAnimationFrame; diff --git a/packages/meta/lib/_util/transButton.d.ts b/packages/meta/lib/_util/transButton.d.ts new file mode 100644 index 0000000..e12e191 --- /dev/null +++ b/packages/meta/lib/_util/transButton.d.ts @@ -0,0 +1,9 @@ +import * as React from 'react'; +interface TransButtonProps extends React.HTMLAttributes { + onClick?: (e?: React.MouseEvent) => void; + noStyle?: boolean; + autoFocus?: boolean; + disabled?: boolean; +} +declare const TransButton: React.ForwardRefExoticComponent>; +export default TransButton; diff --git a/packages/meta/lib/_util/transButton.js b/packages/meta/lib/_util/transButton.js new file mode 100644 index 0000000..ef6cd78 --- /dev/null +++ b/packages/meta/lib/_util/transButton.js @@ -0,0 +1,85 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/transButton.tsx +var transButton_exports = {}; +__export(transButton_exports, { + default: () => transButton_default +}); +module.exports = __toCommonJS(transButton_exports); +var import_KeyCode = __toESM(require("rc-util/lib/KeyCode")); +var React = __toESM(require("react")); +var inlineStyle = { + border: 0, + background: "transparent", + padding: 0, + lineHeight: "inherit", + display: "inline-block" +}; +var TransButton = React.forwardRef((props, ref) => { + const onKeyDown = (event) => { + const { keyCode } = event; + if (keyCode === import_KeyCode.default.ENTER) { + event.preventDefault(); + } + }; + const onKeyUp = (event) => { + const { keyCode } = event; + const { onClick } = props; + if (keyCode === import_KeyCode.default.ENTER && onClick) { + onClick(); + } + }; + const { style, noStyle, disabled, ...restProps } = props; + let mergedStyle = {}; + if (!noStyle) { + mergedStyle = { + ...inlineStyle + }; + } + if (disabled) { + mergedStyle.pointerEvents = "none"; + } + mergedStyle = { + ...mergedStyle, + ...style + }; + return /* @__PURE__ */ React.createElement( + "div", + { + role: "button", + tabIndex: 0, + ref, + ...restProps, + onKeyDown, + onKeyUp, + style: mergedStyle + } + ); +}); +var transButton_default = TransButton; diff --git a/packages/meta/lib/_util/transKeys.d.ts b/packages/meta/lib/_util/transKeys.d.ts new file mode 100644 index 0000000..50106b1 --- /dev/null +++ b/packages/meta/lib/_util/transKeys.d.ts @@ -0,0 +1,2 @@ +export declare const groupKeysMap: (keys: string[]) => Map; +export declare const groupDisabledKeysMap: (dataSource: RecordType) => Map; diff --git a/packages/meta/lib/_util/transKeys.js b/packages/meta/lib/_util/transKeys.js new file mode 100644 index 0000000..97bda1c --- /dev/null +++ b/packages/meta/lib/_util/transKeys.js @@ -0,0 +1,46 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/transKeys.ts +var transKeys_exports = {}; +__export(transKeys_exports, { + groupDisabledKeysMap: () => groupDisabledKeysMap, + groupKeysMap: () => groupKeysMap +}); +module.exports = __toCommonJS(transKeys_exports); +var groupKeysMap = (keys) => { + const map = /* @__PURE__ */ new Map(); + keys.forEach((key, index) => { + map.set(key, index); + }); + return map; +}; +var groupDisabledKeysMap = (dataSource) => { + const map = /* @__PURE__ */ new Map(); + dataSource.forEach(({ disabled, key }, index) => { + if (disabled) { + map.set(key, index); + } + }); + return map; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + groupDisabledKeysMap, + groupKeysMap +}); diff --git a/packages/meta/lib/_util/type.d.ts b/packages/meta/lib/_util/type.d.ts new file mode 100644 index 0000000..691eb85 --- /dev/null +++ b/packages/meta/lib/_util/type.d.ts @@ -0,0 +1,5 @@ +/// +/** https://github.com/Microsoft/TypeScript/issues/29729 */ +export type LiteralUnion = T | (string & {}); +export type AnyObject = Record; +export type CustomComponent

= React.ComponentType

| string; diff --git a/packages/meta/lib/_util/type.js b/packages/meta/lib/_util/type.js new file mode 100644 index 0000000..65dea9e --- /dev/null +++ b/packages/meta/lib/_util/type.js @@ -0,0 +1,17 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/type.ts +var type_exports = {}; +module.exports = __toCommonJS(type_exports); diff --git a/packages/meta/lib/_util/warning.d.ts b/packages/meta/lib/_util/warning.d.ts new file mode 100644 index 0000000..bbacf62 --- /dev/null +++ b/packages/meta/lib/_util/warning.d.ts @@ -0,0 +1,26 @@ +import * as React from 'react'; +export declare function noop(): void; +export declare function resetWarned(): void; +type Warning = (valid: boolean, component: string, message?: string) => void; +declare let warning: Warning; +type BaseTypeWarning = (valid: boolean, +/** + * - deprecated: Some API will be removed in future but still support now. + * - usage: Some API usage is not correct. + * - breaking: Breaking change like API is removed. + */ +type: 'deprecated' | 'usage' | 'breaking', message?: string) => void; +type TypeWarning = BaseTypeWarning & { + deprecated: (valid: boolean, oldProp: string, newProp: string, message?: string) => void; +}; +export interface WarningContextProps { + strict?: boolean; +} +export declare const WarningContext: React.Context; +/** + * This is a hook but we not named as `useWarning` + * since this is only used in development. + * We should always wrap this in `if (process.env.NODE_ENV !== 'production')` condition + */ +export declare const devUseWarning: (component: string) => TypeWarning; +export default warning; diff --git a/packages/meta/lib/_util/warning.js b/packages/meta/lib/_util/warning.js new file mode 100644 index 0000000..deca5aa --- /dev/null +++ b/packages/meta/lib/_util/warning.js @@ -0,0 +1,103 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/warning.ts +var warning_exports = {}; +__export(warning_exports, { + WarningContext: () => WarningContext, + default: () => warning_default, + devUseWarning: () => devUseWarning, + noop: () => noop, + resetWarned: () => resetWarned +}); +module.exports = __toCommonJS(warning_exports); +var React = __toESM(require("react")); +var import_warning = __toESM(require("rc-util/lib/warning")); +function noop() { +} +var deprecatedWarnList = null; +function resetWarned() { + deprecatedWarnList = null; + (0, import_warning.resetWarned)(); +} +var warning = noop; +if (process.env.NODE_ENV !== "production") { + warning = (valid, component, message) => { + (0, import_warning.default)(valid, `[antd: ${component}] ${message}`); + if (process.env.NODE_ENV === "test") { + resetWarned(); + } + }; +} +var WarningContext = React.createContext({}); +var devUseWarning = process.env.NODE_ENV !== "production" ? (component) => { + const { strict } = React.useContext(WarningContext); + const typeWarning = (valid, type, message) => { + if (!valid) { + if (strict === false && type === "deprecated") { + const existWarning = deprecatedWarnList; + if (!deprecatedWarnList) { + deprecatedWarnList = {}; + } + deprecatedWarnList[component] = deprecatedWarnList[component] || []; + if (!deprecatedWarnList[component].includes(message || "")) { + deprecatedWarnList[component].push(message || ""); + } + if (!existWarning) { + console.warn( + "[antd] There exists deprecated usage in your code:", + deprecatedWarnList + ); + } + } else { + warning(valid, component, message); + } + } + }; + typeWarning.deprecated = (valid, oldProp, newProp, message) => { + typeWarning( + valid, + "deprecated", + `\`${oldProp}\` is deprecated. Please use \`${newProp}\` instead.${message ? ` ${message}` : ""}` + ); + }; + return typeWarning; +} : () => { + const noopWarning = () => { + }; + noopWarning.deprecated = noop; + return noopWarning; +}; +var warning_default = warning; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + WarningContext, + devUseWarning, + noop, + resetWarned +}); diff --git a/packages/meta/lib/_util/wave/WaveEffect.d.ts b/packages/meta/lib/_util/wave/WaveEffect.d.ts new file mode 100644 index 0000000..37d4798 --- /dev/null +++ b/packages/meta/lib/_util/wave/WaveEffect.d.ts @@ -0,0 +1,8 @@ +import { type ShowWaveEffect } from './interface'; +export interface WaveEffectProps { + className: string; + target: HTMLElement; + component?: string; +} +declare const showWaveEffect: ShowWaveEffect; +export default showWaveEffect; diff --git a/packages/meta/lib/_util/wave/WaveEffect.js b/packages/meta/lib/_util/wave/WaveEffect.js new file mode 100644 index 0000000..3d282ab --- /dev/null +++ b/packages/meta/lib/_util/wave/WaveEffect.js @@ -0,0 +1,157 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/wave/WaveEffect.tsx +var WaveEffect_exports = {}; +__export(WaveEffect_exports, { + default: () => WaveEffect_default +}); +module.exports = __toCommonJS(WaveEffect_exports); +var import_classnames = __toESM(require("classnames")); +var import_rc_motion = __toESM(require("rc-motion")); +var import_render = require("rc-util/lib/React/render"); +var import_raf = __toESM(require("rc-util/lib/raf")); +var React = __toESM(require("react")); +var import_util = require("./util"); +var import_interface = require("./interface"); +function validateNum(value) { + return Number.isNaN(value) ? 0 : value; +} +var WaveEffect = (props) => { + const { className, target, component } = props; + const divRef = React.useRef(null); + const [color, setWaveColor] = React.useState(null); + const [borderRadius, setBorderRadius] = React.useState([]); + const [left, setLeft] = React.useState(0); + const [top, setTop] = React.useState(0); + const [width, setWidth] = React.useState(0); + const [height, setHeight] = React.useState(0); + const [enabled, setEnabled] = React.useState(false); + const waveStyle = { + left, + top, + width, + height, + borderRadius: borderRadius.map((radius) => `${radius}px`).join(" ") + }; + if (color) { + waveStyle["--wave-color"] = color; + } + function syncPos() { + const nodeStyle = getComputedStyle(target); + setWaveColor((0, import_util.getTargetWaveColor)(target)); + const isStatic = nodeStyle.position === "static"; + const { borderLeftWidth, borderTopWidth } = nodeStyle; + setLeft(isStatic ? target.offsetLeft : validateNum(-parseFloat(borderLeftWidth))); + setTop(isStatic ? target.offsetTop : validateNum(-parseFloat(borderTopWidth))); + setWidth(target.offsetWidth); + setHeight(target.offsetHeight); + const { + borderTopLeftRadius, + borderTopRightRadius, + borderBottomLeftRadius, + borderBottomRightRadius + } = nodeStyle; + setBorderRadius( + [ + borderTopLeftRadius, + borderTopRightRadius, + borderBottomRightRadius, + borderBottomLeftRadius + ].map((radius) => validateNum(parseFloat(radius))) + ); + } + React.useEffect(() => { + if (target) { + const id = (0, import_raf.default)(() => { + syncPos(); + setEnabled(true); + }); + let resizeObserver; + if (typeof ResizeObserver !== "undefined") { + resizeObserver = new ResizeObserver(syncPos); + resizeObserver.observe(target); + } + return () => { + import_raf.default.cancel(id); + resizeObserver == null ? void 0 : resizeObserver.disconnect(); + }; + } + }, []); + if (!enabled) { + return null; + } + const isSmallComponent = (component === "Checkbox" || component === "Radio") && (target == null ? void 0 : target.classList.contains(import_interface.TARGET_CLS)); + return /* @__PURE__ */ React.createElement( + import_rc_motion.default, + { + visible: true, + motionAppear: true, + motionName: "wave-motion", + motionDeadline: 5e3, + onAppearEnd: (_, event) => { + var _a; + if (event.deadline || event.propertyName === "opacity") { + const holder = (_a = divRef.current) == null ? void 0 : _a.parentElement; + (0, import_render.unmount)(holder).then(() => { + holder == null ? void 0 : holder.remove(); + }); + } + return false; + } + }, + ({ className: motionClassName }) => /* @__PURE__ */ React.createElement( + "div", + { + ref: divRef, + className: (0, import_classnames.default)( + className, + { + "wave-quick": isSmallComponent + }, + motionClassName + ), + style: waveStyle + } + ) + ); +}; +var showWaveEffect = (target, info) => { + var _a; + const { component } = info; + if (component === "Checkbox" && !((_a = target.querySelector("input")) == null ? void 0 : _a.checked)) { + return; + } + const holder = document.createElement("div"); + holder.style.position = "absolute"; + holder.style.left = "0px"; + holder.style.top = "0px"; + target == null ? void 0 : target.insertBefore(holder, target == null ? void 0 : target.firstChild); + (0, import_render.render)(/* @__PURE__ */ React.createElement(WaveEffect, { ...info, target }), holder); +}; +var WaveEffect_default = showWaveEffect; diff --git a/packages/meta/lib/_util/wave/index.d.ts b/packages/meta/lib/_util/wave/index.d.ts new file mode 100644 index 0000000..e53b2e7 --- /dev/null +++ b/packages/meta/lib/_util/wave/index.d.ts @@ -0,0 +1,8 @@ +import React from 'react'; +export interface WaveProps { + disabled?: boolean; + children?: React.ReactNode; + component?: string; +} +declare const Wave: React.FC; +export default Wave; diff --git a/packages/meta/lib/_util/wave/index.js b/packages/meta/lib/_util/wave/index.js new file mode 100644 index 0000000..d26c96c --- /dev/null +++ b/packages/meta/lib/_util/wave/index.js @@ -0,0 +1,76 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/wave/index.ts +var wave_exports = {}; +__export(wave_exports, { + default: () => wave_default +}); +module.exports = __toCommonJS(wave_exports); +var import_classnames = __toESM(require("classnames")); +var import_ref = require("rc-util/lib/ref"); +var import_isVisible = __toESM(require("rc-util/lib/Dom/isVisible")); +var import_react = __toESM(require("react")); +var import_config_provider = require("../../config-provider"); +var import_reactNode = require("../reactNode"); +var import_style = __toESM(require("./style")); +var import_useWave = __toESM(require("./useWave")); +var Wave = (props) => { + const { children, disabled, component } = props; + const { getPrefixCls } = (0, import_react.useContext)(import_config_provider.ConfigContext); + const containerRef = (0, import_react.useRef)(null); + const prefixCls = getPrefixCls("wave"); + const [, hashId] = (0, import_style.default)(prefixCls); + const showWave = (0, import_useWave.default)(containerRef, (0, import_classnames.default)(prefixCls, hashId), component); + import_react.default.useEffect(() => { + const node = containerRef.current; + if (!node || node.nodeType !== 1 || disabled) { + return; + } + const onClick = (e) => { + if (!(0, import_isVisible.default)(e.target) || // No need wave + !node.getAttribute || node.getAttribute("disabled") || node.disabled || node.className.includes("disabled") || node.className.includes("-leave")) { + return; + } + showWave(e); + }; + node.addEventListener("click", onClick, true); + return () => { + node.removeEventListener("click", onClick, true); + }; + }, [disabled]); + if (!import_react.default.isValidElement(children)) { + return children ?? null; + } + const ref = (0, import_ref.supportRef)(children) ? (0, import_ref.composeRef)(children.ref, containerRef) : containerRef; + return (0, import_reactNode.cloneElement)(children, { ref }); +}; +if (process.env.NODE_ENV !== "production") { + Wave.displayName = "Wave"; +} +var wave_default = Wave; diff --git a/packages/meta/lib/_util/wave/interface.d.ts b/packages/meta/lib/_util/wave/interface.d.ts new file mode 100644 index 0000000..2431aec --- /dev/null +++ b/packages/meta/lib/_util/wave/interface.d.ts @@ -0,0 +1,10 @@ +import type { GlobalToken } from '../../theme'; +export declare const TARGET_CLS = "ant-wave-target"; +export type ShowWaveEffect = (element: HTMLElement, info: { + className: string; + token: GlobalToken; + component?: string; + event: MouseEvent; + hashId: string; +}) => void; +export type ShowWave = (event: MouseEvent) => void; diff --git a/packages/meta/lib/_util/wave/interface.js b/packages/meta/lib/_util/wave/interface.js new file mode 100644 index 0000000..a83dd84 --- /dev/null +++ b/packages/meta/lib/_util/wave/interface.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/wave/interface.ts +var interface_exports = {}; +__export(interface_exports, { + TARGET_CLS: () => TARGET_CLS +}); +module.exports = __toCommonJS(interface_exports); +var TARGET_CLS = "ant-wave-target"; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + TARGET_CLS +}); diff --git a/packages/meta/lib/_util/wave/style.d.ts b/packages/meta/lib/_util/wave/style.d.ts new file mode 100644 index 0000000..afdaedb --- /dev/null +++ b/packages/meta/lib/_util/wave/style.d.ts @@ -0,0 +1,7 @@ +import type { FullToken } from '../../theme/internal'; +export interface ComponentToken { +} +export interface WaveToken extends FullToken<'Wave'> { +} +declare const _default: (prefixCls: string) => import("../../theme/interface").UseComponentStyleResult; +export default _default; diff --git a/packages/meta/lib/_util/wave/style.js b/packages/meta/lib/_util/wave/style.js new file mode 100644 index 0000000..eacd24d --- /dev/null +++ b/packages/meta/lib/_util/wave/style.js @@ -0,0 +1,57 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/wave/style.ts +var style_exports = {}; +__export(style_exports, { + default: () => style_default +}); +module.exports = __toCommonJS(style_exports); +var import_internal = require("../../theme/internal"); +var genWaveStyle = (token) => { + const { componentCls, colorPrimary } = token; + return { + [componentCls]: { + position: "absolute", + background: "transparent", + pointerEvents: "none", + boxSizing: "border-box", + color: `var(--wave-color, ${colorPrimary})`, + boxShadow: `0 0 0 0 currentcolor`, + opacity: 0.2, + // =================== Motion =================== + "&.wave-motion-appear": { + transition: [ + `box-shadow 0.4s ${token.motionEaseOutCirc}`, + `opacity 2s ${token.motionEaseOutCirc}` + ].join(","), + "&-active": { + boxShadow: `0 0 0 6px currentcolor`, + opacity: 0 + }, + "&.wave-quick": { + transition: [ + `box-shadow 0.3s ${token.motionEaseInOut}`, + `opacity 0.35s ${token.motionEaseInOut}` + ].join(",") + } + } + } + }; +}; +var style_default = (0, import_internal.genComponentStyleHook)("Wave", (token) => [genWaveStyle(token)]); diff --git a/packages/meta/lib/_util/wave/useWave.d.ts b/packages/meta/lib/_util/wave/useWave.d.ts new file mode 100644 index 0000000..312e512 --- /dev/null +++ b/packages/meta/lib/_util/wave/useWave.d.ts @@ -0,0 +1,3 @@ +import * as React from 'react'; +import { type ShowWave } from './interface'; +export default function useWave(nodeRef: React.RefObject, className: string, component?: string): ShowWave; diff --git a/packages/meta/lib/_util/wave/useWave.js b/packages/meta/lib/_util/wave/useWave.js new file mode 100644 index 0000000..142c3ad --- /dev/null +++ b/packages/meta/lib/_util/wave/useWave.js @@ -0,0 +1,62 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/wave/useWave.ts +var useWave_exports = {}; +__export(useWave_exports, { + default: () => useWave +}); +module.exports = __toCommonJS(useWave_exports); +var React = __toESM(require("react")); +var import_rc_util = require("rc-util"); +var import_raf = __toESM(require("rc-util/lib/raf")); +var import_WaveEffect = __toESM(require("./WaveEffect")); +var import_config_provider = require("../../config-provider"); +var import_useToken = __toESM(require("../../theme/useToken")); +var import_interface = require("./interface"); +function useWave(nodeRef, className, component) { + const { wave } = React.useContext(import_config_provider.ConfigContext); + const [, token, hashId] = (0, import_useToken.default)(); + const showWave = (0, import_rc_util.useEvent)((event) => { + const node = nodeRef.current; + if ((wave == null ? void 0 : wave.disabled) || !node) { + return; + } + const targetNode = node.querySelector(`.${import_interface.TARGET_CLS}`) || node; + const { showEffect } = wave || {}; + (showEffect || import_WaveEffect.default)(targetNode, { className, token, component, event, hashId }); + }); + const rafId = React.useRef(); + const showDebounceWave = (event) => { + import_raf.default.cancel(rafId.current); + rafId.current = (0, import_raf.default)(() => { + showWave(event); + }); + }; + return showDebounceWave; +} diff --git a/packages/meta/lib/_util/wave/util.d.ts b/packages/meta/lib/_util/wave/util.d.ts new file mode 100644 index 0000000..f2c1ead --- /dev/null +++ b/packages/meta/lib/_util/wave/util.d.ts @@ -0,0 +1,3 @@ +export declare function isNotGrey(color: string): boolean; +export declare function isValidWaveColor(color: string): boolean | ""; +export declare function getTargetWaveColor(node: HTMLElement): string | null; diff --git a/packages/meta/lib/_util/wave/util.js b/packages/meta/lib/_util/wave/util.js new file mode 100644 index 0000000..66b5324 --- /dev/null +++ b/packages/meta/lib/_util/wave/util.js @@ -0,0 +1,56 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/wave/util.ts +var util_exports = {}; +__export(util_exports, { + getTargetWaveColor: () => getTargetWaveColor, + isNotGrey: () => isNotGrey, + isValidWaveColor: () => isValidWaveColor +}); +module.exports = __toCommonJS(util_exports); +function isNotGrey(color) { + const match = (color || "").match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/); + if (match && match[1] && match[2] && match[3]) { + return !(match[1] === match[2] && match[2] === match[3]); + } + return true; +} +function isValidWaveColor(color) { + return color && color !== "#fff" && color !== "#ffffff" && color !== "rgb(255, 255, 255)" && color !== "rgba(255, 255, 255, 1)" && isNotGrey(color) && !/rgba\((?:\d*, ){3}0\)/.test(color) && // any transparent rgba color + color !== "transparent"; +} +function getTargetWaveColor(node) { + const { borderTopColor, borderColor, backgroundColor } = getComputedStyle(node); + if (isValidWaveColor(borderTopColor)) { + return borderTopColor; + } + if (isValidWaveColor(borderColor)) { + return borderColor; + } + if (isValidWaveColor(backgroundColor)) { + return backgroundColor; + } + return null; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getTargetWaveColor, + isNotGrey, + isValidWaveColor +}); diff --git a/packages/meta/lib/_util/zindexContext.d.ts b/packages/meta/lib/_util/zindexContext.d.ts new file mode 100644 index 0000000..e5c11be --- /dev/null +++ b/packages/meta/lib/_util/zindexContext.d.ts @@ -0,0 +1,3 @@ +import React from 'react'; +declare const zIndexContext: React.Context; +export default zIndexContext; diff --git a/packages/meta/lib/_util/zindexContext.js b/packages/meta/lib/_util/zindexContext.js new file mode 100644 index 0000000..2ce2106 --- /dev/null +++ b/packages/meta/lib/_util/zindexContext.js @@ -0,0 +1,40 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/_util/zindexContext.ts +var zindexContext_exports = {}; +__export(zindexContext_exports, { + default: () => zindexContext_default +}); +module.exports = __toCommonJS(zindexContext_exports); +var import_react = __toESM(require("react")); +var zIndexContext = import_react.default.createContext(void 0); +if (process.env.NODE_ENV !== "production") { + zIndexContext.displayName = "zIndexContext"; +} +var zindexContext_default = zIndexContext; diff --git a/packages/meta/lib/theme/internal.d.ts b/packages/meta/lib/theme/internal.d.ts new file mode 100644 index 0000000..67c4f77 --- /dev/null +++ b/packages/meta/lib/theme/internal.d.ts @@ -0,0 +1,13 @@ +import { useStyleRegister } from '@ant-design/cssinjs'; +import type { AliasToken, GenerateStyle, PresetColorKey, PresetColorType, SeedToken, UseComponentStyleResult } from './interface'; +import { PresetColors } from './interface'; +import useToken from './useToken'; +import type { FullToken, GetDefaultToken } from './util/genComponentStyleHook'; +import genComponentStyleHook, { genSubStyleComponent, genStyleHooks } from './util/genComponentStyleHook'; +import genPresetColor from './util/genPresetColor'; +import statisticToken, { merge as mergeToken } from './util/statistic'; +import useResetIconStyle from './util/useResetIconStyle'; +import calc from './util/calc'; +export { DesignTokenContext, defaultConfig } from './context'; +export { PresetColors, genComponentStyleHook, genSubStyleComponent, genPresetColor, genStyleHooks, mergeToken, statisticToken, calc, useResetIconStyle, useStyleRegister, useToken, }; +export type { AliasToken, AliasToken as DerivativeToken, FullToken, GenerateStyle, PresetColorKey, PresetColorType, SeedToken, UseComponentStyleResult, GetDefaultToken, }; diff --git a/packages/meta/lib/theme/internal.js b/packages/meta/lib/theme/internal.js new file mode 100644 index 0000000..92f8c77 --- /dev/null +++ b/packages/meta/lib/theme/internal.js @@ -0,0 +1,71 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/internal.ts +var internal_exports = {}; +__export(internal_exports, { + DesignTokenContext: () => import_context.DesignTokenContext, + PresetColors: () => import_interface.PresetColors, + calc: () => import_calc.default, + defaultConfig: () => import_context.defaultConfig, + genComponentStyleHook: () => import_genComponentStyleHook.default, + genPresetColor: () => import_genPresetColor.default, + genStyleHooks: () => import_genComponentStyleHook.genStyleHooks, + genSubStyleComponent: () => import_genComponentStyleHook.genSubStyleComponent, + mergeToken: () => import_statistic.merge, + statisticToken: () => import_statistic.default, + useResetIconStyle: () => import_useResetIconStyle.default, + useStyleRegister: () => import_cssinjs.useStyleRegister, + useToken: () => import_useToken.default +}); +module.exports = __toCommonJS(internal_exports); +var import_cssinjs = require("@ant-design/cssinjs"); +var import_interface = require("./interface"); +var import_useToken = __toESM(require("./useToken")); +var import_genComponentStyleHook = __toESM(require("./util/genComponentStyleHook")); +var import_genPresetColor = __toESM(require("./util/genPresetColor")); +var import_statistic = __toESM(require("./util/statistic")); +var import_useResetIconStyle = __toESM(require("./util/useResetIconStyle")); +var import_calc = __toESM(require("./util/calc")); +var import_context = require("./context"); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + DesignTokenContext, + PresetColors, + calc, + defaultConfig, + genComponentStyleHook, + genPresetColor, + genStyleHooks, + genSubStyleComponent, + mergeToken, + statisticToken, + useResetIconStyle, + useStyleRegister, + useToken +}); diff --git a/packages/meta/lib/theme/themes/ColorMap.d.ts b/packages/meta/lib/theme/themes/ColorMap.d.ts new file mode 100644 index 0000000..be0dba1 --- /dev/null +++ b/packages/meta/lib/theme/themes/ColorMap.d.ts @@ -0,0 +1,15 @@ +import type { ColorNeutralMapToken } from '../interface'; +export interface ColorMap { + 1: string; + 2: string; + 3: string; + 4: string; + 5: string; + 6: string; + 7: string; + 8: string; + 9: string; + 10: string; +} +export type GenerateColorMap = (baseColor: string) => ColorMap; +export type GenerateNeutralColorMap = (bgBaseColor: string, textBaseColor: string) => ColorNeutralMapToken; diff --git a/packages/meta/lib/theme/themes/ColorMap.js b/packages/meta/lib/theme/themes/ColorMap.js new file mode 100644 index 0000000..b56de09 --- /dev/null +++ b/packages/meta/lib/theme/themes/ColorMap.js @@ -0,0 +1,17 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/ColorMap.ts +var ColorMap_exports = {}; +module.exports = __toCommonJS(ColorMap_exports); diff --git a/packages/meta/lib/theme/themes/compact/genCompactSizeMapToken.d.ts b/packages/meta/lib/theme/themes/compact/genCompactSizeMapToken.d.ts new file mode 100644 index 0000000..87332e7 --- /dev/null +++ b/packages/meta/lib/theme/themes/compact/genCompactSizeMapToken.d.ts @@ -0,0 +1,2 @@ +import type { SeedToken, SizeMapToken } from '../../interface'; +export default function genSizeMapToken(token: SeedToken): SizeMapToken; diff --git a/packages/meta/lib/theme/themes/compact/genCompactSizeMapToken.js b/packages/meta/lib/theme/themes/compact/genCompactSizeMapToken.js new file mode 100644 index 0000000..fef3a77 --- /dev/null +++ b/packages/meta/lib/theme/themes/compact/genCompactSizeMapToken.js @@ -0,0 +1,39 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/compact/genCompactSizeMapToken.ts +var genCompactSizeMapToken_exports = {}; +__export(genCompactSizeMapToken_exports, { + default: () => genSizeMapToken +}); +module.exports = __toCommonJS(genCompactSizeMapToken_exports); +function genSizeMapToken(token) { + const { sizeUnit, sizeStep } = token; + const compactSizeStep = sizeStep - 2; + return { + sizeXXL: sizeUnit * (compactSizeStep + 10), + sizeXL: sizeUnit * (compactSizeStep + 6), + sizeLG: sizeUnit * (compactSizeStep + 2), + sizeMD: sizeUnit * (compactSizeStep + 2), + sizeMS: sizeUnit * (compactSizeStep + 1), + size: sizeUnit * compactSizeStep, + sizeSM: sizeUnit * compactSizeStep, + sizeXS: sizeUnit * (compactSizeStep - 1), + sizeXXS: sizeUnit * (compactSizeStep - 1) + }; +} diff --git a/packages/meta/lib/theme/themes/compact/index.d.ts b/packages/meta/lib/theme/themes/compact/index.d.ts new file mode 100644 index 0000000..d5901cb --- /dev/null +++ b/packages/meta/lib/theme/themes/compact/index.d.ts @@ -0,0 +1,4 @@ +import type { DerivativeFunc } from '@ant-design/cssinjs'; +import type { MapToken, SeedToken } from '../../interface'; +declare const derivative: DerivativeFunc; +export default derivative; diff --git a/packages/meta/lib/theme/themes/compact/index.js b/packages/meta/lib/theme/themes/compact/index.js new file mode 100644 index 0000000..55c93d6 --- /dev/null +++ b/packages/meta/lib/theme/themes/compact/index.js @@ -0,0 +1,53 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/compact/index.ts +var compact_exports = {}; +__export(compact_exports, { + default: () => compact_default +}); +module.exports = __toCommonJS(compact_exports); +var import_genControlHeight = __toESM(require("../shared/genControlHeight")); +var import_default = __toESM(require("../default")); +var import_genCompactSizeMapToken = __toESM(require("./genCompactSizeMapToken")); +var import_genFontMapToken = __toESM(require("../shared/genFontMapToken")); +var derivative = (token, mapToken) => { + const mergedMapToken = mapToken ?? (0, import_default.default)(token); + const fontSize = mergedMapToken.fontSizeSM; + const controlHeight = mergedMapToken.controlHeight - 4; + return { + ...mergedMapToken, + ...(0, import_genCompactSizeMapToken.default)(mapToken ?? token), + // font + ...(0, import_genFontMapToken.default)(fontSize), + // controlHeight + controlHeight, + ...(0, import_genControlHeight.default)({ ...mergedMapToken, controlHeight }) + }; +}; +var compact_default = derivative; diff --git a/packages/meta/lib/theme/themes/dark/colorAlgorithm.d.ts b/packages/meta/lib/theme/themes/dark/colorAlgorithm.d.ts new file mode 100644 index 0000000..e1b0d62 --- /dev/null +++ b/packages/meta/lib/theme/themes/dark/colorAlgorithm.d.ts @@ -0,0 +1,2 @@ +export declare const getAlphaColor: (baseColor: string, alpha: number) => string; +export declare const getSolidColor: (baseColor: string, brightness: number) => string; diff --git a/packages/meta/lib/theme/themes/dark/colorAlgorithm.js b/packages/meta/lib/theme/themes/dark/colorAlgorithm.js new file mode 100644 index 0000000..c550320 --- /dev/null +++ b/packages/meta/lib/theme/themes/dark/colorAlgorithm.js @@ -0,0 +1,36 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/dark/colorAlgorithm.ts +var colorAlgorithm_exports = {}; +__export(colorAlgorithm_exports, { + getAlphaColor: () => getAlphaColor, + getSolidColor: () => getSolidColor +}); +module.exports = __toCommonJS(colorAlgorithm_exports); +var import_tinycolor = require("@ctrl/tinycolor"); +var getAlphaColor = (baseColor, alpha) => new import_tinycolor.TinyColor(baseColor).setAlpha(alpha).toRgbString(); +var getSolidColor = (baseColor, brightness) => { + const instance = new import_tinycolor.TinyColor(baseColor); + return instance.lighten(brightness).toHexString(); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getAlphaColor, + getSolidColor +}); diff --git a/packages/meta/lib/theme/themes/dark/colors.d.ts b/packages/meta/lib/theme/themes/dark/colors.d.ts new file mode 100644 index 0000000..80ddcce --- /dev/null +++ b/packages/meta/lib/theme/themes/dark/colors.d.ts @@ -0,0 +1,3 @@ +import type { GenerateColorMap, GenerateNeutralColorMap } from '../ColorMap'; +export declare const generateColorPalettes: GenerateColorMap; +export declare const generateNeutralColorPalettes: GenerateNeutralColorMap; diff --git a/packages/meta/lib/theme/themes/dark/colors.js b/packages/meta/lib/theme/themes/dark/colors.js new file mode 100644 index 0000000..24c081b --- /dev/null +++ b/packages/meta/lib/theme/themes/dark/colors.js @@ -0,0 +1,73 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/dark/colors.ts +var colors_exports = {}; +__export(colors_exports, { + generateColorPalettes: () => generateColorPalettes, + generateNeutralColorPalettes: () => generateNeutralColorPalettes +}); +module.exports = __toCommonJS(colors_exports); +var import_colors = require("@ant-design/colors"); +var import_colorAlgorithm = require("./colorAlgorithm"); +var generateColorPalettes = (baseColor) => { + const colors = (0, import_colors.generate)(baseColor, { theme: "dark" }); + return { + 1: colors[0], + 2: colors[1], + 3: colors[2], + 4: colors[3], + 5: colors[6], + 6: colors[5], + 7: colors[4], + 8: colors[6], + 9: colors[5], + 10: colors[4] + // 8: colors[9], + // 9: colors[8], + // 10: colors[7], + }; +}; +var generateNeutralColorPalettes = (bgBaseColor, textBaseColor) => { + const colorBgBase = bgBaseColor || "#000"; + const colorTextBase = textBaseColor || "#fff"; + return { + colorBgBase, + colorTextBase, + colorText: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.85), + colorTextSecondary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.65), + colorTextTertiary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.45), + colorTextQuaternary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.25), + colorFill: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.18), + colorFillSecondary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.12), + colorFillTertiary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.08), + colorFillQuaternary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.04), + colorBgElevated: (0, import_colorAlgorithm.getSolidColor)(colorBgBase, 12), + colorBgContainer: (0, import_colorAlgorithm.getSolidColor)(colorBgBase, 8), + colorBgLayout: (0, import_colorAlgorithm.getSolidColor)(colorBgBase, 0), + colorBgSpotlight: (0, import_colorAlgorithm.getSolidColor)(colorBgBase, 26), + colorBgBlur: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.04), + colorBorder: (0, import_colorAlgorithm.getSolidColor)(colorBgBase, 26), + colorBorderSecondary: (0, import_colorAlgorithm.getSolidColor)(colorBgBase, 19) + }; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + generateColorPalettes, + generateNeutralColorPalettes +}); diff --git a/packages/meta/lib/theme/themes/dark/index.d.ts b/packages/meta/lib/theme/themes/dark/index.d.ts new file mode 100644 index 0000000..d5901cb --- /dev/null +++ b/packages/meta/lib/theme/themes/dark/index.d.ts @@ -0,0 +1,4 @@ +import type { DerivativeFunc } from '@ant-design/cssinjs'; +import type { MapToken, SeedToken } from '../../interface'; +declare const derivative: DerivativeFunc; +export default derivative; diff --git a/packages/meta/lib/theme/themes/dark/index.js b/packages/meta/lib/theme/themes/dark/index.js new file mode 100644 index 0000000..3bafb34 --- /dev/null +++ b/packages/meta/lib/theme/themes/dark/index.js @@ -0,0 +1,70 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/dark/index.ts +var dark_exports = {}; +__export(dark_exports, { + default: () => dark_default +}); +module.exports = __toCommonJS(dark_exports); +var import_colors = require("@ant-design/colors"); +var import_seed = require("../seed"); +var import_genColorMapToken = __toESM(require("../shared/genColorMapToken")); +var import_colors2 = require("./colors"); +var import_default = __toESM(require("../default")); +var derivative = (token, mapToken) => { + const colorPalettes = Object.keys(import_seed.defaultPresetColors).map((colorKey) => { + const colors = (0, import_colors.generate)(token[colorKey], { theme: "dark" }); + return new Array(10).fill(1).reduce((prev, _, i) => { + prev[`${colorKey}-${i + 1}`] = colors[i]; + prev[`${colorKey}${i + 1}`] = colors[i]; + return prev; + }, {}); + }).reduce( + (prev, cur) => { + prev = { + ...prev, + ...cur + }; + return prev; + }, + {} + ); + const mergedMapToken = mapToken ?? (0, import_default.default)(token); + return { + ...mergedMapToken, + // Dark tokens + ...colorPalettes, + // Colors + ...(0, import_genColorMapToken.default)(token, { + generateColorPalettes: import_colors2.generateColorPalettes, + generateNeutralColorPalettes: import_colors2.generateNeutralColorPalettes + }) + }; +}; +var dark_default = derivative; diff --git a/packages/meta/lib/theme/themes/default/colorAlgorithm.d.ts b/packages/meta/lib/theme/themes/default/colorAlgorithm.d.ts new file mode 100644 index 0000000..e1b0d62 --- /dev/null +++ b/packages/meta/lib/theme/themes/default/colorAlgorithm.d.ts @@ -0,0 +1,2 @@ +export declare const getAlphaColor: (baseColor: string, alpha: number) => string; +export declare const getSolidColor: (baseColor: string, brightness: number) => string; diff --git a/packages/meta/lib/theme/themes/default/colorAlgorithm.js b/packages/meta/lib/theme/themes/default/colorAlgorithm.js new file mode 100644 index 0000000..18fabc8 --- /dev/null +++ b/packages/meta/lib/theme/themes/default/colorAlgorithm.js @@ -0,0 +1,36 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/default/colorAlgorithm.ts +var colorAlgorithm_exports = {}; +__export(colorAlgorithm_exports, { + getAlphaColor: () => getAlphaColor, + getSolidColor: () => getSolidColor +}); +module.exports = __toCommonJS(colorAlgorithm_exports); +var import_tinycolor = require("@ctrl/tinycolor"); +var getAlphaColor = (baseColor, alpha) => new import_tinycolor.TinyColor(baseColor).setAlpha(alpha).toRgbString(); +var getSolidColor = (baseColor, brightness) => { + const instance = new import_tinycolor.TinyColor(baseColor); + return instance.darken(brightness).toHexString(); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getAlphaColor, + getSolidColor +}); diff --git a/packages/meta/lib/theme/themes/default/colors.d.ts b/packages/meta/lib/theme/themes/default/colors.d.ts new file mode 100644 index 0000000..80ddcce --- /dev/null +++ b/packages/meta/lib/theme/themes/default/colors.d.ts @@ -0,0 +1,3 @@ +import type { GenerateColorMap, GenerateNeutralColorMap } from '../ColorMap'; +export declare const generateColorPalettes: GenerateColorMap; +export declare const generateNeutralColorPalettes: GenerateNeutralColorMap; diff --git a/packages/meta/lib/theme/themes/default/colors.js b/packages/meta/lib/theme/themes/default/colors.js new file mode 100644 index 0000000..113efd3 --- /dev/null +++ b/packages/meta/lib/theme/themes/default/colors.js @@ -0,0 +1,73 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/default/colors.ts +var colors_exports = {}; +__export(colors_exports, { + generateColorPalettes: () => generateColorPalettes, + generateNeutralColorPalettes: () => generateNeutralColorPalettes +}); +module.exports = __toCommonJS(colors_exports); +var import_colors = require("@ant-design/colors"); +var import_colorAlgorithm = require("./colorAlgorithm"); +var generateColorPalettes = (baseColor) => { + const colors = (0, import_colors.generate)(baseColor); + return { + 1: colors[0], + 2: colors[1], + 3: colors[2], + 4: colors[3], + 5: colors[4], + 6: colors[5], + 7: colors[6], + 8: colors[4], + 9: colors[5], + 10: colors[6] + // 8: colors[7], + // 9: colors[8], + // 10: colors[9], + }; +}; +var generateNeutralColorPalettes = (bgBaseColor, textBaseColor) => { + const colorBgBase = bgBaseColor || "#fff"; + const colorTextBase = textBaseColor || "#000"; + return { + colorBgBase, + colorTextBase, + colorText: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.88), + colorTextSecondary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.65), + colorTextTertiary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.45), + colorTextQuaternary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.25), + colorFill: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.15), + colorFillSecondary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.06), + colorFillTertiary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.04), + colorFillQuaternary: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.02), + colorBgLayout: (0, import_colorAlgorithm.getSolidColor)(colorBgBase, 4), + colorBgContainer: (0, import_colorAlgorithm.getSolidColor)(colorBgBase, 0), + colorBgElevated: (0, import_colorAlgorithm.getSolidColor)(colorBgBase, 0), + colorBgSpotlight: (0, import_colorAlgorithm.getAlphaColor)(colorTextBase, 0.85), + colorBgBlur: "transparent", + colorBorder: (0, import_colorAlgorithm.getSolidColor)(colorBgBase, 15), + colorBorderSecondary: (0, import_colorAlgorithm.getSolidColor)(colorBgBase, 6) + }; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + generateColorPalettes, + generateNeutralColorPalettes +}); diff --git a/packages/meta/lib/theme/themes/default/index.d.ts b/packages/meta/lib/theme/themes/default/index.d.ts new file mode 100644 index 0000000..b11222d --- /dev/null +++ b/packages/meta/lib/theme/themes/default/index.d.ts @@ -0,0 +1,2 @@ +import type { MapToken, SeedToken } from '../../interface'; +export default function derivative(token: SeedToken): MapToken; diff --git a/packages/meta/lib/theme/themes/default/index.js b/packages/meta/lib/theme/themes/default/index.js new file mode 100644 index 0000000..e384325 --- /dev/null +++ b/packages/meta/lib/theme/themes/default/index.js @@ -0,0 +1,78 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/default/index.ts +var default_exports = {}; +__export(default_exports, { + default: () => derivative +}); +module.exports = __toCommonJS(default_exports); +var import_colors = require("@ant-design/colors"); +var import_genControlHeight = __toESM(require("../shared/genControlHeight")); +var import_genSizeMapToken = __toESM(require("../shared/genSizeMapToken")); +var import_seed = require("../seed"); +var import_genColorMapToken = __toESM(require("../shared/genColorMapToken")); +var import_genCommonMapToken = __toESM(require("../shared/genCommonMapToken")); +var import_colors2 = require("./colors"); +var import_genFontMapToken = __toESM(require("../shared/genFontMapToken")); +function derivative(token) { + const colorPalettes = Object.keys(import_seed.defaultPresetColors).map((colorKey) => { + const colors = (0, import_colors.generate)(token[colorKey]); + return new Array(10).fill(1).reduce((prev, _, i) => { + prev[`${colorKey}-${i + 1}`] = colors[i]; + prev[`${colorKey}${i + 1}`] = colors[i]; + return prev; + }, {}); + }).reduce( + (prev, cur) => { + prev = { + ...prev, + ...cur + }; + return prev; + }, + {} + ); + return { + ...token, + ...colorPalettes, + // Colors + ...(0, import_genColorMapToken.default)(token, { + generateColorPalettes: import_colors2.generateColorPalettes, + generateNeutralColorPalettes: import_colors2.generateNeutralColorPalettes + }), + // Font + ...(0, import_genFontMapToken.default)(token.fontSize), + // Size + ...(0, import_genSizeMapToken.default)(token), + // Height + ...(0, import_genControlHeight.default)(token), + // Others + ...(0, import_genCommonMapToken.default)(token) + }; +} diff --git a/packages/meta/lib/theme/themes/seed.d.ts b/packages/meta/lib/theme/themes/seed.d.ts new file mode 100644 index 0000000..e0ac654 --- /dev/null +++ b/packages/meta/lib/theme/themes/seed.d.ts @@ -0,0 +1,4 @@ +import type { PresetColorType, SeedToken } from '../internal'; +export declare const defaultPresetColors: PresetColorType; +declare const seedToken: SeedToken; +export default seedToken; diff --git a/packages/meta/lib/theme/themes/seed.js b/packages/meta/lib/theme/themes/seed.js new file mode 100644 index 0000000..fcf3ac1 --- /dev/null +++ b/packages/meta/lib/theme/themes/seed.js @@ -0,0 +1,95 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/seed.ts +var seed_exports = {}; +__export(seed_exports, { + default: () => seed_default, + defaultPresetColors: () => defaultPresetColors +}); +module.exports = __toCommonJS(seed_exports); +var defaultPresetColors = { + blue: "#0099FF", + purple: "#722ED1", + cyan: "#13C2C2", + green: "#52C41A", + magenta: "#EB2F96", + pink: "#eb2f96", + red: "#FF4D4F", + orange: "#FA8C16", + yellow: "#FADB14", + volcano: "#FA541C", + geekblue: "#0099FF", + gold: "#FAAD14", + lime: "#A0D911" +}; +var seedToken = { + // preset color palettes + ...defaultPresetColors, + // Color + colorPrimary: "#0099FF", + colorSuccess: "#52C41A", + colorWarning: "#FAAD14", + colorError: "#FF4D4F", + colorInfo: "#0099FF", + colorLink: "", + colorTextBase: "", + colorBgBase: "", + // Font + fontFamily: `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, +'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', +'Noto Color Emoji'`, + fontFamilyCode: `'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace`, + fontSize: 14, + // Line + lineWidth: 1, + lineType: "solid", + // Motion + motionUnit: 0.1, + motionBase: 0, + motionEaseOutCirc: "cubic-bezier(0.08, 0.82, 0.17, 1)", + motionEaseInOutCirc: "cubic-bezier(0.78, 0.14, 0.15, 0.86)", + motionEaseOut: "cubic-bezier(0.215, 0.61, 0.355, 1)", + motionEaseInOut: "cubic-bezier(0.645, 0.045, 0.355, 1)", + motionEaseOutBack: "cubic-bezier(0.12, 0.4, 0.29, 1.46)", + motionEaseInBack: "cubic-bezier(0.71, -0.46, 0.88, 0.6)", + motionEaseInQuint: "cubic-bezier(0.755, 0.05, 0.855, 0.06)", + motionEaseOutQuint: "cubic-bezier(0.23, 1, 0.32, 1)", + // Radius + borderRadius: 6, + // Size + sizeUnit: 4, + sizeStep: 4, + sizePopupArrow: 16, + // Control Base + controlHeight: 32, + // zIndex + zIndexBase: 0, + zIndexPopupBase: 1e3, + // Image + opacityImage: 1, + // Wireframe + wireframe: false, + // Motion + motion: true +}; +var seed_default = seedToken; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + defaultPresetColors +}); diff --git a/packages/meta/lib/theme/themes/shared/genColorMapToken.d.ts b/packages/meta/lib/theme/themes/shared/genColorMapToken.d.ts new file mode 100644 index 0000000..9f038ea --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genColorMapToken.d.ts @@ -0,0 +1,8 @@ +import type { ColorMapToken, SeedToken } from '../../interface'; +import type { GenerateColorMap, GenerateNeutralColorMap } from '../ColorMap'; +interface PaletteGenerators { + generateColorPalettes: GenerateColorMap; + generateNeutralColorPalettes: GenerateNeutralColorMap; +} +export default function genColorMapToken(seed: SeedToken, { generateColorPalettes, generateNeutralColorPalettes }: PaletteGenerators): ColorMapToken; +export {}; diff --git a/packages/meta/lib/theme/themes/shared/genColorMapToken.js b/packages/meta/lib/theme/themes/shared/genColorMapToken.js new file mode 100644 index 0000000..eda9ec4 --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genColorMapToken.js @@ -0,0 +1,102 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/shared/genColorMapToken.ts +var genColorMapToken_exports = {}; +__export(genColorMapToken_exports, { + default: () => genColorMapToken +}); +module.exports = __toCommonJS(genColorMapToken_exports); +var import_tinycolor = require("@ctrl/tinycolor"); +function genColorMapToken(seed, { generateColorPalettes, generateNeutralColorPalettes }) { + const { + colorSuccess: colorSuccessBase, + colorWarning: colorWarningBase, + colorError: colorErrorBase, + colorInfo: colorInfoBase, + colorPrimary: colorPrimaryBase, + colorBgBase, + colorTextBase + } = seed; + const primaryColors = generateColorPalettes(colorPrimaryBase); + const successColors = generateColorPalettes(colorSuccessBase); + const warningColors = generateColorPalettes(colorWarningBase); + const errorColors = generateColorPalettes(colorErrorBase); + const infoColors = generateColorPalettes(colorInfoBase); + const neutralColors = generateNeutralColorPalettes(colorBgBase, colorTextBase); + const colorLink = seed.colorLink || seed.colorInfo; + const linkColors = generateColorPalettes(colorLink); + return { + ...neutralColors, + colorPrimaryBg: primaryColors[1], + colorPrimaryBgHover: primaryColors[2], + colorPrimaryBorder: primaryColors[3], + colorPrimaryBorderHover: primaryColors[4], + colorPrimaryHover: primaryColors[5], + colorPrimary: primaryColors[6], + colorPrimaryActive: primaryColors[7], + colorPrimaryTextHover: primaryColors[8], + colorPrimaryText: primaryColors[9], + colorPrimaryTextActive: primaryColors[10], + colorSuccessBg: successColors[1], + colorSuccessBgHover: successColors[2], + colorSuccessBorder: successColors[3], + colorSuccessBorderHover: successColors[4], + colorSuccessHover: successColors[4], + colorSuccess: successColors[6], + colorSuccessActive: successColors[7], + colorSuccessTextHover: successColors[8], + colorSuccessText: successColors[9], + colorSuccessTextActive: successColors[10], + colorErrorBg: errorColors[1], + colorErrorBgHover: errorColors[2], + colorErrorBorder: errorColors[3], + colorErrorBorderHover: errorColors[4], + colorErrorHover: errorColors[5], + colorError: errorColors[6], + colorErrorActive: errorColors[7], + colorErrorTextHover: errorColors[8], + colorErrorText: errorColors[9], + colorErrorTextActive: errorColors[10], + colorWarningBg: warningColors[1], + colorWarningBgHover: warningColors[2], + colorWarningBorder: warningColors[3], + colorWarningBorderHover: warningColors[4], + colorWarningHover: warningColors[4], + colorWarning: warningColors[6], + colorWarningActive: warningColors[7], + colorWarningTextHover: warningColors[8], + colorWarningText: warningColors[9], + colorWarningTextActive: warningColors[10], + colorInfoBg: infoColors[1], + colorInfoBgHover: infoColors[2], + colorInfoBorder: infoColors[3], + colorInfoBorderHover: infoColors[4], + colorInfoHover: infoColors[4], + colorInfo: infoColors[6], + colorInfoActive: infoColors[7], + colorInfoTextHover: infoColors[8], + colorInfoText: infoColors[9], + colorInfoTextActive: infoColors[10], + colorLinkHover: linkColors[4], + colorLink: linkColors[6], + colorLinkActive: linkColors[7], + colorBgMask: new import_tinycolor.TinyColor("#000").setAlpha(0.45).toRgbString(), + colorWhite: "#fff" + }; +} diff --git a/packages/meta/lib/theme/themes/shared/genCommonMapToken.d.ts b/packages/meta/lib/theme/themes/shared/genCommonMapToken.d.ts new file mode 100644 index 0000000..bdaac10 --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genCommonMapToken.d.ts @@ -0,0 +1,2 @@ +import type { CommonMapToken, SeedToken } from '../../interface'; +export default function genCommonMapToken(token: SeedToken): CommonMapToken; diff --git a/packages/meta/lib/theme/themes/shared/genCommonMapToken.js b/packages/meta/lib/theme/themes/shared/genCommonMapToken.js new file mode 100644 index 0000000..9375bce --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genCommonMapToken.js @@ -0,0 +1,48 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/shared/genCommonMapToken.ts +var genCommonMapToken_exports = {}; +__export(genCommonMapToken_exports, { + default: () => genCommonMapToken +}); +module.exports = __toCommonJS(genCommonMapToken_exports); +var import_genRadius = __toESM(require("./genRadius")); +function genCommonMapToken(token) { + const { motionUnit, motionBase, borderRadius, lineWidth } = token; + return { + // motion + motionDurationFast: `${(motionBase + motionUnit).toFixed(1)}s`, + motionDurationMid: `${(motionBase + motionUnit * 2).toFixed(1)}s`, + motionDurationSlow: `${(motionBase + motionUnit * 3).toFixed(1)}s`, + // line + lineWidthBold: lineWidth + 1, + // radius + ...(0, import_genRadius.default)(borderRadius) + }; +} diff --git a/packages/meta/lib/theme/themes/shared/genControlHeight.d.ts b/packages/meta/lib/theme/themes/shared/genControlHeight.d.ts new file mode 100644 index 0000000..b898549 --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genControlHeight.d.ts @@ -0,0 +1,3 @@ +import type { HeightMapToken, SeedToken } from '../../interface'; +declare const genControlHeight: (token: SeedToken) => HeightMapToken; +export default genControlHeight; diff --git a/packages/meta/lib/theme/themes/shared/genControlHeight.js b/packages/meta/lib/theme/themes/shared/genControlHeight.js new file mode 100644 index 0000000..d477f06 --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genControlHeight.js @@ -0,0 +1,33 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/shared/genControlHeight.ts +var genControlHeight_exports = {}; +__export(genControlHeight_exports, { + default: () => genControlHeight_default +}); +module.exports = __toCommonJS(genControlHeight_exports); +var genControlHeight = (token) => { + const { controlHeight } = token; + return { + controlHeightSM: controlHeight * 0.75, + controlHeightXS: controlHeight * 0.5, + controlHeightLG: controlHeight * 1.25 + }; +}; +var genControlHeight_default = genControlHeight; diff --git a/packages/meta/lib/theme/themes/shared/genFontMapToken.d.ts b/packages/meta/lib/theme/themes/shared/genFontMapToken.d.ts new file mode 100644 index 0000000..a5ddc2a --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genFontMapToken.d.ts @@ -0,0 +1,3 @@ +import type { FontMapToken } from '../../interface'; +declare const genFontMapToken: (fontSize: number) => FontMapToken; +export default genFontMapToken; diff --git a/packages/meta/lib/theme/themes/shared/genFontMapToken.js b/packages/meta/lib/theme/themes/shared/genFontMapToken.js new file mode 100644 index 0000000..c27e6da --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genFontMapToken.js @@ -0,0 +1,69 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/shared/genFontMapToken.ts +var genFontMapToken_exports = {}; +__export(genFontMapToken_exports, { + default: () => genFontMapToken_default +}); +module.exports = __toCommonJS(genFontMapToken_exports); +var import_genFontSizes = __toESM(require("./genFontSizes")); +var genFontMapToken = (fontSize) => { + const fontSizePairs = (0, import_genFontSizes.default)(fontSize); + const fontSizes = fontSizePairs.map((pair) => pair.size); + const lineHeights = fontSizePairs.map((pair) => pair.lineHeight); + const fontSizeMD = fontSizes[1]; + const fontSizeSM = fontSizes[0]; + const fontSizeLG = fontSizes[2]; + const lineHeight = lineHeights[1]; + const lineHeightSM = lineHeights[0]; + const lineHeightLG = lineHeights[2]; + return { + fontSizeSM, + fontSize: fontSizeMD, + fontSizeLG, + fontSizeXL: fontSizes[3], + fontSizeHeading1: fontSizes[6], + fontSizeHeading2: fontSizes[5], + fontSizeHeading3: fontSizes[4], + fontSizeHeading4: fontSizes[3], + fontSizeHeading5: fontSizes[2], + lineHeight, + lineHeightLG, + lineHeightSM, + fontHeight: Math.round(lineHeight * fontSizeMD), + fontHeightLG: Math.round(lineHeightLG * fontSizeLG), + fontHeightSM: Math.round(lineHeightSM * fontSizeSM), + lineHeightHeading1: lineHeights[6], + lineHeightHeading2: lineHeights[5], + lineHeightHeading3: lineHeights[4], + lineHeightHeading4: lineHeights[3], + lineHeightHeading5: lineHeights[2] + }; +}; +var genFontMapToken_default = genFontMapToken; diff --git a/packages/meta/lib/theme/themes/shared/genFontSizes.d.ts b/packages/meta/lib/theme/themes/shared/genFontSizes.d.ts new file mode 100644 index 0000000..0507980 --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genFontSizes.d.ts @@ -0,0 +1,4 @@ +export default function getFontSizes(base: number): { + size: number; + lineHeight: number; +}[]; diff --git a/packages/meta/lib/theme/themes/shared/genFontSizes.js b/packages/meta/lib/theme/themes/shared/genFontSizes.js new file mode 100644 index 0000000..130d288 --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genFontSizes.js @@ -0,0 +1,40 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/shared/genFontSizes.ts +var genFontSizes_exports = {}; +__export(genFontSizes_exports, { + default: () => getFontSizes +}); +module.exports = __toCommonJS(genFontSizes_exports); +function getFontSizes(base) { + const fontSizes = new Array(10).fill(null).map((_, index) => { + const i = index - 1; + const baseSize = base * 2.71828 ** (i / 5); + const intSize = index > 1 ? Math.floor(baseSize) : Math.ceil(baseSize); + return Math.floor(intSize / 2) * 2; + }); + fontSizes[1] = base; + return fontSizes.map((size) => { + const height = size + 8; + return { + size, + lineHeight: height / size + }; + }); +} diff --git a/packages/meta/lib/theme/themes/shared/genRadius.d.ts b/packages/meta/lib/theme/themes/shared/genRadius.d.ts new file mode 100644 index 0000000..f41fd71 --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genRadius.d.ts @@ -0,0 +1,3 @@ +import type { MapToken } from '../../interface'; +declare const genRadius: (radiusBase: number) => Pick; +export default genRadius; diff --git a/packages/meta/lib/theme/themes/shared/genRadius.js b/packages/meta/lib/theme/themes/shared/genRadius.js new file mode 100644 index 0000000..579b210 --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genRadius.js @@ -0,0 +1,66 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/shared/genRadius.ts +var genRadius_exports = {}; +__export(genRadius_exports, { + default: () => genRadius_default +}); +module.exports = __toCommonJS(genRadius_exports); +var genRadius = (radiusBase) => { + let radiusLG = radiusBase; + let radiusSM = radiusBase; + let radiusXS = radiusBase; + let radiusOuter = radiusBase; + if (radiusBase < 6 && radiusBase >= 5) { + radiusLG = radiusBase + 1; + } else if (radiusBase < 16 && radiusBase >= 6) { + radiusLG = radiusBase + 2; + } else if (radiusBase >= 16) { + radiusLG = 16; + } + if (radiusBase < 7 && radiusBase >= 5) { + radiusSM = 4; + } else if (radiusBase < 8 && radiusBase >= 7) { + radiusSM = 5; + } else if (radiusBase < 14 && radiusBase >= 8) { + radiusSM = 6; + } else if (radiusBase < 16 && radiusBase >= 14) { + radiusSM = 7; + } else if (radiusBase >= 16) { + radiusSM = 8; + } + if (radiusBase < 6 && radiusBase >= 2) { + radiusXS = 1; + } else if (radiusBase >= 6) { + radiusXS = 2; + } + if (radiusBase > 4 && radiusBase < 8) { + radiusOuter = 4; + } else if (radiusBase >= 8) { + radiusOuter = 6; + } + return { + borderRadius: radiusBase, + borderRadiusXS: radiusXS, + borderRadiusSM: radiusSM, + borderRadiusLG: radiusLG, + borderRadiusOuter: radiusOuter + }; +}; +var genRadius_default = genRadius; diff --git a/packages/meta/lib/theme/themes/shared/genSizeMapToken.d.ts b/packages/meta/lib/theme/themes/shared/genSizeMapToken.d.ts new file mode 100644 index 0000000..87332e7 --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genSizeMapToken.d.ts @@ -0,0 +1,2 @@ +import type { SeedToken, SizeMapToken } from '../../interface'; +export default function genSizeMapToken(token: SeedToken): SizeMapToken; diff --git a/packages/meta/lib/theme/themes/shared/genSizeMapToken.js b/packages/meta/lib/theme/themes/shared/genSizeMapToken.js new file mode 100644 index 0000000..11dc1ed --- /dev/null +++ b/packages/meta/lib/theme/themes/shared/genSizeMapToken.js @@ -0,0 +1,47 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/themes/shared/genSizeMapToken.ts +var genSizeMapToken_exports = {}; +__export(genSizeMapToken_exports, { + default: () => genSizeMapToken +}); +module.exports = __toCommonJS(genSizeMapToken_exports); +function genSizeMapToken(token) { + const { sizeUnit, sizeStep } = token; + return { + sizeXXL: sizeUnit * (sizeStep + 8), + // 48 + sizeXL: sizeUnit * (sizeStep + 4), + // 32 + sizeLG: sizeUnit * (sizeStep + 2), + // 24 + sizeMD: sizeUnit * (sizeStep + 1), + // 20 + sizeMS: sizeUnit * sizeStep, + // 16 + size: sizeUnit * sizeStep, + // 16 + sizeSM: sizeUnit * (sizeStep - 1), + // 12 + sizeXS: sizeUnit * (sizeStep - 2), + // 8 + sizeXXS: sizeUnit * (sizeStep - 3) + // 4 + }; +} diff --git a/packages/meta/lib/theme/useToken.d.ts b/packages/meta/lib/theme/useToken.d.ts new file mode 100644 index 0000000..d7e4c14 --- /dev/null +++ b/packages/meta/lib/theme/useToken.d.ts @@ -0,0 +1,19 @@ +import type { Theme } from '@ant-design/cssinjs'; +import type { DesignTokenProviderProps } from './context'; +import type { AliasToken, GlobalToken, MapToken, SeedToken } from './interface'; +export declare const unitless: { + [key in keyof AliasToken]?: boolean; +}; +export declare const ignore: { + [key in keyof AliasToken]?: boolean; +}; +export declare const getComputedToken: (originToken: SeedToken, overrideToken: DesignTokenProviderProps['components'] & { + override?: Partial; +}, theme: Theme) => any; +export default function useToken(): [ + theme: Theme, + token: GlobalToken, + hashId: string, + realToken: GlobalToken, + cssVar?: DesignTokenProviderProps['cssVar'] +]; diff --git a/packages/meta/lib/theme/useToken.js b/packages/meta/lib/theme/useToken.js new file mode 100644 index 0000000..3063421 --- /dev/null +++ b/packages/meta/lib/theme/useToken.js @@ -0,0 +1,157 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/useToken.ts +var useToken_exports = {}; +__export(useToken_exports, { + default: () => useToken, + getComputedToken: () => getComputedToken, + ignore: () => ignore, + unitless: () => unitless +}); +module.exports = __toCommonJS(useToken_exports); +var import_react = __toESM(require("react")); +var import_cssinjs = require("@ant-design/cssinjs"); +var import_version = __toESM(require("../version")); +var import_context = require("./context"); +var import_seed = __toESM(require("./themes/seed")); +var import_alias = __toESM(require("./util/alias")); +var unitless = { + lineHeight: true, + lineHeightSM: true, + lineHeightLG: true, + lineHeightHeading1: true, + lineHeightHeading2: true, + lineHeightHeading3: true, + lineHeightHeading4: true, + lineHeightHeading5: true, + opacityLoading: true, + fontWeightStrong: true, + zIndexPopupBase: true, + zIndexBase: true +}; +var ignore = { + size: true, + sizeSM: true, + sizeLG: true, + sizeMD: true, + sizeXS: true, + sizeXXS: true, + sizeMS: true, + sizeXL: true, + sizeXXL: true, + sizeUnit: true, + sizeStep: true, + motionBase: true, + motionUnit: true +}; +var preserve = { + screenXS: true, + screenXSMin: true, + screenXSMax: true, + screenSM: true, + screenSMMin: true, + screenSMMax: true, + screenMD: true, + screenMDMin: true, + screenMDMax: true, + screenLG: true, + screenLGMin: true, + screenLGMax: true, + screenXL: true, + screenXLMin: true, + screenXLMax: true, + screenXXL: true, + screenXXLMin: true +}; +var getComputedToken = (originToken, overrideToken, theme) => { + const derivativeToken = theme.getDerivativeToken(originToken); + const { override, ...components } = overrideToken; + let mergedDerivativeToken = { + ...derivativeToken, + override + }; + mergedDerivativeToken = (0, import_alias.default)(mergedDerivativeToken); + if (components) { + Object.entries(components).forEach(([key, value]) => { + const { theme: componentTheme, ...componentTokens } = value; + let mergedComponentToken = componentTokens; + if (componentTheme) { + mergedComponentToken = getComputedToken( + { + ...mergedDerivativeToken, + ...componentTokens + }, + { + override: componentTokens + }, + componentTheme + ); + } + mergedDerivativeToken[key] = mergedComponentToken; + }); + } + return mergedDerivativeToken; +}; +function useToken() { + const { + token: rootDesignToken, + hashed, + theme, + override, + cssVar + } = import_react.default.useContext(import_context.DesignTokenContext); + const salt = `${import_version.default}-${hashed || ""}`; + const mergedTheme = theme || import_context.defaultTheme; + const [token, hashId, realToken] = (0, import_cssinjs.useCacheToken)( + mergedTheme, + [import_seed.default, rootDesignToken], + { + salt, + override, + getComputedToken, + // formatToken will not be consumed after 1.15.0 with getComputedToken. + // But token will break if @ant-design/cssinjs is under 1.15.0 without it + formatToken: import_alias.default, + cssVar: cssVar && { + prefix: cssVar.prefix, + key: cssVar.key, + unitless, + ignore, + preserve + } + } + ); + return [mergedTheme, realToken, hashed ? hashId : "", token, cssVar]; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getComputedToken, + ignore, + unitless +}); diff --git a/packages/meta/lib/theme/util/alias.d.ts b/packages/meta/lib/theme/util/alias.d.ts new file mode 100644 index 0000000..e41cbaa --- /dev/null +++ b/packages/meta/lib/theme/util/alias.d.ts @@ -0,0 +1,12 @@ +import type { AliasToken, MapToken, OverrideToken } from '../interface'; +/** Raw merge of `@ant-design/cssinjs` token. Which need additional process */ +type RawMergedToken = MapToken & OverrideToken & { + override: Partial; +}; +/** + * Seed (designer) > Derivative (designer) > Alias (developer). + * + * Merge seed & derivative & override token and generate alias token for developer. + */ +export default function formatToken(derivativeToken: RawMergedToken): AliasToken; +export {}; diff --git a/packages/meta/lib/theme/util/alias.js b/packages/meta/lib/theme/util/alias.js new file mode 100644 index 0000000..1be1d7b --- /dev/null +++ b/packages/meta/lib/theme/util/alias.js @@ -0,0 +1,198 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/util/alias.ts +var alias_exports = {}; +__export(alias_exports, { + default: () => formatToken +}); +module.exports = __toCommonJS(alias_exports); +var import_tinycolor = require("@ctrl/tinycolor"); +var import_seed = __toESM(require("../themes/seed")); +var import_getAlphaColor = __toESM(require("./getAlphaColor")); +function formatToken(derivativeToken) { + const { override, ...restToken } = derivativeToken; + const overrideTokens = { ...override }; + Object.keys(import_seed.default).forEach((token) => { + delete overrideTokens[token]; + }); + const mergedToken = { + ...restToken, + ...overrideTokens + }; + const screenXS = 480; + const screenSM = 576; + const screenMD = 768; + const screenLG = 992; + const screenXL = 1200; + const screenXXL = 1600; + if (mergedToken.motion === false) { + const fastDuration = "0s"; + mergedToken.motionDurationFast = fastDuration; + mergedToken.motionDurationMid = fastDuration; + mergedToken.motionDurationSlow = fastDuration; + } + const aliasToken = { + ...mergedToken, + // ============== Background ============== // + colorFillContent: mergedToken.colorFillSecondary, + colorFillContentHover: mergedToken.colorFill, + colorFillAlter: mergedToken.colorFillQuaternary, + colorBgContainerDisabled: mergedToken.colorFillTertiary, + // ============== Split ============== // + colorBorderBg: mergedToken.colorBgContainer, + colorSplit: (0, import_getAlphaColor.default)(mergedToken.colorBorderSecondary, mergedToken.colorBgContainer), + // ============== Text ============== // + colorTextPlaceholder: mergedToken.colorTextQuaternary, + colorTextDisabled: mergedToken.colorTextQuaternary, + colorTextHeading: mergedToken.colorText, + colorTextLabel: mergedToken.colorTextSecondary, + colorTextDescription: mergedToken.colorTextTertiary, + colorTextLightSolid: mergedToken.colorWhite, + colorHighlight: mergedToken.colorError, + colorBgTextHover: mergedToken.colorFillSecondary, + colorBgTextActive: mergedToken.colorFill, + colorIcon: mergedToken.colorTextTertiary, + colorIconHover: mergedToken.colorText, + colorErrorOutline: (0, import_getAlphaColor.default)(mergedToken.colorErrorBg, mergedToken.colorBgContainer), + colorWarningOutline: (0, import_getAlphaColor.default)(mergedToken.colorWarningBg, mergedToken.colorBgContainer), + // Font + fontSizeIcon: mergedToken.fontSizeSM, + // Line + lineWidthFocus: mergedToken.lineWidth * 4, + // Control + lineWidth: mergedToken.lineWidth, + controlOutlineWidth: mergedToken.lineWidth * 2, + // Checkbox size and expand icon size + controlInteractiveSize: mergedToken.controlHeight / 2, + controlItemBgHover: mergedToken.colorFillTertiary, + controlItemBgActive: mergedToken.colorPrimaryBg, + controlItemBgActiveHover: mergedToken.colorPrimaryBgHover, + controlItemBgActiveDisabled: mergedToken.colorFill, + controlTmpOutline: mergedToken.colorFillQuaternary, + controlOutline: (0, import_getAlphaColor.default)(mergedToken.colorPrimaryBg, mergedToken.colorBgContainer), + lineType: mergedToken.lineType, + borderRadius: mergedToken.borderRadius, + borderRadiusXS: mergedToken.borderRadiusXS, + borderRadiusSM: mergedToken.borderRadiusSM, + borderRadiusLG: mergedToken.borderRadiusLG, + fontWeightStrong: 600, + opacityLoading: 0.65, + linkDecoration: "none", + linkHoverDecoration: "none", + linkFocusDecoration: "none", + controlPaddingHorizontal: 12, + controlPaddingHorizontalSM: 8, + paddingXXS: mergedToken.sizeXXS, + paddingXS: mergedToken.sizeXS, + paddingSM: mergedToken.sizeSM, + padding: mergedToken.size, + paddingMD: mergedToken.sizeMD, + paddingLG: mergedToken.sizeLG, + paddingXL: mergedToken.sizeXL, + paddingContentHorizontalLG: mergedToken.sizeLG, + paddingContentVerticalLG: mergedToken.sizeMS, + paddingContentHorizontal: mergedToken.sizeMS, + paddingContentVertical: mergedToken.sizeSM, + paddingContentHorizontalSM: mergedToken.size, + paddingContentVerticalSM: mergedToken.sizeXS, + marginXXS: mergedToken.sizeXXS, + marginXS: mergedToken.sizeXS, + marginSM: mergedToken.sizeSM, + margin: mergedToken.size, + marginMD: mergedToken.sizeMD, + marginLG: mergedToken.sizeLG, + marginXL: mergedToken.sizeXL, + marginXXL: mergedToken.sizeXXL, + boxShadow: ` + 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) + `, + boxShadowSecondary: ` + 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) + `, + boxShadowTertiary: ` + 0 1px 2px 0 rgba(0, 0, 0, 0.03), + 0 1px 6px -1px rgba(0, 0, 0, 0.02), + 0 2px 4px 0 rgba(0, 0, 0, 0.02) + `, + screenXS, + screenXSMin: screenXS, + screenXSMax: screenSM - 1, + screenSM, + screenSMMin: screenSM, + screenSMMax: screenMD - 1, + screenMD, + screenMDMin: screenMD, + screenMDMax: screenLG - 1, + screenLG, + screenLGMin: screenLG, + screenLGMax: screenXL - 1, + screenXL, + screenXLMin: screenXL, + screenXLMax: screenXXL - 1, + screenXXL, + screenXXLMin: screenXXL, + boxShadowPopoverArrow: "2px 2px 5px rgba(0, 0, 0, 0.05)", + boxShadowCard: ` + 0 1px 2px -2px ${new import_tinycolor.TinyColor("rgba(0, 0, 0, 0.16)").toRgbString()}, + 0 3px 6px 0 ${new import_tinycolor.TinyColor("rgba(0, 0, 0, 0.12)").toRgbString()}, + 0 5px 12px 4px ${new import_tinycolor.TinyColor("rgba(0, 0, 0, 0.09)").toRgbString()} + `, + boxShadowDrawerRight: ` + -6px 0 16px 0 rgba(0, 0, 0, 0.08), + -3px 0 6px -4px rgba(0, 0, 0, 0.12), + -9px 0 28px 8px rgba(0, 0, 0, 0.05) + `, + boxShadowDrawerLeft: ` + 6px 0 16px 0 rgba(0, 0, 0, 0.08), + 3px 0 6px -4px rgba(0, 0, 0, 0.12), + 9px 0 28px 8px rgba(0, 0, 0, 0.05) + `, + boxShadowDrawerUp: ` + 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) + `, + boxShadowDrawerDown: ` + 0 -6px 16px 0 rgba(0, 0, 0, 0.08), + 0 -3px 6px -4px rgba(0, 0, 0, 0.12), + 0 -9px 28px 8px rgba(0, 0, 0, 0.05) + `, + boxShadowTabsOverflowLeft: "inset 10px 0 8px -8px rgba(0, 0, 0, 0.08)", + boxShadowTabsOverflowRight: "inset -10px 0 8px -8px rgba(0, 0, 0, 0.08)", + boxShadowTabsOverflowTop: "inset 0 10px 8px -8px rgba(0, 0, 0, 0.08)", + boxShadowTabsOverflowBottom: "inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08)", + // Override AliasToken + ...overrideTokens + }; + return aliasToken; +} diff --git a/packages/meta/lib/theme/util/calc/CSSCalculator.d.ts b/packages/meta/lib/theme/util/calc/CSSCalculator.d.ts new file mode 100644 index 0000000..3346945 --- /dev/null +++ b/packages/meta/lib/theme/util/calc/CSSCalculator.d.ts @@ -0,0 +1,14 @@ +import AbstractCalculator from './calculator'; +export default class CSSCalculator extends AbstractCalculator { + result: string; + lowPriority?: boolean; + constructor(num: number | string | AbstractCalculator); + add(num: number | string | AbstractCalculator): this; + sub(num: number | string | AbstractCalculator): this; + mul(num: number | string | AbstractCalculator): this; + div(num: number | string | AbstractCalculator): this; + getResult(force?: boolean): string; + equal(options?: { + unit?: boolean; + }): string; +} diff --git a/packages/meta/lib/theme/util/calc/CSSCalculator.js b/packages/meta/lib/theme/util/calc/CSSCalculator.js new file mode 100644 index 0000000..78c11db --- /dev/null +++ b/packages/meta/lib/theme/util/calc/CSSCalculator.js @@ -0,0 +1,109 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/util/calc/CSSCalculator.ts +var CSSCalculator_exports = {}; +__export(CSSCalculator_exports, { + default: () => CSSCalculator +}); +module.exports = __toCommonJS(CSSCalculator_exports); +var import_calculator = __toESM(require("./calculator")); +var CALC_UNIT = "CALC_UNIT"; +function unit(value) { + if (typeof value === "number") { + return `${value}${CALC_UNIT}`; + } + return value; +} +var CSSCalculator = class extends import_calculator.default { + constructor(num) { + super(); + this.result = ""; + if (num instanceof CSSCalculator) { + this.result = `(${num.result})`; + } else if (typeof num === "number") { + this.result = unit(num); + } else if (typeof num === "string") { + this.result = num; + } + } + add(num) { + if (num instanceof CSSCalculator) { + this.result = `${this.result} + ${num.getResult()}`; + } else if (typeof num === "number" || typeof num === "string") { + this.result = `${this.result} + ${unit(num)}`; + } + this.lowPriority = true; + return this; + } + sub(num) { + if (num instanceof CSSCalculator) { + this.result = `${this.result} - ${num.getResult()}`; + } else if (typeof num === "number" || typeof num === "string") { + this.result = `${this.result} - ${unit(num)}`; + } + this.lowPriority = true; + return this; + } + mul(num) { + if (this.lowPriority) { + this.result = `(${this.result})`; + } + if (num instanceof CSSCalculator) { + this.result = `${this.result} * ${num.getResult(true)}`; + } else if (typeof num === "number" || typeof num === "string") { + this.result = `${this.result} * ${num}`; + } + this.lowPriority = false; + return this; + } + div(num) { + if (this.lowPriority) { + this.result = `(${this.result})`; + } + if (num instanceof CSSCalculator) { + this.result = `${this.result} / ${num.getResult(true)}`; + } else if (typeof num === "number" || typeof num === "string") { + this.result = `${this.result} / ${num}`; + } + this.lowPriority = false; + return this; + } + getResult(force) { + return this.lowPriority || force ? `(${this.result})` : this.result; + } + equal(options) { + const { unit: cssUnit = true } = options || {}; + const regexp = new RegExp(`${CALC_UNIT}`, "g"); + this.result = this.result.replace(regexp, cssUnit ? "px" : ""); + if (typeof this.lowPriority !== "undefined") { + return `calc(${this.result})`; + } + return this.result; + } +}; diff --git a/packages/meta/lib/theme/util/calc/NumCalculator.d.ts b/packages/meta/lib/theme/util/calc/NumCalculator.d.ts new file mode 100644 index 0000000..cd886f6 --- /dev/null +++ b/packages/meta/lib/theme/util/calc/NumCalculator.d.ts @@ -0,0 +1,10 @@ +import AbstractCalculator from './calculator'; +export default class NumCalculator extends AbstractCalculator { + result: number; + constructor(num: number | string | AbstractCalculator); + add(num: number | string | AbstractCalculator): this; + sub(num: number | string | AbstractCalculator): this; + mul(num: number | string | AbstractCalculator): this; + div(num: number | string | AbstractCalculator): this; + equal(): number; +} diff --git a/packages/meta/lib/theme/util/calc/NumCalculator.js b/packages/meta/lib/theme/util/calc/NumCalculator.js new file mode 100644 index 0000000..8a768e2 --- /dev/null +++ b/packages/meta/lib/theme/util/calc/NumCalculator.js @@ -0,0 +1,81 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/util/calc/NumCalculator.ts +var NumCalculator_exports = {}; +__export(NumCalculator_exports, { + default: () => NumCalculator +}); +module.exports = __toCommonJS(NumCalculator_exports); +var import_calculator = __toESM(require("./calculator")); +var NumCalculator = class extends import_calculator.default { + constructor(num) { + super(); + this.result = 0; + if (num instanceof NumCalculator) { + this.result = num.result; + } else if (typeof num === "number") { + this.result = num; + } + } + add(num) { + if (num instanceof NumCalculator) { + this.result += num.result; + } else if (typeof num === "number") { + this.result += num; + } + return this; + } + sub(num) { + if (num instanceof NumCalculator) { + this.result -= num.result; + } else if (typeof num === "number") { + this.result -= num; + } + return this; + } + mul(num) { + if (num instanceof NumCalculator) { + this.result *= num.result; + } else if (typeof num === "number") { + this.result *= num; + } + return this; + } + div(num) { + if (num instanceof NumCalculator) { + this.result /= num.result; + } else if (typeof num === "number") { + this.result /= num; + } + return this; + } + equal() { + return this.result; + } +}; diff --git a/packages/meta/lib/theme/util/calc/calculator.d.ts b/packages/meta/lib/theme/util/calc/calculator.d.ts new file mode 100644 index 0000000..81fe701 --- /dev/null +++ b/packages/meta/lib/theme/util/calc/calculator.d.ts @@ -0,0 +1,30 @@ +declare abstract class AbstractCalculator { + /** + * @descCN 计算两数的和,例如:1 + 2 + * @descEN Calculate the sum of two numbers, e.g. 1 + 2 + */ + abstract add(num: number | string | AbstractCalculator): this; + /** + * @descCN 计算两数的差,例如:1 - 2 + * @descEN Calculate the difference between two numbers, e.g. 1 - 2 + */ + abstract sub(num: number | string | AbstractCalculator): this; + /** + * @descCN 计算两数的积,例如:1 * 2 + * @descEN Calculate the product of two numbers, e.g. 1 * 2 + */ + abstract mul(num: number | string | AbstractCalculator): this; + /** + * @descCN 计算两数的商,例如:1 / 2 + * @descEN Calculate the quotient of two numbers, e.g. 1 / 2 + */ + abstract div(num: number | string | AbstractCalculator): this; + /** + * @descCN 获取计算结果 + * @descEN Get the calculation result + */ + abstract equal(options?: { + unit?: boolean; + }): string | number; +} +export default AbstractCalculator; diff --git a/packages/meta/lib/theme/util/calc/calculator.js b/packages/meta/lib/theme/util/calc/calculator.js new file mode 100644 index 0000000..22c8b8b --- /dev/null +++ b/packages/meta/lib/theme/util/calc/calculator.js @@ -0,0 +1,27 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/util/calc/calculator.ts +var calculator_exports = {}; +__export(calculator_exports, { + default: () => calculator_default +}); +module.exports = __toCommonJS(calculator_exports); +var AbstractCalculator = class { +}; +var calculator_default = AbstractCalculator; diff --git a/packages/meta/lib/theme/util/calc/index.d.ts b/packages/meta/lib/theme/util/calc/index.d.ts new file mode 100644 index 0000000..0b23166 --- /dev/null +++ b/packages/meta/lib/theme/util/calc/index.d.ts @@ -0,0 +1,5 @@ +import NumCalculator from './NumCalculator'; +import CSSCalculator from './CSSCalculator'; +import type AbstractCalculator from './calculator'; +declare const genCalc: (type: 'css' | 'js') => (num: number | string | AbstractCalculator) => CSSCalculator | NumCalculator; +export default genCalc; diff --git a/packages/meta/lib/theme/util/calc/index.js b/packages/meta/lib/theme/util/calc/index.js new file mode 100644 index 0000000..01f07fc --- /dev/null +++ b/packages/meta/lib/theme/util/calc/index.js @@ -0,0 +1,41 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/util/calc/index.ts +var calc_exports = {}; +__export(calc_exports, { + default: () => calc_default +}); +module.exports = __toCommonJS(calc_exports); +var import_NumCalculator = __toESM(require("./NumCalculator")); +var import_CSSCalculator = __toESM(require("./CSSCalculator")); +var genCalc = (type) => { + const Calculator = type === "css" ? import_CSSCalculator.default : import_NumCalculator.default; + return (num) => new Calculator(num); +}; +var calc_default = genCalc; diff --git a/packages/meta/lib/theme/util/genComponentStyleHook.d.ts b/packages/meta/lib/theme/util/genComponentStyleHook.d.ts new file mode 100644 index 0000000..f443993 --- /dev/null +++ b/packages/meta/lib/theme/util/genComponentStyleHook.d.ts @@ -0,0 +1,90 @@ +import type { ComponentType, ReactElement } from 'react'; +import type { CSSInterpolation } from '@ant-design/cssinjs'; +import type { ComponentTokenMap, GlobalToken, OverrideToken, UseComponentStyleResult } from '../interface'; +import { unitless } from '../useToken'; +import type AbstractCalculator from './calc/calculator'; +export type OverrideTokenWithoutDerivative = ComponentTokenMap; +export type OverrideComponent = keyof OverrideTokenWithoutDerivative; +export type GlobalTokenWithComponent = GlobalToken & ComponentTokenMap[C]; +type ComponentToken = Exclude; +type ComponentTokenKey = keyof ComponentToken; +export interface StyleInfo { + hashId: string; + prefixCls: string; + rootPrefixCls: string; + iconPrefixCls: string; +} +export type CSSUtil = { + calc: (number: any) => AbstractCalculator; + max: (...values: (number | string)[]) => number | string; + min: (...values: (number | string)[]) => number | string; +}; +export type TokenWithCommonCls = T & { + /** Wrap component class with `.` prefix */ + componentCls: string; + /** Origin prefix which do not have `.` prefix */ + prefixCls: string; + /** Wrap icon class with `.` prefix */ + iconCls: string; + /** Wrap ant prefixCls class with `.` prefix */ + antCls: string; +} & CSSUtil; +export type FullToken = TokenWithCommonCls>; +export type GenStyleFn = (token: FullToken, info: StyleInfo) => CSSInterpolation; +export type GetDefaultToken = null | OverrideTokenWithoutDerivative[C] | ((token: GlobalToken) => OverrideTokenWithoutDerivative[C]); +export type FormatComponentToken = (token: NonNullable) => NonNullable; +export default function genComponentStyleHook(componentName: C | [C, string], styleFn: GenStyleFn, getDefaultToken?: null | OverrideTokenWithoutDerivative[C] | ((token: GlobalToken) => OverrideTokenWithoutDerivative[C]), options?: { + resetStyle?: boolean; + deprecatedTokens?: [ComponentTokenKey, ComponentTokenKey][]; + /** + * Only use component style in client side. Ignore in SSR. + */ + clientOnly?: boolean; + /** + * Set order of component style. Default is -999. + */ + order?: number; + format?: FormatComponentToken; + injectStyle?: boolean; +}): (prefixCls: string) => UseComponentStyleResult; +export interface SubStyleComponentProps { + prefixCls: string; +} +type RestParameters = T extends [any, ...infer Rest] ? Rest : never; +export declare const genSubStyleComponent: (componentName: [C, string], ...args: RestParameters>>) => ComponentType; +export type CSSVarRegisterProps = { + rootCls: string; + component: string; + cssVar: { + prefix?: string; + key?: string; + }; +}; +export declare const genStyleHooks: (component: C | [C, string], styleFn: GenStyleFn, getDefaultToken?: GetDefaultToken | undefined, options?: { + resetStyle?: boolean | undefined; + deprecatedTokens?: [keyof Exclude, keyof Exclude][] | undefined; + /** + * Chance to format component token with user input. + * Useful when need calculated token as css variables. + */ + format?: FormatComponentToken | undefined; + /** + * Component tokens that do not need unit. + */ + unitless?: { [key in keyof Exclude]: boolean; } | undefined; + /** + * Only use component style in client side. Ignore in SSR. + */ + clientOnly?: boolean | undefined; + /** + * Set order of component style. + * @default -999 + */ + order?: number | undefined; + /** + * Whether generate styles + * @default true + */ + injectStyle?: boolean | undefined; +} | undefined) => (prefixCls: string, rootCls?: string) => readonly [(node: ReactElement) => ReactElement, string, string | undefined]; +export {}; diff --git a/packages/meta/lib/theme/util/genComponentStyleHook.js b/packages/meta/lib/theme/util/genComponentStyleHook.js new file mode 100644 index 0000000..fd8e2a9 --- /dev/null +++ b/packages/meta/lib/theme/util/genComponentStyleHook.js @@ -0,0 +1,257 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/util/genComponentStyleHook.tsx +var genComponentStyleHook_exports = {}; +__export(genComponentStyleHook_exports, { + default: () => genComponentStyleHook, + genStyleHooks: () => genStyleHooks, + genSubStyleComponent: () => genSubStyleComponent +}); +module.exports = __toCommonJS(genComponentStyleHook_exports); +var import_react = __toESM(require("react")); +var import_cssinjs = require("@ant-design/cssinjs"); +var import_rc_util = require("rc-util"); +var import_context = require("../../config-provider/context"); +var import_style = require("../../style"); +var import_useToken = __toESM(require("../useToken")); +var import_calc = __toESM(require("./calc")); +var import_maxmin = __toESM(require("./maxmin")); +var import_statistic = __toESM(require("./statistic")); +var import_useResetIconStyle = __toESM(require("./useResetIconStyle")); +var getDefaultComponentToken = (component, token, getDefaultToken) => { + if (typeof getDefaultToken === "function") { + return getDefaultToken((0, import_statistic.merge)(token, token[component] ?? {})); + } + return getDefaultToken ?? {}; +}; +var getComponentToken = (component, token, defaultToken, options) => { + const customToken = { ...token[component] }; + if (options == null ? void 0 : options.deprecatedTokens) { + const { deprecatedTokens } = options; + deprecatedTokens.forEach(([oldTokenKey, newTokenKey]) => { + if (process.env.NODE_ENV !== "production") { + (0, import_rc_util.warning)( + !(customToken == null ? void 0 : customToken[oldTokenKey]), + `The token '${String(oldTokenKey)}' of ${component} had deprecated, use '${String( + newTokenKey + )}' instead.` + ); + } + if ((customToken == null ? void 0 : customToken[oldTokenKey]) || (customToken == null ? void 0 : customToken[newTokenKey])) { + customToken[newTokenKey] ?? (customToken[newTokenKey] = customToken == null ? void 0 : customToken[oldTokenKey]); + } + }); + } + let mergedToken = { ...defaultToken, ...customToken }; + if (options == null ? void 0 : options.format) { + mergedToken = options.format(mergedToken); + } + Object.keys(mergedToken).forEach((key) => { + if (mergedToken[key] === token[key]) { + delete mergedToken[key]; + } + }); + return mergedToken; +}; +var getCompVarPrefix = (component, prefix) => `${[ + prefix, + component.replace(/([A-Z]+)([A-Z][a-z]+)/g, "$1-$2").replace(/([a-z])([A-Z])/g, "$1-$2") +].filter(Boolean).join("-")}`; +function genComponentStyleHook(componentName, styleFn, getDefaultToken, options = {}) { + const cells = Array.isArray(componentName) ? componentName : [componentName, componentName]; + const [component] = cells; + const concatComponent = cells.join("-"); + return (prefixCls) => { + const [theme, realToken, hashId, token, cssVar] = (0, import_useToken.default)(); + const { getPrefixCls, iconPrefixCls, csp } = (0, import_react.useContext)(import_context.ConfigContext); + const rootPrefixCls = getPrefixCls(); + const type = cssVar ? "css" : "js"; + const calc = (0, import_calc.default)(type); + const { max, min } = (0, import_maxmin.default)(type); + const sharedConfig = { + theme, + token, + hashId, + nonce: () => csp == null ? void 0 : csp.nonce, + clientOnly: options.clientOnly, + // antd is always at top of styles + order: options.order || -999 + }; + (0, import_cssinjs.useStyleRegister)( + { ...sharedConfig, clientOnly: false, path: ["Shared", rootPrefixCls] }, + () => [ + { + // Link + "&": (0, import_style.genLinkStyle)(token) + } + ] + ); + (0, import_useResetIconStyle.default)(iconPrefixCls, csp); + const wrapSSR = (0, import_cssinjs.useStyleRegister)( + { ...sharedConfig, path: [concatComponent, prefixCls, iconPrefixCls] }, + () => { + if (options.injectStyle === false) { + return []; + } + const { token: proxyToken, flush } = (0, import_statistic.default)(token); + const defaultComponentToken = getDefaultComponentToken( + component, + realToken, + getDefaultToken + ); + const componentCls = `.${prefixCls}`; + const componentToken = getComponentToken(component, realToken, defaultComponentToken, { + deprecatedTokens: options.deprecatedTokens, + format: options.format + }); + if (cssVar) { + Object.keys(defaultComponentToken).forEach((key) => { + defaultComponentToken[key] = `var(${(0, import_cssinjs.token2CSSVar)( + key, + getCompVarPrefix(component, cssVar.prefix) + )})`; + }); + } + const mergedToken = (0, import_statistic.merge)( + proxyToken, + { + componentCls, + prefixCls, + iconCls: `.${iconPrefixCls}`, + antCls: `.${rootPrefixCls}`, + calc, + // @ts-ignore + max, + // @ts-ignore + min + }, + cssVar ? defaultComponentToken : componentToken + ); + const styleInterpolation = styleFn(mergedToken, { + hashId, + prefixCls, + rootPrefixCls, + iconPrefixCls + }); + flush(component, componentToken); + return [ + options.resetStyle === false ? null : (0, import_style.genCommonStyle)(mergedToken, prefixCls), + styleInterpolation + ]; + } + ); + return [wrapSSR, hashId]; + }; +} +var genSubStyleComponent = (componentName, styleFn, getDefaultToken, options) => { + const useStyle = genComponentStyleHook(componentName, styleFn, getDefaultToken, { + resetStyle: false, + // Sub Style should default after root one + order: -998, + ...options + }); + const StyledComponent = ({ + prefixCls + }) => { + useStyle(prefixCls); + return null; + }; + if (process.env.NODE_ENV !== "production") { + StyledComponent.displayName = `SubStyle_${Array.isArray(componentName) ? componentName.join(".") : componentName}`; + } + return StyledComponent; +}; +var genCSSVarRegister = (component, getDefaultToken, options) => { + function prefixToken(key) { + return `${component}${key.slice(0, 1).toUpperCase()}${key.slice(1)}`; + } + const { unitless: originUnitless = {}, injectStyle = true } = options ?? {}; + const compUnitless = { + [prefixToken("zIndexPopup")]: true + }; + Object.keys(originUnitless).forEach((key) => { + compUnitless[prefixToken(key)] = originUnitless[key]; + }); + const CSSVarRegister = ({ rootCls, cssVar }) => { + const [, realToken] = (0, import_useToken.default)(); + (0, import_cssinjs.useCSSVarRegister)( + { + path: [component], + prefix: cssVar.prefix, + key: cssVar == null ? void 0 : cssVar.key, + unitless: { + ...import_useToken.unitless, + ...compUnitless + }, + ignore: import_useToken.ignore, + token: realToken, + scope: rootCls + }, + () => { + const defaultToken = getDefaultComponentToken(component, realToken, getDefaultToken); + const componentToken = getComponentToken(component, realToken, defaultToken, { + format: options == null ? void 0 : options.format, + deprecatedTokens: options == null ? void 0 : options.deprecatedTokens + }); + Object.keys(defaultToken).forEach((key) => { + componentToken[prefixToken(key)] = componentToken[key]; + delete componentToken[key]; + }); + return componentToken; + } + ); + return null; + }; + const useCSSVar = (rootCls) => { + const [, , , , cssVar] = (0, import_useToken.default)(); + return [ + (node) => injectStyle && cssVar ? /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(CSSVarRegister, { rootCls, cssVar, component }), node) : node, + cssVar == null ? void 0 : cssVar.key + ]; + }; + return useCSSVar; +}; +var genStyleHooks = (component, styleFn, getDefaultToken, options) => { + const useStyle = genComponentStyleHook(component, styleFn, getDefaultToken, options); + const useCSSVar = genCSSVarRegister( + Array.isArray(component) ? component[0] : component, + getDefaultToken, + options + ); + return (prefixCls, rootCls = prefixCls) => { + const [, hashId] = useStyle(prefixCls); + const [wrapCSSVar, cssVarCls] = useCSSVar(rootCls); + return [wrapCSSVar, hashId, cssVarCls]; + }; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + genStyleHooks, + genSubStyleComponent +}); diff --git a/packages/meta/lib/theme/util/genPresetColor.d.ts b/packages/meta/lib/theme/util/genPresetColor.d.ts new file mode 100644 index 0000000..2a67c06 --- /dev/null +++ b/packages/meta/lib/theme/util/genPresetColor.d.ts @@ -0,0 +1,16 @@ +import type { CSSObject } from '@ant-design/cssinjs'; +import type { AliasToken, PresetColorKey } from '../internal'; +import type { TokenWithCommonCls } from './genComponentStyleHook'; +interface CalcColor { + /** token[`${colorKey}-1`] */ + lightColor: string; + /** token[`${colorKey}-3`] */ + lightBorderColor: string; + /** token[`${colorKey}-6`] */ + darkColor: string; + /** token[`${colorKey}-7`] */ + textColor: string; +} +type GenCSS = (colorKey: PresetColorKey, calcColor: CalcColor) => CSSObject; +export default function genPresetColor>(token: Token, genCss: GenCSS): CSSObject; +export {}; diff --git a/packages/meta/lib/theme/util/genPresetColor.js b/packages/meta/lib/theme/util/genPresetColor.js new file mode 100644 index 0000000..120483e --- /dev/null +++ b/packages/meta/lib/theme/util/genPresetColor.js @@ -0,0 +1,37 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/util/genPresetColor.ts +var genPresetColor_exports = {}; +__export(genPresetColor_exports, { + default: () => genPresetColor +}); +module.exports = __toCommonJS(genPresetColor_exports); +var import_interface = require("../interface"); +function genPresetColor(token, genCss) { + return import_interface.PresetColors.reduce((prev, colorKey) => { + const lightColor = token[`${colorKey}1`]; + const lightBorderColor = token[`${colorKey}3`]; + const darkColor = token[`${colorKey}6`]; + const textColor = token[`${colorKey}7`]; + return { + ...prev, + ...genCss(colorKey, { lightColor, lightBorderColor, darkColor, textColor }) + }; + }, {}); +} diff --git a/packages/meta/lib/theme/util/getAlphaColor.d.ts b/packages/meta/lib/theme/util/getAlphaColor.d.ts new file mode 100644 index 0000000..29e519d --- /dev/null +++ b/packages/meta/lib/theme/util/getAlphaColor.d.ts @@ -0,0 +1,2 @@ +declare function getAlphaColor(frontColor: string, backgroundColor: string): string; +export default getAlphaColor; diff --git a/packages/meta/lib/theme/util/getAlphaColor.js b/packages/meta/lib/theme/util/getAlphaColor.js new file mode 100644 index 0000000..b0ee7b0 --- /dev/null +++ b/packages/meta/lib/theme/util/getAlphaColor.js @@ -0,0 +1,45 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/util/getAlphaColor.ts +var getAlphaColor_exports = {}; +__export(getAlphaColor_exports, { + default: () => getAlphaColor_default +}); +module.exports = __toCommonJS(getAlphaColor_exports); +var import_tinycolor = require("@ctrl/tinycolor"); +function isStableColor(color) { + return color >= 0 && color <= 255; +} +function getAlphaColor(frontColor, backgroundColor) { + const { r: fR, g: fG, b: fB, a: originAlpha } = new import_tinycolor.TinyColor(frontColor).toRgb(); + if (originAlpha < 1) { + return frontColor; + } + const { r: bR, g: bG, b: bB } = new import_tinycolor.TinyColor(backgroundColor).toRgb(); + for (let fA = 0.01; fA <= 1; fA += 0.01) { + const r = Math.round((fR - bR * (1 - fA)) / fA); + const g = Math.round((fG - bG * (1 - fA)) / fA); + const b = Math.round((fB - bB * (1 - fA)) / fA); + if (isStableColor(r) && isStableColor(g) && isStableColor(b)) { + return new import_tinycolor.TinyColor({ r, g, b, a: Math.round(fA * 100) / 100 }).toRgbString(); + } + } + return new import_tinycolor.TinyColor({ r: fR, g: fG, b: fB, a: 1 }).toRgbString(); +} +var getAlphaColor_default = getAlphaColor; diff --git a/packages/meta/lib/theme/util/maxmin.d.ts b/packages/meta/lib/theme/util/maxmin.d.ts new file mode 100644 index 0000000..b513264 --- /dev/null +++ b/packages/meta/lib/theme/util/maxmin.d.ts @@ -0,0 +1,7 @@ +export default function genMaxMin(type: 'css' | 'js'): { + max: (...values: number[]) => number; + min: (...values: number[]) => number; +} | { + max: (...args: (string | number)[]) => string; + min: (...args: (string | number)[]) => string; +}; diff --git a/packages/meta/lib/theme/util/maxmin.js b/packages/meta/lib/theme/util/maxmin.js new file mode 100644 index 0000000..577e3d1 --- /dev/null +++ b/packages/meta/lib/theme/util/maxmin.js @@ -0,0 +1,37 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/util/maxmin.ts +var maxmin_exports = {}; +__export(maxmin_exports, { + default: () => genMaxMin +}); +module.exports = __toCommonJS(maxmin_exports); +var import_cssinjs = require("@ant-design/cssinjs"); +function genMaxMin(type) { + if (type === "js") { + return { + max: Math.max, + min: Math.min + }; + } + return { + max: (...args) => `max(${args.map((value) => (0, import_cssinjs.unit)(value)).join(",")})`, + min: (...args) => `min(${args.map((value) => (0, import_cssinjs.unit)(value)).join(",")})` + }; +} diff --git a/packages/meta/lib/theme/util/statistic.d.ts b/packages/meta/lib/theme/util/statistic.d.ts new file mode 100644 index 0000000..32ab0d9 --- /dev/null +++ b/packages/meta/lib/theme/util/statistic.d.ts @@ -0,0 +1,13 @@ +import type { AnyObject } from '../../_util/type'; +/** + * This function will do as `Object.assign` in production. But will use Object.defineProperty:get to + * pass all value access in development. To support statistic field usage with alias token. + */ +export declare function merge(...objs: Partial[]): T; +/** Statistic token usage case. Should use `merge` function if you do not want spread record. */ +declare const statisticToken: (token: T) => { + token: T; + keys: Set | undefined; + flush: (componentName: string, componentToken: Record) => void; +}; +export default statisticToken; diff --git a/packages/meta/lib/theme/util/statistic.js b/packages/meta/lib/theme/util/statistic.js new file mode 100644 index 0000000..2c861d2 --- /dev/null +++ b/packages/meta/lib/theme/util/statistic.js @@ -0,0 +1,86 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/util/statistic.ts +var statistic_exports = {}; +__export(statistic_exports, { + _statistic_build_: () => _statistic_build_, + default: () => statistic_default, + merge: () => merge, + statistic: () => statistic +}); +module.exports = __toCommonJS(statistic_exports); +var enableStatistic = process.env.NODE_ENV !== "production" || typeof CSSINJS_STATISTIC !== "undefined"; +var recording = true; +function merge(...objs) { + if (!enableStatistic) { + return Object.assign({}, ...objs); + } + recording = false; + const ret = {}; + objs.forEach((obj) => { + const keys = Object.keys(obj); + keys.forEach((key) => { + Object.defineProperty(ret, key, { + configurable: true, + enumerable: true, + get: () => obj[key] + }); + }); + }); + recording = true; + return ret; +} +var statistic = {}; +var _statistic_build_ = {}; +function noop() { +} +var statisticToken = (token) => { + let tokenKeys; + let proxy = token; + let flush = noop; + if (enableStatistic && typeof Proxy !== "undefined") { + tokenKeys = /* @__PURE__ */ new Set(); + proxy = new Proxy(token, { + get(obj, prop) { + if (recording) { + tokenKeys.add(prop); + } + return obj[prop]; + } + }); + flush = (componentName, componentToken) => { + var _a; + statistic[componentName] = { + global: Array.from(tokenKeys), + component: { + ...(_a = statistic[componentName]) == null ? void 0 : _a.component, + ...componentToken + } + }; + }; + } + return { token: proxy, keys: tokenKeys, flush }; +}; +var statistic_default = statisticToken; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + _statistic_build_, + merge, + statistic +}); diff --git a/packages/meta/lib/theme/util/useResetIconStyle.d.ts b/packages/meta/lib/theme/util/useResetIconStyle.d.ts new file mode 100644 index 0000000..3ca562f --- /dev/null +++ b/packages/meta/lib/theme/util/useResetIconStyle.d.ts @@ -0,0 +1,4 @@ +/// +import type { CSPConfig } from '../../config-provider'; +declare const useResetIconStyle: (iconPrefixCls: string, csp?: CSPConfig) => (node: import("react").ReactElement>) => import("react").JSX.Element; +export default useResetIconStyle; diff --git a/packages/meta/lib/theme/util/useResetIconStyle.js b/packages/meta/lib/theme/util/useResetIconStyle.js new file mode 100644 index 0000000..d05e077 --- /dev/null +++ b/packages/meta/lib/theme/util/useResetIconStyle.js @@ -0,0 +1,60 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/theme/util/useResetIconStyle.ts +var useResetIconStyle_exports = {}; +__export(useResetIconStyle_exports, { + default: () => useResetIconStyle_default +}); +module.exports = __toCommonJS(useResetIconStyle_exports); +var import_cssinjs = require("@ant-design/cssinjs"); +var import_style = require("../../style"); +var import_useToken = __toESM(require("../useToken")); +var useResetIconStyle = (iconPrefixCls, csp) => { + const [theme, token] = (0, import_useToken.default)(); + return (0, import_cssinjs.useStyleRegister)( + { + theme, + token, + hashId: "", + path: ["ant-design-icons", iconPrefixCls], + nonce: () => csp == null ? void 0 : csp.nonce + }, + () => [ + { + [`.${iconPrefixCls}`]: { + ...(0, import_style.resetIcon)(), + [`.${iconPrefixCls} .${iconPrefixCls}-icon`]: { + display: "block" + } + } + } + ] + ); +}; +var useResetIconStyle_default = useResetIconStyle; diff --git a/packages/meta/lib/time-picker/index.d.ts b/packages/meta/lib/time-picker/index.d.ts new file mode 100644 index 0000000..ff773b8 --- /dev/null +++ b/packages/meta/lib/time-picker/index.d.ts @@ -0,0 +1,26 @@ +import * as React from 'react'; +import type { Dayjs } from 'dayjs'; +import type { InputStatus } from '../_util/statusUtils'; +import type { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker'; +export interface TimePickerLocale { + placeholder?: string; + rangePlaceholder?: [string, string]; +} +export interface TimeRangePickerProps extends Omit, 'picker'> { + popupClassName?: string; +} +declare const RangePicker: React.ForwardRefExoticComponent>; +export interface TimePickerProps extends Omit, 'picker'> { + addon?: () => React.ReactNode; + status?: InputStatus; + popupClassName?: string; + rootClassName?: string; +} +declare const TimePicker: React.ForwardRefExoticComponent & React.RefAttributes>; +declare const PurePanel: (props: import("../_util/type").AnyObject) => React.JSX.Element; +type MergedTimePicker = typeof TimePicker & { + RangePicker: typeof RangePicker; + _InternalPanelDoNotUseOrYouWillBeFired: typeof PurePanel; +}; +declare const _default: MergedTimePicker; +export default _default; diff --git a/packages/meta/lib/time-picker/index.js b/packages/meta/lib/time-picker/index.js new file mode 100644 index 0000000..7fb453e --- /dev/null +++ b/packages/meta/lib/time-picker/index.js @@ -0,0 +1,77 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/index.tsx +var time_picker_exports = {}; +__export(time_picker_exports, { + default: () => time_picker_default +}); +module.exports = __toCommonJS(time_picker_exports); +var React = __toESM(require("react")); +var import_PurePanel = __toESM(require("../_util/PurePanel")); +var import_warning = require("../_util/warning"); +var import_date_picker = __toESM(require("../date-picker")); +var { TimePicker: InternalTimePicker, RangePicker: InternalRangePicker } = import_date_picker.default; +var RangePicker = React.forwardRef((props, ref) => ( + // @ts-ignore + /* @__PURE__ */ React.createElement(InternalRangePicker, { ...props, picker: "time", mode: void 0, ref }) +)); +var TimePicker = React.forwardRef( + ({ addon, renderExtraFooter, ...restProps }, ref) => { + if (process.env.NODE_ENV !== "production") { + const warning = (0, import_warning.devUseWarning)("TimePicker"); + warning.deprecated(!addon, "addon", "renderExtraFooter"); + } + const internalRenderExtraFooter = React.useMemo(() => { + if (renderExtraFooter) { + return renderExtraFooter; + } + if (addon) { + return addon; + } + return void 0; + }, [addon, renderExtraFooter]); + return /* @__PURE__ */ React.createElement( + InternalTimePicker, + { + ...restProps, + mode: void 0, + ref, + renderExtraFooter: internalRenderExtraFooter + } + ); + } +); +if (process.env.NODE_ENV !== "production") { + TimePicker.displayName = "TimePicker"; +} +var PurePanel = (0, import_PurePanel.default)(TimePicker, "picker"); +TimePicker._InternalPanelDoNotUseOrYouWillBeFired = PurePanel; +TimePicker.RangePicker = RangePicker; +TimePicker._InternalPanelDoNotUseOrYouWillBeFired = PurePanel; +var time_picker_default = TimePicker; diff --git a/packages/meta/lib/time-picker/locale/ar_EG.d.ts b/packages/meta/lib/time-picker/locale/ar_EG.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ar_EG.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ar_EG.js b/packages/meta/lib/time-picker/locale/ar_EG.js new file mode 100644 index 0000000..a35918b --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ar_EG.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ar_EG.ts +var ar_EG_exports = {}; +__export(ar_EG_exports, { + default: () => ar_EG_default +}); +module.exports = __toCommonJS(ar_EG_exports); +var locale = { + placeholder: "اختيار الوقت" +}; +var ar_EG_default = locale; diff --git a/packages/meta/lib/time-picker/locale/az_AZ.d.ts b/packages/meta/lib/time-picker/locale/az_AZ.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/az_AZ.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/az_AZ.js b/packages/meta/lib/time-picker/locale/az_AZ.js new file mode 100644 index 0000000..429dd5c --- /dev/null +++ b/packages/meta/lib/time-picker/locale/az_AZ.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/az_AZ.ts +var az_AZ_exports = {}; +__export(az_AZ_exports, { + default: () => az_AZ_default +}); +module.exports = __toCommonJS(az_AZ_exports); +var locale = { + placeholder: "Vaxtı seç" +}; +var az_AZ_default = locale; diff --git a/packages/meta/lib/time-picker/locale/bg_BG.d.ts b/packages/meta/lib/time-picker/locale/bg_BG.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/bg_BG.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/bg_BG.js b/packages/meta/lib/time-picker/locale/bg_BG.js new file mode 100644 index 0000000..468d69c --- /dev/null +++ b/packages/meta/lib/time-picker/locale/bg_BG.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/bg_BG.ts +var bg_BG_exports = {}; +__export(bg_BG_exports, { + default: () => bg_BG_default +}); +module.exports = __toCommonJS(bg_BG_exports); +var locale = { + placeholder: "Избор на час" +}; +var bg_BG_default = locale; diff --git a/packages/meta/lib/time-picker/locale/bn_BD.d.ts b/packages/meta/lib/time-picker/locale/bn_BD.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/bn_BD.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/bn_BD.js b/packages/meta/lib/time-picker/locale/bn_BD.js new file mode 100644 index 0000000..76c71c2 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/bn_BD.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/bn_BD.ts +var bn_BD_exports = {}; +__export(bn_BD_exports, { + default: () => bn_BD_default +}); +module.exports = __toCommonJS(bn_BD_exports); +var locale = { + placeholder: "সময় নির্বাচন", + rangePlaceholder: ["সময় শুরু", "শেষ সময়"] +}; +var bn_BD_default = locale; diff --git a/packages/meta/lib/time-picker/locale/by_BY.d.ts b/packages/meta/lib/time-picker/locale/by_BY.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/by_BY.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/by_BY.js b/packages/meta/lib/time-picker/locale/by_BY.js new file mode 100644 index 0000000..d606e2c --- /dev/null +++ b/packages/meta/lib/time-picker/locale/by_BY.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/by_BY.ts +var by_BY_exports = {}; +__export(by_BY_exports, { + default: () => by_BY_default +}); +module.exports = __toCommonJS(by_BY_exports); +var locale = { + placeholder: "Выберыце час", + rangePlaceholder: ["Час пачатку", "Час заканчэння"] +}; +var by_BY_default = locale; diff --git a/packages/meta/lib/time-picker/locale/ca_ES.d.ts b/packages/meta/lib/time-picker/locale/ca_ES.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ca_ES.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ca_ES.js b/packages/meta/lib/time-picker/locale/ca_ES.js new file mode 100644 index 0000000..820b753 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ca_ES.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ca_ES.ts +var ca_ES_exports = {}; +__export(ca_ES_exports, { + default: () => ca_ES_default +}); +module.exports = __toCommonJS(ca_ES_exports); +var locale = { + placeholder: "Seleccionar hora" +}; +var ca_ES_default = locale; diff --git a/packages/meta/lib/time-picker/locale/cs_CZ.d.ts b/packages/meta/lib/time-picker/locale/cs_CZ.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/cs_CZ.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/cs_CZ.js b/packages/meta/lib/time-picker/locale/cs_CZ.js new file mode 100644 index 0000000..2e0af53 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/cs_CZ.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/cs_CZ.ts +var cs_CZ_exports = {}; +__export(cs_CZ_exports, { + default: () => cs_CZ_default +}); +module.exports = __toCommonJS(cs_CZ_exports); +var locale = { + placeholder: "Vybrat čas" +}; +var cs_CZ_default = locale; diff --git a/packages/meta/lib/time-picker/locale/da_DK.d.ts b/packages/meta/lib/time-picker/locale/da_DK.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/da_DK.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/da_DK.js b/packages/meta/lib/time-picker/locale/da_DK.js new file mode 100644 index 0000000..661947f --- /dev/null +++ b/packages/meta/lib/time-picker/locale/da_DK.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/da_DK.ts +var da_DK_exports = {}; +__export(da_DK_exports, { + default: () => da_DK_default +}); +module.exports = __toCommonJS(da_DK_exports); +var locale = { + placeholder: "Vælg tid", + rangePlaceholder: ["Starttidspunkt", "Sluttidspunkt"] +}; +var da_DK_default = locale; diff --git a/packages/meta/lib/time-picker/locale/de_DE.d.ts b/packages/meta/lib/time-picker/locale/de_DE.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/de_DE.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/de_DE.js b/packages/meta/lib/time-picker/locale/de_DE.js new file mode 100644 index 0000000..c7e0231 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/de_DE.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/de_DE.ts +var de_DE_exports = {}; +__export(de_DE_exports, { + default: () => de_DE_default +}); +module.exports = __toCommonJS(de_DE_exports); +var locale = { + placeholder: "Zeit auswählen", + rangePlaceholder: ["Anfangszeit", "Endzeit"] +}; +var de_DE_default = locale; diff --git a/packages/meta/lib/time-picker/locale/el_GR.d.ts b/packages/meta/lib/time-picker/locale/el_GR.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/el_GR.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/el_GR.js b/packages/meta/lib/time-picker/locale/el_GR.js new file mode 100644 index 0000000..34ca458 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/el_GR.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/el_GR.ts +var el_GR_exports = {}; +__export(el_GR_exports, { + default: () => el_GR_default +}); +module.exports = __toCommonJS(el_GR_exports); +var locale = { + placeholder: "Επιλέξτε ώρα" +}; +var el_GR_default = locale; diff --git a/packages/meta/lib/time-picker/locale/en_GB.d.ts b/packages/meta/lib/time-picker/locale/en_GB.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/en_GB.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/en_GB.js b/packages/meta/lib/time-picker/locale/en_GB.js new file mode 100644 index 0000000..29d5f97 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/en_GB.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/en_GB.ts +var en_GB_exports = {}; +__export(en_GB_exports, { + default: () => en_GB_default +}); +module.exports = __toCommonJS(en_GB_exports); +var locale = { + placeholder: "Select time" +}; +var en_GB_default = locale; diff --git a/packages/meta/lib/time-picker/locale/en_US.d.ts b/packages/meta/lib/time-picker/locale/en_US.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/en_US.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/en_US.js b/packages/meta/lib/time-picker/locale/en_US.js new file mode 100644 index 0000000..5489525 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/en_US.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/en_US.ts +var en_US_exports = {}; +__export(en_US_exports, { + default: () => en_US_default +}); +module.exports = __toCommonJS(en_US_exports); +var locale = { + placeholder: "Select time", + rangePlaceholder: ["Start time", "End time"] +}; +var en_US_default = locale; diff --git a/packages/meta/lib/time-picker/locale/es_ES.d.ts b/packages/meta/lib/time-picker/locale/es_ES.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/es_ES.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/es_ES.js b/packages/meta/lib/time-picker/locale/es_ES.js new file mode 100644 index 0000000..250ab7b --- /dev/null +++ b/packages/meta/lib/time-picker/locale/es_ES.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/es_ES.ts +var es_ES_exports = {}; +__export(es_ES_exports, { + default: () => es_ES_default +}); +module.exports = __toCommonJS(es_ES_exports); +var locale = { + placeholder: "Seleccionar hora" +}; +var es_ES_default = locale; diff --git a/packages/meta/lib/time-picker/locale/et_EE.d.ts b/packages/meta/lib/time-picker/locale/et_EE.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/et_EE.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/et_EE.js b/packages/meta/lib/time-picker/locale/et_EE.js new file mode 100644 index 0000000..4d0a346 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/et_EE.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/et_EE.ts +var et_EE_exports = {}; +__export(et_EE_exports, { + default: () => et_EE_default +}); +module.exports = __toCommonJS(et_EE_exports); +var locale = { + placeholder: "Vali aeg" +}; +var et_EE_default = locale; diff --git a/packages/meta/lib/time-picker/locale/eu_ES.d.ts b/packages/meta/lib/time-picker/locale/eu_ES.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/eu_ES.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/eu_ES.js b/packages/meta/lib/time-picker/locale/eu_ES.js new file mode 100644 index 0000000..590c28f --- /dev/null +++ b/packages/meta/lib/time-picker/locale/eu_ES.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/eu_ES.ts +var eu_ES_exports = {}; +__export(eu_ES_exports, { + default: () => eu_ES_default +}); +module.exports = __toCommonJS(eu_ES_exports); +var locale = { + placeholder: "Aukeratu ordua" +}; +var eu_ES_default = locale; diff --git a/packages/meta/lib/time-picker/locale/fa_IR.d.ts b/packages/meta/lib/time-picker/locale/fa_IR.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/fa_IR.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/fa_IR.js b/packages/meta/lib/time-picker/locale/fa_IR.js new file mode 100644 index 0000000..b03a9c2 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/fa_IR.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/fa_IR.ts +var fa_IR_exports = {}; +__export(fa_IR_exports, { + default: () => fa_IR_default +}); +module.exports = __toCommonJS(fa_IR_exports); +var locale = { + placeholder: "انتخاب زمان", + rangePlaceholder: ["زمان شروع", "زمان پایان"] +}; +var fa_IR_default = locale; diff --git a/packages/meta/lib/time-picker/locale/fi_FI.d.ts b/packages/meta/lib/time-picker/locale/fi_FI.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/fi_FI.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/fi_FI.js b/packages/meta/lib/time-picker/locale/fi_FI.js new file mode 100644 index 0000000..a33e8fd --- /dev/null +++ b/packages/meta/lib/time-picker/locale/fi_FI.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/fi_FI.ts +var fi_FI_exports = {}; +__export(fi_FI_exports, { + default: () => fi_FI_default +}); +module.exports = __toCommonJS(fi_FI_exports); +var locale = { + placeholder: "Valitse aika" +}; +var fi_FI_default = locale; diff --git a/packages/meta/lib/time-picker/locale/fr_BE.d.ts b/packages/meta/lib/time-picker/locale/fr_BE.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/fr_BE.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/fr_BE.js b/packages/meta/lib/time-picker/locale/fr_BE.js new file mode 100644 index 0000000..2d03b1c --- /dev/null +++ b/packages/meta/lib/time-picker/locale/fr_BE.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/fr_BE.ts +var fr_BE_exports = {}; +__export(fr_BE_exports, { + default: () => fr_BE_default +}); +module.exports = __toCommonJS(fr_BE_exports); +var locale = { + placeholder: "Sélectionner l'heure", + rangePlaceholder: ["Heure de début", "Heure de fin"] +}; +var fr_BE_default = locale; diff --git a/packages/meta/lib/time-picker/locale/fr_CA.d.ts b/packages/meta/lib/time-picker/locale/fr_CA.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/fr_CA.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/fr_CA.js b/packages/meta/lib/time-picker/locale/fr_CA.js new file mode 100644 index 0000000..5619e0f --- /dev/null +++ b/packages/meta/lib/time-picker/locale/fr_CA.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/fr_CA.ts +var fr_CA_exports = {}; +__export(fr_CA_exports, { + default: () => fr_CA_default +}); +module.exports = __toCommonJS(fr_CA_exports); +var locale = { + placeholder: "Sélectionner l'heure", + rangePlaceholder: ["Heure de début", "Heure de fin"] +}; +var fr_CA_default = locale; diff --git a/packages/meta/lib/time-picker/locale/fr_FR.d.ts b/packages/meta/lib/time-picker/locale/fr_FR.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/fr_FR.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/fr_FR.js b/packages/meta/lib/time-picker/locale/fr_FR.js new file mode 100644 index 0000000..9df8677 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/fr_FR.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/fr_FR.ts +var fr_FR_exports = {}; +__export(fr_FR_exports, { + default: () => fr_FR_default +}); +module.exports = __toCommonJS(fr_FR_exports); +var locale = { + placeholder: "Sélectionner l'heure", + rangePlaceholder: ["Heure de début", "Heure de fin"] +}; +var fr_FR_default = locale; diff --git a/packages/meta/lib/time-picker/locale/ga_IE.d.ts b/packages/meta/lib/time-picker/locale/ga_IE.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ga_IE.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ga_IE.js b/packages/meta/lib/time-picker/locale/ga_IE.js new file mode 100644 index 0000000..7b0058c --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ga_IE.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ga_IE.ts +var ga_IE_exports = {}; +__export(ga_IE_exports, { + default: () => ga_IE_default +}); +module.exports = __toCommonJS(ga_IE_exports); +var locale = { + placeholder: "Roghnaigh am", + rangePlaceholder: ["Am tosaigh", "Am deiridh"] +}; +var ga_IE_default = locale; diff --git a/packages/meta/lib/time-picker/locale/gl_ES.d.ts b/packages/meta/lib/time-picker/locale/gl_ES.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/gl_ES.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/gl_ES.js b/packages/meta/lib/time-picker/locale/gl_ES.js new file mode 100644 index 0000000..5c89b63 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/gl_ES.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/gl_ES.ts +var gl_ES_exports = {}; +__export(gl_ES_exports, { + default: () => gl_ES_default +}); +module.exports = __toCommonJS(gl_ES_exports); +var locale = { + placeholder: "Escolla hora" +}; +var gl_ES_default = locale; diff --git a/packages/meta/lib/time-picker/locale/he_IL.d.ts b/packages/meta/lib/time-picker/locale/he_IL.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/he_IL.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/he_IL.js b/packages/meta/lib/time-picker/locale/he_IL.js new file mode 100644 index 0000000..7eca6be --- /dev/null +++ b/packages/meta/lib/time-picker/locale/he_IL.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/he_IL.ts +var he_IL_exports = {}; +__export(he_IL_exports, { + default: () => he_IL_default +}); +module.exports = __toCommonJS(he_IL_exports); +var locale = { + placeholder: "בחר שעה" +}; +var he_IL_default = locale; diff --git a/packages/meta/lib/time-picker/locale/hi_IN.d.ts b/packages/meta/lib/time-picker/locale/hi_IN.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/hi_IN.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/hi_IN.js b/packages/meta/lib/time-picker/locale/hi_IN.js new file mode 100644 index 0000000..31a170f --- /dev/null +++ b/packages/meta/lib/time-picker/locale/hi_IN.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/hi_IN.ts +var hi_IN_exports = {}; +__export(hi_IN_exports, { + default: () => hi_IN_default +}); +module.exports = __toCommonJS(hi_IN_exports); +var locale = { + placeholder: "समय का चयन करें", + rangePlaceholder: ["आरंभिक समय", "अंत समय"] +}; +var hi_IN_default = locale; diff --git a/packages/meta/lib/time-picker/locale/hr_HR.d.ts b/packages/meta/lib/time-picker/locale/hr_HR.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/hr_HR.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/hr_HR.js b/packages/meta/lib/time-picker/locale/hr_HR.js new file mode 100644 index 0000000..d73a28f --- /dev/null +++ b/packages/meta/lib/time-picker/locale/hr_HR.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/hr_HR.ts +var hr_HR_exports = {}; +__export(hr_HR_exports, { + default: () => hr_HR_default +}); +module.exports = __toCommonJS(hr_HR_exports); +var locale = { + placeholder: "Odaberite vrijeme", + rangePlaceholder: ["Vrijeme početka", "Vrijeme završetka"] +}; +var hr_HR_default = locale; diff --git a/packages/meta/lib/time-picker/locale/hu_HU.d.ts b/packages/meta/lib/time-picker/locale/hu_HU.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/hu_HU.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/hu_HU.js b/packages/meta/lib/time-picker/locale/hu_HU.js new file mode 100644 index 0000000..b3aef3f --- /dev/null +++ b/packages/meta/lib/time-picker/locale/hu_HU.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/hu_HU.ts +var hu_HU_exports = {}; +__export(hu_HU_exports, { + default: () => hu_HU_default +}); +module.exports = __toCommonJS(hu_HU_exports); +var locale = { + placeholder: "Válasszon időt" +}; +var hu_HU_default = locale; diff --git a/packages/meta/lib/time-picker/locale/id_ID.d.ts b/packages/meta/lib/time-picker/locale/id_ID.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/id_ID.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/id_ID.js b/packages/meta/lib/time-picker/locale/id_ID.js new file mode 100644 index 0000000..39f8a99 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/id_ID.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/id_ID.ts +var id_ID_exports = {}; +__export(id_ID_exports, { + default: () => id_ID_default +}); +module.exports = __toCommonJS(id_ID_exports); +var locale = { + placeholder: "Pilih waktu" +}; +var id_ID_default = locale; diff --git a/packages/meta/lib/time-picker/locale/is_IS.d.ts b/packages/meta/lib/time-picker/locale/is_IS.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/is_IS.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/is_IS.js b/packages/meta/lib/time-picker/locale/is_IS.js new file mode 100644 index 0000000..aea4e37 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/is_IS.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/is_IS.ts +var is_IS_exports = {}; +__export(is_IS_exports, { + default: () => is_IS_default +}); +module.exports = __toCommonJS(is_IS_exports); +var locale = { + placeholder: "Velja tíma" +}; +var is_IS_default = locale; diff --git a/packages/meta/lib/time-picker/locale/it_IT.d.ts b/packages/meta/lib/time-picker/locale/it_IT.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/it_IT.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/it_IT.js b/packages/meta/lib/time-picker/locale/it_IT.js new file mode 100644 index 0000000..24f7c8c --- /dev/null +++ b/packages/meta/lib/time-picker/locale/it_IT.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/it_IT.ts +var it_IT_exports = {}; +__export(it_IT_exports, { + default: () => it_IT_default +}); +module.exports = __toCommonJS(it_IT_exports); +var locale = { + placeholder: "Selezionare l'orario" +}; +var it_IT_default = locale; diff --git a/packages/meta/lib/time-picker/locale/ja_JP.d.ts b/packages/meta/lib/time-picker/locale/ja_JP.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ja_JP.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ja_JP.js b/packages/meta/lib/time-picker/locale/ja_JP.js new file mode 100644 index 0000000..5cad281 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ja_JP.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ja_JP.ts +var ja_JP_exports = {}; +__export(ja_JP_exports, { + default: () => ja_JP_default +}); +module.exports = __toCommonJS(ja_JP_exports); +var locale = { + placeholder: "時間を選択", + rangePlaceholder: ["開始時間", "終了時間"] +}; +var ja_JP_default = locale; diff --git a/packages/meta/lib/time-picker/locale/ka_GE.d.ts b/packages/meta/lib/time-picker/locale/ka_GE.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ka_GE.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ka_GE.js b/packages/meta/lib/time-picker/locale/ka_GE.js new file mode 100644 index 0000000..ca8e392 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ka_GE.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ka_GE.ts +var ka_GE_exports = {}; +__export(ka_GE_exports, { + default: () => ka_GE_default +}); +module.exports = __toCommonJS(ka_GE_exports); +var locale = { + placeholder: "აირჩიეთ დრო", + rangePlaceholder: ["საწყისი თარიღი", "საბოლოო თარიღი"] +}; +var ka_GE_default = locale; diff --git a/packages/meta/lib/time-picker/locale/kk_KZ.d.ts b/packages/meta/lib/time-picker/locale/kk_KZ.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/kk_KZ.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/kk_KZ.js b/packages/meta/lib/time-picker/locale/kk_KZ.js new file mode 100644 index 0000000..88c2402 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/kk_KZ.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/kk_KZ.ts +var kk_KZ_exports = {}; +__export(kk_KZ_exports, { + default: () => kk_KZ_default +}); +module.exports = __toCommonJS(kk_KZ_exports); +var locale = { + placeholder: "Уақытты таңдаңыз", + rangePlaceholder: ["Бастау уақыты", "Аяқталу уақыты"] +}; +var kk_KZ_default = locale; diff --git a/packages/meta/lib/time-picker/locale/km_KH.d.ts b/packages/meta/lib/time-picker/locale/km_KH.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/km_KH.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/km_KH.js b/packages/meta/lib/time-picker/locale/km_KH.js new file mode 100644 index 0000000..043e131 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/km_KH.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/km_KH.ts +var km_KH_exports = {}; +__export(km_KH_exports, { + default: () => km_KH_default +}); +module.exports = __toCommonJS(km_KH_exports); +var locale = { + placeholder: "រើសម៉ោង", + rangePlaceholder: ["ម៉ោងចប់ផ្ដើម", "ម៉ោងបញ្ចប់"] +}; +var km_KH_default = locale; diff --git a/packages/meta/lib/time-picker/locale/kmr_IQ.d.ts b/packages/meta/lib/time-picker/locale/kmr_IQ.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/kmr_IQ.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/kmr_IQ.js b/packages/meta/lib/time-picker/locale/kmr_IQ.js new file mode 100644 index 0000000..f9a4ee0 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/kmr_IQ.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/kmr_IQ.ts +var kmr_IQ_exports = {}; +__export(kmr_IQ_exports, { + default: () => kmr_IQ_default +}); +module.exports = __toCommonJS(kmr_IQ_exports); +var locale = { + placeholder: "Demê hilbijêre" +}; +var kmr_IQ_default = locale; diff --git a/packages/meta/lib/time-picker/locale/kn_IN.d.ts b/packages/meta/lib/time-picker/locale/kn_IN.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/kn_IN.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/kn_IN.js b/packages/meta/lib/time-picker/locale/kn_IN.js new file mode 100644 index 0000000..b419c7f --- /dev/null +++ b/packages/meta/lib/time-picker/locale/kn_IN.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/kn_IN.ts +var kn_IN_exports = {}; +__export(kn_IN_exports, { + default: () => kn_IN_default +}); +module.exports = __toCommonJS(kn_IN_exports); +var locale = { + placeholder: "ಸಮಯ ಆಯ್ಕೆಮಾಡಿ" +}; +var kn_IN_default = locale; diff --git a/packages/meta/lib/time-picker/locale/ko_KR.d.ts b/packages/meta/lib/time-picker/locale/ko_KR.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ko_KR.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ko_KR.js b/packages/meta/lib/time-picker/locale/ko_KR.js new file mode 100644 index 0000000..ccc67d7 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ko_KR.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ko_KR.ts +var ko_KR_exports = {}; +__export(ko_KR_exports, { + default: () => ko_KR_default +}); +module.exports = __toCommonJS(ko_KR_exports); +var locale = { + placeholder: "시간 선택", + rangePlaceholder: ["시작 시간", "종료 시간"] +}; +var ko_KR_default = locale; diff --git a/packages/meta/lib/time-picker/locale/lt_LT.d.ts b/packages/meta/lib/time-picker/locale/lt_LT.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/lt_LT.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/lt_LT.js b/packages/meta/lib/time-picker/locale/lt_LT.js new file mode 100644 index 0000000..fd180d4 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/lt_LT.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/lt_LT.ts +var lt_LT_exports = {}; +__export(lt_LT_exports, { + default: () => lt_LT_default +}); +module.exports = __toCommonJS(lt_LT_exports); +var locale = { + placeholder: "Pasirinkite laiką", + rangePlaceholder: ["Pradžios laikas", "Pabaigos laikas"] +}; +var lt_LT_default = locale; diff --git a/packages/meta/lib/time-picker/locale/lv_LV.d.ts b/packages/meta/lib/time-picker/locale/lv_LV.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/lv_LV.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/lv_LV.js b/packages/meta/lib/time-picker/locale/lv_LV.js new file mode 100644 index 0000000..99fa25c --- /dev/null +++ b/packages/meta/lib/time-picker/locale/lv_LV.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/lv_LV.ts +var lv_LV_exports = {}; +__export(lv_LV_exports, { + default: () => lv_LV_default +}); +module.exports = __toCommonJS(lv_LV_exports); +var locale = { + placeholder: "Izvēlieties laiku" +}; +var lv_LV_default = locale; diff --git a/packages/meta/lib/time-picker/locale/mk_MK.d.ts b/packages/meta/lib/time-picker/locale/mk_MK.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/mk_MK.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/mk_MK.js b/packages/meta/lib/time-picker/locale/mk_MK.js new file mode 100644 index 0000000..e17a1d6 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/mk_MK.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/mk_MK.ts +var mk_MK_exports = {}; +__export(mk_MK_exports, { + default: () => mk_MK_default +}); +module.exports = __toCommonJS(mk_MK_exports); +var locale = { + placeholder: "Избери време" +}; +var mk_MK_default = locale; diff --git a/packages/meta/lib/time-picker/locale/ml_IN.d.ts b/packages/meta/lib/time-picker/locale/ml_IN.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ml_IN.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ml_IN.js b/packages/meta/lib/time-picker/locale/ml_IN.js new file mode 100644 index 0000000..d2987f3 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ml_IN.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ml_IN.ts +var ml_IN_exports = {}; +__export(ml_IN_exports, { + default: () => ml_IN_default +}); +module.exports = __toCommonJS(ml_IN_exports); +var locale = { + placeholder: "സമയം തിരഞ്ഞെടുക്കുക", + rangePlaceholder: ["ആരംഭ സമയം", "അവസാന സമയം"] +}; +var ml_IN_default = locale; diff --git a/packages/meta/lib/time-picker/locale/mn_MN.d.ts b/packages/meta/lib/time-picker/locale/mn_MN.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/mn_MN.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/mn_MN.js b/packages/meta/lib/time-picker/locale/mn_MN.js new file mode 100644 index 0000000..7c4be1e --- /dev/null +++ b/packages/meta/lib/time-picker/locale/mn_MN.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/mn_MN.ts +var mn_MN_exports = {}; +__export(mn_MN_exports, { + default: () => mn_MN_default +}); +module.exports = __toCommonJS(mn_MN_exports); +var locale = { + placeholder: "Цаг сонгох" +}; +var mn_MN_default = locale; diff --git a/packages/meta/lib/time-picker/locale/ms_MY.d.ts b/packages/meta/lib/time-picker/locale/ms_MY.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ms_MY.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ms_MY.js b/packages/meta/lib/time-picker/locale/ms_MY.js new file mode 100644 index 0000000..79c67d2 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ms_MY.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ms_MY.ts +var ms_MY_exports = {}; +__export(ms_MY_exports, { + default: () => ms_MY_default +}); +module.exports = __toCommonJS(ms_MY_exports); +var locale = { + placeholder: "Sila pilih masa" +}; +var ms_MY_default = locale; diff --git a/packages/meta/lib/time-picker/locale/my_MM.d.ts b/packages/meta/lib/time-picker/locale/my_MM.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/my_MM.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/my_MM.js b/packages/meta/lib/time-picker/locale/my_MM.js new file mode 100644 index 0000000..3fe891c --- /dev/null +++ b/packages/meta/lib/time-picker/locale/my_MM.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/my_MM.ts +var my_MM_exports = {}; +__export(my_MM_exports, { + default: () => my_MM_default +}); +module.exports = __toCommonJS(my_MM_exports); +var locale = { + placeholder: "အချိန်ရွေးပါ။", + rangePlaceholder: ["စတင်ချိန်", "ကုန်ဆုံးချိန်"] +}; +var my_MM_default = locale; diff --git a/packages/meta/lib/time-picker/locale/nb_NO.d.ts b/packages/meta/lib/time-picker/locale/nb_NO.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/nb_NO.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/nb_NO.js b/packages/meta/lib/time-picker/locale/nb_NO.js new file mode 100644 index 0000000..e291642 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/nb_NO.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/nb_NO.ts +var nb_NO_exports = {}; +__export(nb_NO_exports, { + default: () => nb_NO_default +}); +module.exports = __toCommonJS(nb_NO_exports); +var locale = { + placeholder: "Velg tid", + rangePlaceholder: ["Starttid", "Sluttid"] +}; +var nb_NO_default = locale; diff --git a/packages/meta/lib/time-picker/locale/nl_BE.d.ts b/packages/meta/lib/time-picker/locale/nl_BE.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/nl_BE.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/nl_BE.js b/packages/meta/lib/time-picker/locale/nl_BE.js new file mode 100644 index 0000000..f9077fa --- /dev/null +++ b/packages/meta/lib/time-picker/locale/nl_BE.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/nl_BE.ts +var nl_BE_exports = {}; +__export(nl_BE_exports, { + default: () => nl_BE_default +}); +module.exports = __toCommonJS(nl_BE_exports); +var locale = { + placeholder: "Selecteer tijd", + rangePlaceholder: ["Start tijd", "Eind tijd"] +}; +var nl_BE_default = locale; diff --git a/packages/meta/lib/time-picker/locale/nl_NL.d.ts b/packages/meta/lib/time-picker/locale/nl_NL.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/nl_NL.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/nl_NL.js b/packages/meta/lib/time-picker/locale/nl_NL.js new file mode 100644 index 0000000..747eb6e --- /dev/null +++ b/packages/meta/lib/time-picker/locale/nl_NL.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/nl_NL.ts +var nl_NL_exports = {}; +__export(nl_NL_exports, { + default: () => nl_NL_default +}); +module.exports = __toCommonJS(nl_NL_exports); +var locale = { + placeholder: "Selecteer tijd", + rangePlaceholder: ["Start tijd", "Eind tijd"] +}; +var nl_NL_default = locale; diff --git a/packages/meta/lib/time-picker/locale/pl_PL.d.ts b/packages/meta/lib/time-picker/locale/pl_PL.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/pl_PL.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/pl_PL.js b/packages/meta/lib/time-picker/locale/pl_PL.js new file mode 100644 index 0000000..158ac58 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/pl_PL.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/pl_PL.ts +var pl_PL_exports = {}; +__export(pl_PL_exports, { + default: () => pl_PL_default +}); +module.exports = __toCommonJS(pl_PL_exports); +var locale = { + placeholder: "Wybierz godzinę" +}; +var pl_PL_default = locale; diff --git a/packages/meta/lib/time-picker/locale/pt_BR.d.ts b/packages/meta/lib/time-picker/locale/pt_BR.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/pt_BR.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/pt_BR.js b/packages/meta/lib/time-picker/locale/pt_BR.js new file mode 100644 index 0000000..37e9967 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/pt_BR.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/pt_BR.ts +var pt_BR_exports = {}; +__export(pt_BR_exports, { + default: () => pt_BR_default +}); +module.exports = __toCommonJS(pt_BR_exports); +var locale = { + placeholder: "Hora" +}; +var pt_BR_default = locale; diff --git a/packages/meta/lib/time-picker/locale/pt_PT.d.ts b/packages/meta/lib/time-picker/locale/pt_PT.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/pt_PT.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/pt_PT.js b/packages/meta/lib/time-picker/locale/pt_PT.js new file mode 100644 index 0000000..7214141 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/pt_PT.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/pt_PT.ts +var pt_PT_exports = {}; +__export(pt_PT_exports, { + default: () => pt_PT_default +}); +module.exports = __toCommonJS(pt_PT_exports); +var locale = { + placeholder: "Hora" +}; +var pt_PT_default = locale; diff --git a/packages/meta/lib/time-picker/locale/ro_RO.d.ts b/packages/meta/lib/time-picker/locale/ro_RO.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ro_RO.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ro_RO.js b/packages/meta/lib/time-picker/locale/ro_RO.js new file mode 100644 index 0000000..23cb8d3 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ro_RO.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ro_RO.ts +var ro_RO_exports = {}; +__export(ro_RO_exports, { + default: () => ro_RO_default +}); +module.exports = __toCommonJS(ro_RO_exports); +var locale = { + placeholder: "Selectează ora" +}; +var ro_RO_default = locale; diff --git a/packages/meta/lib/time-picker/locale/ru_RU.d.ts b/packages/meta/lib/time-picker/locale/ru_RU.d.ts new file mode 100644 index 0000000..ea3ada2 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ru_RU.d.ts @@ -0,0 +1,4 @@ +/** Created by Andrey Gayvoronsky on 13/04/16. */ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ru_RU.js b/packages/meta/lib/time-picker/locale/ru_RU.js new file mode 100644 index 0000000..b2a6dfe --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ru_RU.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ru_RU.ts +var ru_RU_exports = {}; +__export(ru_RU_exports, { + default: () => ru_RU_default +}); +module.exports = __toCommonJS(ru_RU_exports); +var locale = { + placeholder: "Выберите время", + rangePlaceholder: ["Время начала", "Время окончания"] +}; +var ru_RU_default = locale; diff --git a/packages/meta/lib/time-picker/locale/si_LK.d.ts b/packages/meta/lib/time-picker/locale/si_LK.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/si_LK.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/si_LK.js b/packages/meta/lib/time-picker/locale/si_LK.js new file mode 100644 index 0000000..58fd79f --- /dev/null +++ b/packages/meta/lib/time-picker/locale/si_LK.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/si_LK.ts +var si_LK_exports = {}; +__export(si_LK_exports, { + default: () => si_LK_default +}); +module.exports = __toCommonJS(si_LK_exports); +var locale = { + placeholder: "වේලාව තෝරන්න", + rangePlaceholder: ["ආරම්භක වේලාව", "නිමවන වේලාව"] +}; +var si_LK_default = locale; diff --git a/packages/meta/lib/time-picker/locale/sk_SK.d.ts b/packages/meta/lib/time-picker/locale/sk_SK.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/sk_SK.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/sk_SK.js b/packages/meta/lib/time-picker/locale/sk_SK.js new file mode 100644 index 0000000..5fd9c9e --- /dev/null +++ b/packages/meta/lib/time-picker/locale/sk_SK.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/sk_SK.ts +var sk_SK_exports = {}; +__export(sk_SK_exports, { + default: () => sk_SK_default +}); +module.exports = __toCommonJS(sk_SK_exports); +var locale = { + placeholder: "Vybrať čas" +}; +var sk_SK_default = locale; diff --git a/packages/meta/lib/time-picker/locale/sl_SI.d.ts b/packages/meta/lib/time-picker/locale/sl_SI.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/sl_SI.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/sl_SI.js b/packages/meta/lib/time-picker/locale/sl_SI.js new file mode 100644 index 0000000..2417cf7 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/sl_SI.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/sl_SI.ts +var sl_SI_exports = {}; +__export(sl_SI_exports, { + default: () => sl_SI_default +}); +module.exports = __toCommonJS(sl_SI_exports); +var locale = { + placeholder: "Izberite čas" +}; +var sl_SI_default = locale; diff --git a/packages/meta/lib/time-picker/locale/sr_RS.d.ts b/packages/meta/lib/time-picker/locale/sr_RS.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/sr_RS.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/sr_RS.js b/packages/meta/lib/time-picker/locale/sr_RS.js new file mode 100644 index 0000000..b37827b --- /dev/null +++ b/packages/meta/lib/time-picker/locale/sr_RS.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/sr_RS.ts +var sr_RS_exports = {}; +__export(sr_RS_exports, { + default: () => sr_RS_default +}); +module.exports = __toCommonJS(sr_RS_exports); +var locale = { + placeholder: "Izaberi vreme", + rangePlaceholder: ["Vreme početka", "Vreme završetka"] +}; +var sr_RS_default = locale; diff --git a/packages/meta/lib/time-picker/locale/sv_SE.d.ts b/packages/meta/lib/time-picker/locale/sv_SE.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/sv_SE.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/sv_SE.js b/packages/meta/lib/time-picker/locale/sv_SE.js new file mode 100644 index 0000000..796ca85 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/sv_SE.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/sv_SE.ts +var sv_SE_exports = {}; +__export(sv_SE_exports, { + default: () => sv_SE_default +}); +module.exports = __toCommonJS(sv_SE_exports); +var locale = { + placeholder: "Välj tid" +}; +var sv_SE_default = locale; diff --git a/packages/meta/lib/time-picker/locale/ta_IN.d.ts b/packages/meta/lib/time-picker/locale/ta_IN.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ta_IN.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ta_IN.js b/packages/meta/lib/time-picker/locale/ta_IN.js new file mode 100644 index 0000000..a51e868 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ta_IN.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ta_IN.ts +var ta_IN_exports = {}; +__export(ta_IN_exports, { + default: () => ta_IN_default +}); +module.exports = __toCommonJS(ta_IN_exports); +var locale = { + placeholder: "நேரத்தைத் தேர்ந்தெடுக்கவும்" +}; +var ta_IN_default = locale; diff --git a/packages/meta/lib/time-picker/locale/th_TH.d.ts b/packages/meta/lib/time-picker/locale/th_TH.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/th_TH.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/th_TH.js b/packages/meta/lib/time-picker/locale/th_TH.js new file mode 100644 index 0000000..239887e --- /dev/null +++ b/packages/meta/lib/time-picker/locale/th_TH.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/th_TH.ts +var th_TH_exports = {}; +__export(th_TH_exports, { + default: () => th_TH_default +}); +module.exports = __toCommonJS(th_TH_exports); +var locale = { + placeholder: "เลือกเวลา" +}; +var th_TH_default = locale; diff --git a/packages/meta/lib/time-picker/locale/tk_TK.d.ts b/packages/meta/lib/time-picker/locale/tk_TK.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/tk_TK.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/tk_TK.js b/packages/meta/lib/time-picker/locale/tk_TK.js new file mode 100644 index 0000000..d8296cd --- /dev/null +++ b/packages/meta/lib/time-picker/locale/tk_TK.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/tk_TK.ts +var tk_TK_exports = {}; +__export(tk_TK_exports, { + default: () => tk_TK_default +}); +module.exports = __toCommonJS(tk_TK_exports); +var locale = { + placeholder: "Wagty saýlaň", + rangePlaceholder: ["Başlanýan wagty", "Gutarýan wagty"] +}; +var tk_TK_default = locale; diff --git a/packages/meta/lib/time-picker/locale/tr_TR.d.ts b/packages/meta/lib/time-picker/locale/tr_TR.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/tr_TR.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/tr_TR.js b/packages/meta/lib/time-picker/locale/tr_TR.js new file mode 100644 index 0000000..1f83bc4 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/tr_TR.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/tr_TR.ts +var tr_TR_exports = {}; +__export(tr_TR_exports, { + default: () => tr_TR_default +}); +module.exports = __toCommonJS(tr_TR_exports); +var locale = { + placeholder: "Zaman seç", + rangePlaceholder: ["Başlangıç zamanı", "Bitiş zamanı"] +}; +var tr_TR_default = locale; diff --git a/packages/meta/lib/time-picker/locale/uk_UA.d.ts b/packages/meta/lib/time-picker/locale/uk_UA.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/uk_UA.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/uk_UA.js b/packages/meta/lib/time-picker/locale/uk_UA.js new file mode 100644 index 0000000..e09fb53 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/uk_UA.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/uk_UA.ts +var uk_UA_exports = {}; +__export(uk_UA_exports, { + default: () => uk_UA_default +}); +module.exports = __toCommonJS(uk_UA_exports); +var locale = { + placeholder: "Оберіть час" +}; +var uk_UA_default = locale; diff --git a/packages/meta/lib/time-picker/locale/ur_PK.d.ts b/packages/meta/lib/time-picker/locale/ur_PK.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ur_PK.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/ur_PK.js b/packages/meta/lib/time-picker/locale/ur_PK.js new file mode 100644 index 0000000..b45e5dc --- /dev/null +++ b/packages/meta/lib/time-picker/locale/ur_PK.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/ur_PK.ts +var ur_PK_exports = {}; +__export(ur_PK_exports, { + default: () => ur_PK_default +}); +module.exports = __toCommonJS(ur_PK_exports); +var locale = { + placeholder: "وقت منتخب کریں", + rangePlaceholder: ["وقت منتخب کریں", "آخر وقت"] +}; +var ur_PK_default = locale; diff --git a/packages/meta/lib/time-picker/locale/vi_VN.d.ts b/packages/meta/lib/time-picker/locale/vi_VN.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/vi_VN.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/vi_VN.js b/packages/meta/lib/time-picker/locale/vi_VN.js new file mode 100644 index 0000000..4768de3 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/vi_VN.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/vi_VN.ts +var vi_VN_exports = {}; +__export(vi_VN_exports, { + default: () => vi_VN_default +}); +module.exports = __toCommonJS(vi_VN_exports); +var locale = { + placeholder: "Chọn thời gian", + rangePlaceholder: ["Bắt đầu", "Kết thúc"] +}; +var vi_VN_default = locale; diff --git a/packages/meta/lib/time-picker/locale/zh_CN.d.ts b/packages/meta/lib/time-picker/locale/zh_CN.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/zh_CN.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/zh_CN.js b/packages/meta/lib/time-picker/locale/zh_CN.js new file mode 100644 index 0000000..aaaefd7 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/zh_CN.js @@ -0,0 +1,29 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/zh_CN.ts +var zh_CN_exports = {}; +__export(zh_CN_exports, { + default: () => zh_CN_default +}); +module.exports = __toCommonJS(zh_CN_exports); +var locale = { + placeholder: "请选择时间", + rangePlaceholder: ["开始时间", "结束时间"] +}; +var zh_CN_default = locale; diff --git a/packages/meta/lib/time-picker/locale/zh_TW.d.ts b/packages/meta/lib/time-picker/locale/zh_TW.d.ts new file mode 100644 index 0000000..151bba9 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/zh_TW.d.ts @@ -0,0 +1,3 @@ +import type { TimePickerLocale } from '../index'; +declare const locale: TimePickerLocale; +export default locale; diff --git a/packages/meta/lib/time-picker/locale/zh_TW.js b/packages/meta/lib/time-picker/locale/zh_TW.js new file mode 100644 index 0000000..1ca7425 --- /dev/null +++ b/packages/meta/lib/time-picker/locale/zh_TW.js @@ -0,0 +1,28 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/time-picker/locale/zh_TW.ts +var zh_TW_exports = {}; +__export(zh_TW_exports, { + default: () => zh_TW_default +}); +module.exports = __toCommonJS(zh_TW_exports); +var locale = { + placeholder: "請選擇時間" +}; +var zh_TW_default = locale; diff --git a/packages/meta/lib/tooltip/PurePanel.d.ts b/packages/meta/lib/tooltip/PurePanel.d.ts new file mode 100644 index 0000000..55b6b4b --- /dev/null +++ b/packages/meta/lib/tooltip/PurePanel.d.ts @@ -0,0 +1,7 @@ +import * as React from 'react'; +import type { TooltipProps } from '.'; +export interface PurePanelProps extends Omit { +} +/** @private Internal Component. Do not use in your production. */ +declare const PurePanel: React.FC; +export default PurePanel; diff --git a/packages/meta/lib/tooltip/PurePanel.js b/packages/meta/lib/tooltip/PurePanel.js new file mode 100644 index 0000000..3e03086 --- /dev/null +++ b/packages/meta/lib/tooltip/PurePanel.js @@ -0,0 +1,81 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/tooltip/PurePanel.tsx +var PurePanel_exports = {}; +__export(PurePanel_exports, { + default: () => PurePanel_default +}); +module.exports = __toCommonJS(PurePanel_exports); +var import_classnames = __toESM(require("classnames")); +var import_rc_tooltip = require("rc-tooltip"); +var React = __toESM(require("react")); +var import_config_provider = require("../config-provider"); +var import_style = __toESM(require("./style")); +var import_util = require("./util"); +var PurePanel = (props) => { + const { + prefixCls: customizePrefixCls, + className, + placement = "top", + title, + color, + overlayInnerStyle + } = props; + const { getPrefixCls } = React.useContext(import_config_provider.ConfigContext); + const prefixCls = getPrefixCls("tooltip", customizePrefixCls); + const [wrapCSSVar, hashId, cssVarCls] = (0, import_style.default)(prefixCls); + const colorInfo = (0, import_util.parseColor)(prefixCls, color); + const arrowContentStyle = colorInfo.arrowStyle; + const formattedOverlayInnerStyle = { + ...overlayInnerStyle, + ...colorInfo.overlayStyle + }; + const cls = (0, import_classnames.default)( + hashId, + cssVarCls, + prefixCls, + `${prefixCls}-pure`, + `${prefixCls}-placement-${placement}`, + className, + colorInfo.className + ); + return wrapCSSVar( + /* @__PURE__ */ React.createElement("div", { className: cls, style: arrowContentStyle }, /* @__PURE__ */ React.createElement("div", { className: `${prefixCls}-arrow` }), /* @__PURE__ */ React.createElement( + import_rc_tooltip.Popup, + { + ...props, + className: hashId, + prefixCls, + overlayInnerStyle: formattedOverlayInnerStyle + }, + title + )) + ); +}; +var PurePanel_default = PurePanel; diff --git a/packages/meta/lib/tooltip/index.d.ts b/packages/meta/lib/tooltip/index.d.ts new file mode 100644 index 0000000..9177762 --- /dev/null +++ b/packages/meta/lib/tooltip/index.d.ts @@ -0,0 +1,76 @@ +import * as React from 'react'; +import type { placements as Placements } from 'rc-tooltip/lib/placements'; +import type { TooltipProps as RcTooltipProps } from 'rc-tooltip/lib/Tooltip'; +import type { PresetColorType } from '../_util/colors'; +import type { RenderFunction } from '../_util/getRenderPropValue'; +import type { AdjustOverflow, PlacementsConfig } from '../_util/placements'; +import type { LiteralUnion } from '../_util/type'; +import PurePanel from './PurePanel'; +export type { AdjustOverflow, PlacementsConfig }; +export interface TooltipRef { + /** @deprecated Please use `forceAlign` instead */ + forcePopupAlign: VoidFunction; + forceAlign: VoidFunction; +} +export type TooltipPlacement = 'top' | 'left' | 'right' | 'bottom' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom'; +export interface TooltipAlignConfig { + points?: [string, string]; + offset?: [number | string, number | string]; + targetOffset?: [number | string, number | string]; + overflow?: { + adjustX: boolean; + adjustY: boolean; + }; + useCssRight?: boolean; + useCssBottom?: boolean; + useCssTransform?: boolean; +} +interface LegacyTooltipProps extends Partial> { + open?: RcTooltipProps['visible']; + defaultOpen?: RcTooltipProps['defaultVisible']; + onOpenChange?: RcTooltipProps['onVisibleChange']; + afterOpenChange?: RcTooltipProps['afterVisibleChange']; + /** @deprecated Please use `open` instead. */ + visible?: RcTooltipProps['visible']; + /** @deprecated Please use `defaultOpen` instead. */ + defaultVisible?: RcTooltipProps['defaultVisible']; + /** @deprecated Please use `onOpenChange` instead. */ + onVisibleChange?: RcTooltipProps['onVisibleChange']; + /** @deprecated Please use `afterOpenChange` instead. */ + afterVisibleChange?: RcTooltipProps['afterVisibleChange']; +} +export interface AbstractTooltipProps extends LegacyTooltipProps { + style?: React.CSSProperties; + className?: string; + rootClassName?: string; + color?: LiteralUnion; + placement?: TooltipPlacement; + builtinPlacements?: typeof Placements; + openClassName?: string; + /** @deprecated Please use `arrow={{ pointAtCenter: true }}` instead. */ + arrowPointAtCenter?: boolean; + arrow?: boolean | { + /** @deprecated Please use `pointAtCenter` instead. */ + arrowPointAtCenter?: boolean; + pointAtCenter?: boolean; + }; + autoAdjustOverflow?: boolean | AdjustOverflow; + getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement; + children?: React.ReactNode; + destroyTooltipOnHide?: boolean | { + keepParent?: boolean; + }; +} +export interface TooltipPropsWithOverlay extends AbstractTooltipProps { + title?: React.ReactNode | RenderFunction; + overlay?: React.ReactNode | RenderFunction; +} +export interface TooltipPropsWithTitle extends AbstractTooltipProps { + title: React.ReactNode | RenderFunction; + overlay?: React.ReactNode | RenderFunction; +} +export declare type TooltipProps = TooltipPropsWithTitle | TooltipPropsWithOverlay; +declare const Tooltip: React.ForwardRefExoticComponent> & { + _InternalPanelDoNotUseOrYouWillBeFired: typeof PurePanel; +}; +export default Tooltip; diff --git a/packages/meta/lib/tooltip/index.js b/packages/meta/lib/tooltip/index.js new file mode 100644 index 0000000..d16ec57 --- /dev/null +++ b/packages/meta/lib/tooltip/index.js @@ -0,0 +1,219 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/tooltip/index.tsx +var tooltip_exports = {}; +__export(tooltip_exports, { + default: () => tooltip_default +}); +module.exports = __toCommonJS(tooltip_exports); +var React = __toESM(require("react")); +var import_classnames = __toESM(require("classnames")); +var import_rc_tooltip = __toESM(require("rc-tooltip")); +var import_useMergedState = __toESM(require("rc-util/lib/hooks/useMergedState")); +var import_useZIndex = require("../_util/hooks/useZIndex"); +var import_motion = require("../_util/motion"); +var import_placements = __toESM(require("../_util/placements")); +var import_reactNode = require("../_util/reactNode"); +var import_warning = require("../_util/warning"); +var import_zindexContext = __toESM(require("../_util/zindexContext")); +var import_config_provider = require("../config-provider"); +var import_Compact = require("../space/Compact"); +var import_internal = require("../theme/internal"); +var import_PurePanel = __toESM(require("./PurePanel")); +var import_style = __toESM(require("./style")); +var import_util = require("./util"); +var Tooltip = React.forwardRef((props, ref) => { + const { + prefixCls: customizePrefixCls, + openClassName, + getTooltipContainer, + overlayClassName, + color, + overlayInnerStyle, + children, + afterOpenChange, + afterVisibleChange, + destroyTooltipOnHide, + arrow = true, + title, + overlay, + builtinPlacements, + arrowPointAtCenter = false, + autoAdjustOverflow = true + } = props; + const mergedShowArrow = !!arrow; + const [, token] = (0, import_internal.useToken)(); + const { + getPopupContainer: getContextPopupContainer, + getPrefixCls, + direction + } = React.useContext(import_config_provider.ConfigContext); + const warning = (0, import_warning.devUseWarning)("Tooltip"); + const tooltipRef = React.useRef(null); + const forceAlign = () => { + var _a; + (_a = tooltipRef.current) == null ? void 0 : _a.forceAlign(); + }; + React.useImperativeHandle(ref, () => ({ + forceAlign, + forcePopupAlign: () => { + warning.deprecated(false, "forcePopupAlign", "forceAlign"); + forceAlign(); + } + })); + if (process.env.NODE_ENV !== "production") { + [ + ["visible", "open"], + ["defaultVisible", "defaultOpen"], + ["onVisibleChange", "onOpenChange"], + ["afterVisibleChange", "afterOpenChange"], + ["arrowPointAtCenter", "arrow={{ pointAtCenter: true }}"] + ].forEach(([deprecatedName, newName]) => { + warning.deprecated(!(deprecatedName in props), deprecatedName, newName); + }); + warning( + !destroyTooltipOnHide || typeof destroyTooltipOnHide === "boolean", + "usage", + "`destroyTooltipOnHide` no need config `keepParent` anymore. Please use `boolean` value directly." + ); + warning( + !arrow || typeof arrow === "boolean" || !("arrowPointAtCenter" in arrow), + "deprecated", + "`arrowPointAtCenter` in `arrow` is deprecated. Please use `pointAtCenter` instead." + ); + } + const [open, setOpen] = (0, import_useMergedState.default)(false, { + value: props.open ?? props.visible, + defaultValue: props.defaultOpen ?? props.defaultVisible + }); + const noTitle = !title && !overlay && title !== 0; + const onOpenChange = (vis) => { + var _a, _b; + setOpen(noTitle ? false : vis); + if (!noTitle) { + (_a = props.onOpenChange) == null ? void 0 : _a.call(props, vis); + (_b = props.onVisibleChange) == null ? void 0 : _b.call(props, vis); + } + }; + const tooltipPlacements = React.useMemo(() => { + let mergedArrowPointAtCenter = arrowPointAtCenter; + if (typeof arrow === "object") { + mergedArrowPointAtCenter = arrow.pointAtCenter ?? arrow.arrowPointAtCenter ?? arrowPointAtCenter; + } + return builtinPlacements || (0, import_placements.default)({ + arrowPointAtCenter: mergedArrowPointAtCenter, + autoAdjustOverflow, + arrowWidth: mergedShowArrow ? token.sizePopupArrow : 0, + borderRadius: token.borderRadius, + offset: token.marginXXS, + visibleFirst: true + }); + }, [arrowPointAtCenter, arrow, builtinPlacements, token]); + const memoOverlay = React.useMemo(() => { + if (title === 0) { + return title; + } + return overlay || title || ""; + }, [overlay, title]); + const memoOverlayWrapper = /* @__PURE__ */ React.createElement(import_Compact.NoCompactStyle, null, typeof memoOverlay === "function" ? memoOverlay() : memoOverlay); + const { + getPopupContainer, + placement = "top", + mouseEnterDelay = 0.1, + mouseLeaveDelay = 0.1, + overlayStyle, + rootClassName, + ...otherProps + } = props; + const prefixCls = getPrefixCls("tooltip", customizePrefixCls); + const rootPrefixCls = getPrefixCls(); + const injectFromPopover = props["data-popover-inject"]; + let tempOpen = open; + if (!("open" in props) && !("visible" in props) && noTitle) { + tempOpen = false; + } + const child = (0, import_reactNode.isValidElement)(children) && !(0, import_reactNode.isFragment)(children) ? children : /* @__PURE__ */ React.createElement("span", null, children); + const childProps = child.props; + const childCls = !childProps.className || typeof childProps.className === "string" ? (0, import_classnames.default)(childProps.className, openClassName || `${prefixCls}-open`) : childProps.className; + const [wrapCSSVar, hashId, cssVarCls] = (0, import_style.default)(prefixCls, !injectFromPopover); + const colorInfo = (0, import_util.parseColor)(prefixCls, color); + const arrowContentStyle = colorInfo.arrowStyle; + const formattedOverlayInnerStyle = { + ...overlayInnerStyle, + ...colorInfo.overlayStyle + }; + const customOverlayClassName = (0, import_classnames.default)( + overlayClassName, + { + [`${prefixCls}-rtl`]: direction === "rtl" + }, + colorInfo.className, + rootClassName, + hashId, + cssVarCls + ); + const [zIndex, contextZIndex] = (0, import_useZIndex.useZIndex)("Tooltip", otherProps.zIndex); + const content = /* @__PURE__ */ React.createElement( + import_rc_tooltip.default, + { + ...otherProps, + zIndex, + showArrow: mergedShowArrow, + placement, + mouseEnterDelay, + mouseLeaveDelay, + prefixCls, + overlayClassName: customOverlayClassName, + overlayStyle: { ...arrowContentStyle, ...overlayStyle }, + getTooltipContainer: getPopupContainer || getTooltipContainer || getContextPopupContainer, + ref: tooltipRef, + builtinPlacements: tooltipPlacements, + overlay: memoOverlayWrapper, + visible: tempOpen, + onVisibleChange: onOpenChange, + afterVisibleChange: afterOpenChange ?? afterVisibleChange, + overlayInnerStyle: formattedOverlayInnerStyle, + arrowContent: /* @__PURE__ */ React.createElement("span", { className: `${prefixCls}-arrow-content` }), + motion: { + motionName: (0, import_motion.getTransitionName)(rootPrefixCls, "zoom-big-fast", props.transitionName), + motionDeadline: 1e3 + }, + destroyTooltipOnHide: !!destroyTooltipOnHide + }, + tempOpen ? (0, import_reactNode.cloneElement)(child, { className: childCls }) : child + ); + return wrapCSSVar( + /* @__PURE__ */ React.createElement(import_zindexContext.default.Provider, { value: contextZIndex }, content) + ); +}); +if (process.env.NODE_ENV !== "production") { + Tooltip.displayName = "Tooltip"; +} +Tooltip._InternalPanelDoNotUseOrYouWillBeFired = import_PurePanel.default; +var tooltip_default = Tooltip; diff --git a/packages/meta/lib/tooltip/style/index.d.ts b/packages/meta/lib/tooltip/style/index.d.ts new file mode 100644 index 0000000..d8cb1e8 --- /dev/null +++ b/packages/meta/lib/tooltip/style/index.d.ts @@ -0,0 +1,14 @@ +/// +import type { ArrowOffsetToken } from '../../style/placementArrow'; +import type { GetDefaultToken } from '../../theme/internal'; +import type { ArrowToken } from '../../style/roundedArrow'; +export interface ComponentToken extends ArrowOffsetToken, ArrowToken { + /** + * @desc 文字提示 z-index + * @descEN z-index of tooltip + */ + zIndexPopup: number; +} +export declare const prepareComponentToken: GetDefaultToken<'Tooltip'>; +declare const _default: (prefixCls: string, injectStyle?: boolean) => readonly [(node: import("react").ReactElement>) => import("react").ReactElement>, string, string | undefined]; +export default _default; diff --git a/packages/meta/lib/tooltip/style/index.js b/packages/meta/lib/tooltip/style/index.js new file mode 100644 index 0000000..eb9ed01 --- /dev/null +++ b/packages/meta/lib/tooltip/style/index.js @@ -0,0 +1,168 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/tooltip/style/index.ts +var style_exports = {}; +__export(style_exports, { + default: () => style_default, + prepareComponentToken: () => prepareComponentToken +}); +module.exports = __toCommonJS(style_exports); +var import_style = require("../../style"); +var import_motion = require("../../style/motion"); +var import_placementArrow = __toESM(require("../../style/placementArrow")); +var import_internal = require("../../theme/internal"); +var import_cssinjs = require("@ant-design/cssinjs"); +var import_roundedArrow = require("../../style/roundedArrow"); +var genTooltipStyle = (token) => { + const { + componentCls, + // ant-tooltip + tooltipMaxWidth, + tooltipColor, + tooltipBg, + tooltipBorderRadius, + zIndexPopup, + controlHeight, + boxShadowSecondary, + paddingSM, + paddingXS + } = token; + return [ + { + [componentCls]: { + ...(0, import_style.resetComponent)(token), + position: "absolute", + zIndex: zIndexPopup, + display: "block", + width: "max-content", + maxWidth: tooltipMaxWidth, + visibility: "visible", + transformOrigin: `var(--arrow-x, 50%) var(--arrow-y, 50%)`, + "&-hidden": { + display: "none" + }, + "--antd-arrow-background-color": tooltipBg, + // Wrapper for the tooltip content + [`${componentCls}-inner`]: { + minWidth: controlHeight, + minHeight: controlHeight, + padding: `${(0, import_cssinjs.unit)(token.calc(paddingSM).div(2).equal())} ${(0, import_cssinjs.unit)(paddingXS)}`, + color: tooltipColor, + textAlign: "start", + textDecoration: "none", + wordWrap: "break-word", + backgroundColor: tooltipBg, + borderRadius: tooltipBorderRadius, + boxShadow: boxShadowSecondary, + boxSizing: "border-box" + }, + // Limit left and right placement radius + [[ + `&-placement-left`, + `&-placement-leftTop`, + `&-placement-leftBottom`, + `&-placement-right`, + `&-placement-rightTop`, + `&-placement-rightBottom` + ].join(",")]: { + [`${componentCls}-inner`]: { + borderRadius: token.min(tooltipBorderRadius, import_placementArrow.MAX_VERTICAL_CONTENT_RADIUS) + } + }, + [`${componentCls}-content`]: { + position: "relative" + }, + // generator for preset color + ...(0, import_internal.genPresetColor)(token, (colorKey, { darkColor }) => ({ + [`&${componentCls}-${colorKey}`]: { + [`${componentCls}-inner`]: { + backgroundColor: darkColor + }, + [`${componentCls}-arrow`]: { + "--antd-arrow-background-color": darkColor + } + } + })), + // RTL + "&-rtl": { + direction: "rtl" + } + } + }, + // Arrow Style + (0, import_placementArrow.default)(token, "var(--antd-arrow-background-color)"), + // Pure Render + { + [`${componentCls}-pure`]: { + position: "relative", + maxWidth: "none", + margin: token.sizePopupArrow + } + } + ]; +}; +var prepareComponentToken = (token) => ({ + zIndexPopup: token.zIndexPopupBase + 70, + ...(0, import_placementArrow.getArrowOffsetToken)({ + contentRadius: token.borderRadius, + limitVerticalRadius: true + }), + ...(0, import_roundedArrow.getArrowToken)( + (0, import_internal.mergeToken)(token, { + borderRadiusOuter: Math.min(token.borderRadiusOuter, 4) + }) + ) +}); +var style_default = (prefixCls, injectStyle = true) => { + const useStyle = (0, import_internal.genStyleHooks)( + "Tooltip", + (token) => { + const { borderRadius, colorTextLightSolid, colorBgSpotlight } = token; + const TooltipToken = (0, import_internal.mergeToken)(token, { + // default variables + tooltipMaxWidth: 250, + tooltipColor: colorTextLightSolid, + tooltipBorderRadius: borderRadius, + tooltipBg: colorBgSpotlight + }); + return [genTooltipStyle(TooltipToken), (0, import_motion.initZoomMotion)(token, "zoom-big-fast")]; + }, + prepareComponentToken, + { + resetStyle: false, + // Popover use Tooltip as internal component. We do not need to handle this. + injectStyle + } + ); + return useStyle(prefixCls); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + prepareComponentToken +}); diff --git a/packages/meta/lib/tooltip/util.d.ts b/packages/meta/lib/tooltip/util.d.ts new file mode 100644 index 0000000..73ebec2 --- /dev/null +++ b/packages/meta/lib/tooltip/util.d.ts @@ -0,0 +1,6 @@ +import type * as React from 'react'; +export declare function parseColor(prefixCls: string, color?: string): { + className: string; + overlayStyle: React.CSSProperties; + arrowStyle: React.CSSProperties; +}; diff --git a/packages/meta/lib/tooltip/util.js b/packages/meta/lib/tooltip/util.js new file mode 100644 index 0000000..4fd73c8 --- /dev/null +++ b/packages/meta/lib/tooltip/util.js @@ -0,0 +1,53 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/tooltip/util.ts +var util_exports = {}; +__export(util_exports, { + parseColor: () => parseColor +}); +module.exports = __toCommonJS(util_exports); +var import_classnames = __toESM(require("classnames")); +var import_colors = require("../_util/colors"); +function parseColor(prefixCls, color) { + const isInternalColor = (0, import_colors.isPresetColor)(color); + const className = (0, import_classnames.default)({ + [`${prefixCls}-${color}`]: color && isInternalColor + }); + const overlayStyle = {}; + const arrowStyle = {}; + if (color && !isInternalColor) { + overlayStyle.background = color; + arrowStyle["--antd-arrow-background-color"] = color; + } + return { className, overlayStyle, arrowStyle }; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + parseColor +}); diff --git a/packages/meta/lib/tour/PurePanel.d.ts b/packages/meta/lib/tour/PurePanel.d.ts new file mode 100644 index 0000000..e52af68 --- /dev/null +++ b/packages/meta/lib/tour/PurePanel.d.ts @@ -0,0 +1,6 @@ +import * as React from 'react'; +import type { TourStepProps } from './interface'; +export interface PurePanelProps extends TourStepProps { +} +declare const _default: (props: PurePanelProps) => React.JSX.Element; +export default _default; diff --git a/packages/meta/lib/tour/PurePanel.js b/packages/meta/lib/tour/PurePanel.js new file mode 100644 index 0000000..505d464 --- /dev/null +++ b/packages/meta/lib/tour/PurePanel.js @@ -0,0 +1,73 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/tour/PurePanel.tsx +var PurePanel_exports = {}; +__export(PurePanel_exports, { + default: () => PurePanel_default +}); +module.exports = __toCommonJS(PurePanel_exports); +var import_classnames = __toESM(require("classnames")); +var React = __toESM(require("react")); +var import_config_provider = require("../config-provider"); +var import_PurePanel = require("../popover/PurePanel"); +var import_panelRender = __toESM(require("./panelRender")); +var import_style = __toESM(require("./style")); +var import_PurePanel2 = require("../_util/PurePanel"); +var PurePanel = (props) => { + const { + prefixCls: customizePrefixCls, + current = 0, + total = 6, + className, + style, + type, + ...restProps + } = props; + const { getPrefixCls } = React.useContext(import_config_provider.ConfigContext); + const prefixCls = getPrefixCls("tour", customizePrefixCls); + const [wrapCSSVar, hashId, cssVarCls] = (0, import_style.default)(prefixCls); + return wrapCSSVar( + /* @__PURE__ */ React.createElement( + import_PurePanel.RawPurePanel, + { + prefixCls, + hashId, + className: (0, import_classnames.default)( + className, + `${prefixCls}-pure`, + type && `${prefixCls}-${type}`, + cssVarCls + ), + style + }, + /* @__PURE__ */ React.createElement(import_panelRender.default, { stepProps: { ...restProps, prefixCls, total }, current, type }) + ) + ); +}; +var PurePanel_default = (0, import_PurePanel2.withPureRenderTheme)(PurePanel); diff --git a/packages/meta/lib/tour/index.d.ts b/packages/meta/lib/tour/index.d.ts new file mode 100644 index 0000000..41c2ee2 --- /dev/null +++ b/packages/meta/lib/tour/index.d.ts @@ -0,0 +1,7 @@ +import React from 'react'; +import type { TourProps } from './interface'; +import PurePanel from './PurePanel'; +declare const Tour: React.FC & { + _InternalPanelDoNotUseOrYouWillBeFired: typeof PurePanel; +}; +export default Tour; diff --git a/packages/meta/lib/tour/index.js b/packages/meta/lib/tour/index.js new file mode 100644 index 0000000..a838ba8 --- /dev/null +++ b/packages/meta/lib/tour/index.js @@ -0,0 +1,113 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/tour/index.tsx +var tour_exports = {}; +__export(tour_exports, { + default: () => tour_default +}); +module.exports = __toCommonJS(tour_exports); +var import_react = __toESM(require("react")); +var import_tour = __toESM(require("@rc-component/tour")); +var import_classnames = __toESM(require("classnames")); +var import_useZIndex = require("../_util/hooks/useZIndex"); +var import_placements = __toESM(require("../_util/placements")); +var import_zindexContext = __toESM(require("../_util/zindexContext")); +var import_config_provider = require("../config-provider"); +var import_internal = require("../theme/internal"); +var import_panelRender = __toESM(require("./panelRender")); +var import_PurePanel = __toESM(require("./PurePanel")); +var import_style = __toESM(require("./style")); +var Tour = (props) => { + const { + prefixCls: customizePrefixCls, + type, + rootClassName, + indicatorsRender, + steps, + ...restProps + } = props; + const { getPrefixCls, direction } = (0, import_react.useContext)(import_config_provider.ConfigContext); + const prefixCls = getPrefixCls("tour", customizePrefixCls); + const [wrapCSSVar, hashId, cssVarCls] = (0, import_style.default)(prefixCls); + const [, token] = (0, import_internal.useToken)(); + const mergedSteps = (0, import_react.useMemo)( + () => steps == null ? void 0 : steps.map((step) => ({ + ...step, + className: (0, import_classnames.default)(step.className, { + [`${prefixCls}-primary`]: (step.type ?? type) === "primary" + }) + })), + [steps, type] + ); + const builtinPlacements = (0, import_placements.default)({ + arrowPointAtCenter: true, + autoAdjustOverflow: true, + offset: token.marginXXS, + arrowWidth: token.sizePopupArrow, + borderRadius: token.borderRadius + }); + const customClassName = (0, import_classnames.default)( + { + [`${prefixCls}-rtl`]: direction === "rtl" + }, + hashId, + cssVarCls, + rootClassName + ); + const mergedRenderPanel = (stepProps, stepCurrent) => /* @__PURE__ */ import_react.default.createElement( + import_panelRender.default, + { + type, + stepProps, + current: stepCurrent, + indicatorsRender + } + ); + const [zIndex, contextZIndex] = (0, import_useZIndex.useZIndex)("Tour", restProps.zIndex); + return wrapCSSVar( + /* @__PURE__ */ import_react.default.createElement(import_zindexContext.default.Provider, { value: contextZIndex }, /* @__PURE__ */ import_react.default.createElement( + import_tour.default, + { + ...restProps, + zIndex, + rootClassName: customClassName, + prefixCls, + animated: true, + renderPanel: mergedRenderPanel, + builtinPlacements, + steps: mergedSteps + } + )) + ); +}; +if (process.env.NODE_ENV !== "production") { + Tour.displayName = "Tour"; +} +Tour._InternalPanelDoNotUseOrYouWillBeFired = import_PurePanel.default; +var tour_default = Tour; diff --git a/packages/meta/lib/tour/interface.d.ts b/packages/meta/lib/tour/interface.d.ts new file mode 100644 index 0000000..8b2e7d2 --- /dev/null +++ b/packages/meta/lib/tour/interface.d.ts @@ -0,0 +1,32 @@ +import type { TourProps as RCTourProps, TourStepProps as RCTourStepProps } from '@rc-component/tour'; +import type { ReactNode } from 'react'; +export interface TourProps extends Omit { + steps?: TourStepProps[]; + className?: string; + prefixCls?: string; + current?: number; + indicatorsRender?: (current: number, total: number) => ReactNode; + type?: 'default' | 'primary'; +} +export interface TourStepProps extends RCTourStepProps { + cover?: ReactNode; + nextButtonProps?: { + children?: ReactNode; + onClick?: () => void; + className?: string; + style?: React.CSSProperties; + }; + prevButtonProps?: { + children?: ReactNode; + onClick?: () => void; + className?: string; + style?: React.CSSProperties; + }; + indicatorsRender?: (current: number, total: number) => ReactNode; + type?: 'default' | 'primary'; +} +export interface TourLocale { + Next: string; + Previous: string; + Finish: string; +} diff --git a/packages/meta/lib/tour/interface.js b/packages/meta/lib/tour/interface.js new file mode 100644 index 0000000..a6d11ed --- /dev/null +++ b/packages/meta/lib/tour/interface.js @@ -0,0 +1,17 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/tour/interface.ts +var interface_exports = {}; +module.exports = __toCommonJS(interface_exports); diff --git a/packages/meta/lib/tour/panelRender.d.ts b/packages/meta/lib/tour/panelRender.d.ts new file mode 100644 index 0000000..e46526d --- /dev/null +++ b/packages/meta/lib/tour/panelRender.d.ts @@ -0,0 +1,12 @@ +import type { ReactNode } from 'react'; +import React from 'react'; +import type { TourStepProps } from './interface'; +interface TourPanelProps { + stepProps: TourStepProps; + current: number; + type: TourStepProps['type']; + indicatorsRender?: TourStepProps['indicatorsRender']; + closeIcon?: ReactNode; +} +declare const TourPanel: React.FC; +export default TourPanel; diff --git a/packages/meta/lib/tour/panelRender.js b/packages/meta/lib/tour/panelRender.js new file mode 100644 index 0000000..335e102 --- /dev/null +++ b/packages/meta/lib/tour/panelRender.js @@ -0,0 +1,140 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/tour/panelRender.tsx +var panelRender_exports = {}; +__export(panelRender_exports, { + default: () => panelRender_default +}); +module.exports = __toCommonJS(panelRender_exports); +var import_CloseOutlined = __toESM(require("@ant-design/icons/CloseOutlined")); +var import_classnames = __toESM(require("classnames")); +var import_react = __toESM(require("react")); +var import_button = __toESM(require("../button")); +var import_locale = require("../locale"); +var import_en_US = __toESM(require("../locale/en_US")); +var import_useClosable = __toESM(require("../_util/hooks/useClosable")); +function isValidNode(node) { + return node !== void 0 && node !== null; +} +var TourPanel = ({ + stepProps, + current, + type, + indicatorsRender, + closeIcon +}) => { + const { + prefixCls, + total = 1, + title, + onClose, + onPrev, + onNext, + onFinish, + cover, + description, + nextButtonProps, + prevButtonProps, + type: stepType, + closeIcon: stepCloseIcon + } = stepProps; + const mergedType = stepType ?? type; + const mergedCloseIcon = stepCloseIcon ?? closeIcon; + const mergedClosable = mergedCloseIcon !== false && mergedCloseIcon !== null; + const [closable, mergedDisplayCloseIcon] = (0, import_useClosable.default)( + mergedClosable, + mergedCloseIcon, + (icon) => /* @__PURE__ */ import_react.default.createElement("span", { onClick: onClose, "aria-label": "Close", className: `${prefixCls}-close` }, icon), + /* @__PURE__ */ import_react.default.createElement(import_CloseOutlined.default, { className: `${prefixCls}-close-icon` }), + true + ); + const isLastStep = current === total - 1; + const prevBtnClick = () => { + var _a; + onPrev == null ? void 0 : onPrev(); + (_a = prevButtonProps == null ? void 0 : prevButtonProps.onClick) == null ? void 0 : _a.call(prevButtonProps); + }; + const nextBtnClick = () => { + var _a; + if (isLastStep) { + onFinish == null ? void 0 : onFinish(); + } else { + onNext == null ? void 0 : onNext(); + } + (_a = nextButtonProps == null ? void 0 : nextButtonProps.onClick) == null ? void 0 : _a.call(nextButtonProps); + }; + const headerNode = isValidNode(title) ? /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-header` }, /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-title` }, title)) : null; + const descriptionNode = isValidNode(description) ? /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-description` }, description) : null; + const coverNode = isValidNode(cover) ? /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-cover` }, cover) : null; + let mergeIndicatorNode; + if (indicatorsRender) { + mergeIndicatorNode = indicatorsRender(current, total); + } else { + mergeIndicatorNode = [...Array.from({ length: total }).keys()].map( + (stepItem, index) => /* @__PURE__ */ import_react.default.createElement( + "span", + { + key: stepItem, + className: (0, import_classnames.default)( + index === current && `${prefixCls}-indicator-active`, + `${prefixCls}-indicator` + ) + } + ) + ); + } + const mainBtnType = mergedType === "primary" ? "default" : "primary"; + const secondaryBtnProps = { + type: "default", + ghost: mergedType === "primary" + }; + const [contextLocale] = (0, import_locale.useLocale)("Tour", import_en_US.default.Tour); + return /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-content` }, /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-inner` }, closable && mergedDisplayCloseIcon, coverNode, headerNode, descriptionNode, /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-footer` }, total > 1 && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-indicators` }, mergeIndicatorNode), /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-buttons` }, current !== 0 ? /* @__PURE__ */ import_react.default.createElement( + import_button.default, + { + ...secondaryBtnProps, + ...prevButtonProps, + onClick: prevBtnClick, + size: "small", + className: (0, import_classnames.default)(`${prefixCls}-prev-btn`, prevButtonProps == null ? void 0 : prevButtonProps.className) + }, + (prevButtonProps == null ? void 0 : prevButtonProps.children) ?? (contextLocale == null ? void 0 : contextLocale.Previous) + ) : null, /* @__PURE__ */ import_react.default.createElement( + import_button.default, + { + type: mainBtnType, + ...nextButtonProps, + onClick: nextBtnClick, + size: "small", + className: (0, import_classnames.default)(`${prefixCls}-next-btn`, nextButtonProps == null ? void 0 : nextButtonProps.className) + }, + (nextButtonProps == null ? void 0 : nextButtonProps.children) ?? (isLastStep ? contextLocale == null ? void 0 : contextLocale.Finish : contextLocale == null ? void 0 : contextLocale.Next) + ))))); +}; +var panelRender_default = TourPanel; diff --git a/packages/meta/lib/tour/style/index.d.ts b/packages/meta/lib/tour/style/index.d.ts new file mode 100644 index 0000000..1d5acec --- /dev/null +++ b/packages/meta/lib/tour/style/index.d.ts @@ -0,0 +1,29 @@ +/// +import type { ArrowOffsetToken } from '../../style/placementArrow'; +import type { GetDefaultToken } from '../../theme/internal'; +import type { ArrowToken } from '../../style/roundedArrow'; +export interface ComponentToken extends ArrowOffsetToken, ArrowToken { + /** + * @desc 弹层 z-index + * @descEN Tour popup z-index + */ + zIndexPopup: number; + /** + * @desc 关闭按钮尺寸 + * @descEN Close button size + */ + closeBtnSize: number; + /** + * @desc Primary 模式上一步按钮背景色 + * @descEN Background color of previous button in primary type + */ + primaryPrevBtnBg: string; + /** + * @desc Primary 模式下一步按钮悬浮背景色 + * @descEN Hover background color of next button in primary type + */ + primaryNextBtnHoverBg: string; +} +export declare const prepareComponentToken: GetDefaultToken<'Tour'>; +declare const _default: (prefixCls: string, rootCls?: string) => readonly [(node: import("react").ReactElement>) => import("react").ReactElement>, string, string | undefined]; +export default _default; diff --git a/packages/meta/lib/tour/style/index.js b/packages/meta/lib/tour/style/index.js new file mode 100644 index 0000000..5e789f6 --- /dev/null +++ b/packages/meta/lib/tour/style/index.js @@ -0,0 +1,267 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/tour/style/index.ts +var style_exports = {}; +__export(style_exports, { + default: () => style_default, + prepareComponentToken: () => prepareComponentToken +}); +module.exports = __toCommonJS(style_exports); +var import_tinycolor = require("@ctrl/tinycolor"); +var import_style = require("../../style"); +var import_placementArrow = __toESM(require("../../style/placementArrow")); +var import_internal = require("../../theme/internal"); +var import_roundedArrow = require("../../style/roundedArrow"); +var import_cssinjs = require("@ant-design/cssinjs"); +var genBaseStyle = (token) => { + const { + componentCls, + lineHeight, + padding, + paddingXS, + borderRadius, + borderRadiusXS, + colorPrimary, + colorText, + colorFill, + indicatorHeight, + indicatorWidth, + boxShadowTertiary, + tourZIndexPopup, + fontSize, + colorBgElevated, + fontWeightStrong, + marginXS, + colorTextLightSolid, + tourBorderRadius, + colorWhite, + primaryNextBtnHoverBg, + closeBtnSize, + motionDurationSlow, + antCls, + primaryPrevBtnBg + } = token; + return [ + { + [componentCls]: { + ...(0, import_style.resetComponent)(token), + color: colorText, + position: "absolute", + zIndex: tourZIndexPopup, + display: "block", + visibility: "visible", + fontSize, + lineHeight, + width: 520, + "--antd-arrow-background-color": colorBgElevated, + "&-pure": { + maxWidth: "100%", + position: "relative" + }, + [`&${componentCls}-hidden`]: { + display: "none" + }, + // ============================= panel content ============================ + [`${componentCls}-content`]: { + position: "relative" + }, + [`${componentCls}-inner`]: { + textAlign: "start", + textDecoration: "none", + borderRadius: tourBorderRadius, + boxShadow: boxShadowTertiary, + position: "relative", + backgroundColor: colorBgElevated, + border: "none", + backgroundClip: "padding-box", + [`${componentCls}-close`]: { + position: "absolute", + top: padding, + insetInlineEnd: padding, + color: token.colorIcon, + outline: "none", + width: closeBtnSize, + height: closeBtnSize, + borderRadius: token.borderRadiusSM, + transition: `background-color ${token.motionDurationMid}, color ${token.motionDurationMid}`, + display: "flex", + alignItems: "center", + justifyContent: "center", + cursor: "pointer", + "&:hover": { + color: token.colorIconHover, + backgroundColor: token.closeBtnHoverBg + } + }, + [`${componentCls}-cover`]: { + textAlign: "center", + padding: `${(0, import_cssinjs.unit)(token.calc(padding).add(closeBtnSize).add(paddingXS).equal())} ${(0, import_cssinjs.unit)( + padding + )} 0`, + img: { + width: "100%" + } + }, + [`${componentCls}-header`]: { + padding: `${(0, import_cssinjs.unit)(padding)} ${(0, import_cssinjs.unit)(padding)} ${(0, import_cssinjs.unit)(paddingXS)}`, + [`${componentCls}-title`]: { + lineHeight, + fontSize, + fontWeight: fontWeightStrong + } + }, + [`${componentCls}-description`]: { + padding: `0 ${(0, import_cssinjs.unit)(padding)}`, + lineHeight, + wordWrap: "break-word" + }, + [`${componentCls}-footer`]: { + padding: `${(0, import_cssinjs.unit)(paddingXS)} ${(0, import_cssinjs.unit)(padding)} ${(0, import_cssinjs.unit)(padding)}`, + textAlign: "end", + borderRadius: `0 0 ${(0, import_cssinjs.unit)(borderRadiusXS)} ${(0, import_cssinjs.unit)(borderRadiusXS)}`, + display: "flex", + [`${componentCls}-indicators`]: { + display: "inline-block", + [`${componentCls}-indicator`]: { + width: indicatorWidth, + height: indicatorHeight, + display: "inline-block", + borderRadius: "50%", + background: colorFill, + "&:not(:last-child)": { + marginInlineEnd: indicatorHeight + }, + "&-active": { + background: colorPrimary + } + } + }, + [`${componentCls}-buttons`]: { + marginInlineStart: "auto", + [`${antCls}-btn`]: { + marginInlineStart: marginXS + } + } + } + }, + // ============================= primary type =========================== + // `$` for panel, `&$` for pure panel + [`${componentCls}-primary, &${componentCls}-primary`]: { + "--antd-arrow-background-color": colorPrimary, + [`${componentCls}-inner`]: { + color: colorTextLightSolid, + textAlign: "start", + textDecoration: "none", + backgroundColor: colorPrimary, + borderRadius, + boxShadow: boxShadowTertiary, + [`${componentCls}-close`]: { + color: colorTextLightSolid + }, + [`${componentCls}-indicators`]: { + [`${componentCls}-indicator`]: { + background: primaryPrevBtnBg, + "&-active": { + background: colorTextLightSolid + } + } + }, + [`${componentCls}-prev-btn`]: { + color: colorTextLightSolid, + borderColor: primaryPrevBtnBg, + backgroundColor: colorPrimary, + "&:hover": { + backgroundColor: primaryPrevBtnBg, + borderColor: "transparent" + } + }, + [`${componentCls}-next-btn`]: { + color: colorPrimary, + borderColor: "transparent", + background: colorWhite, + "&:hover": { + background: primaryNextBtnHoverBg + } + } + } + } + }, + // ============================= mask =========================== + [`${componentCls}-mask`]: { + [`${componentCls}-placeholder-animated`]: { + transition: `all ${motionDurationSlow}` + } + }, + // =========== Limit left and right placement radius ============== + [[ + "&-placement-left", + "&-placement-leftTop", + "&-placement-leftBottom", + "&-placement-right", + "&-placement-rightTop", + "&-placement-rightBottom" + ].join(",")]: { + [`${componentCls}-inner`]: { + borderRadius: token.min(tourBorderRadius, import_placementArrow.MAX_VERTICAL_CONTENT_RADIUS) + } + } + }, + // ============================= Arrow =========================== + (0, import_placementArrow.default)(token, "var(--antd-arrow-background-color)") + ]; +}; +var prepareComponentToken = (token) => ({ + zIndexPopup: token.zIndexPopupBase + 70, + closeBtnSize: token.fontSize * token.lineHeight, + primaryPrevBtnBg: new import_tinycolor.TinyColor(token.colorTextLightSolid).setAlpha(0.15).toRgbString(), + closeBtnHoverBg: token.wireframe ? "transparent" : token.colorFillContent, + primaryNextBtnHoverBg: new import_tinycolor.TinyColor(token.colorBgTextHover).onBackground(token.colorWhite).toRgbString(), + ...(0, import_placementArrow.getArrowOffsetToken)({ + contentRadius: token.borderRadiusLG, + limitVerticalRadius: true + }), + ...(0, import_roundedArrow.getArrowToken)(token) +}); +var style_default = (0, import_internal.genStyleHooks)( + "Tour", + (token) => { + const { borderRadiusLG } = token; + const TourToken = (0, import_internal.mergeToken)(token, { + indicatorWidth: 6, + indicatorHeight: 6, + tourBorderRadius: borderRadiusLG + }); + return [genBaseStyle(TourToken)]; + }, + prepareComponentToken +); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + prepareComponentToken +}); diff --git a/packages/meta/lib/typography/Base/Ellipsis.d.ts b/packages/meta/lib/typography/Base/Ellipsis.d.ts new file mode 100644 index 0000000..610f26f --- /dev/null +++ b/packages/meta/lib/typography/Base/Ellipsis.d.ts @@ -0,0 +1,12 @@ +import * as React from 'react'; +export interface EllipsisProps { + enabledMeasure?: boolean; + text?: React.ReactNode; + width: number; + fontSize: number; + rows: number; + children: (cutChildren: React.ReactNode[], needEllipsis: boolean) => React.ReactNode; + onEllipsis: (isEllipsis: boolean) => void; +} +declare const Ellipsis: React.FC; +export default Ellipsis; diff --git a/packages/meta/lib/typography/Base/Ellipsis.js b/packages/meta/lib/typography/Base/Ellipsis.js new file mode 100644 index 0000000..317dcc6 --- /dev/null +++ b/packages/meta/lib/typography/Base/Ellipsis.js @@ -0,0 +1,185 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/Base/Ellipsis.tsx +var Ellipsis_exports = {}; +__export(Ellipsis_exports, { + default: () => Ellipsis_default +}); +module.exports = __toCommonJS(Ellipsis_exports); +var React = __toESM(require("react")); +var import_toArray = __toESM(require("rc-util/lib/Children/toArray")); +var import_useLayoutEffect = __toESM(require("rc-util/lib/hooks/useLayoutEffect")); +function cuttable(node) { + const type = typeof node; + return type === "string" || type === "number"; +} +function getNodesLen(nodeList) { + let totalLen = 0; + nodeList.forEach((node) => { + if (cuttable(node)) { + totalLen += String(node).length; + } else { + totalLen += 1; + } + }); + return totalLen; +} +function sliceNodes(nodeList, len) { + let currLen = 0; + const currentNodeList = []; + for (let i = 0; i < nodeList.length; i += 1) { + if (currLen === len) { + return currentNodeList; + } + const node = nodeList[i]; + const canCut = cuttable(node); + const nodeLen = canCut ? String(node).length : 1; + const nextLen = currLen + nodeLen; + if (nextLen > len) { + const restLen = len - currLen; + currentNodeList.push(String(node).slice(0, restLen)); + return currentNodeList; + } + currentNodeList.push(node); + currLen = nextLen; + } + return nodeList; +} +var NONE = 0; +var PREPARE = 1; +var WALKING = 2; +var DONE_WITH_ELLIPSIS = 3; +var DONE_WITHOUT_ELLIPSIS = 4; +var Ellipsis = ({ + enabledMeasure, + children, + text, + width, + fontSize, + rows, + onEllipsis +}) => { + const [[startLen, midLen, endLen], setCutLength] = React.useState([0, 0, 0]); + const [lastLen, setLastLen] = React.useState(0); + const [walkingState, setWalkingState] = React.useState(NONE); + const [singleRowHeight, setSingleRowHeight] = React.useState(0); + const singleRowRef = React.useRef(null); + const midRowRef = React.useRef(null); + const nodeList = React.useMemo(() => (0, import_toArray.default)(text), [text]); + const totalLen = React.useMemo(() => getNodesLen(nodeList), [nodeList]); + const mergedChildren = React.useMemo(() => { + if (!enabledMeasure || walkingState !== DONE_WITH_ELLIPSIS) { + if (lastLen && walkingState !== DONE_WITHOUT_ELLIPSIS && enabledMeasure) + return children(sliceNodes(nodeList, lastLen), lastLen < totalLen); + return children(nodeList, false); + } + return children(sliceNodes(nodeList, midLen), midLen < totalLen); + }, [enabledMeasure, walkingState, children, nodeList, midLen, totalLen]); + (0, import_useLayoutEffect.default)(() => { + if (enabledMeasure && width && fontSize && totalLen) { + setWalkingState(PREPARE); + setCutLength([0, Math.ceil(totalLen / 2), totalLen]); + } + }, [enabledMeasure, width, fontSize, text, totalLen, rows]); + (0, import_useLayoutEffect.default)(() => { + var _a; + if (walkingState === PREPARE) { + setSingleRowHeight(((_a = singleRowRef.current) == null ? void 0 : _a.offsetHeight) || 0); + } + }, [walkingState]); + (0, import_useLayoutEffect.default)(() => { + var _a, _b; + if (singleRowHeight) { + if (walkingState === PREPARE) { + const midHeight = ((_a = midRowRef.current) == null ? void 0 : _a.offsetHeight) || 0; + const maxHeight = rows * singleRowHeight; + if (midHeight <= maxHeight) { + setWalkingState(DONE_WITHOUT_ELLIPSIS); + onEllipsis(false); + } else { + setWalkingState(WALKING); + } + } else if (walkingState === WALKING) { + if (startLen !== endLen) { + const midHeight = ((_b = midRowRef.current) == null ? void 0 : _b.offsetHeight) || 0; + const maxHeight = rows * singleRowHeight; + let nextStartLen = startLen; + let nextEndLen = endLen; + if (startLen === endLen - 1) { + nextEndLen = startLen; + } else if (midHeight <= maxHeight) { + nextStartLen = midLen; + } else { + nextEndLen = midLen; + } + const nextMidLen = Math.ceil((nextStartLen + nextEndLen) / 2); + setCutLength([nextStartLen, nextMidLen, nextEndLen]); + } else { + setWalkingState(DONE_WITH_ELLIPSIS); + setLastLen(midLen); + onEllipsis(true); + } + } + } + }, [walkingState, startLen, endLen, rows, singleRowHeight]); + const measureStyle = { + width, + whiteSpace: "normal", + margin: 0, + padding: 0 + }; + const renderMeasure = (content, ref, style) => /* @__PURE__ */ React.createElement( + "span", + { + "aria-hidden": true, + ref, + style: { + position: "fixed", + display: "block", + left: 0, + top: 0, + zIndex: -9999, + visibility: "hidden", + pointerEvents: "none", + fontSize: Math.ceil(fontSize / 2) * 2, + ...style + } + }, + content + ); + const renderMeasureSlice = (len, ref) => { + const sliceNodeList = sliceNodes(nodeList, len); + return renderMeasure(children(sliceNodeList, true), ref, measureStyle); + }; + return /* @__PURE__ */ React.createElement(React.Fragment, null, mergedChildren, enabledMeasure && walkingState !== DONE_WITH_ELLIPSIS && walkingState !== DONE_WITHOUT_ELLIPSIS && /* @__PURE__ */ React.createElement(React.Fragment, null, renderMeasure("lg", singleRowRef, { wordBreak: "keep-all", whiteSpace: "nowrap" }), walkingState === PREPARE ? renderMeasure(children(nodeList, false), midRowRef, measureStyle) : renderMeasureSlice(midLen, midRowRef))); +}; +if (process.env.NODE_ENV !== "production") { + Ellipsis.displayName = "Ellipsis"; +} +var Ellipsis_default = Ellipsis; diff --git a/packages/meta/lib/typography/Base/EllipsisTooltip.d.ts b/packages/meta/lib/typography/Base/EllipsisTooltip.d.ts new file mode 100644 index 0000000..5125044 --- /dev/null +++ b/packages/meta/lib/typography/Base/EllipsisTooltip.d.ts @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { TooltipProps } from '../../tooltip'; +export interface EllipsisTooltipProps { + tooltipProps?: TooltipProps; + enabledEllipsis: boolean; + isEllipsis?: boolean; + children: React.ReactElement; +} +declare const EllipsisTooltip: React.FC; +export default EllipsisTooltip; diff --git a/packages/meta/lib/typography/Base/EllipsisTooltip.js b/packages/meta/lib/typography/Base/EllipsisTooltip.js new file mode 100644 index 0000000..2cfafd2 --- /dev/null +++ b/packages/meta/lib/typography/Base/EllipsisTooltip.js @@ -0,0 +1,51 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/Base/EllipsisTooltip.tsx +var EllipsisTooltip_exports = {}; +__export(EllipsisTooltip_exports, { + default: () => EllipsisTooltip_default +}); +module.exports = __toCommonJS(EllipsisTooltip_exports); +var React = __toESM(require("react")); +var import_tooltip = __toESM(require("../../tooltip")); +var EllipsisTooltip = ({ + enabledEllipsis, + isEllipsis, + children, + tooltipProps +}) => { + if (!(tooltipProps == null ? void 0 : tooltipProps.title) || !enabledEllipsis) { + return children; + } + return /* @__PURE__ */ React.createElement(import_tooltip.default, { open: isEllipsis ? void 0 : false, ...tooltipProps }, children); +}; +if (process.env.NODE_ENV !== "production") { + EllipsisTooltip.displayName = "EllipsisTooltip"; +} +var EllipsisTooltip_default = EllipsisTooltip; diff --git a/packages/meta/lib/typography/Base/index.d.ts b/packages/meta/lib/typography/Base/index.d.ts new file mode 100644 index 0000000..64aaba8 --- /dev/null +++ b/packages/meta/lib/typography/Base/index.d.ts @@ -0,0 +1,52 @@ +import * as React from 'react'; +import type { AutoSizeType } from 'rc-textarea'; +import type { TooltipProps } from '../../tooltip'; +import type { TypographyProps } from '../Typography'; +export type BaseType = 'secondary' | 'success' | 'warning' | 'danger'; +interface CopyConfig { + text?: string; + onCopy?: (event?: React.MouseEvent) => void; + icon?: React.ReactNode; + tooltips?: boolean | React.ReactNode; + format?: 'text/plain' | 'text/html'; +} +interface EditConfig { + text?: string; + editing?: boolean; + icon?: React.ReactNode; + tooltip?: boolean | React.ReactNode; + onStart?: () => void; + onChange?: (value: string) => void; + onCancel?: () => void; + onEnd?: () => void; + maxLength?: number; + autoSize?: boolean | AutoSizeType; + triggerType?: ('icon' | 'text')[]; + enterIcon?: React.ReactNode; +} +export interface EllipsisConfig { + rows?: number; + expandable?: boolean; + suffix?: string; + symbol?: React.ReactNode; + onExpand?: React.MouseEventHandler; + onEllipsis?: (ellipsis: boolean) => void; + tooltip?: React.ReactNode | TooltipProps; +} +export interface BlockProps extends TypographyProps { + title?: string; + editable?: boolean | EditConfig; + copyable?: boolean | CopyConfig; + type?: BaseType; + disabled?: boolean; + ellipsis?: boolean | EllipsisConfig; + code?: boolean; + mark?: boolean; + underline?: boolean; + delete?: boolean; + strong?: boolean; + keyboard?: boolean; + italic?: boolean; +} +declare const Base: React.ForwardRefExoticComponent & React.RefAttributes>; +export default Base; diff --git a/packages/meta/lib/typography/Base/index.js b/packages/meta/lib/typography/Base/index.js new file mode 100644 index 0000000..a37db95 --- /dev/null +++ b/packages/meta/lib/typography/Base/index.js @@ -0,0 +1,431 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/Base/index.tsx +var Base_exports = {}; +__export(Base_exports, { + default: () => Base_default +}); +module.exports = __toCommonJS(Base_exports); +var React = __toESM(require("react")); +var import_CheckOutlined = __toESM(require("@ant-design/icons/CheckOutlined")); +var import_CopyOutlined = __toESM(require("@ant-design/icons/CopyOutlined")); +var import_EditOutlined = __toESM(require("@ant-design/icons/EditOutlined")); +var import_classnames = __toESM(require("classnames")); +var import_copy_to_clipboard = __toESM(require("copy-to-clipboard")); +var import_rc_resize_observer = __toESM(require("rc-resize-observer")); +var import_toArray = __toESM(require("rc-util/lib/Children/toArray")); +var import_useLayoutEffect = __toESM(require("rc-util/lib/hooks/useLayoutEffect")); +var import_useMergedState = __toESM(require("rc-util/lib/hooks/useMergedState")); +var import_omit = __toESM(require("rc-util/lib/omit")); +var import_ref = require("rc-util/lib/ref"); +var import_styleChecker = require("../../_util/styleChecker"); +var import_transButton = __toESM(require("../../_util/transButton")); +var import_config_provider = require("../../config-provider"); +var import_useLocale = __toESM(require("../../locale/useLocale")); +var import_tooltip = __toESM(require("../../tooltip")); +var import_Editable = __toESM(require("../Editable")); +var import_useMergedConfig = __toESM(require("../hooks/useMergedConfig")); +var import_useUpdatedEffect = __toESM(require("../hooks/useUpdatedEffect")); +var import_Typography = __toESM(require("../Typography")); +var import_Ellipsis = __toESM(require("./Ellipsis")); +var import_EllipsisTooltip = __toESM(require("./EllipsisTooltip")); +function wrapperDecorations({ mark, code, underline, delete: del, strong, keyboard, italic }, content) { + let currentContent = content; + function wrap(tag, needed) { + if (!needed) { + return; + } + currentContent = React.createElement(tag, {}, currentContent); + } + wrap("strong", strong); + wrap("u", underline); + wrap("del", del); + wrap("code", code); + wrap("mark", mark); + wrap("kbd", keyboard); + wrap("i", italic); + return currentContent; +} +function getNode(dom, defaultNode, needDom) { + if (dom === true || dom === void 0) { + return defaultNode; + } + return dom || needDom && defaultNode; +} +function toList(val) { + if (val === false) { + return [false, false]; + } + return Array.isArray(val) ? val : [val]; +} +var ELLIPSIS_STR = "..."; +var Base = React.forwardRef((props, ref) => { + const { + prefixCls: customizePrefixCls, + className, + style, + type, + disabled, + children, + ellipsis, + editable, + copyable, + component, + title, + ...restProps + } = props; + const { getPrefixCls, direction } = React.useContext(import_config_provider.ConfigContext); + const [textLocale] = (0, import_useLocale.default)("Text"); + const typographyRef = React.useRef(null); + const editIconRef = React.useRef(null); + const prefixCls = getPrefixCls("typography", customizePrefixCls); + const textProps = (0, import_omit.default)(restProps, [ + "mark", + "code", + "delete", + "underline", + "strong", + "keyboard", + "italic" + ]); + const [enableEdit, editConfig] = (0, import_useMergedConfig.default)(editable); + const [editing, setEditing] = (0, import_useMergedState.default)(false, { + value: editConfig.editing + }); + const { triggerType = ["icon"] } = editConfig; + const triggerEdit = (edit) => { + var _a; + if (edit) { + (_a = editConfig.onStart) == null ? void 0 : _a.call(editConfig); + } + setEditing(edit); + }; + (0, import_useUpdatedEffect.default)(() => { + var _a; + if (!editing) { + (_a = editIconRef.current) == null ? void 0 : _a.focus(); + } + }, [editing]); + const onEditClick = (e) => { + e == null ? void 0 : e.preventDefault(); + triggerEdit(true); + }; + const onEditChange = (value) => { + var _a; + (_a = editConfig.onChange) == null ? void 0 : _a.call(editConfig, value); + triggerEdit(false); + }; + const onEditCancel = () => { + var _a; + (_a = editConfig.onCancel) == null ? void 0 : _a.call(editConfig); + triggerEdit(false); + }; + const [enableCopy, copyConfig] = (0, import_useMergedConfig.default)(copyable); + const [copied, setCopied] = React.useState(false); + const copyIdRef = React.useRef(null); + const copyOptions = {}; + if (copyConfig.format) { + copyOptions.format = copyConfig.format; + } + const cleanCopyId = () => { + if (copyIdRef.current) { + clearTimeout(copyIdRef.current); + } + }; + const onCopyClick = (e) => { + var _a; + e == null ? void 0 : e.preventDefault(); + e == null ? void 0 : e.stopPropagation(); + (0, import_copy_to_clipboard.default)(copyConfig.text || String(children) || "", copyOptions); + setCopied(true); + cleanCopyId(); + copyIdRef.current = setTimeout(() => { + setCopied(false); + }, 3e3); + (_a = copyConfig.onCopy) == null ? void 0 : _a.call(copyConfig, e); + }; + React.useEffect(() => cleanCopyId, []); + const [isLineClampSupport, setIsLineClampSupport] = React.useState(false); + const [isTextOverflowSupport, setIsTextOverflowSupport] = React.useState(false); + const [expanded, setExpanded] = React.useState(false); + const [isJsEllipsis, setIsJsEllipsis] = React.useState(false); + const [isNativeEllipsis, setIsNativeEllipsis] = React.useState(false); + const [isNativeVisible, setIsNativeVisible] = React.useState(true); + const [enableEllipsis, ellipsisConfig] = (0, import_useMergedConfig.default)(ellipsis, { + expandable: false + }); + const mergedEnableEllipsis = enableEllipsis && !expanded; + const { rows = 1 } = ellipsisConfig; + const needMeasureEllipsis = React.useMemo( + () => ( + // Disable ellipsis + !mergedEnableEllipsis || // Provide suffix + ellipsisConfig.suffix !== void 0 || ellipsisConfig.onEllipsis || // Can't use css ellipsis since we need to provide the place for button + ellipsisConfig.expandable || enableEdit || enableCopy + ), + [mergedEnableEllipsis, ellipsisConfig, enableEdit, enableCopy] + ); + (0, import_useLayoutEffect.default)(() => { + if (enableEllipsis && !needMeasureEllipsis) { + setIsLineClampSupport((0, import_styleChecker.isStyleSupport)("webkitLineClamp")); + setIsTextOverflowSupport((0, import_styleChecker.isStyleSupport)("textOverflow")); + } + }, [needMeasureEllipsis, enableEllipsis]); + const cssEllipsis = React.useMemo(() => { + if (needMeasureEllipsis) { + return false; + } + if (rows === 1) { + return isTextOverflowSupport; + } + return isLineClampSupport; + }, [needMeasureEllipsis, isTextOverflowSupport, isLineClampSupport]); + const isMergedEllipsis = mergedEnableEllipsis && (cssEllipsis ? isNativeEllipsis : isJsEllipsis); + const cssTextOverflow = mergedEnableEllipsis && rows === 1 && cssEllipsis; + const cssLineClamp = mergedEnableEllipsis && rows > 1 && cssEllipsis; + const onExpandClick = (e) => { + var _a; + setExpanded(true); + (_a = ellipsisConfig.onExpand) == null ? void 0 : _a.call(ellipsisConfig, e); + }; + const [ellipsisWidth, setEllipsisWidth] = React.useState(0); + const [ellipsisFontSize, setEllipsisFontSize] = React.useState(0); + const onResize = ({ offsetWidth }, element) => { + var _a; + setEllipsisWidth(offsetWidth); + setEllipsisFontSize(parseInt((_a = window.getComputedStyle) == null ? void 0 : _a.call(window, element).fontSize, 10) || 0); + }; + const onJsEllipsis = (jsEllipsis) => { + var _a; + setIsJsEllipsis(jsEllipsis); + if (isJsEllipsis !== jsEllipsis) { + (_a = ellipsisConfig.onEllipsis) == null ? void 0 : _a.call(ellipsisConfig, jsEllipsis); + } + }; + React.useEffect(() => { + const textEle = typographyRef.current; + if (enableEllipsis && cssEllipsis && textEle) { + const currentEllipsis = cssLineClamp ? textEle.offsetHeight < textEle.scrollHeight : textEle.offsetWidth < textEle.scrollWidth; + if (isNativeEllipsis !== currentEllipsis) { + setIsNativeEllipsis(currentEllipsis); + } + } + }, [enableEllipsis, cssEllipsis, children, cssLineClamp, isNativeVisible, ellipsisWidth]); + React.useEffect(() => { + const textEle = typographyRef.current; + if (typeof IntersectionObserver === "undefined" || !textEle || !cssEllipsis || !mergedEnableEllipsis) { + return; + } + const observer = new IntersectionObserver(() => { + setIsNativeVisible(!!textEle.offsetParent); + }); + observer.observe(textEle); + return () => { + observer.disconnect(); + }; + }, [cssEllipsis, mergedEnableEllipsis]); + let tooltipProps = {}; + if (ellipsisConfig.tooltip === true) { + tooltipProps = { title: editConfig.text ?? children }; + } else if (React.isValidElement(ellipsisConfig.tooltip)) { + tooltipProps = { title: ellipsisConfig.tooltip }; + } else if (typeof ellipsisConfig.tooltip === "object") { + tooltipProps = { title: editConfig.text ?? children, ...ellipsisConfig.tooltip }; + } else { + tooltipProps = { title: ellipsisConfig.tooltip }; + } + const topAriaLabel = React.useMemo(() => { + const isValid = (val) => ["string", "number"].includes(typeof val); + if (!enableEllipsis || cssEllipsis) { + return void 0; + } + if (isValid(editConfig.text)) { + return editConfig.text; + } + if (isValid(children)) { + return children; + } + if (isValid(title)) { + return title; + } + if (isValid(tooltipProps.title)) { + return tooltipProps.title; + } + return void 0; + }, [enableEllipsis, cssEllipsis, title, tooltipProps.title, isMergedEllipsis]); + if (editing) { + return /* @__PURE__ */ React.createElement( + import_Editable.default, + { + value: editConfig.text ?? (typeof children === "string" ? children : ""), + onSave: onEditChange, + onCancel: onEditCancel, + onEnd: editConfig.onEnd, + prefixCls, + className, + style, + direction, + component, + maxLength: editConfig.maxLength, + autoSize: editConfig.autoSize, + enterIcon: editConfig.enterIcon + } + ); + } + const renderExpand = () => { + const { expandable, symbol } = ellipsisConfig; + if (!expandable) + return null; + let expandContent; + if (symbol) { + expandContent = symbol; + } else { + expandContent = textLocale == null ? void 0 : textLocale.expand; + } + return /* @__PURE__ */ React.createElement( + "a", + { + key: "expand", + className: `${prefixCls}-expand`, + onClick: onExpandClick, + "aria-label": textLocale == null ? void 0 : textLocale.expand + }, + expandContent + ); + }; + const renderEdit = () => { + if (!enableEdit) + return; + const { icon, tooltip } = editConfig; + const editTitle = (0, import_toArray.default)(tooltip)[0] || (textLocale == null ? void 0 : textLocale.edit); + const ariaLabel = typeof editTitle === "string" ? editTitle : ""; + return triggerType.includes("icon") ? /* @__PURE__ */ React.createElement(import_tooltip.default, { key: "edit", title: tooltip === false ? "" : editTitle }, /* @__PURE__ */ React.createElement( + import_transButton.default, + { + ref: editIconRef, + className: `${prefixCls}-edit`, + onClick: onEditClick, + "aria-label": ariaLabel + }, + icon || /* @__PURE__ */ React.createElement(import_EditOutlined.default, { role: "button" }) + )) : null; + }; + const renderCopy = () => { + if (!enableCopy) { + return null; + } + const { tooltips, icon } = copyConfig; + const tooltipNodes = toList(tooltips); + const iconNodes = toList(icon); + const copyTitle = copied ? getNode(tooltipNodes[1], textLocale == null ? void 0 : textLocale.copied) : getNode(tooltipNodes[0], textLocale == null ? void 0 : textLocale.copy); + const systemStr = copied ? textLocale == null ? void 0 : textLocale.copied : textLocale == null ? void 0 : textLocale.copy; + const ariaLabel = typeof copyTitle === "string" ? copyTitle : systemStr; + return /* @__PURE__ */ React.createElement(import_tooltip.default, { key: "copy", title: copyTitle }, /* @__PURE__ */ React.createElement( + import_transButton.default, + { + className: (0, import_classnames.default)(`${prefixCls}-copy`, { + [`${prefixCls}-copy-success`]: copied, + [`${prefixCls}-copy-icon-only`]: children === null || children === void 0 + }), + onClick: onCopyClick, + "aria-label": ariaLabel + }, + copied ? getNode(iconNodes[1], /* @__PURE__ */ React.createElement(import_CheckOutlined.default, null), true) : getNode(iconNodes[0], /* @__PURE__ */ React.createElement(import_CopyOutlined.default, null), true) + )); + }; + const renderOperations = (renderExpanded) => [ + renderExpanded && renderExpand(), + renderEdit(), + renderCopy() + ]; + const renderEllipsis = (needEllipsis) => [ + needEllipsis && /* @__PURE__ */ React.createElement("span", { "aria-hidden": true, key: "ellipsis" }, ELLIPSIS_STR), + ellipsisConfig.suffix, + renderOperations(needEllipsis) + ]; + return /* @__PURE__ */ React.createElement(import_rc_resize_observer.default, { onResize, disabled: !mergedEnableEllipsis }, (resizeRef) => /* @__PURE__ */ React.createElement( + import_EllipsisTooltip.default, + { + tooltipProps, + enabledEllipsis: mergedEnableEllipsis, + isEllipsis: isMergedEllipsis + }, + /* @__PURE__ */ React.createElement( + import_Typography.default, + { + className: (0, import_classnames.default)( + { + [`${prefixCls}-${type}`]: type, + [`${prefixCls}-disabled`]: disabled, + [`${prefixCls}-ellipsis`]: enableEllipsis, + [`${prefixCls}-single-line`]: mergedEnableEllipsis && rows === 1, + [`${prefixCls}-ellipsis-single-line`]: cssTextOverflow, + [`${prefixCls}-ellipsis-multiple-line`]: cssLineClamp + }, + className + ), + prefixCls: customizePrefixCls, + style: { + ...style, + WebkitLineClamp: cssLineClamp ? rows : void 0 + }, + component, + ref: (0, import_ref.composeRef)(resizeRef, typographyRef, ref), + direction, + onClick: triggerType.includes("text") ? onEditClick : void 0, + "aria-label": topAriaLabel == null ? void 0 : topAriaLabel.toString(), + title, + ...textProps + }, + /* @__PURE__ */ React.createElement( + import_Ellipsis.default, + { + enabledMeasure: mergedEnableEllipsis && !cssEllipsis, + text: children, + rows, + width: ellipsisWidth, + fontSize: ellipsisFontSize, + onEllipsis: onJsEllipsis + }, + (node, needEllipsis) => { + let renderNode = node; + if (node.length && needEllipsis && topAriaLabel) { + renderNode = /* @__PURE__ */ React.createElement("span", { key: "show-content", "aria-hidden": true }, renderNode); + } + const wrappedContext = wrapperDecorations( + props, + /* @__PURE__ */ React.createElement(React.Fragment, null, renderNode, renderEllipsis(needEllipsis)) + ); + return wrappedContext; + } + ) + ) + )); +}); +var Base_default = Base; diff --git a/packages/meta/lib/typography/Editable.d.ts b/packages/meta/lib/typography/Editable.d.ts new file mode 100644 index 0000000..7508ed9 --- /dev/null +++ b/packages/meta/lib/typography/Editable.d.ts @@ -0,0 +1,20 @@ +import type { AutoSizeType } from 'rc-textarea'; +import * as React from 'react'; +import type { DirectionType } from '../config-provider'; +interface EditableProps { + prefixCls: string; + value: string; + ['aria-label']?: string; + onSave: (value: string) => void; + onCancel: () => void; + onEnd?: () => void; + className?: string; + style?: React.CSSProperties; + direction?: DirectionType; + maxLength?: number; + autoSize?: boolean | AutoSizeType; + enterIcon?: React.ReactNode; + component?: string; +} +declare const Editable: React.FC; +export default Editable; diff --git a/packages/meta/lib/typography/Editable.js b/packages/meta/lib/typography/Editable.js new file mode 100644 index 0000000..2eca3d7 --- /dev/null +++ b/packages/meta/lib/typography/Editable.js @@ -0,0 +1,142 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/Editable.tsx +var Editable_exports = {}; +__export(Editable_exports, { + default: () => Editable_default +}); +module.exports = __toCommonJS(Editable_exports); +var import_EnterOutlined = __toESM(require("@ant-design/icons/EnterOutlined")); +var import_classnames = __toESM(require("classnames")); +var import_KeyCode = __toESM(require("rc-util/lib/KeyCode")); +var React = __toESM(require("react")); +var import_reactNode = require("../_util/reactNode"); +var import_TextArea = __toESM(require("../input/TextArea")); +var import_style = __toESM(require("./style")); +var Editable = (props) => { + const { + prefixCls, + "aria-label": ariaLabel, + className, + style, + direction, + maxLength, + autoSize = true, + value, + onSave, + onCancel, + onEnd, + component, + enterIcon = /* @__PURE__ */ React.createElement(import_EnterOutlined.default, null) + } = props; + const ref = React.useRef(null); + const inComposition = React.useRef(false); + const lastKeyCode = React.useRef(); + const [current, setCurrent] = React.useState(value); + React.useEffect(() => { + setCurrent(value); + }, [value]); + React.useEffect(() => { + if (ref.current && ref.current.resizableTextArea) { + const { textArea } = ref.current.resizableTextArea; + textArea.focus(); + const { length } = textArea.value; + textArea.setSelectionRange(length, length); + } + }, []); + const onChange = ({ target }) => { + setCurrent(target.value.replace(/[\n\r]/g, "")); + }; + const onCompositionStart = () => { + inComposition.current = true; + }; + const onCompositionEnd = () => { + inComposition.current = false; + }; + const onKeyDown = ({ keyCode }) => { + if (inComposition.current) + return; + lastKeyCode.current = keyCode; + }; + const confirmChange = () => { + onSave(current.trim()); + }; + const onKeyUp = ({ + keyCode, + ctrlKey, + altKey, + metaKey, + shiftKey + }) => { + if (lastKeyCode.current === keyCode && !inComposition.current && !ctrlKey && !altKey && !metaKey && !shiftKey) { + if (keyCode === import_KeyCode.default.ENTER) { + confirmChange(); + onEnd == null ? void 0 : onEnd(); + } else if (keyCode === import_KeyCode.default.ESC) { + onCancel(); + } + } + }; + const onBlur = () => { + confirmChange(); + }; + const textClassName = component ? `${prefixCls}-${component}` : ""; + const [wrapCSSVar, hashId, cssVarCls] = (0, import_style.default)(prefixCls); + const textAreaClassName = (0, import_classnames.default)( + prefixCls, + `${prefixCls}-edit-content`, + { + [`${prefixCls}-rtl`]: direction === "rtl" + }, + className, + textClassName, + hashId, + cssVarCls + ); + return wrapCSSVar( + /* @__PURE__ */ React.createElement("div", { className: textAreaClassName, style }, /* @__PURE__ */ React.createElement( + import_TextArea.default, + { + ref, + maxLength, + value: current, + onChange, + onKeyDown, + onKeyUp, + onCompositionStart, + onCompositionEnd, + onBlur, + "aria-label": ariaLabel, + rows: 1, + autoSize + } + ), enterIcon !== null ? (0, import_reactNode.cloneElement)(enterIcon, { className: `${prefixCls}-edit-content-confirm` }) : null) + ); +}; +var Editable_default = Editable; diff --git a/packages/meta/lib/typography/Link.d.ts b/packages/meta/lib/typography/Link.d.ts new file mode 100644 index 0000000..a2c2a06 --- /dev/null +++ b/packages/meta/lib/typography/Link.d.ts @@ -0,0 +1,7 @@ +import * as React from 'react'; +import type { BlockProps } from './Base'; +export interface LinkProps extends BlockProps<'a'>, Omit, 'type' | keyof BlockProps<'a'>> { + ellipsis?: boolean; +} +declare const Link: React.ForwardRefExoticComponent>; +export default Link; diff --git a/packages/meta/lib/typography/Link.js b/packages/meta/lib/typography/Link.js new file mode 100644 index 0000000..d51381d --- /dev/null +++ b/packages/meta/lib/typography/Link.js @@ -0,0 +1,50 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/Link.tsx +var Link_exports = {}; +__export(Link_exports, { + default: () => Link_default +}); +module.exports = __toCommonJS(Link_exports); +var React = __toESM(require("react")); +var import_warning = require("../_util/warning"); +var import_Base = __toESM(require("./Base")); +var Link = React.forwardRef(({ ellipsis, rel, ...restProps }, ref) => { + if (process.env.NODE_ENV !== "production") { + const warning = (0, import_warning.devUseWarning)("Typography.Link"); + warning(typeof ellipsis !== "object", "usage", "`ellipsis` only supports boolean value."); + } + const mergedProps = { + ...restProps, + rel: rel === void 0 && restProps.target === "_blank" ? "noopener noreferrer" : rel + }; + delete mergedProps.navigate; + return /* @__PURE__ */ React.createElement(import_Base.default, { ...mergedProps, ref, ellipsis: !!ellipsis, component: "a" }); +}); +var Link_default = Link; diff --git a/packages/meta/lib/typography/Paragraph.d.ts b/packages/meta/lib/typography/Paragraph.d.ts new file mode 100644 index 0000000..d1d3168 --- /dev/null +++ b/packages/meta/lib/typography/Paragraph.d.ts @@ -0,0 +1,6 @@ +import * as React from 'react'; +import type { BlockProps } from './Base'; +export interface ParagraphProps extends BlockProps<'div'>, Omit, 'type' | keyof BlockProps<'div'>> { +} +declare const Paragraph: React.ForwardRefExoticComponent>; +export default Paragraph; diff --git a/packages/meta/lib/typography/Paragraph.js b/packages/meta/lib/typography/Paragraph.js new file mode 100644 index 0000000..4a71c44 --- /dev/null +++ b/packages/meta/lib/typography/Paragraph.js @@ -0,0 +1,38 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/Paragraph.tsx +var Paragraph_exports = {}; +__export(Paragraph_exports, { + default: () => Paragraph_default +}); +module.exports = __toCommonJS(Paragraph_exports); +var React = __toESM(require("react")); +var import_Base = __toESM(require("./Base")); +var Paragraph = React.forwardRef((props, ref) => /* @__PURE__ */ React.createElement(import_Base.default, { ref, ...props, component: "div" })); +var Paragraph_default = Paragraph; diff --git a/packages/meta/lib/typography/Text.d.ts b/packages/meta/lib/typography/Text.d.ts new file mode 100644 index 0000000..6bd3ea1 --- /dev/null +++ b/packages/meta/lib/typography/Text.d.ts @@ -0,0 +1,7 @@ +import * as React from 'react'; +import type { BlockProps, EllipsisConfig } from './Base'; +export interface TextProps extends BlockProps<'span'>, Omit, 'type' | keyof BlockProps<'span'>> { + ellipsis?: boolean | Omit; +} +declare const _default: React.ForwardRefExoticComponent>; +export default _default; diff --git a/packages/meta/lib/typography/Text.js b/packages/meta/lib/typography/Text.js new file mode 100644 index 0000000..cba9c2f --- /dev/null +++ b/packages/meta/lib/typography/Text.js @@ -0,0 +1,56 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/Text.tsx +var Text_exports = {}; +__export(Text_exports, { + default: () => Text_default +}); +module.exports = __toCommonJS(Text_exports); +var React = __toESM(require("react")); +var import_omit = __toESM(require("rc-util/lib/omit")); +var import_warning = require("../_util/warning"); +var import_Base = __toESM(require("./Base")); +var Text = ({ ellipsis, ...restProps }, ref) => { + const mergedEllipsis = React.useMemo(() => { + if (ellipsis && typeof ellipsis === "object") { + return (0, import_omit.default)(ellipsis, ["expandable", "rows"]); + } + return ellipsis; + }, [ellipsis]); + if (process.env.NODE_ENV !== "production") { + const warning = (0, import_warning.devUseWarning)("Typography.Text"); + warning( + typeof ellipsis !== "object" || !ellipsis || !("expandable" in ellipsis) && !("rows" in ellipsis), + "usage", + "`ellipsis` do not support `expandable` or `rows` props." + ); + } + return /* @__PURE__ */ React.createElement(import_Base.default, { ref, ...restProps, ellipsis: mergedEllipsis, component: "span" }); +}; +var Text_default = React.forwardRef(Text); diff --git a/packages/meta/lib/typography/Title.d.ts b/packages/meta/lib/typography/Title.d.ts new file mode 100644 index 0000000..4b01fde --- /dev/null +++ b/packages/meta/lib/typography/Title.d.ts @@ -0,0 +1,8 @@ +import * as React from 'react'; +import type { BlockProps } from './Base'; +declare const TITLE_ELE_LIST: readonly [1, 2, 3, 4, 5]; +export interface TitleProps extends Omit, 'strong'>, Omit, 'type' | keyof BlockProps<'h1' | 'h2' | 'h3' | 'h4' | 'h5'>> { + level?: typeof TITLE_ELE_LIST[number]; +} +declare const Title: React.ForwardRefExoticComponent>; +export default Title; diff --git a/packages/meta/lib/typography/Title.js b/packages/meta/lib/typography/Title.js new file mode 100644 index 0000000..1d01319 --- /dev/null +++ b/packages/meta/lib/typography/Title.js @@ -0,0 +1,57 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/Title.tsx +var Title_exports = {}; +__export(Title_exports, { + default: () => Title_default +}); +module.exports = __toCommonJS(Title_exports); +var React = __toESM(require("react")); +var import_warning = require("../_util/warning"); +var import_Base = __toESM(require("./Base")); +var TITLE_ELE_LIST = [1, 2, 3, 4, 5]; +var Title = React.forwardRef((props, ref) => { + const { level = 1, ...restProps } = props; + let component; + if (process.env.NODE_ENV !== "production") { + const warning = (0, import_warning.devUseWarning)("Typography.Title"); + warning( + TITLE_ELE_LIST.includes(level), + "usage", + "Title only accept `1 | 2 | 3 | 4 | 5` as `level` value. And `5` need 4.6.0+ version." + ); + } + if (TITLE_ELE_LIST.includes(level)) { + component = `h${level}`; + } else { + component = "h1"; + } + return /* @__PURE__ */ React.createElement(import_Base.default, { ref, ...restProps, component }); +}); +var Title_default = Title; diff --git a/packages/meta/lib/typography/Typography.d.ts b/packages/meta/lib/typography/Typography.d.ts new file mode 100644 index 0000000..c75aa48 --- /dev/null +++ b/packages/meta/lib/typography/Typography.d.ts @@ -0,0 +1,18 @@ +import * as React from 'react'; +import type { DirectionType } from '../config-provider'; +export interface TypographyProps extends React.HTMLAttributes { + id?: string; + prefixCls?: string; + className?: string; + rootClassName?: string; + style?: React.CSSProperties; + children?: React.ReactNode; + ['aria-label']?: string; + direction?: DirectionType; +} +interface InternalTypographyProps extends TypographyProps { + /** @deprecated Use `ref` directly if using React 16 */ + setContentRef?: (node: HTMLElement) => void; +} +declare const Typography: React.ForwardRefExoticComponent & React.RefAttributes>; +export default Typography; diff --git a/packages/meta/lib/typography/Typography.js b/packages/meta/lib/typography/Typography.js new file mode 100644 index 0000000..70eb68e --- /dev/null +++ b/packages/meta/lib/typography/Typography.js @@ -0,0 +1,89 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/Typography.tsx +var Typography_exports = {}; +__export(Typography_exports, { + default: () => Typography_default +}); +module.exports = __toCommonJS(Typography_exports); +var React = __toESM(require("react")); +var import_classnames = __toESM(require("classnames")); +var import_ref = require("rc-util/lib/ref"); +var import_warning = require("../_util/warning"); +var import_config_provider = require("../config-provider"); +var import_style = __toESM(require("./style")); +var Typography = React.forwardRef((props, ref) => { + const { + prefixCls: customizePrefixCls, + component: Component = "article", + className, + rootClassName, + setContentRef, + children, + direction: typographyDirection, + style, + ...restProps + } = props; + const { + getPrefixCls, + direction: contextDirection, + typography + } = React.useContext(import_config_provider.ConfigContext); + const direction = typographyDirection ?? contextDirection; + let mergedRef = ref; + if (setContentRef) { + mergedRef = (0, import_ref.composeRef)(ref, setContentRef); + } + if (process.env.NODE_ENV !== "production") { + const warning = (0, import_warning.devUseWarning)("Typography"); + warning.deprecated(!setContentRef, "setContentRef", "ref"); + } + const prefixCls = getPrefixCls("typography", customizePrefixCls); + const [wrapCSSVar, hashId, cssVarCls] = (0, import_style.default)(prefixCls); + const componentClassName = (0, import_classnames.default)( + prefixCls, + typography == null ? void 0 : typography.className, + { + [`${prefixCls}-rtl`]: direction === "rtl" + }, + className, + rootClassName, + hashId, + cssVarCls + ); + const mergedStyle = { ...typography == null ? void 0 : typography.style, ...style }; + return wrapCSSVar( + // @ts-expect-error: Expression produces a union type that is too complex to represent. + /* @__PURE__ */ React.createElement(Component, { className: componentClassName, style: mergedStyle, ref: mergedRef, ...restProps }, children) + ); +}); +if (process.env.NODE_ENV !== "production") { + Typography.displayName = "Typography"; +} +var Typography_default = Typography; diff --git a/packages/meta/lib/typography/hooks/useMergedConfig.d.ts b/packages/meta/lib/typography/hooks/useMergedConfig.d.ts new file mode 100644 index 0000000..dda4bc3 --- /dev/null +++ b/packages/meta/lib/typography/hooks/useMergedConfig.d.ts @@ -0,0 +1 @@ +export default function useMergedConfig(propConfig: any, templateConfig?: Target): readonly [boolean, Target]; diff --git a/packages/meta/lib/typography/hooks/useMergedConfig.js b/packages/meta/lib/typography/hooks/useMergedConfig.js new file mode 100644 index 0000000..c59f004 --- /dev/null +++ b/packages/meta/lib/typography/hooks/useMergedConfig.js @@ -0,0 +1,47 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/hooks/useMergedConfig.ts +var useMergedConfig_exports = {}; +__export(useMergedConfig_exports, { + default: () => useMergedConfig +}); +module.exports = __toCommonJS(useMergedConfig_exports); +var React = __toESM(require("react")); +function useMergedConfig(propConfig, templateConfig) { + return React.useMemo(() => { + const support = !!propConfig; + return [ + support, + { + ...templateConfig, + ...support && typeof propConfig === "object" ? propConfig : null + } + ]; + }, [propConfig]); +} diff --git a/packages/meta/lib/typography/hooks/useUpdatedEffect.d.ts b/packages/meta/lib/typography/hooks/useUpdatedEffect.d.ts new file mode 100644 index 0000000..5db26a3 --- /dev/null +++ b/packages/meta/lib/typography/hooks/useUpdatedEffect.d.ts @@ -0,0 +1,4 @@ +import * as React from 'react'; +/** Similar with `useEffect` but only trigger after mounted */ +declare const useUpdatedEffect: (callback: () => void, conditions?: React.DependencyList) => void; +export default useUpdatedEffect; diff --git a/packages/meta/lib/typography/hooks/useUpdatedEffect.js b/packages/meta/lib/typography/hooks/useUpdatedEffect.js new file mode 100644 index 0000000..70344b9 --- /dev/null +++ b/packages/meta/lib/typography/hooks/useUpdatedEffect.js @@ -0,0 +1,46 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/hooks/useUpdatedEffect.ts +var useUpdatedEffect_exports = {}; +__export(useUpdatedEffect_exports, { + default: () => useUpdatedEffect_default +}); +module.exports = __toCommonJS(useUpdatedEffect_exports); +var React = __toESM(require("react")); +var useUpdatedEffect = (callback, conditions) => { + const mountRef = React.useRef(false); + React.useEffect(() => { + if (mountRef.current) { + callback(); + } else { + mountRef.current = true; + } + }, conditions); +}; +var useUpdatedEffect_default = useUpdatedEffect; diff --git a/packages/meta/lib/typography/index.d.ts b/packages/meta/lib/typography/index.d.ts new file mode 100644 index 0000000..a526689 --- /dev/null +++ b/packages/meta/lib/typography/index.d.ts @@ -0,0 +1,13 @@ +import Link from './Link'; +import Paragraph from './Paragraph'; +import Text from './Text'; +import Title from './Title'; +import OriginTypography from './Typography'; +export type TypographyProps = typeof OriginTypography & { + Text: typeof Text; + Link: typeof Link; + Title: typeof Title; + Paragraph: typeof Paragraph; +}; +declare const Typography: TypographyProps; +export default Typography; diff --git a/packages/meta/lib/typography/index.js b/packages/meta/lib/typography/index.js new file mode 100644 index 0000000..f255ee6 --- /dev/null +++ b/packages/meta/lib/typography/index.js @@ -0,0 +1,45 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/index.ts +var typography_exports = {}; +__export(typography_exports, { + default: () => typography_default +}); +module.exports = __toCommonJS(typography_exports); +var import_Link = __toESM(require("./Link")); +var import_Paragraph = __toESM(require("./Paragraph")); +var import_Text = __toESM(require("./Text")); +var import_Title = __toESM(require("./Title")); +var import_Typography = __toESM(require("./Typography")); +var Typography = import_Typography.default; +Typography.Text = import_Text.default; +Typography.Link = import_Link.default; +Typography.Title = import_Title.default; +Typography.Paragraph = import_Paragraph.default; +var typography_default = Typography; diff --git a/packages/meta/lib/typography/style/index.d.ts b/packages/meta/lib/typography/style/index.d.ts new file mode 100644 index 0000000..247d08d --- /dev/null +++ b/packages/meta/lib/typography/style/index.d.ts @@ -0,0 +1,19 @@ +/// +import type { FullToken, GetDefaultToken } from '../../theme/internal'; +/** Component only token. Which will handle additional calculation of alias token */ +export interface ComponentToken { + /** + * @desc 标题上间距 + * @descEN Margin top of title + */ + titleMarginTop: number | string; + /** + * @desc 标题下间距 + * @descEN Margin bottom of title + */ + titleMarginBottom: number | string; +} +export type TypographyToken = FullToken<'Typography'>; +export declare const prepareComponentToken: GetDefaultToken<'Typography'>; +declare const _default: (prefixCls: string, rootCls?: string) => readonly [(node: import("react").ReactElement>) => import("react").ReactElement>, string, string | undefined]; +export default _default; diff --git a/packages/meta/lib/typography/style/index.js b/packages/meta/lib/typography/style/index.js new file mode 100644 index 0000000..c1f6684 --- /dev/null +++ b/packages/meta/lib/typography/style/index.js @@ -0,0 +1,127 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/style/index.ts +var style_exports = {}; +__export(style_exports, { + default: () => style_default, + prepareComponentToken: () => prepareComponentToken +}); +module.exports = __toCommonJS(style_exports); +var import_style = require("../../style"); +var import_internal = require("../../theme/internal"); +var import_mixins = require("./mixins"); +var genTypographyStyle = (token) => { + const { componentCls, titleMarginTop } = token; + return { + [componentCls]: { + color: token.colorText, + wordBreak: "break-word", + lineHeight: token.lineHeight, + [`&${componentCls}-secondary`]: { + color: token.colorTextDescription + }, + [`&${componentCls}-success`]: { + color: token.colorSuccess + }, + [`&${componentCls}-warning`]: { + color: token.colorWarning + }, + [`&${componentCls}-danger`]: { + color: token.colorError, + "a&:active, a&:focus": { + color: token.colorErrorActive + }, + "a&:hover": { + color: token.colorErrorHover + } + }, + [`&${componentCls}-disabled`]: { + color: token.colorTextDisabled, + cursor: "not-allowed", + userSelect: "none" + }, + [` + div&, + p + `]: { + marginBottom: "1em" + }, + ...(0, import_mixins.getTitleStyles)(token), + [` + & + h1${componentCls}, + & + h2${componentCls}, + & + h3${componentCls}, + & + h4${componentCls}, + & + h5${componentCls} + `]: { + marginTop: titleMarginTop + }, + [` + div, + ul, + li, + p, + h1, + h2, + h3, + h4, + h5`]: { + [` + + h1, + + h2, + + h3, + + h4, + + h5 + `]: { + marginTop: titleMarginTop + } + }, + ...(0, import_mixins.getResetStyles)(token), + ...(0, import_mixins.getLinkStyles)(token), + // Operation + [` + ${componentCls}-expand, + ${componentCls}-edit, + ${componentCls}-copy + `]: { + ...(0, import_style.operationUnit)(token), + marginInlineStart: token.marginXXS + }, + ...(0, import_mixins.getEditableStyles)(token), + ...(0, import_mixins.getCopyableStyles)(token), + ...(0, import_mixins.getEllipsisStyles)(), + "&-rtl": { + direction: "rtl" + } + } + }; +}; +var prepareComponentToken = () => ({ + titleMarginTop: "1.2em", + titleMarginBottom: "0.5em" +}); +var style_default = (0, import_internal.genStyleHooks)( + "Typography", + (token) => [genTypographyStyle(token)], + prepareComponentToken +); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + prepareComponentToken +}); diff --git a/packages/meta/lib/typography/style/mixins.d.ts b/packages/meta/lib/typography/style/mixins.d.ts new file mode 100644 index 0000000..3e8df66 --- /dev/null +++ b/packages/meta/lib/typography/style/mixins.d.ts @@ -0,0 +1,9 @@ +import { type CSSObject } from '@ant-design/cssinjs'; +import type { TypographyToken } from '.'; +import type { GenerateStyle } from '../../theme/internal'; +export declare const getTitleStyles: GenerateStyle; +export declare const getLinkStyles: GenerateStyle; +export declare const getResetStyles: GenerateStyle; +export declare const getEditableStyles: GenerateStyle; +export declare const getCopyableStyles: GenerateStyle; +export declare const getEllipsisStyles: () => CSSObject; diff --git a/packages/meta/lib/typography/style/mixins.js b/packages/meta/lib/typography/style/mixins.js new file mode 100644 index 0000000..4788eeb --- /dev/null +++ b/packages/meta/lib/typography/style/mixins.js @@ -0,0 +1,259 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/typography/style/mixins.ts +var mixins_exports = {}; +__export(mixins_exports, { + getCopyableStyles: () => getCopyableStyles, + getEditableStyles: () => getEditableStyles, + getEllipsisStyles: () => getEllipsisStyles, + getLinkStyles: () => getLinkStyles, + getResetStyles: () => getResetStyles, + getTitleStyles: () => getTitleStyles +}); +module.exports = __toCommonJS(mixins_exports); +var import_colors = require("@ant-design/colors"); +var import_cssinjs = require("@ant-design/cssinjs"); +var import_style = require("../../style"); +var getTitleStyle = (fontSize, lineHeight, color, token) => { + const { titleMarginBottom, fontWeightStrong } = token; + return { + marginBottom: titleMarginBottom, + color, + fontWeight: fontWeightStrong, + fontSize, + lineHeight + }; +}; +var getTitleStyles = (token) => { + const headings = [1, 2, 3, 4, 5]; + const styles = {}; + headings.forEach((headingLevel) => { + styles[` + h${headingLevel}&, + div&-h${headingLevel}, + div&-h${headingLevel} > textarea, + h${headingLevel} + `] = getTitleStyle( + token[`fontSizeHeading${headingLevel}`], + token[`lineHeightHeading${headingLevel}`], + token.colorTextHeading, + token + ); + }); + return styles; +}; +var getLinkStyles = (token) => { + const { componentCls } = token; + return { + "a&, a": { + ...(0, import_style.operationUnit)(token), + textDecoration: token.linkDecoration, + "&:active, &:hover": { + textDecoration: token.linkHoverDecoration + }, + [`&[disabled], &${componentCls}-disabled`]: { + color: token.colorTextDisabled, + cursor: "not-allowed", + "&:active, &:hover": { + color: token.colorTextDisabled + }, + "&:active": { + pointerEvents: "none" + } + } + } + }; +}; +var getResetStyles = (token) => ({ + code: { + margin: "0 0.2em", + paddingInline: "0.4em", + paddingBlock: "0.2em 0.1em", + fontSize: "85%", + fontFamily: token.fontFamilyCode, + background: "rgba(150, 150, 150, 0.1)", + border: "1px solid rgba(100, 100, 100, 0.2)", + borderRadius: 3 + }, + kbd: { + margin: "0 0.2em", + paddingInline: "0.4em", + paddingBlock: "0.15em 0.1em", + fontSize: "90%", + fontFamily: token.fontFamilyCode, + background: "rgba(150, 150, 150, 0.06)", + border: "1px solid rgba(100, 100, 100, 0.2)", + borderBottomWidth: 2, + borderRadius: 3 + }, + mark: { + padding: 0, + // FIXME hardcode in v4 + backgroundColor: import_colors.gold[2] + }, + "u, ins": { + textDecoration: "underline", + textDecorationSkipInk: "auto" + }, + "s, del": { + textDecoration: "line-through" + }, + strong: { + fontWeight: 600 + }, + // list + "ul, ol": { + marginInline: 0, + marginBlock: "0 1em", + padding: 0, + li: { + marginInline: "20px 0", + marginBlock: 0, + paddingInline: "4px 0", + paddingBlock: 0 + } + }, + ul: { + listStyleType: "circle", + ul: { + listStyleType: "disc" + } + }, + ol: { + listStyleType: "decimal" + }, + // pre & block + "pre, blockquote": { + margin: "1em 0" + }, + pre: { + padding: "0.4em 0.6em", + whiteSpace: "pre-wrap", + wordWrap: "break-word", + background: "rgba(150, 150, 150, 0.1)", + border: "1px solid rgba(100, 100, 100, 0.2)", + borderRadius: 3, + fontFamily: token.fontFamilyCode, + // Compatible for marked + code: { + display: "inline", + margin: 0, + padding: 0, + fontSize: "inherit", + fontFamily: "inherit", + background: "transparent", + border: 0 + } + }, + blockquote: { + paddingInline: "0.6em 0", + paddingBlock: 0, + borderInlineStart: "4px solid rgba(100, 100, 100, 0.2)", + opacity: 0.85 + } +}); +var getEditableStyles = (token) => { + const { componentCls, paddingSM } = token; + const inputShift = paddingSM; + return { + "&-edit-content": { + position: "relative", + "div&": { + insetInlineStart: token.calc(token.paddingSM).mul(-1).equal(), + marginTop: token.calc(inputShift).mul(-1).equal(), + marginBottom: `calc(1em - ${(0, import_cssinjs.unit)(inputShift)})` + }, + [`${componentCls}-edit-content-confirm`]: { + position: "absolute", + insetInlineEnd: token.calc(token.marginXS).add(2).equal(), + insetBlockEnd: token.marginXS, + color: token.colorTextDescription, + // default style + fontWeight: "normal", + fontSize: token.fontSize, + fontStyle: "normal", + pointerEvents: "none" + }, + textarea: { + margin: "0!important", + // Fix Editable Textarea flash in Firefox + MozTransition: "none", + height: "1em" + } + } + }; +}; +var getCopyableStyles = (token) => ({ + [`${token.componentCls}-copy-success`]: { + [` + &, + &:hover, + &:focus`]: { + color: token.colorSuccess + } + }, + [`${token.componentCls}-copy-icon-only`]: { + marginInlineStart: 0 + } +}); +var getEllipsisStyles = () => ({ + [` + a&-ellipsis, + span&-ellipsis + `]: { + display: "inline-block", + maxWidth: "100%" + }, + "&-single-line": { + whiteSpace: "nowrap" + }, + "&-ellipsis-single-line": { + overflow: "hidden", + textOverflow: "ellipsis", + // https://blog.csdn.net/iefreer/article/details/50421025 + "a&, span&": { + verticalAlign: "bottom" + }, + "> code": { + paddingBlock: 0, + maxWidth: "calc(100% - 1.2em)", + display: "inline-block", + overflow: "hidden", + textOverflow: "ellipsis", + verticalAlign: "bottom", + // https://github.com/ant-design/ant-design/issues/45953 + boxSizing: "content-box" + } + }, + "&-ellipsis-multiple-line": { + display: "-webkit-box", + overflow: "hidden", + WebkitLineClamp: 3, + WebkitBoxOrient: "vertical" + } +}); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getCopyableStyles, + getEditableStyles, + getEllipsisStyles, + getLinkStyles, + getResetStyles, + getTitleStyles +}); diff --git a/packages/meta/lib/upload/Dragger.d.ts b/packages/meta/lib/upload/Dragger.d.ts new file mode 100644 index 0000000..9d099e1 --- /dev/null +++ b/packages/meta/lib/upload/Dragger.d.ts @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { UploadRef } from './Upload'; +import type { UploadProps } from './interface'; +export type DraggerProps = UploadProps & { + height?: number; +}; +declare const Dragger: React.ForwardRefExoticComponent & { + height?: number | undefined; +} & React.RefAttributes>>; +export default Dragger; diff --git a/packages/meta/lib/upload/Dragger.js b/packages/meta/lib/upload/Dragger.js new file mode 100644 index 0000000..62cd981 --- /dev/null +++ b/packages/meta/lib/upload/Dragger.js @@ -0,0 +1,52 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/Dragger.tsx +var Dragger_exports = {}; +__export(Dragger_exports, { + default: () => Dragger_default +}); +module.exports = __toCommonJS(Dragger_exports); +var React = __toESM(require("react")); +var import_Upload = __toESM(require("./Upload")); +var Dragger = React.forwardRef( + ({ style, height, hasControlInside = false, ...restProps }, ref) => /* @__PURE__ */ React.createElement( + import_Upload.default, + { + ref, + hasControlInside, + ...restProps, + type: "drag", + style: { ...style, height } + } + ) +); +if (process.env.NODE_ENV !== "production") { + Dragger.displayName = "Dragger"; +} +var Dragger_default = Dragger; diff --git a/packages/meta/lib/upload/Upload.d.ts b/packages/meta/lib/upload/Upload.d.ts new file mode 100644 index 0000000..1b6eefa --- /dev/null +++ b/packages/meta/lib/upload/Upload.d.ts @@ -0,0 +1,18 @@ +import * as React from 'react'; +import type { UploadProps as RcUploadProps } from 'rc-upload'; +import RcUpload from 'rc-upload'; +import type { RcFile, UploadFile, UploadProps } from './interface'; +export declare const LIST_IGNORE: string; +export type { UploadProps }; +export interface UploadRef { + onBatchStart: RcUploadProps['onBatchStart']; + onSuccess: (response: any, file: RcFile, xhr: any) => void; + onProgress: (e: { + percent: number; + }, file: RcFile) => void; + onError: (error: Error, response: any, file: RcFile) => void; + fileList: UploadFile[]; + upload: RcUpload | null; +} +declare const Upload: React.ForwardRefExoticComponent & React.RefAttributes>>; +export default Upload; diff --git a/packages/meta/lib/upload/Upload.js b/packages/meta/lib/upload/Upload.js new file mode 100644 index 0000000..2acf89e --- /dev/null +++ b/packages/meta/lib/upload/Upload.js @@ -0,0 +1,393 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/Upload.tsx +var Upload_exports = {}; +__export(Upload_exports, { + LIST_IGNORE: () => LIST_IGNORE, + default: () => Upload_default +}); +module.exports = __toCommonJS(Upload_exports); +var React = __toESM(require("react")); +var import_react_dom = require("react-dom"); +var import_classnames = __toESM(require("classnames")); +var import_rc_upload = __toESM(require("rc-upload")); +var import_useMergedState = __toESM(require("rc-util/lib/hooks/useMergedState")); +var import_warning = require("../_util/warning"); +var import_config_provider = require("../config-provider"); +var import_DisabledContext = __toESM(require("../config-provider/DisabledContext")); +var import_locale = require("../locale"); +var import_en_US = __toESM(require("../locale/en_US")); +var import_style = __toESM(require("./style")); +var import_UploadList = __toESM(require("./UploadList")); +var import_utils = require("./utils"); +var LIST_IGNORE = `__LIST_IGNORE_${Date.now()}__`; +var InternalUpload = (props, ref) => { + const { + fileList, + defaultFileList, + onRemove, + showUploadList = true, + listType = "text", + onPreview, + onDownload, + onChange, + onDrop, + previewFile, + disabled: customDisabled, + locale: propLocale, + iconRender, + isImageUrl, + progress, + prefixCls: customizePrefixCls, + className, + type = "select", + children, + style, + itemRender, + maxCount, + data = {}, + multiple = false, + hasControlInside = true, + action = "", + accept = "", + supportServerRender = true, + rootClassName + } = props; + const disabled = React.useContext(import_DisabledContext.default); + const mergedDisabled = customDisabled ?? disabled; + const [mergedFileList, setMergedFileList] = (0, import_useMergedState.default)(defaultFileList || [], { + value: fileList, + postState: (list) => list ?? [] + }); + const [dragState, setDragState] = React.useState("drop"); + const upload = React.useRef(null); + if (process.env.NODE_ENV !== "production") { + const warning = (0, import_warning.devUseWarning)("Upload"); + warning( + "fileList" in props || !("value" in props), + "usage", + "`value` is not a valid prop, do you mean `fileList`?" + ); + warning.deprecated(!("transformFile" in props), "transformFile", "beforeUpload"); + } + React.useMemo(() => { + const timestamp = Date.now(); + (fileList || []).forEach((file, index) => { + if (!file.uid && !Object.isFrozen(file)) { + file.uid = `__AUTO__${timestamp}_${index}__`; + } + }); + }, [fileList]); + const onInternalChange = (file, changedFileList, event) => { + let cloneList = [...changedFileList]; + let exceedMaxCount = false; + if (maxCount === 1) { + cloneList = cloneList.slice(-1); + } else if (maxCount) { + exceedMaxCount = cloneList.length > maxCount; + cloneList = cloneList.slice(0, maxCount); + } + (0, import_react_dom.flushSync)(() => { + setMergedFileList(cloneList); + }); + const changeInfo = { + file, + fileList: cloneList + }; + if (event) { + changeInfo.event = event; + } + if (!exceedMaxCount || // We should ignore event if current file is exceed `maxCount` + cloneList.some((f) => f.uid === file.uid)) { + (0, import_react_dom.flushSync)(() => { + onChange == null ? void 0 : onChange(changeInfo); + }); + } + }; + const mergedBeforeUpload = async (file, fileListArgs) => { + const { beforeUpload, transformFile } = props; + let parsedFile = file; + if (beforeUpload) { + const result = await beforeUpload(file, fileListArgs); + if (result === false) { + return false; + } + delete file[LIST_IGNORE]; + if (result === LIST_IGNORE) { + Object.defineProperty(file, LIST_IGNORE, { + value: true, + configurable: true + }); + return false; + } + if (typeof result === "object" && result) { + parsedFile = result; + } + } + if (transformFile) { + parsedFile = await transformFile(parsedFile); + } + return parsedFile; + }; + const onBatchStart = (batchFileInfoList) => { + const filteredFileInfoList = batchFileInfoList.filter( + (info) => !info.file[LIST_IGNORE] + ); + if (!filteredFileInfoList.length) { + return; + } + const objectFileList = filteredFileInfoList.map((info) => (0, import_utils.file2Obj)(info.file)); + let newFileList = [...mergedFileList]; + objectFileList.forEach((fileObj) => { + newFileList = (0, import_utils.updateFileList)(fileObj, newFileList); + }); + objectFileList.forEach((fileObj, index) => { + let triggerFileObj = fileObj; + if (!filteredFileInfoList[index].parsedFile) { + const { originFileObj } = fileObj; + let clone; + try { + clone = new File([originFileObj], originFileObj.name, { + type: originFileObj.type + }); + } catch (e) { + clone = new Blob([originFileObj], { + type: originFileObj.type + }); + clone.name = originFileObj.name; + clone.lastModifiedDate = /* @__PURE__ */ new Date(); + clone.lastModified = (/* @__PURE__ */ new Date()).getTime(); + } + clone.uid = fileObj.uid; + triggerFileObj = clone; + } else { + fileObj.status = "uploading"; + } + onInternalChange(triggerFileObj, newFileList); + }); + }; + const onSuccess = (response, file, xhr) => { + try { + if (typeof response === "string") { + response = JSON.parse(response); + } + } catch (e) { + } + if (!(0, import_utils.getFileItem)(file, mergedFileList)) { + return; + } + const targetItem = (0, import_utils.file2Obj)(file); + targetItem.status = "done"; + targetItem.percent = 100; + targetItem.response = response; + targetItem.xhr = xhr; + const nextFileList = (0, import_utils.updateFileList)(targetItem, mergedFileList); + onInternalChange(targetItem, nextFileList); + }; + const onProgress = (e, file) => { + if (!(0, import_utils.getFileItem)(file, mergedFileList)) { + return; + } + const targetItem = (0, import_utils.file2Obj)(file); + targetItem.status = "uploading"; + targetItem.percent = e.percent; + const nextFileList = (0, import_utils.updateFileList)(targetItem, mergedFileList); + onInternalChange(targetItem, nextFileList, e); + }; + const onError = (error, response, file) => { + if (!(0, import_utils.getFileItem)(file, mergedFileList)) { + return; + } + const targetItem = (0, import_utils.file2Obj)(file); + targetItem.error = error; + targetItem.response = response; + targetItem.status = "error"; + const nextFileList = (0, import_utils.updateFileList)(targetItem, mergedFileList); + onInternalChange(targetItem, nextFileList); + }; + const handleRemove = (file) => { + let currentFile; + Promise.resolve(typeof onRemove === "function" ? onRemove(file) : onRemove).then((ret) => { + var _a; + if (ret === false) { + return; + } + const removedFileList = (0, import_utils.removeFileItem)(file, mergedFileList); + if (removedFileList) { + currentFile = { ...file, status: "removed" }; + mergedFileList == null ? void 0 : mergedFileList.forEach((item) => { + const matchKey = currentFile.uid !== void 0 ? "uid" : "name"; + if (item[matchKey] === currentFile[matchKey] && !Object.isFrozen(item)) { + item.status = "removed"; + } + }); + (_a = upload.current) == null ? void 0 : _a.abort(currentFile); + onInternalChange(currentFile, removedFileList); + } + }); + }; + const onFileDrop = (e) => { + setDragState(e.type); + if (e.type === "drop") { + onDrop == null ? void 0 : onDrop(e); + } + }; + React.useImperativeHandle(ref, () => ({ + onBatchStart, + onSuccess, + onProgress, + onError, + fileList: mergedFileList, + upload: upload.current + })); + const { getPrefixCls, direction, upload: ctxUpload } = React.useContext(import_config_provider.ConfigContext); + const prefixCls = getPrefixCls("upload", customizePrefixCls); + const rcUploadProps = { + onBatchStart, + onError, + onProgress, + onSuccess, + ...props, + data, + multiple, + action, + accept, + supportServerRender, + prefixCls, + disabled: mergedDisabled, + beforeUpload: mergedBeforeUpload, + onChange: void 0, + hasControlInside + }; + delete rcUploadProps.className; + delete rcUploadProps.style; + if (!children || mergedDisabled) { + delete rcUploadProps.id; + } + const wrapperCls = `${prefixCls}-wrapper`; + const [wrapCSSVar, hashId, cssVarCls] = (0, import_style.default)(prefixCls, wrapperCls); + const [contextLocale] = (0, import_locale.useLocale)("Upload", import_en_US.default.Upload); + const { + showRemoveIcon, + showPreviewIcon, + showDownloadIcon, + removeIcon, + previewIcon, + downloadIcon + } = typeof showUploadList === "boolean" ? {} : showUploadList; + const realShowRemoveIcon = typeof showRemoveIcon === "undefined" ? !mergedDisabled : !!showRemoveIcon; + const renderUploadList = (button, buttonVisible) => { + if (!showUploadList) { + return button; + } + return /* @__PURE__ */ React.createElement( + import_UploadList.default, + { + prefixCls, + listType, + items: mergedFileList, + previewFile, + onPreview, + onDownload, + onRemove: handleRemove, + showRemoveIcon: realShowRemoveIcon, + showPreviewIcon, + showDownloadIcon, + removeIcon, + previewIcon, + downloadIcon, + iconRender, + locale: { ...contextLocale, ...propLocale }, + isImageUrl, + progress, + appendAction: button, + appendActionVisible: buttonVisible, + itemRender, + disabled: mergedDisabled + } + ); + }; + const mergedCls = (0, import_classnames.default)( + wrapperCls, + className, + rootClassName, + hashId, + cssVarCls, + ctxUpload == null ? void 0 : ctxUpload.className, + { + [`${prefixCls}-rtl`]: direction === "rtl", + [`${prefixCls}-picture-card-wrapper`]: listType === "picture-card", + [`${prefixCls}-picture-circle-wrapper`]: listType === "picture-circle" + } + ); + const mergedStyle = { ...ctxUpload == null ? void 0 : ctxUpload.style, ...style }; + if (type === "drag") { + const dragCls = (0, import_classnames.default)(hashId, prefixCls, `${prefixCls}-drag`, { + [`${prefixCls}-drag-uploading`]: mergedFileList.some((file) => file.status === "uploading"), + [`${prefixCls}-drag-hover`]: dragState === "dragover", + [`${prefixCls}-disabled`]: mergedDisabled, + [`${prefixCls}-rtl`]: direction === "rtl" + }); + return wrapCSSVar( + /* @__PURE__ */ React.createElement("span", { className: mergedCls }, /* @__PURE__ */ React.createElement( + "div", + { + className: dragCls, + style: mergedStyle, + onDrop: onFileDrop, + onDragOver: onFileDrop, + onDragLeave: onFileDrop + }, + /* @__PURE__ */ React.createElement(import_rc_upload.default, { ...rcUploadProps, ref: upload, className: `${prefixCls}-btn` }, /* @__PURE__ */ React.createElement("div", { className: `${prefixCls}-drag-container` }, children)) + ), renderUploadList()) + ); + } + const uploadButtonCls = (0, import_classnames.default)(prefixCls, `${prefixCls}-select`, { + [`${prefixCls}-disabled`]: mergedDisabled + }); + const renderUploadButton = (uploadButtonStyle) => /* @__PURE__ */ React.createElement("div", { className: uploadButtonCls, style: uploadButtonStyle }, /* @__PURE__ */ React.createElement(import_rc_upload.default, { ...rcUploadProps, ref: upload })); + const uploadButton = renderUploadButton(children ? void 0 : { display: "none" }); + if (listType === "picture-card" || listType === "picture-circle") { + return wrapCSSVar( + /* @__PURE__ */ React.createElement("span", { className: mergedCls }, renderUploadList(uploadButton, !!children)) + ); + } + return wrapCSSVar( + /* @__PURE__ */ React.createElement("span", { className: mergedCls }, uploadButton, renderUploadList()) + ); +}; +var Upload = React.forwardRef(InternalUpload); +if (process.env.NODE_ENV !== "production") { + Upload.displayName = "Upload"; +} +var Upload_default = Upload; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + LIST_IGNORE +}); diff --git a/packages/meta/lib/upload/UploadList/ListItem.d.ts b/packages/meta/lib/upload/UploadList/ListItem.d.ts new file mode 100644 index 0000000..1a7d6eb --- /dev/null +++ b/packages/meta/lib/upload/UploadList/ListItem.d.ts @@ -0,0 +1,27 @@ +import * as React from 'react'; +import type { ItemRender, UploadFile, UploadListProgressProps, UploadListType, UploadLocale } from '../interface'; +export interface ListItemProps { + prefixCls: string; + className?: string; + style?: React.CSSProperties; + locale: UploadLocale; + file: UploadFile; + items: UploadFile[]; + listType?: UploadListType; + isImgUrl?: (file: UploadFile) => boolean; + showRemoveIcon?: boolean; + showDownloadIcon?: boolean; + showPreviewIcon?: boolean; + removeIcon?: React.ReactNode | ((file: UploadFile) => React.ReactNode); + downloadIcon?: React.ReactNode | ((file: UploadFile) => React.ReactNode); + previewIcon?: React.ReactNode | ((file: UploadFile) => React.ReactNode); + iconRender: (file: UploadFile) => React.ReactNode; + actionIconRender: (customIcon: React.ReactNode, callback: () => void, prefixCls: string, title?: string, acceptUploadDisabled?: boolean) => React.ReactNode; + itemRender?: ItemRender; + onPreview: (file: UploadFile, e: React.SyntheticEvent) => void; + onClose: (file: UploadFile) => void; + onDownload: (file: UploadFile) => void; + progress?: UploadListProgressProps; +} +declare const ListItem: React.ForwardRefExoticComponent>; +export default ListItem; diff --git a/packages/meta/lib/upload/UploadList/ListItem.js b/packages/meta/lib/upload/UploadList/ListItem.js new file mode 100644 index 0000000..5f4a644 --- /dev/null +++ b/packages/meta/lib/upload/UploadList/ListItem.js @@ -0,0 +1,233 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/UploadList/ListItem.tsx +var ListItem_exports = {}; +__export(ListItem_exports, { + default: () => ListItem_default +}); +module.exports = __toCommonJS(ListItem_exports); +var import_DeleteOutlined = __toESM(require("@ant-design/icons/DeleteOutlined")); +var import_DownloadOutlined = __toESM(require("@ant-design/icons/DownloadOutlined")); +var import_EyeOutlined = __toESM(require("@ant-design/icons/EyeOutlined")); +var import_classnames = __toESM(require("classnames")); +var import_rc_motion = __toESM(require("rc-motion")); +var React = __toESM(require("react")); +var import_config_provider = require("../../config-provider"); +var import_progress = __toESM(require("../../progress")); +var import_tooltip = __toESM(require("../../tooltip")); +var ListItem = React.forwardRef( + ({ + prefixCls, + className, + style, + locale, + listType, + file, + items, + progress: progressProps, + iconRender, + actionIconRender, + itemRender, + isImgUrl, + showPreviewIcon, + showRemoveIcon, + showDownloadIcon, + previewIcon: customPreviewIcon, + removeIcon: customRemoveIcon, + downloadIcon: customDownloadIcon, + onPreview, + onDownload, + onClose + }, ref) => { + var _a, _b; + const { status } = file; + const [mergedStatus, setMergedStatus] = React.useState(status); + React.useEffect(() => { + if (status !== "removed") { + setMergedStatus(status); + } + }, [status]); + const [showProgress, setShowProgress] = React.useState(false); + React.useEffect(() => { + const timer = setTimeout(() => { + setShowProgress(true); + }, 300); + return () => { + clearTimeout(timer); + }; + }, []); + const iconNode = iconRender(file); + let icon = /* @__PURE__ */ React.createElement("div", { className: `${prefixCls}-icon` }, iconNode); + if (listType === "picture" || listType === "picture-card" || listType === "picture-circle") { + if (mergedStatus === "uploading" || !file.thumbUrl && !file.url) { + const uploadingClassName = (0, import_classnames.default)(`${prefixCls}-list-item-thumbnail`, { + [`${prefixCls}-list-item-file`]: mergedStatus !== "uploading" + }); + icon = /* @__PURE__ */ React.createElement("div", { className: uploadingClassName }, iconNode); + } else { + const thumbnail = (isImgUrl == null ? void 0 : isImgUrl(file)) ? /* @__PURE__ */ React.createElement( + "img", + { + src: file.thumbUrl || file.url, + alt: file.name, + className: `${prefixCls}-list-item-image`, + crossOrigin: file.crossOrigin + } + ) : iconNode; + const aClassName = (0, import_classnames.default)(`${prefixCls}-list-item-thumbnail`, { + [`${prefixCls}-list-item-file`]: isImgUrl && !isImgUrl(file) + }); + icon = /* @__PURE__ */ React.createElement( + "a", + { + className: aClassName, + onClick: (e) => onPreview(file, e), + href: file.url || file.thumbUrl, + target: "_blank", + rel: "noopener noreferrer" + }, + thumbnail + ); + } + } + const listItemClassName = (0, import_classnames.default)( + `${prefixCls}-list-item`, + `${prefixCls}-list-item-${mergedStatus}` + ); + const linkProps = typeof file.linkProps === "string" ? JSON.parse(file.linkProps) : file.linkProps; + const removeIcon = showRemoveIcon ? actionIconRender( + (typeof customRemoveIcon === "function" ? customRemoveIcon(file) : customRemoveIcon) || /* @__PURE__ */ React.createElement(import_DeleteOutlined.default, null), + () => onClose(file), + prefixCls, + locale.removeFile, + // acceptUploadDisabled is true, only remove icon will follow Upload disabled prop + // https://github.com/ant-design/ant-design/issues/46171 + true + ) : null; + const downloadIcon = showDownloadIcon && mergedStatus === "done" ? actionIconRender( + (typeof customDownloadIcon === "function" ? customDownloadIcon(file) : customDownloadIcon) || /* @__PURE__ */ React.createElement(import_DownloadOutlined.default, null), + () => onDownload(file), + prefixCls, + locale.downloadFile + ) : null; + const downloadOrDelete = listType !== "picture-card" && listType !== "picture-circle" && /* @__PURE__ */ React.createElement( + "span", + { + key: "download-delete", + className: (0, import_classnames.default)(`${prefixCls}-list-item-actions`, { + picture: listType === "picture" + }) + }, + downloadIcon, + removeIcon + ); + const listItemNameClass = (0, import_classnames.default)(`${prefixCls}-list-item-name`); + const fileName = file.url ? [ + /* @__PURE__ */ React.createElement( + "a", + { + key: "view", + target: "_blank", + rel: "noopener noreferrer", + className: listItemNameClass, + title: file.name, + ...linkProps, + href: file.url, + onClick: (e) => onPreview(file, e) + }, + file.name + ), + downloadOrDelete + ] : [ + /* @__PURE__ */ React.createElement( + "span", + { + key: "view", + className: listItemNameClass, + onClick: (e) => onPreview(file, e), + title: file.name + }, + file.name + ), + downloadOrDelete + ]; + const previewIcon = showPreviewIcon && (file.url || file.thumbUrl) ? /* @__PURE__ */ React.createElement( + "a", + { + href: file.url || file.thumbUrl, + target: "_blank", + rel: "noopener noreferrer", + onClick: (e) => onPreview(file, e), + title: locale.previewFile + }, + typeof customPreviewIcon === "function" ? customPreviewIcon(file) : customPreviewIcon || /* @__PURE__ */ React.createElement(import_EyeOutlined.default, null) + ) : null; + const pictureCardActions = (listType === "picture-card" || listType === "picture-circle") && mergedStatus !== "uploading" && /* @__PURE__ */ React.createElement("span", { className: `${prefixCls}-list-item-actions` }, previewIcon, mergedStatus === "done" && downloadIcon, removeIcon); + const { getPrefixCls } = React.useContext(import_config_provider.ConfigContext); + const rootPrefixCls = getPrefixCls(); + const dom = /* @__PURE__ */ React.createElement("div", { className: listItemClassName }, icon, fileName, pictureCardActions, showProgress && /* @__PURE__ */ React.createElement( + import_rc_motion.default, + { + motionName: `${rootPrefixCls}-fade`, + visible: mergedStatus === "uploading", + motionDeadline: 2e3 + }, + ({ className: motionClassName }) => { + const loadingProgress = "percent" in file ? /* @__PURE__ */ React.createElement( + import_progress.default, + { + ...progressProps, + type: "line", + percent: file.percent, + "aria-label": file["aria-label"], + "aria-labelledby": file["aria-labelledby"] + } + ) : null; + return /* @__PURE__ */ React.createElement("div", { className: (0, import_classnames.default)(`${prefixCls}-list-item-progress`, motionClassName) }, loadingProgress); + } + )); + const message = file.response && typeof file.response === "string" ? file.response : ((_a = file.error) == null ? void 0 : _a.statusText) || ((_b = file.error) == null ? void 0 : _b.message) || locale.uploadError; + const item = mergedStatus === "error" ? /* @__PURE__ */ React.createElement(import_tooltip.default, { title: message, getPopupContainer: (node) => node.parentNode }, dom) : dom; + return /* @__PURE__ */ React.createElement( + "div", + { + className: (0, import_classnames.default)(`${prefixCls}-list-item-container`, className), + style, + ref + }, + itemRender ? itemRender(item, file, items, { + download: onDownload.bind(null, file), + // @ts-ignore + preview: onPreview.bind(null, file), + remove: onClose.bind(null, file) + }) : item + ); + } +); +var ListItem_default = ListItem; diff --git a/packages/meta/lib/upload/UploadList/index.d.ts b/packages/meta/lib/upload/UploadList/index.d.ts new file mode 100644 index 0000000..3d9a101 --- /dev/null +++ b/packages/meta/lib/upload/UploadList/index.d.ts @@ -0,0 +1,8 @@ +import * as React from 'react'; +import type { UploadFile, UploadListProps } from '../interface'; +interface UploadListRef { + handlePreview: (file: UploadFile, e?: React.SyntheticEvent) => void; + handleDownload: (file: UploadFile) => void; +} +declare const UploadList: React.ForwardRefExoticComponent & React.RefAttributes>; +export default UploadList; diff --git a/packages/meta/lib/upload/UploadList/index.js b/packages/meta/lib/upload/UploadList/index.js new file mode 100644 index 0000000..b392e69 --- /dev/null +++ b/packages/meta/lib/upload/UploadList/index.js @@ -0,0 +1,223 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/UploadList/index.tsx +var UploadList_exports = {}; +__export(UploadList_exports, { + default: () => UploadList_default +}); +module.exports = __toCommonJS(UploadList_exports); +var React = __toESM(require("react")); +var import_FileTwoTone = __toESM(require("@ant-design/icons/FileTwoTone")); +var import_LoadingOutlined = __toESM(require("@ant-design/icons/LoadingOutlined")); +var import_PaperClipOutlined = __toESM(require("@ant-design/icons/PaperClipOutlined")); +var import_PictureTwoTone = __toESM(require("@ant-design/icons/PictureTwoTone")); +var import_classnames = __toESM(require("classnames")); +var import_rc_motion = __toESM(require("rc-motion")); +var import_useForceUpdate = __toESM(require("../../_util/hooks/useForceUpdate")); +var import_motion = __toESM(require("../../_util/motion")); +var import_reactNode = require("../../_util/reactNode"); +var import_button = __toESM(require("../../button")); +var import_config_provider = require("../../config-provider"); +var import_utils = require("../utils"); +var import_ListItem = __toESM(require("./ListItem")); +var InternalUploadList = (props, ref) => { + const { + listType = "text", + previewFile = import_utils.previewImage, + onPreview, + onDownload, + onRemove, + locale, + iconRender, + isImageUrl: isImgUrl = import_utils.isImageUrl, + prefixCls: customizePrefixCls, + items = [], + showPreviewIcon = true, + showRemoveIcon = true, + showDownloadIcon = false, + removeIcon, + previewIcon, + downloadIcon, + progress = { size: [-1, 2], showInfo: false }, + appendAction, + appendActionVisible = true, + itemRender, + disabled + } = props; + const forceUpdate = (0, import_useForceUpdate.default)(); + const [motionAppear, setMotionAppear] = React.useState(false); + React.useEffect(() => { + if (listType !== "picture" && listType !== "picture-card" && listType !== "picture-circle") { + return; + } + (items || []).forEach((file) => { + if (typeof document === "undefined" || typeof window === "undefined" || !window.FileReader || !window.File || !(file.originFileObj instanceof File || file.originFileObj instanceof Blob) || file.thumbUrl !== void 0) { + return; + } + file.thumbUrl = ""; + if (previewFile) { + previewFile(file.originFileObj).then((previewDataUrl) => { + file.thumbUrl = previewDataUrl || ""; + forceUpdate(); + }); + } + }); + }, [listType, items, previewFile]); + React.useEffect(() => { + setMotionAppear(true); + }, []); + const onInternalPreview = (file, e) => { + if (!onPreview) { + return; + } + e == null ? void 0 : e.preventDefault(); + return onPreview(file); + }; + const onInternalDownload = (file) => { + if (typeof onDownload === "function") { + onDownload(file); + } else if (file.url) { + window.open(file.url); + } + }; + const onInternalClose = (file) => { + onRemove == null ? void 0 : onRemove(file); + }; + const internalIconRender = (file) => { + if (iconRender) { + return iconRender(file, listType); + } + const isLoading = file.status === "uploading"; + const fileIcon = isImgUrl && isImgUrl(file) ? /* @__PURE__ */ React.createElement(import_PictureTwoTone.default, null) : /* @__PURE__ */ React.createElement(import_FileTwoTone.default, null); + let icon = isLoading ? /* @__PURE__ */ React.createElement(import_LoadingOutlined.default, null) : /* @__PURE__ */ React.createElement(import_PaperClipOutlined.default, null); + if (listType === "picture") { + icon = isLoading ? /* @__PURE__ */ React.createElement(import_LoadingOutlined.default, null) : fileIcon; + } else if (listType === "picture-card" || listType === "picture-circle") { + icon = isLoading ? locale.uploading : fileIcon; + } + return icon; + }; + const actionIconRender = (customIcon, callback, prefixCls2, title, acceptUploadDisabled) => { + const btnProps = { + type: "text", + size: "small", + title, + onClick: (e) => { + callback(); + if ((0, import_reactNode.isValidElement)(customIcon) && customIcon.props.onClick) { + customIcon.props.onClick(e); + } + }, + className: `${prefixCls2}-list-item-action` + }; + if (acceptUploadDisabled) { + btnProps.disabled = disabled; + } + if ((0, import_reactNode.isValidElement)(customIcon)) { + const btnIcon = (0, import_reactNode.cloneElement)(customIcon, { + ...customIcon.props, + onClick: () => { + } + }); + return /* @__PURE__ */ React.createElement(import_button.default, { ...btnProps, icon: btnIcon }); + } + return /* @__PURE__ */ React.createElement(import_button.default, { ...btnProps }, /* @__PURE__ */ React.createElement("span", null, customIcon)); + }; + React.useImperativeHandle(ref, () => ({ + handlePreview: onInternalPreview, + handleDownload: onInternalDownload + })); + const { getPrefixCls } = React.useContext(import_config_provider.ConfigContext); + const prefixCls = getPrefixCls("upload", customizePrefixCls); + const rootPrefixCls = getPrefixCls(); + const listClassNames = (0, import_classnames.default)(`${prefixCls}-list`, `${prefixCls}-list-${listType}`); + const motionKeyList = [...items.map((file) => ({ key: file.uid, file }))]; + const animationDirection = listType === "picture-card" || listType === "picture-circle" ? "animate-inline" : "animate"; + let motionConfig = { + motionDeadline: 2e3, + motionName: `${prefixCls}-${animationDirection}`, + keys: motionKeyList, + motionAppear + }; + const listItemMotion = React.useMemo(() => { + const motion = { + ...(0, import_motion.default)(rootPrefixCls) + }; + delete motion.onAppearEnd; + delete motion.onEnterEnd; + delete motion.onLeaveEnd; + return motion; + }, [rootPrefixCls]); + if (listType !== "picture-card" && listType !== "picture-circle") { + motionConfig = { + ...listItemMotion, + ...motionConfig + }; + } + return /* @__PURE__ */ React.createElement("div", { className: listClassNames }, /* @__PURE__ */ React.createElement(import_rc_motion.CSSMotionList, { ...motionConfig, component: false }, ({ key, file, className: motionClassName, style: motionStyle }) => /* @__PURE__ */ React.createElement( + import_ListItem.default, + { + key, + locale, + prefixCls, + className: motionClassName, + style: motionStyle, + file, + items, + progress, + listType, + isImgUrl, + showPreviewIcon, + showRemoveIcon, + showDownloadIcon, + removeIcon, + previewIcon, + downloadIcon, + iconRender: internalIconRender, + actionIconRender, + itemRender, + onPreview: onInternalPreview, + onDownload: onInternalDownload, + onClose: onInternalClose + } + )), appendAction && /* @__PURE__ */ React.createElement(import_rc_motion.default, { ...motionConfig, visible: appendActionVisible, forceRender: true }, ({ className: motionClassName, style: motionStyle }) => (0, import_reactNode.cloneElement)(appendAction, (oriProps) => ({ + className: (0, import_classnames.default)(oriProps.className, motionClassName), + style: { + ...motionStyle, + // prevent the element has hover css pseudo-class that may cause animation to end prematurely. + pointerEvents: motionClassName ? "none" : void 0, + ...oriProps.style + } + })))); +}; +var UploadList = React.forwardRef(InternalUploadList); +if (process.env.NODE_ENV !== "production") { + UploadList.displayName = "UploadList"; +} +var UploadList_default = UploadList; diff --git a/packages/meta/lib/upload/demo/utils/request.d.ts b/packages/meta/lib/upload/demo/utils/request.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/meta/lib/upload/demo/utils/request.js b/packages/meta/lib/upload/demo/utils/request.js new file mode 100644 index 0000000..e69de29 diff --git a/packages/meta/lib/upload/index.d.ts b/packages/meta/lib/upload/index.d.ts new file mode 100644 index 0000000..ef91453 --- /dev/null +++ b/packages/meta/lib/upload/index.d.ts @@ -0,0 +1,14 @@ +/// +import Dragger from './Dragger'; +import type { UploadProps } from './Upload'; +import InternalUpload from './Upload'; +export type { DraggerProps } from './Dragger'; +export type { RcFile, UploadChangeParam, UploadFile, UploadListProps, UploadProps, } from './interface'; +type InternalUploadType = typeof InternalUpload; +type CompoundedComponent = InternalUploadType & { + (props: React.PropsWithChildren> & React.RefAttributes): React.ReactElement; + Dragger: typeof Dragger; + LIST_IGNORE: string; +}; +declare const Upload: CompoundedComponent; +export default Upload; diff --git a/packages/meta/lib/upload/index.js b/packages/meta/lib/upload/index.js new file mode 100644 index 0000000..0149330 --- /dev/null +++ b/packages/meta/lib/upload/index.js @@ -0,0 +1,40 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/index.ts +var upload_exports = {}; +__export(upload_exports, { + default: () => upload_default +}); +module.exports = __toCommonJS(upload_exports); +var import_Dragger = __toESM(require("./Dragger")); +var import_Upload = __toESM(require("./Upload")); +var Upload = import_Upload.default; +Upload.Dragger = import_Dragger.default; +Upload.LIST_IGNORE = import_Upload.LIST_IGNORE; +var upload_default = Upload; diff --git a/packages/meta/lib/upload/interface.d.ts b/packages/meta/lib/upload/interface.d.ts new file mode 100644 index 0000000..b6032f3 --- /dev/null +++ b/packages/meta/lib/upload/interface.d.ts @@ -0,0 +1,136 @@ +import type * as React from 'react'; +import type { RcFile as OriRcFile, UploadRequestOption as RcCustomRequestOptions, UploadProps as RcUploadProps } from 'rc-upload/lib/interface'; +import type { ProgressAriaProps, ProgressProps } from '../progress'; +export interface RcFile extends OriRcFile { + readonly lastModifiedDate: Date; +} +export type UploadFileStatus = 'error' | 'done' | 'uploading' | 'removed'; +export interface HttpRequestHeader { + [key: string]: string; +} +export interface UploadFile extends ProgressAriaProps { + uid: string; + size?: number; + name: string; + fileName?: string; + lastModified?: number; + lastModifiedDate?: Date; + url?: string; + status?: UploadFileStatus; + percent?: number; + thumbUrl?: string; + crossOrigin?: React.ImgHTMLAttributes['crossOrigin']; + originFileObj?: RcFile; + response?: T; + error?: any; + linkProps?: any; + type?: string; + xhr?: T; + preview?: string; +} +export interface InternalUploadFile extends UploadFile { + originFileObj: RcFile; +} +export interface UploadChangeParam { + file: T; + fileList: T[]; + event?: { + percent: number; + }; +} +export interface ShowUploadListInterface { + showRemoveIcon?: boolean; + showPreviewIcon?: boolean; + showDownloadIcon?: boolean; + removeIcon?: React.ReactNode | ((file: UploadFile) => React.ReactNode); + downloadIcon?: React.ReactNode | ((file: UploadFile) => React.ReactNode); + previewIcon?: React.ReactNode | ((file: UploadFile) => React.ReactNode); +} +export interface UploadLocale { + uploading?: string; + removeFile?: string; + downloadFile?: string; + uploadError?: string; + previewFile?: string; +} +export type UploadType = 'drag' | 'select'; +export type UploadListType = 'text' | 'picture' | 'picture-card' | 'picture-circle'; +export type UploadListProgressProps = Omit; +export type ItemRender = (originNode: React.ReactElement, file: UploadFile, fileList: Array>, actions: { + download: () => void; + preview: () => void; + remove: () => void; +}) => React.ReactNode; +type PreviewFileHandler = (file: File | Blob) => PromiseLike; +type TransformFileHandler = (file: RcFile) => string | Blob | File | PromiseLike; +type BeforeUploadValueType = void | boolean | string | Blob | File; +export interface UploadProps extends Pick { + type?: UploadType; + name?: string; + defaultFileList?: Array>; + fileList?: Array>; + action?: string | ((file: RcFile) => string) | ((file: RcFile) => PromiseLike); + directory?: boolean; + data?: Record | ((file: UploadFile) => Record | Promise>); + method?: 'POST' | 'PUT' | 'PATCH' | 'post' | 'put' | 'patch'; + headers?: HttpRequestHeader; + showUploadList?: boolean | ShowUploadListInterface; + multiple?: boolean; + accept?: string; + beforeUpload?: (file: RcFile, FileList: RcFile[]) => BeforeUploadValueType | Promise; + onChange?: (info: UploadChangeParam>) => void; + onDrop?: (event: React.DragEvent) => void; + listType?: UploadListType; + className?: string; + rootClassName?: string; + onPreview?: (file: UploadFile) => void; + onDownload?: (file: UploadFile) => void; + onRemove?: (file: UploadFile) => void | boolean | Promise; + supportServerRender?: boolean; + style?: React.CSSProperties; + disabled?: boolean; + prefixCls?: string; + customRequest?: (options: RcCustomRequestOptions) => void; + withCredentials?: boolean; + openFileDialogOnClick?: boolean; + locale?: UploadLocale; + id?: string; + previewFile?: PreviewFileHandler; + /** @deprecated Please use `beforeUpload` directly */ + transformFile?: TransformFileHandler; + iconRender?: (file: UploadFile, listType?: UploadListType) => React.ReactNode; + isImageUrl?: (file: UploadFile) => boolean; + progress?: UploadListProgressProps; + itemRender?: ItemRender; + /** Config max count of `fileList`. Will replace current one when `maxCount` is 1 */ + maxCount?: number; + children?: React.ReactNode; +} +export interface UploadState { + fileList: UploadFile[]; + dragState: string; +} +export interface UploadListProps { + listType?: UploadListType; + onPreview?: (file: UploadFile) => void; + onDownload?: (file: UploadFile) => void; + onRemove?: (file: UploadFile) => void | boolean; + items?: Array>; + progress?: UploadListProgressProps; + prefixCls?: string; + className?: string; + showRemoveIcon?: boolean; + showDownloadIcon?: boolean; + showPreviewIcon?: boolean; + removeIcon?: React.ReactNode | ((file: UploadFile) => React.ReactNode); + downloadIcon?: React.ReactNode | ((file: UploadFile) => React.ReactNode); + previewIcon?: React.ReactNode | ((file: UploadFile) => React.ReactNode); + locale: UploadLocale; + previewFile?: PreviewFileHandler; + iconRender?: (file: UploadFile, listType?: UploadListType) => React.ReactNode; + isImageUrl?: (file: UploadFile) => boolean; + appendAction?: React.ReactNode; + appendActionVisible?: boolean; + itemRender?: ItemRender; +} +export {}; diff --git a/packages/meta/lib/upload/interface.js b/packages/meta/lib/upload/interface.js new file mode 100644 index 0000000..6b4e8ab --- /dev/null +++ b/packages/meta/lib/upload/interface.js @@ -0,0 +1,17 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/interface.ts +var interface_exports = {}; +module.exports = __toCommonJS(interface_exports); diff --git a/packages/meta/lib/upload/style/dragger.d.ts b/packages/meta/lib/upload/style/dragger.d.ts new file mode 100644 index 0000000..f955226 --- /dev/null +++ b/packages/meta/lib/upload/style/dragger.d.ts @@ -0,0 +1,4 @@ +import type { UploadToken } from '.'; +import type { GenerateStyle } from '../../theme/internal'; +declare const genDraggerStyle: GenerateStyle; +export default genDraggerStyle; diff --git a/packages/meta/lib/upload/style/dragger.js b/packages/meta/lib/upload/style/dragger.js new file mode 100644 index 0000000..2a38d21 --- /dev/null +++ b/packages/meta/lib/upload/style/dragger.js @@ -0,0 +1,92 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/style/dragger.ts +var dragger_exports = {}; +__export(dragger_exports, { + default: () => dragger_default +}); +module.exports = __toCommonJS(dragger_exports); +var import_cssinjs = require("@ant-design/cssinjs"); +var genDraggerStyle = (token) => { + const { componentCls, iconCls } = token; + return { + [`${componentCls}-wrapper`]: { + [`${componentCls}-drag`]: { + position: "relative", + width: "100%", + height: "100%", + textAlign: "center", + background: token.colorFillAlter, + border: `${(0, import_cssinjs.unit)(token.lineWidth)} dashed ${token.colorBorder}`, + borderRadius: token.borderRadiusLG, + cursor: "pointer", + transition: `border-color ${token.motionDurationSlow}`, + [componentCls]: { + padding: token.padding + }, + [`${componentCls}-btn`]: { + display: "table", + width: "100%", + height: "100%", + outline: "none", + borderRadius: token.borderRadiusLG, + "&:focus-visible": { + outline: `${(0, import_cssinjs.unit)(token.lineWidthFocus)} solid ${token.colorPrimaryBorder}` + } + }, + [`${componentCls}-drag-container`]: { + display: "table-cell", + verticalAlign: "middle" + }, + [` + &:not(${componentCls}-disabled):hover, + &-hover:not(${componentCls}-disabled) + `]: { + borderColor: token.colorPrimaryHover + }, + [`p${componentCls}-drag-icon`]: { + marginBottom: token.margin, + [iconCls]: { + color: token.colorPrimary, + fontSize: token.uploadThumbnailSize + } + }, + [`p${componentCls}-text`]: { + margin: `0 0 ${(0, import_cssinjs.unit)(token.marginXXS)}`, + color: token.colorTextHeading, + fontSize: token.fontSizeLG + }, + [`p${componentCls}-hint`]: { + color: token.colorTextDescription, + fontSize: token.fontSize + }, + // ===================== Disabled ===================== + [`&${componentCls}-disabled`]: { + [`p${componentCls}-drag-icon ${iconCls}, + p${componentCls}-text, + p${componentCls}-hint + `]: { + color: token.colorTextDisabled + } + } + } + } + }; +}; +var dragger_default = genDraggerStyle; diff --git a/packages/meta/lib/upload/style/index.d.ts b/packages/meta/lib/upload/style/index.d.ts new file mode 100644 index 0000000..54a1088 --- /dev/null +++ b/packages/meta/lib/upload/style/index.d.ts @@ -0,0 +1,17 @@ +/// +import type { FullToken, GetDefaultToken } from '../../theme/internal'; +export interface ComponentToken { + /** + * @desc 操作按扭颜色 + * @descEN Action button color + */ + actionsColor: string; +} +export interface UploadToken extends FullToken<'Upload'> { + uploadThumbnailSize: number | string; + uploadProgressOffset: number | string; + uploadPicCardSize: number | string; +} +export declare const prepareComponentToken: GetDefaultToken<'Upload'>; +declare const _default: (prefixCls: string, rootCls?: string) => readonly [(node: import("react").ReactElement>) => import("react").ReactElement>, string, string | undefined]; +export default _default; diff --git a/packages/meta/lib/upload/style/index.js b/packages/meta/lib/upload/style/index.js new file mode 100644 index 0000000..4ad5e7f --- /dev/null +++ b/packages/meta/lib/upload/style/index.js @@ -0,0 +1,93 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/style/index.ts +var style_exports = {}; +__export(style_exports, { + default: () => style_default, + prepareComponentToken: () => prepareComponentToken +}); +module.exports = __toCommonJS(style_exports); +var import_style = require("../../style"); +var import_motion = require("../../style/motion"); +var import_internal = require("../../theme/internal"); +var import_dragger = __toESM(require("./dragger")); +var import_list = __toESM(require("./list")); +var import_motion2 = __toESM(require("./motion")); +var import_picture = require("./picture"); +var import_rtl = __toESM(require("./rtl")); +var genBaseStyle = (token) => { + const { componentCls, colorTextDisabled } = token; + return { + [`${componentCls}-wrapper`]: { + ...(0, import_style.resetComponent)(token), + [componentCls]: { + outline: 0, + "input[type='file']": { + cursor: "pointer" + } + }, + [`${componentCls}-select`]: { + display: "inline-block" + }, + [`${componentCls}-disabled`]: { + color: colorTextDisabled, + cursor: "not-allowed" + } + } + }; +}; +var prepareComponentToken = (token) => ({ + actionsColor: token.colorTextDescription +}); +var style_default = (0, import_internal.genStyleHooks)( + "Upload", + (token) => { + const { fontSizeHeading3, fontHeight, lineWidth, controlHeightLG, calc } = token; + const uploadToken = (0, import_internal.mergeToken)(token, { + uploadThumbnailSize: calc(fontSizeHeading3).mul(2).equal(), + uploadProgressOffset: calc(calc(fontHeight).div(2)).add(lineWidth).equal(), + uploadPicCardSize: calc(controlHeightLG).mul(2.55).equal() + }); + return [ + genBaseStyle(uploadToken), + (0, import_dragger.default)(uploadToken), + (0, import_picture.genPictureStyle)(uploadToken), + (0, import_picture.genPictureCardStyle)(uploadToken), + (0, import_list.default)(uploadToken), + (0, import_motion2.default)(uploadToken), + (0, import_rtl.default)(uploadToken), + (0, import_motion.genCollapseMotion)(uploadToken) + ]; + }, + prepareComponentToken +); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + prepareComponentToken +}); diff --git a/packages/meta/lib/upload/style/list.d.ts b/packages/meta/lib/upload/style/list.d.ts new file mode 100644 index 0000000..002c486 --- /dev/null +++ b/packages/meta/lib/upload/style/list.d.ts @@ -0,0 +1,4 @@ +import type { UploadToken } from '.'; +import type { GenerateStyle } from '../../theme/internal'; +declare const genListStyle: GenerateStyle; +export default genListStyle; diff --git a/packages/meta/lib/upload/style/list.js b/packages/meta/lib/upload/style/list.js new file mode 100644 index 0000000..5255d6a --- /dev/null +++ b/packages/meta/lib/upload/style/list.js @@ -0,0 +1,124 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/style/list.ts +var list_exports = {}; +__export(list_exports, { + default: () => list_default +}); +module.exports = __toCommonJS(list_exports); +var import_cssinjs = require("@ant-design/cssinjs"); +var import_style = require("../../style"); +var genListStyle = (token) => { + const { componentCls, antCls, iconCls, fontSize, lineHeight, calc } = token; + const itemCls = `${componentCls}-list-item`; + const actionsCls = `${itemCls}-actions`; + const actionCls = `${itemCls}-action`; + const listItemHeightSM = token.fontHeightSM; + return { + [`${componentCls}-wrapper`]: { + [`${componentCls}-list`]: { + ...(0, import_style.clearFix)(), + lineHeight: token.lineHeight, + [itemCls]: { + position: "relative", + height: calc(token.lineHeight).mul(fontSize).equal(), + marginTop: token.marginXS, + fontSize, + display: "flex", + alignItems: "center", + transition: `background-color ${token.motionDurationSlow}`, + "&:hover": { + backgroundColor: token.controlItemBgHover + }, + [`${itemCls}-name`]: { + ...import_style.textEllipsis, + padding: `0 ${(0, import_cssinjs.unit)(token.paddingXS)}`, + lineHeight, + flex: "auto", + transition: `all ${token.motionDurationSlow}` + }, + [actionsCls]: { + [actionCls]: { + opacity: 0 + }, + [iconCls]: { + color: token.actionsColor, + transition: `all ${token.motionDurationSlow}` + }, + [` + ${actionCls}:focus-visible, + &.picture ${actionCls} + `]: { + opacity: 1 + }, + [`${actionCls}${antCls}-btn`]: { + height: listItemHeightSM, + border: 0, + lineHeight: 1 + } + }, + [`${componentCls}-icon ${iconCls}`]: { + color: token.colorTextDescription, + fontSize + }, + [`${itemCls}-progress`]: { + position: "absolute", + bottom: token.calc(token.uploadProgressOffset).mul(-1).equal(), + width: "100%", + paddingInlineStart: calc(fontSize).add(token.paddingXS).equal(), + fontSize, + lineHeight: 0, + pointerEvents: "none", + "> div": { + margin: 0 + } + } + }, + [`${itemCls}:hover ${actionCls}`]: { + opacity: 1 + }, + [`${itemCls}-error`]: { + color: token.colorError, + [`${itemCls}-name, ${componentCls}-icon ${iconCls}`]: { + color: token.colorError + }, + [actionsCls]: { + [`${iconCls}, ${iconCls}:hover`]: { + color: token.colorError + }, + [actionCls]: { + opacity: 1 + } + } + }, + [`${componentCls}-list-item-container`]: { + transition: `opacity ${token.motionDurationSlow}, height ${token.motionDurationSlow}`, + // For smooth removing animation + "&::before": { + display: "table", + width: 0, + height: 0, + content: '""' + } + } + } + } + }; +}; +var list_default = genListStyle; diff --git a/packages/meta/lib/upload/style/motion.d.ts b/packages/meta/lib/upload/style/motion.d.ts new file mode 100644 index 0000000..47dcd20 --- /dev/null +++ b/packages/meta/lib/upload/style/motion.d.ts @@ -0,0 +1,4 @@ +import type { UploadToken } from '.'; +import type { GenerateStyle } from '../../theme/internal'; +declare const genMotionStyle: GenerateStyle; +export default genMotionStyle; diff --git a/packages/meta/lib/upload/style/motion.js b/packages/meta/lib/upload/style/motion.js new file mode 100644 index 0000000..9d2c282 --- /dev/null +++ b/packages/meta/lib/upload/style/motion.js @@ -0,0 +1,71 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/style/motion.ts +var motion_exports = {}; +__export(motion_exports, { + default: () => motion_default +}); +module.exports = __toCommonJS(motion_exports); +var import_cssinjs = require("@ant-design/cssinjs"); +var import_motion = require("../../style/motion"); +var uploadAnimateInlineIn = new import_cssinjs.Keyframes("uploadAnimateInlineIn", { + from: { + width: 0, + height: 0, + margin: 0, + padding: 0, + opacity: 0 + } +}); +var uploadAnimateInlineOut = new import_cssinjs.Keyframes("uploadAnimateInlineOut", { + to: { + width: 0, + height: 0, + margin: 0, + padding: 0, + opacity: 0 + } +}); +var genMotionStyle = (token) => { + const { componentCls } = token; + const inlineCls = `${componentCls}-animate-inline`; + return [ + { + [`${componentCls}-wrapper`]: { + [`${inlineCls}-appear, ${inlineCls}-enter, ${inlineCls}-leave`]: { + animationDuration: token.motionDurationSlow, + animationTimingFunction: token.motionEaseInOutCirc, + animationFillMode: "forwards" + }, + [`${inlineCls}-appear, ${inlineCls}-enter`]: { + animationName: uploadAnimateInlineIn + }, + [`${inlineCls}-leave`]: { + animationName: uploadAnimateInlineOut + } + } + }, + { + [`${componentCls}-wrapper`]: (0, import_motion.initFadeMotion)(token) + }, + uploadAnimateInlineIn, + uploadAnimateInlineOut + ]; +}; +var motion_default = genMotionStyle; diff --git a/packages/meta/lib/upload/style/picture.d.ts b/packages/meta/lib/upload/style/picture.d.ts new file mode 100644 index 0000000..f5d75d1 --- /dev/null +++ b/packages/meta/lib/upload/style/picture.d.ts @@ -0,0 +1,5 @@ +import type { UploadToken } from '.'; +import type { GenerateStyle } from '../../theme/internal'; +declare const genPictureStyle: GenerateStyle; +declare const genPictureCardStyle: GenerateStyle; +export { genPictureStyle, genPictureCardStyle }; diff --git a/packages/meta/lib/upload/style/picture.js b/packages/meta/lib/upload/style/picture.js new file mode 100644 index 0000000..9325bf3 --- /dev/null +++ b/packages/meta/lib/upload/style/picture.js @@ -0,0 +1,242 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/style/picture.ts +var picture_exports = {}; +__export(picture_exports, { + genPictureCardStyle: () => genPictureCardStyle, + genPictureStyle: () => genPictureStyle +}); +module.exports = __toCommonJS(picture_exports); +var import_colors = require("@ant-design/colors"); +var import_style = require("../../style"); +var import_cssinjs = require("@ant-design/cssinjs"); +var genPictureStyle = (token) => { + const { componentCls, iconCls, uploadThumbnailSize, uploadProgressOffset, calc } = token; + const listCls = `${componentCls}-list`; + const itemCls = `${listCls}-item`; + return { + [`${componentCls}-wrapper`]: { + // ${listCls} 增加优先级 + [` + ${listCls}${listCls}-picture, + ${listCls}${listCls}-picture-card, + ${listCls}${listCls}-picture-circle + `]: { + [itemCls]: { + position: "relative", + height: calc(uploadThumbnailSize).add(calc(token.lineWidth).mul(2)).add(calc(token.paddingXS).mul(2)).equal(), + padding: token.paddingXS, + border: `${(0, import_cssinjs.unit)(token.lineWidth)} ${token.lineType} ${token.colorBorder}`, + borderRadius: token.borderRadiusLG, + "&:hover": { + background: "transparent" + }, + [`${itemCls}-thumbnail`]: { + ...import_style.textEllipsis, + width: uploadThumbnailSize, + height: uploadThumbnailSize, + lineHeight: (0, import_cssinjs.unit)(calc(uploadThumbnailSize).add(token.paddingSM).equal()), + textAlign: "center", + flex: "none", + [iconCls]: { + fontSize: token.fontSizeHeading2, + color: token.colorPrimary + }, + img: { + display: "block", + width: "100%", + height: "100%", + overflow: "hidden" + } + }, + [`${itemCls}-progress`]: { + bottom: uploadProgressOffset, + width: `calc(100% - ${(0, import_cssinjs.unit)(calc(token.paddingSM).mul(2).equal())})`, + marginTop: 0, + paddingInlineStart: calc(uploadThumbnailSize).add(token.paddingXS).equal() + } + }, + [`${itemCls}-error`]: { + borderColor: token.colorError, + // Adjust the color of the error icon : https://github.com/ant-design/ant-design/pull/24160 + [`${itemCls}-thumbnail ${iconCls}`]: { + [`svg path[fill='${import_colors.blue[0]}']`]: { + fill: token.colorErrorBg + }, + [`svg path[fill='${import_colors.blue.primary}']`]: { + fill: token.colorError + } + } + }, + [`${itemCls}-uploading`]: { + borderStyle: "dashed", + [`${itemCls}-name`]: { + marginBottom: uploadProgressOffset + } + } + }, + [`${listCls}${listCls}-picture-circle ${itemCls}`]: { + [`&, &::before, ${itemCls}-thumbnail`]: { + borderRadius: "50%" + } + } + } + }; +}; +var genPictureCardStyle = (token) => { + const { componentCls, iconCls, fontSizeLG, colorTextLightSolid, calc } = token; + const listCls = `${componentCls}-list`; + const itemCls = `${listCls}-item`; + const uploadPictureCardSize = token.uploadPicCardSize; + return { + [` + ${componentCls}-wrapper${componentCls}-picture-card-wrapper, + ${componentCls}-wrapper${componentCls}-picture-circle-wrapper + `]: { + ...(0, import_style.clearFix)(), + display: "inline-block", + width: "100%", + [`${componentCls}${componentCls}-select`]: { + width: uploadPictureCardSize, + height: uploadPictureCardSize, + marginInlineEnd: token.marginXS, + marginBottom: token.marginXS, + textAlign: "center", + verticalAlign: "top", + backgroundColor: token.colorFillAlter, + border: `${(0, import_cssinjs.unit)(token.lineWidth)} dashed ${token.colorBorder}`, + borderRadius: token.borderRadiusLG, + cursor: "pointer", + transition: `border-color ${token.motionDurationSlow}`, + [`> ${componentCls}`]: { + display: "flex", + alignItems: "center", + justifyContent: "center", + height: "100%", + textAlign: "center" + }, + [`&:not(${componentCls}-disabled):hover`]: { + borderColor: token.colorPrimary + } + }, + // list + [`${listCls}${listCls}-picture-card, ${listCls}${listCls}-picture-circle`]: { + [`${listCls}-item-container`]: { + display: "inline-block", + width: uploadPictureCardSize, + height: uploadPictureCardSize, + marginBlock: `0 ${(0, import_cssinjs.unit)(token.marginXS)}`, + marginInline: `0 ${(0, import_cssinjs.unit)(token.marginXS)}`, + verticalAlign: "top" + }, + "&::after": { + display: "none" + }, + [itemCls]: { + height: "100%", + margin: 0, + "&::before": { + position: "absolute", + zIndex: 1, + width: `calc(100% - ${(0, import_cssinjs.unit)(calc(token.paddingXS).mul(2).equal())})`, + height: `calc(100% - ${(0, import_cssinjs.unit)(calc(token.paddingXS).mul(2).equal())})`, + backgroundColor: token.colorBgMask, + opacity: 0, + transition: `all ${token.motionDurationSlow}`, + content: '" "' + } + }, + [`${itemCls}:hover`]: { + [`&::before, ${itemCls}-actions`]: { + opacity: 1 + } + }, + [`${itemCls}-actions`]: { + position: "absolute", + insetInlineStart: 0, + zIndex: 10, + width: "100%", + whiteSpace: "nowrap", + textAlign: "center", + opacity: 0, + transition: `all ${token.motionDurationSlow}`, + [` + ${iconCls}-eye, + ${iconCls}-download, + ${iconCls}-delete + `]: { + zIndex: 10, + width: fontSizeLG, + margin: `0 ${(0, import_cssinjs.unit)(token.marginXXS)}`, + fontSize: fontSizeLG, + cursor: "pointer", + transition: `all ${token.motionDurationSlow}`, + color: colorTextLightSolid, + "&:hover": { + color: colorTextLightSolid + }, + svg: { + verticalAlign: "baseline" + } + } + }, + [`${itemCls}-thumbnail, ${itemCls}-thumbnail img`]: { + position: "static", + display: "block", + width: "100%", + height: "100%", + objectFit: "contain" + }, + [`${itemCls}-name`]: { + display: "none", + textAlign: "center" + }, + [`${itemCls}-file + ${itemCls}-name`]: { + position: "absolute", + bottom: token.margin, + display: "block", + width: `calc(100% - ${(0, import_cssinjs.unit)(calc(token.paddingXS).mul(2).equal())})` + }, + [`${itemCls}-uploading`]: { + [`&${itemCls}`]: { + backgroundColor: token.colorFillAlter + }, + [`&::before, ${iconCls}-eye, ${iconCls}-download, ${iconCls}-delete`]: { + display: "none" + } + }, + [`${itemCls}-progress`]: { + bottom: token.marginXL, + width: `calc(100% - ${(0, import_cssinjs.unit)(calc(token.paddingXS).mul(2).equal())})`, + paddingInlineStart: 0 + } + } + }, + [`${componentCls}-wrapper${componentCls}-picture-circle-wrapper`]: { + [`${componentCls}${componentCls}-select`]: { + borderRadius: "50%" + } + } + }; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + genPictureCardStyle, + genPictureStyle +}); diff --git a/packages/meta/lib/upload/style/rtl.d.ts b/packages/meta/lib/upload/style/rtl.d.ts new file mode 100644 index 0000000..67fcebd --- /dev/null +++ b/packages/meta/lib/upload/style/rtl.d.ts @@ -0,0 +1,4 @@ +import type { UploadToken } from '.'; +import type { GenerateStyle } from '../../theme/internal'; +declare const genRtlStyle: GenerateStyle; +export default genRtlStyle; diff --git a/packages/meta/lib/upload/style/rtl.js b/packages/meta/lib/upload/style/rtl.js new file mode 100644 index 0000000..a31d2de --- /dev/null +++ b/packages/meta/lib/upload/style/rtl.js @@ -0,0 +1,33 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/style/rtl.ts +var rtl_exports = {}; +__export(rtl_exports, { + default: () => rtl_default +}); +module.exports = __toCommonJS(rtl_exports); +var genRtlStyle = (token) => { + const { componentCls } = token; + return { + [`${componentCls}-rtl`]: { + direction: "rtl" + } + }; +}; +var rtl_default = genRtlStyle; diff --git a/packages/meta/lib/upload/utils.d.ts b/packages/meta/lib/upload/utils.d.ts new file mode 100644 index 0000000..1b5f202 --- /dev/null +++ b/packages/meta/lib/upload/utils.d.ts @@ -0,0 +1,8 @@ +import type { InternalUploadFile, RcFile, UploadFile } from './interface'; +export declare function file2Obj(file: RcFile): InternalUploadFile; +/** Upload fileList. Replace file if exist or just push into it. */ +export declare function updateFileList(file: UploadFile, fileList: (UploadFile | Readonly)[]): (UploadFile | Readonly>)[]; +export declare function getFileItem(file: RcFile, fileList: (UploadFile | Readonly)[]): UploadFile | Readonly>; +export declare function removeFileItem(file: UploadFile, fileList: (UploadFile | Readonly)[]): (UploadFile | Readonly>)[] | null; +export declare const isImageUrl: (file: UploadFile) => boolean; +export declare function previewImage(file: File | Blob): Promise; diff --git a/packages/meta/lib/upload/utils.js b/packages/meta/lib/upload/utils.js new file mode 100644 index 0000000..62b8912 --- /dev/null +++ b/packages/meta/lib/upload/utils.js @@ -0,0 +1,150 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/upload/utils.ts +var utils_exports = {}; +__export(utils_exports, { + file2Obj: () => file2Obj, + getFileItem: () => getFileItem, + isImageUrl: () => isImageUrl, + previewImage: () => previewImage, + removeFileItem: () => removeFileItem, + updateFileList: () => updateFileList +}); +module.exports = __toCommonJS(utils_exports); +function file2Obj(file) { + return { + ...file, + lastModified: file.lastModified, + lastModifiedDate: file.lastModifiedDate, + name: file.name, + size: file.size, + type: file.type, + uid: file.uid, + percent: 0, + originFileObj: file + }; +} +function updateFileList(file, fileList) { + const nextFileList = [...fileList]; + const fileIndex = nextFileList.findIndex(({ uid }) => uid === file.uid); + if (fileIndex === -1) { + nextFileList.push(file); + } else { + nextFileList[fileIndex] = file; + } + return nextFileList; +} +function getFileItem(file, fileList) { + const matchKey = file.uid !== void 0 ? "uid" : "name"; + return fileList.filter((item) => item[matchKey] === file[matchKey])[0]; +} +function removeFileItem(file, fileList) { + const matchKey = file.uid !== void 0 ? "uid" : "name"; + const removed = fileList.filter((item) => item[matchKey] !== file[matchKey]); + if (removed.length === fileList.length) { + return null; + } + return removed; +} +var extname = (url = "") => { + const temp = url.split("/"); + const filename = temp[temp.length - 1]; + const filenameWithoutSuffix = filename.split(/#|\?/)[0]; + return (/\.[^./\\]*$/.exec(filenameWithoutSuffix) || [""])[0]; +}; +var isImageFileType = (type) => type.indexOf("image/") === 0; +var isImageUrl = (file) => { + if (file.type && !file.thumbUrl) { + return isImageFileType(file.type); + } + const url = file.thumbUrl || file.url || ""; + const extension = extname(url); + if (/^data:image\//.test(url) || /(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico|heic|heif)$/i.test(extension)) { + return true; + } + if (/^data:/.test(url)) { + return false; + } + if (extension) { + return false; + } + return true; +}; +var MEASURE_SIZE = 200; +function previewImage(file) { + return new Promise((resolve) => { + if (!file.type || !isImageFileType(file.type)) { + resolve(""); + return; + } + const canvas = document.createElement("canvas"); + canvas.width = MEASURE_SIZE; + canvas.height = MEASURE_SIZE; + canvas.style.cssText = `position: fixed; left: 0; top: 0; width: ${MEASURE_SIZE}px; height: ${MEASURE_SIZE}px; z-index: 9999; display: none;`; + document.body.appendChild(canvas); + const ctx = canvas.getContext("2d"); + const img = new Image(); + img.onload = () => { + const { width, height } = img; + let drawWidth = MEASURE_SIZE; + let drawHeight = MEASURE_SIZE; + let offsetX = 0; + let offsetY = 0; + if (width > height) { + drawHeight = height * (MEASURE_SIZE / width); + offsetY = -(drawHeight - drawWidth) / 2; + } else { + drawWidth = width * (MEASURE_SIZE / height); + offsetX = -(drawWidth - drawHeight) / 2; + } + ctx.drawImage(img, offsetX, offsetY, drawWidth, drawHeight); + const dataURL = canvas.toDataURL(); + document.body.removeChild(canvas); + window.URL.revokeObjectURL(img.src); + resolve(dataURL); + }; + img.crossOrigin = "anonymous"; + if (file.type.startsWith("image/svg+xml")) { + const reader = new FileReader(); + reader.onload = () => { + if (reader.result) + img.src = reader.result; + }; + reader.readAsDataURL(file); + } else if (file.type.startsWith("image/gif")) { + const reader = new FileReader(); + reader.onload = () => { + if (reader.result) + resolve(reader.result); + }; + reader.readAsDataURL(file); + } else { + img.src = window.URL.createObjectURL(file); + } + }); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + file2Obj, + getFileItem, + isImageUrl, + previewImage, + removeFileItem, + updateFileList +}); diff --git a/packages/meta/lib/utils/constants.js b/packages/meta/lib/utils/constants.js new file mode 100644 index 0000000..a565792 --- /dev/null +++ b/packages/meta/lib/utils/constants.js @@ -0,0 +1,42 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/utils/constants.ts +var constants_exports = {}; +__export(constants_exports, { + CROP_TYPE: () => CROP_TYPE, + defaultAlignOption: () => defaultAlignOption +}); +module.exports = __toCommonJS(constants_exports); +var CROP_TYPE = { + CUSTOM: "CUSTOM", + AUTO: "AUTO" +}; +var defaultAlignOption = { + points: ["bl", "br"], + offset: [6, 0], + overflow: { + adjustX: true, + adjustY: true + } +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + CROP_TYPE, + defaultAlignOption +}); diff --git a/packages/meta/lib/utils/index.d.ts b/packages/meta/lib/utils/index.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/meta/lib/utils/index.js b/packages/meta/lib/utils/index.js new file mode 100644 index 0000000..e69de29 diff --git a/packages/meta/lib/version/index.d.ts b/packages/meta/lib/version/index.d.ts new file mode 100644 index 0000000..1bb395b --- /dev/null +++ b/packages/meta/lib/version/index.d.ts @@ -0,0 +1,2 @@ +declare const _default: "3.2"; +export default _default; diff --git a/packages/meta/lib/version/index.js b/packages/meta/lib/version/index.js new file mode 100644 index 0000000..79773d8 --- /dev/null +++ b/packages/meta/lib/version/index.js @@ -0,0 +1,25 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/version/index.ts +var version_exports = {}; +__export(version_exports, { + default: () => version_default +}); +module.exports = __toCommonJS(version_exports); +var version_default = "3.2"; diff --git a/packages/meta/lib/watermark/context.d.ts b/packages/meta/lib/watermark/context.d.ts new file mode 100644 index 0000000..0a07cbe --- /dev/null +++ b/packages/meta/lib/watermark/context.d.ts @@ -0,0 +1,8 @@ +import * as React from 'react'; +export interface WatermarkContextProps { + add: (ele: HTMLElement) => void; + remove: (ele: HTMLElement) => void; +} +declare const WatermarkContext: React.Context; +export declare function usePanelRef(panelSelector?: string): (ele: HTMLElement | null) => void; +export default WatermarkContext; diff --git a/packages/meta/lib/watermark/context.js b/packages/meta/lib/watermark/context.js new file mode 100644 index 0000000..76219df --- /dev/null +++ b/packages/meta/lib/watermark/context.js @@ -0,0 +1,62 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/watermark/context.ts +var context_exports = {}; +__export(context_exports, { + default: () => context_default, + usePanelRef: () => usePanelRef +}); +module.exports = __toCommonJS(context_exports); +var import_rc_util = require("rc-util"); +var React = __toESM(require("react")); +function voidFunc() { +} +var WatermarkContext = React.createContext({ + add: voidFunc, + remove: voidFunc +}); +function usePanelRef(panelSelector) { + const watermark = React.useContext(WatermarkContext); + const panelEleRef = React.useRef(); + const panelRef = (0, import_rc_util.useEvent)((ele) => { + if (ele) { + const innerContentEle = panelSelector ? ele.querySelector(panelSelector) : ele; + watermark.add(innerContentEle); + panelEleRef.current = innerContentEle; + } else { + watermark.remove(panelEleRef.current); + } + }); + return panelRef; +} +var context_default = WatermarkContext; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + usePanelRef +}); diff --git a/packages/meta/lib/watermark/index.d.ts b/packages/meta/lib/watermark/index.d.ts new file mode 100644 index 0000000..b13715d --- /dev/null +++ b/packages/meta/lib/watermark/index.d.ts @@ -0,0 +1,26 @@ +import React from 'react'; +export interface WatermarkProps { + zIndex?: number; + rotate?: number; + width?: number; + height?: number; + image?: string; + content?: string | string[]; + font?: { + color?: CanvasFillStrokeStyles['fillStyle']; + fontSize?: number | string; + fontWeight?: 'normal' | 'light' | 'weight' | number; + fontStyle?: 'none' | 'normal' | 'italic' | 'oblique'; + fontFamily?: string; + textAlign?: CanvasTextAlign; + }; + style?: React.CSSProperties; + className?: string; + rootClassName?: string; + gap?: [number, number]; + offset?: [number, number]; + children?: React.ReactNode; + inherit?: boolean; +} +declare const Watermark: React.FC; +export default Watermark; diff --git a/packages/meta/lib/watermark/index.js b/packages/meta/lib/watermark/index.js new file mode 100644 index 0000000..b6577b7 --- /dev/null +++ b/packages/meta/lib/watermark/index.js @@ -0,0 +1,246 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/watermark/index.tsx +var watermark_exports = {}; +__export(watermark_exports, { + default: () => watermark_default +}); +module.exports = __toCommonJS(watermark_exports); +var import_react = __toESM(require("react")); +var import_mutate_observer = require("@rc-component/mutate-observer"); +var import_classnames = __toESM(require("classnames")); +var import_internal = require("../theme/internal"); +var import_context = __toESM(require("./context")); +var import_useClips = __toESM(require("./useClips")); +var import_useRafDebounce = __toESM(require("./useRafDebounce")); +var import_useWatermark = __toESM(require("./useWatermark")); +var import_utils = require("./utils"); +function getSizeDiff(prev, next) { + return prev.size === next.size ? prev : next; +} +var DEFAULT_GAP_X = 100; +var DEFAULT_GAP_Y = 100; +var Watermark = (props) => { + const { + /** + * The antd content layer zIndex is basically below 10 + * https://github.com/ant-design/ant-design/blob/6192403b2ce517c017f9e58a32d58774921c10cd/components/style/themes/default.less#L335 + */ + zIndex = 9, + rotate = -22, + width, + height, + image, + content, + font = {}, + style, + className, + rootClassName, + gap = [DEFAULT_GAP_X, DEFAULT_GAP_Y], + offset, + children, + inherit = true + } = props; + const [, token] = (0, import_internal.useToken)(); + const { + color = token.colorFill, + fontSize = token.fontSizeLG, + fontWeight = "normal", + fontStyle = "normal", + fontFamily = "sans-serif", + textAlign = "center" + } = font; + const [gapX = DEFAULT_GAP_X, gapY = DEFAULT_GAP_Y] = gap; + const gapXCenter = gapX / 2; + const gapYCenter = gapY / 2; + const offsetLeft = (offset == null ? void 0 : offset[0]) ?? gapXCenter; + const offsetTop = (offset == null ? void 0 : offset[1]) ?? gapYCenter; + const markStyle = import_react.default.useMemo(() => { + const mergedStyle = { + zIndex, + position: "absolute", + left: 0, + top: 0, + width: "100%", + height: "100%", + pointerEvents: "none", + backgroundRepeat: "repeat" + }; + let positionLeft = offsetLeft - gapXCenter; + let positionTop = offsetTop - gapYCenter; + if (positionLeft > 0) { + mergedStyle.left = `${positionLeft}px`; + mergedStyle.width = `calc(100% - ${positionLeft}px)`; + positionLeft = 0; + } + if (positionTop > 0) { + mergedStyle.top = `${positionTop}px`; + mergedStyle.height = `calc(100% - ${positionTop}px)`; + positionTop = 0; + } + mergedStyle.backgroundPosition = `${positionLeft}px ${positionTop}px`; + return mergedStyle; + }, [zIndex, offsetLeft, gapXCenter, offsetTop, gapYCenter]); + const [container, setContainer] = import_react.default.useState(); + const [subElements, setSubElements] = import_react.default.useState(/* @__PURE__ */ new Set()); + const targetElements = import_react.default.useMemo(() => { + const list = container ? [container] : []; + return [...list, ...Array.from(subElements)]; + }, [container, subElements]); + const getMarkSize = (ctx) => { + let defaultWidth = 120; + let defaultHeight = 64; + if (!image && ctx.measureText) { + ctx.font = `${Number(fontSize)}px ${fontFamily}`; + const contents = Array.isArray(content) ? content : [content]; + const sizes = contents.map((item) => { + const metrics = ctx.measureText(item); + return [metrics.width, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent]; + }); + defaultWidth = Math.ceil(Math.max(...sizes.map((size) => size[0]))); + defaultHeight = Math.ceil(Math.max(...sizes.map((size) => size[1]))) * contents.length + (contents.length - 1) * import_useClips.FontGap; + } + return [width ?? defaultWidth, height ?? defaultHeight]; + }; + const getClips = (0, import_useClips.default)(); + const [watermarkInfo, setWatermarkInfo] = import_react.default.useState( + null + ); + const renderWatermark = () => { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + if (ctx) { + const ratio = (0, import_utils.getPixelRatio)(); + const [markWidth, markHeight] = getMarkSize(ctx); + const drawCanvas = (drawContent) => { + const [nextClips, clipWidth] = getClips( + drawContent || "", + rotate, + ratio, + markWidth, + markHeight, + { + color, + fontSize, + fontStyle, + fontWeight, + fontFamily, + textAlign + }, + gapX, + gapY + ); + setWatermarkInfo([nextClips, clipWidth]); + }; + if (image) { + const img = new Image(); + img.onload = () => { + drawCanvas(img); + }; + img.onerror = () => { + drawCanvas(content); + }; + img.crossOrigin = "anonymous"; + img.referrerPolicy = "no-referrer"; + img.src = image; + } else { + drawCanvas(content); + } + } + }; + const syncWatermark = (0, import_useRafDebounce.default)(renderWatermark); + const [appendWatermark, removeWatermark, isWatermarkEle] = (0, import_useWatermark.default)(markStyle); + (0, import_react.useEffect)(() => { + if (watermarkInfo) { + targetElements.forEach((holder) => { + appendWatermark(watermarkInfo[0], watermarkInfo[1], holder); + }); + } + }, [watermarkInfo, targetElements]); + const onMutate = (mutations) => { + mutations.forEach((mutation) => { + if ((0, import_utils.reRendering)(mutation, isWatermarkEle)) { + syncWatermark(); + } + }); + }; + (0, import_mutate_observer.useMutateObserver)(targetElements, onMutate); + (0, import_react.useEffect)(syncWatermark, [ + rotate, + zIndex, + width, + height, + image, + content, + color, + fontSize, + fontWeight, + fontStyle, + fontFamily, + textAlign, + gapX, + gapY, + offsetLeft, + offsetTop + ]); + const watermarkContext = import_react.default.useMemo( + () => ({ + add: (ele) => { + setSubElements((prev) => { + const clone = new Set(prev); + clone.add(ele); + return getSizeDiff(prev, clone); + }); + }, + remove: (ele) => { + removeWatermark(ele); + setSubElements((prev) => { + const clone = new Set(prev); + clone.delete(ele); + return getSizeDiff(prev, clone); + }); + } + }), + [] + ); + const childNode = inherit ? /* @__PURE__ */ import_react.default.createElement(import_context.default.Provider, { value: watermarkContext }, children) : children; + return /* @__PURE__ */ import_react.default.createElement( + "div", + { + ref: setContainer, + className: (0, import_classnames.default)(className, rootClassName), + style: { position: "relative", ...style } + }, + childNode + ); +}; +if (process.env.NODE_ENV !== "production") { + Watermark.displayName = "Watermark"; +} +var watermark_default = Watermark; diff --git a/packages/meta/lib/watermark/useClips.d.ts b/packages/meta/lib/watermark/useClips.d.ts new file mode 100644 index 0000000..c00fa28 --- /dev/null +++ b/packages/meta/lib/watermark/useClips.d.ts @@ -0,0 +1,7 @@ +import type { WatermarkProps } from '.'; +export declare const FontGap = 3; +/** + * Get the clips of text content. + * This is a lazy hook function since SSR no need this + */ +export default function useClips(): (content: NonNullable | HTMLImageElement, rotate: number, ratio: number, width: number, height: number, font: Required>, gapX: number, gapY: number) => [dataURL: string, finalWidth: number, finalHeight: number]; diff --git a/packages/meta/lib/watermark/useClips.js b/packages/meta/lib/watermark/useClips.js new file mode 100644 index 0000000..5e5167b --- /dev/null +++ b/packages/meta/lib/watermark/useClips.js @@ -0,0 +1,118 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/watermark/useClips.ts +var useClips_exports = {}; +__export(useClips_exports, { + FontGap: () => FontGap, + default: () => useClips +}); +module.exports = __toCommonJS(useClips_exports); +var FontGap = 3; +function prepareCanvas(width, height, ratio = 1) { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + const realWidth = width * ratio; + const realHeight = height * ratio; + canvas.setAttribute("width", `${realWidth}px`); + canvas.setAttribute("height", `${realHeight}px`); + ctx.save(); + return [ctx, canvas, realWidth, realHeight]; +} +function useClips() { + function getClips(content, rotate, ratio, width, height, font, gapX, gapY) { + const [ctx, canvas, contentWidth, contentHeight] = prepareCanvas(width, height, ratio); + if (content instanceof HTMLImageElement) { + ctx.drawImage(content, 0, 0, contentWidth, contentHeight); + } else { + const { color, fontSize, fontStyle, fontWeight, fontFamily, textAlign } = font; + const mergedFontSize = Number(fontSize) * ratio; + ctx.font = `${fontStyle} normal ${fontWeight} ${mergedFontSize}px/${height}px ${fontFamily}`; + ctx.fillStyle = color; + ctx.textAlign = textAlign; + ctx.textBaseline = "top"; + const contents = Array.isArray(content) ? content : [content]; + contents == null ? void 0 : contents.forEach((item, index) => { + ctx.fillText(item ?? "", contentWidth / 2, index * (mergedFontSize + FontGap * ratio)); + }); + } + const angle = Math.PI / 180 * Number(rotate); + const maxSize = Math.max(width, height); + const [rCtx, rCanvas, realMaxSize] = prepareCanvas(maxSize, maxSize, ratio); + rCtx.translate(realMaxSize / 2, realMaxSize / 2); + rCtx.rotate(angle); + if (contentWidth > 0 && contentHeight > 0) { + rCtx.drawImage(canvas, -contentWidth / 2, -contentHeight / 2); + } + function getRotatePos(x, y) { + const targetX = x * Math.cos(angle) - y * Math.sin(angle); + const targetY = x * Math.sin(angle) + y * Math.cos(angle); + return [targetX, targetY]; + } + let left = 0; + let right = 0; + let top = 0; + let bottom = 0; + const halfWidth = contentWidth / 2; + const halfHeight = contentHeight / 2; + const points = [ + [0 - halfWidth, 0 - halfHeight], + [0 + halfWidth, 0 - halfHeight], + [0 + halfWidth, 0 + halfHeight], + [0 - halfWidth, 0 + halfHeight] + ]; + points.forEach(([x, y]) => { + const [targetX, targetY] = getRotatePos(x, y); + left = Math.min(left, targetX); + right = Math.max(right, targetX); + top = Math.min(top, targetY); + bottom = Math.max(bottom, targetY); + }); + const cutLeft = left + realMaxSize / 2; + const cutTop = top + realMaxSize / 2; + const cutWidth = right - left; + const cutHeight = bottom - top; + const realGapX = gapX * ratio; + const realGapY = gapY * ratio; + const filledWidth = (cutWidth + realGapX) * 2; + const filledHeight = cutHeight + realGapY; + const [fCtx, fCanvas] = prepareCanvas(filledWidth, filledHeight); + function drawImg(targetX = 0, targetY = 0) { + fCtx.drawImage( + rCanvas, + cutLeft, + cutTop, + cutWidth, + cutHeight, + targetX, + targetY, + cutWidth, + cutHeight + ); + } + drawImg(); + drawImg(cutWidth + realGapX, -cutHeight / 2 - realGapY / 2); + drawImg(cutWidth + realGapX, +cutHeight / 2 + realGapY / 2); + return [fCanvas.toDataURL(), filledWidth / ratio, filledHeight / ratio]; + } + return getClips; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + FontGap +}); diff --git a/packages/meta/lib/watermark/useRafDebounce.d.ts b/packages/meta/lib/watermark/useRafDebounce.d.ts new file mode 100644 index 0000000..e1fd572 --- /dev/null +++ b/packages/meta/lib/watermark/useRafDebounce.d.ts @@ -0,0 +1,4 @@ +/** + * Callback will only execute last one for each raf + */ +export default function useRafDebounce(callback: VoidFunction): () => void; diff --git a/packages/meta/lib/watermark/useRafDebounce.js b/packages/meta/lib/watermark/useRafDebounce.js new file mode 100644 index 0000000..7a43713 --- /dev/null +++ b/packages/meta/lib/watermark/useRafDebounce.js @@ -0,0 +1,52 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/watermark/useRafDebounce.ts +var useRafDebounce_exports = {}; +__export(useRafDebounce_exports, { + default: () => useRafDebounce +}); +module.exports = __toCommonJS(useRafDebounce_exports); +var import_react = __toESM(require("react")); +var import_raf = __toESM(require("rc-util/lib/raf")); +var import_rc_util = require("rc-util"); +function useRafDebounce(callback) { + const executeRef = import_react.default.useRef(false); + const rafRef = import_react.default.useRef(); + const wrapperCallback = (0, import_rc_util.useEvent)(callback); + return () => { + if (executeRef.current) { + return; + } + executeRef.current = true; + wrapperCallback(); + rafRef.current = (0, import_raf.default)(() => { + executeRef.current = false; + }); + }; +} diff --git a/packages/meta/lib/watermark/useWatermark.d.ts b/packages/meta/lib/watermark/useWatermark.d.ts new file mode 100644 index 0000000..3276756 --- /dev/null +++ b/packages/meta/lib/watermark/useWatermark.d.ts @@ -0,0 +1,13 @@ +import * as React from 'react'; +/** + * Base size of the canvas, 1 for parallel layout and 2 for alternate layout + * Only alternate layout is currently supported + */ +export declare const BaseSize = 2; +export declare const FontGap = 3; +export type AppendWatermark = (base64Url: string, markWidth: number, container: HTMLElement) => void; +export default function useWatermark(markStyle: React.CSSProperties): [ + appendWatermark: AppendWatermark, + removeWatermark: (container: HTMLElement) => void, + isWatermarkEle: (ele: Node) => boolean +]; diff --git a/packages/meta/lib/watermark/useWatermark.js b/packages/meta/lib/watermark/useWatermark.js new file mode 100644 index 0000000..84a596d --- /dev/null +++ b/packages/meta/lib/watermark/useWatermark.js @@ -0,0 +1,80 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/watermark/useWatermark.ts +var useWatermark_exports = {}; +__export(useWatermark_exports, { + BaseSize: () => BaseSize, + FontGap: () => FontGap, + default: () => useWatermark +}); +module.exports = __toCommonJS(useWatermark_exports); +var React = __toESM(require("react")); +var import_utils = require("./utils"); +var BaseSize = 2; +var FontGap = 3; +var emphasizedStyle = { + visibility: "visible !important" +}; +function useWatermark(markStyle) { + const [watermarkMap] = React.useState(() => /* @__PURE__ */ new Map()); + const appendWatermark = (base64Url, markWidth, container) => { + if (container) { + if (!watermarkMap.get(container)) { + const newWatermarkEle = document.createElement("div"); + watermarkMap.set(container, newWatermarkEle); + } + const watermarkEle = watermarkMap.get(container); + watermarkEle.setAttribute( + "style", + (0, import_utils.getStyleStr)({ + ...markStyle, + backgroundImage: `url('${base64Url}')`, + backgroundSize: `${Math.floor(markWidth)}px`, + ...emphasizedStyle + }) + ); + watermarkEle.removeAttribute("class"); + container.append(watermarkEle); + } + }; + const removeWatermark = (container) => { + const watermarkEle = watermarkMap.get(container); + if (watermarkEle && container) { + container.removeChild(watermarkEle); + } + watermarkMap.delete(container); + }; + const isWatermarkEle = (ele) => Array.from(watermarkMap.values()).includes(ele); + return [appendWatermark, removeWatermark, isWatermarkEle]; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + BaseSize, + FontGap +}); diff --git a/packages/meta/lib/watermark/utils.d.ts b/packages/meta/lib/watermark/utils.d.ts new file mode 100644 index 0000000..799f8a3 --- /dev/null +++ b/packages/meta/lib/watermark/utils.d.ts @@ -0,0 +1,8 @@ +/// +/** converting camel-cased strings to be lowercase and link it with Separato */ +export declare function toLowercaseSeparator(key: string): string; +export declare function getStyleStr(style: React.CSSProperties): string; +/** Returns the ratio of the device's physical pixel resolution to the css pixel resolution */ +export declare function getPixelRatio(): number; +/** Whether to re-render the watermark */ +export declare const reRendering: (mutation: MutationRecord, isWatermarkEle: (ele: Node) => boolean) => boolean; diff --git a/packages/meta/lib/watermark/utils.js b/packages/meta/lib/watermark/utils.js new file mode 100644 index 0000000..7df1d32 --- /dev/null +++ b/packages/meta/lib/watermark/utils.js @@ -0,0 +1,53 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/watermark/utils.ts +var utils_exports = {}; +__export(utils_exports, { + getPixelRatio: () => getPixelRatio, + getStyleStr: () => getStyleStr, + reRendering: () => reRendering, + toLowercaseSeparator: () => toLowercaseSeparator +}); +module.exports = __toCommonJS(utils_exports); +function toLowercaseSeparator(key) { + return key.replace(/([A-Z])/g, "-$1").toLowerCase(); +} +function getStyleStr(style) { + return Object.keys(style).map((key) => `${toLowercaseSeparator(key)}: ${style[key]};`).join(" "); +} +function getPixelRatio() { + return window.devicePixelRatio || 1; +} +var reRendering = (mutation, isWatermarkEle) => { + let flag = false; + if (mutation.removedNodes.length) { + flag = Array.from(mutation.removedNodes).some((node) => isWatermarkEle(node)); + } + if (mutation.type === "attributes" && isWatermarkEle(mutation.target)) { + flag = true; + } + return flag; +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getPixelRatio, + getStyleStr, + reRendering, + toLowercaseSeparator +}); diff --git a/packages/request/es/index.d.ts b/packages/request/es/index.d.ts new file mode 100644 index 0000000..47d7be5 --- /dev/null +++ b/packages/request/es/index.d.ts @@ -0,0 +1,4 @@ +interface RequestConfig { +} +export declare const request: RequestConfig; +export {}; diff --git a/packages/request/es/index.js b/packages/request/es/index.js new file mode 100644 index 0000000..2a7796f --- /dev/null +++ b/packages/request/es/index.js @@ -0,0 +1,80 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +export var request = { + timeout: 1000, + // other axios options you want + errorConfig: { + // @ts-ignore + errorHandler: function errorHandler(error, opts) { + // if (opts?.skipErrorHandler) throw error + // try { + // const { res } = ctx; + // const d = await res.text(); + + // if (res.status === 401 && store.user.isLogin) { + // store.user.resetLoginState(); + // message.warning('登录过期,请重新登录!'); + // return; + // } + // const isEmptyRes = d === '' || d.replace(/\s/g,"")=== 'tokenisinvalid'; //有些后端接口成功会返回空 做下兼容 + // const body = !isEmptyRes ? JSON.parse(d || '{}') : d; + // const sessionCode = sessionStorage.getItem('zhst_errcode') || '{}' + // const ERROR_CODE = JSON.parse(sessionCode); + + // if (Number(res.status) === 200) { + // ctx.res = body; + // } else { + // // 先判断Grpc-Metadata-Errorx-Message + // let errMsg = ERROR_CODE[body.code]?.value || body.message || '您的网络发生异常,无法连接服务器' + // toast && message.error(errMsg || body); + // ctx.res = { + // code: body.code, + // message: errMsg + // }; + // } + + // } catch (error) { + // if (get(error, 'type') !== 'CustomError') { + // toast && message.error('您的网络发生异常,无法连接服务器'); + // } + // throw error; + // } + }, + // @ts-ignore + errorThrower: function errorThrower(res) { + console.log('res', res); + } + }, + // 请求 + requestInterceptors: [ + // 一个二元组,第一个元素是 request 拦截器,第二个元素是错误处理 + [function (url, options) { + // console.log('options', options); + return { + url: url, + options: _objectSpread(_objectSpread({}, options), {}, { + headers: { + authorization: 'test' + // ...(refererSuffix ? { zhst_referer: `${baseUrl}${refererSuffix}` } : {}), + } + }) + }; + }, function (error) { + return Promise.reject(error); + }]], + // 返回 + responseInterceptors: [ + // 一个二元组,第一个元素是 request 拦截器,第二个元素是错误处理 + [function (response) { + if (response.status !== 200) { + throw Error(JSON.stringify(response.data)); + } + return response; + }, function (error) { + return Promise.reject(error); + }]] +}; \ No newline at end of file diff --git a/packages/request/lib/index.d.ts b/packages/request/lib/index.d.ts new file mode 100644 index 0000000..47d7be5 --- /dev/null +++ b/packages/request/lib/index.d.ts @@ -0,0 +1,4 @@ +interface RequestConfig { +} +export declare const request: RequestConfig; +export {}; diff --git a/packages/request/lib/index.js b/packages/request/lib/index.js new file mode 100644 index 0000000..2c99b06 --- /dev/null +++ b/packages/request/lib/index.js @@ -0,0 +1,77 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/index.tsx +var src_exports = {}; +__export(src_exports, { + request: () => request +}); +module.exports = __toCommonJS(src_exports); +var request = { + timeout: 1e3, + // other axios options you want + errorConfig: { + // @ts-ignore + errorHandler(error, opts) { + }, + // @ts-ignore + errorThrower(res) { + console.log("res", res); + } + }, + // 请求 + requestInterceptors: [ + // 一个二元组,第一个元素是 request 拦截器,第二个元素是错误处理 + [ + (url, options) => { + return { + url, + options: { + ...options, + headers: { + authorization: "test" + // ...(refererSuffix ? { zhst_referer: `${baseUrl}${refererSuffix}` } : {}), + } + } + }; + }, + (error) => { + return Promise.reject(error); + } + ] + ], + // 返回 + responseInterceptors: [ + // 一个二元组,第一个元素是 request 拦截器,第二个元素是错误处理 + [ + (response) => { + if (response.status !== 200) { + throw Error(JSON.stringify(response.data)); + } + return response; + }, + (error) => { + return Promise.reject(error); + } + ] + ] +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + request +}); diff --git a/packages/slave/README.md b/packages/slave/README.md index 8c92118..e180964 100644 --- a/packages/slave/README.md +++ b/packages/slave/README.md @@ -32,6 +32,8 @@ slave.init({ | tokenKey | 从链接获取的登录校验字段 | string | token | - | | showMsg | 是否显示“请先登录”提示框 | boolean | true | - | | msgText | 提示框自定义文案 | string | 请先登录 | - | +| from | 来自哪个链接(可选) | string | - | - | +| to | 准备去的链接(可选) | string | - | - | ## slave 实例方法 diff --git a/packages/slave/es/index.js b/packages/slave/es/index.js new file mode 100644 index 0000000..bbbcda4 --- /dev/null +++ b/packages/slave/es/index.js @@ -0,0 +1,85 @@ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +import { message } from "antd"; +import { getValueByUrl } from '@zhst/func'; +var Slave = /*#__PURE__*/function () { + // eslint-disable-next-line @typescript-eslint/no-useless-constructor + function Slave() { + _classCallCheck(this, Slave); + _defineProperty(this, "token", void 0); + _defineProperty(this, "config", void 0); + _defineProperty(this, "jumpUrl", void 0); + this.token = null; + this.jumpUrl = undefined; + } + _createClass(Slave, [{ + key: "init", + value: function () { + var _init = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() { + var opt, + _opt$jumpToLogin, + jumpToLogin, + jumpUrl, + tokenKey, + _opt$showMsg, + showMsg, + _token, + jumpUrlObj, + _args = arguments; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + opt = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}; + _opt$jumpToLogin = opt.jumpToLogin, jumpToLogin = _opt$jumpToLogin === void 0 ? true : _opt$jumpToLogin, jumpUrl = opt.jumpUrl, tokenKey = opt.tokenKey, _opt$showMsg = opt.showMsg, showMsg = _opt$showMsg === void 0 ? true : _opt$showMsg; // eslint-disable-next-line @typescript-eslint/no-unused-expressions + _token = getValueByUrl(tokenKey || 'token', location.href) || localStorage.getItem('ZHST_AUTH_TOKEN'); + this.token = _token; + localStorage.setItem('ZHST_AUTH_TOKEN', _token); + this.checkEnv({ + showMsg: showMsg + }); + if (jumpToLogin && jumpUrl && !_token) { + jumpUrlObj = new URL(jumpUrl); + console.log('jumpUrlObj', jumpUrlObj, jumpUrl); + if (jumpUrlObj.origin === location.origin) { + history.pushState('', '', jumpUrl); + } else { + location.href = jumpUrl; + } + } + case 7: + case "end": + return _context.stop(); + } + }, _callee, this); + })); + function init() { + return _init.apply(this, arguments); + } + return init; + }() // 判端是否登录 + }, { + key: "checkEnv", + value: function checkEnv(_opt) { + if (!this.token && _opt.showMsg) { + message.error('请先登录!'); + return; + } + } + }, { + key: "logOut", + value: function logOut() { + localStorage.removeItem('ZHST_AUTH_TOKEN'); + location.replace(location.origin + location.pathname); + } + }]); + return Slave; +}(); +export default new Slave(); \ No newline at end of file diff --git a/packages/slave/lib/index.js b/packages/slave/lib/index.js new file mode 100644 index 0000000..d34fb36 --- /dev/null +++ b/packages/slave/lib/index.js @@ -0,0 +1,66 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/index.tsx +var src_exports = {}; +__export(src_exports, { + default: () => src_default +}); +module.exports = __toCommonJS(src_exports); +var import_antd = require("antd"); +var import_func = require("@zhst/func"); +var Slave = class { + // eslint-disable-next-line @typescript-eslint/no-useless-constructor + constructor() { + this.token = null; + this.jumpUrl = void 0; + } + async init(opt = {}) { + const { + jumpToLogin = true, + jumpUrl, + tokenKey, + showMsg = true + } = opt; + let _token = (0, import_func.getValueByUrl)(tokenKey || "token", location.href) || localStorage.getItem("ZHST_AUTH_TOKEN"); + this.token = _token; + localStorage.setItem("ZHST_AUTH_TOKEN", _token); + this.checkEnv({ showMsg }); + if (jumpToLogin && jumpUrl && !_token) { + let jumpUrlObj = new URL(jumpUrl); + console.log("jumpUrlObj", jumpUrlObj, jumpUrl); + if (jumpUrlObj.origin === location.origin) { + history.pushState("", "", jumpUrl); + } else { + location.href = jumpUrl; + } + } + } + // 判端是否登录 + checkEnv(_opt) { + if (!this.token && _opt.showMsg) { + import_antd.message.error("请先登录!"); + return; + } + } + logOut() { + localStorage.removeItem("ZHST_AUTH_TOKEN"); + location.replace(location.origin + location.pathname); + } +}; +var src_default = new Slave(); diff --git a/packages/slave/src/index.tsx b/packages/slave/src/index.tsx index 6e6db95..77e2ffd 100644 --- a/packages/slave/src/index.tsx +++ b/packages/slave/src/index.tsx @@ -15,6 +15,9 @@ export interface ISlaveConfig { */ tokenKey?: string; showMsg?: boolean; + msgText?: string; + from?: string; + to?: string } class Slave { @@ -32,7 +35,10 @@ class Slave { jumpToLogin = true, jumpUrl, tokenKey, - showMsg = true + showMsg = true, + msgText, + from, + to, } = opt // eslint-disable-next-line @typescript-eslint/no-unused-expressions @@ -40,13 +46,12 @@ class Slave { this.token = _token localStorage.setItem('ZHST_AUTH_TOKEN', _token as string) - this.checkEnv({ showMsg }) + this.checkEnv({ showMsg, msgText }) if (jumpToLogin && jumpUrl && !_token) { let jumpUrlObj = new URL(jumpUrl) - console.log('jumpUrlObj', jumpUrlObj, jumpUrl) - + // 判断是否为同一个域,采用不同的跳转方式 if (jumpUrlObj.origin === location.origin) { history.pushState('', '', jumpUrl) } else { @@ -56,9 +61,9 @@ class Slave { } // 判端是否登录 - checkEnv(_opt: { showMsg: boolean }) { + checkEnv(_opt: { showMsg: boolean, msgText?: string }) { if (!this.token && _opt.showMsg) { - message.error('请先登录!') + message.error(_opt.msgText || '请先登录!') return } }