@cloudbase/weda-ui 3.1.1 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/asset-manifest.json +17 -0
  2. package/dist/configs/components/form/location.json +0 -32
  3. package/dist/index.html +88 -0
  4. package/dist/static/js/bundle.js +963 -0
  5. package/dist/static/js/bundle.js.map +1 -0
  6. package/dist/static/js/main.chunk.js +8841 -0
  7. package/dist/static/js/main.chunk.js.map +1 -0
  8. package/dist/static/js/vendors~main.chunk.js +247885 -0
  9. package/dist/static/js/vendors~main.chunk.js.map +1 -0
  10. package/dist/static/media/ef6fa527e24e354765d806b826b41391.fa67580a.svg +627 -0
  11. package/dist/web/components/chart/common/core/eChartBar.d.ts +36 -0
  12. package/dist/web/components/chart/common/core/eChartLine.d.ts +34 -0
  13. package/dist/web/components/chart/common/core/eChartPie.d.ts +22 -0
  14. package/dist/web/components/form/location/common/mapChoose.js +4 -0
  15. package/dist/web/components/form/location/common/propsConfig.d.ts +1 -4
  16. package/dist/web/components/form/location/common/propsConfig.js +0 -2
  17. package/dist/web/components/form/location/common/useLocationInfo.d.ts +2 -0
  18. package/dist/web/components/form/location/common/useLocationInfo.js +19 -3
  19. package/dist/web/components/form/location/components/LocationH5/index.css +1 -1
  20. package/dist/web/components/form/location/components/LocationH5/location.h5.js +30 -54
  21. package/dist/web/components/form/location/components/LocationPC/location.PC.js +16 -51
  22. package/dist/web/components/form/select/h5.js +15 -13
  23. package/dist/web/components/form/select/index.js +15 -13
  24. package/dist/web/components/richText/index.js +6 -3
  25. package/dist/web/utils/isObjectEqual.d.ts +1 -1
  26. package/package.json +3 -4
  27. package/CHANGELOG.md +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/main.chunk.js","sources":["/Users/fengkx/lowcode/weda-ui/src/web/components/button/index.css","/Users/fengkx/lowcode/weda-ui/src/web/components/form/formcell/index.css","/Users/fengkx/lowcode/weda-ui/src/web/components/link/index.css","/Users/fengkx/lowcode/weda-ui/src/web/components/richTextView/index.css","/Users/fengkx/lowcode/weda-ui/src/web/components/text/index.css","/Users/fengkx/lowcode/weda-ui/src/web/components/uploaderFileView/index.css","/Users/fengkx/lowcode/weda-ui/src/web/components/uploaderView/index.css","/Users/fengkx/lowcode/weda-ui/src/web/weda-ui.css","/Users/fengkx/lowcode/weda-ui/src/index.js","/Users/fengkx/lowcode/weda-ui/src/web/actions/index.js","/Users/fengkx/lowcode/weda-ui/src/web/actions/showModal/index.tsx","/Users/fengkx/lowcode/weda-ui/src/web/actions/showToast/index.js","webpack:///./src/web/components/button/index.css?2dd4","/Users/fengkx/lowcode/weda-ui/src/web/components/button/index.tsx","/Users/fengkx/lowcode/weda-ui/src/web/components/container/index.tsx","/Users/fengkx/lowcode/weda-ui/src/web/components/drawer/index.tsx","webpack:///./src/web/components/form/formcell/index.css?c1b7","/Users/fengkx/lowcode/weda-ui/src/web/components/form/formcell/index.tsx","/Users/fengkx/lowcode/weda-ui/src/web/components/form/renderDecorator.tsx","/Users/fengkx/lowcode/weda-ui/src/web/components/form/uploader/uploader.pc.tsx","/Users/fengkx/lowcode/weda-ui/src/web/components/form/uploaderFile/uploadFile.h5.tsx","/Users/fengkx/lowcode/weda-ui/src/web/components/form/uploaderFile/uploadFile.pc.tsx","/Users/fengkx/lowcode/weda-ui/src/web/components/index.js","webpack:///./src/web/components/link/index.css?a32c","/Users/fengkx/lowcode/weda-ui/src/web/components/link/index.tsx","/Users/fengkx/lowcode/weda-ui/src/web/components/richText/const.ts","/Users/fengkx/lowcode/weda-ui/src/web/components/richText/index.tsx","webpack:///./src/web/components/richTextView/index.css?4a11","/Users/fengkx/lowcode/weda-ui/src/web/components/richTextView/index.tsx","/Users/fengkx/lowcode/weda-ui/src/web/components/richtextedit/index.tsx","webpack:///./src/web/components/text/index.css?7762","/Users/fengkx/lowcode/weda-ui/src/web/components/text/index.tsx","webpack:///./src/web/components/uploaderFileView/index.css?62db","/Users/fengkx/lowcode/weda-ui/src/web/components/uploaderFileView/index.jsx","webpack:///./src/web/components/uploaderView/index.css?f5f6","/Users/fengkx/lowcode/weda-ui/src/web/components/uploaderView/index.tsx","/Users/fengkx/lowcode/weda-ui/src/web/index.js","/Users/fengkx/lowcode/weda-ui/src/web/utils/classnames.js","/Users/fengkx/lowcode/weda-ui/src/web/utils/constant.ts","/Users/fengkx/lowcode/weda-ui/src/web/utils/isObjectEqual.js","/Users/fengkx/lowcode/weda-ui/src/web/utils/platform.js","/Users/fengkx/lowcode/weda-ui/src/web/utils/tcb.js","/Users/fengkx/lowcode/weda-ui/src/web/utils/useSetState.ts","/Users/fengkx/lowcode/weda-ui/src/web/utils/weui.js","webpack:///./src/web/weda-ui.css?a1af"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/react-scripts/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".weda-button.weui-btn.weui-btn_primary:not(.weui-btn_disabled):active {\\n background-color: var(--weui-TAG-TEXT-BLUE);\\n}\\n\\n.weda-button.weui-btn_primary {\\n background-color: var(--weui-BRAND);\\n}\\n\\n.weda-button.weui-btn.weui-btn_primary.weui-btn_wechat:not(.weui-btn_disabled):active {\\n background-color: var(--weui-TAG-TEXT-GREEN);\\n}\\n\\n.weda-button.weui-btn_primary.weui-btn_wechat {\\n background-color: var(--weui-WECHAT);\\n}\\n\\n.weda-button.weda-button-mini {\\n font-size: smaller;\\n}\\n.weda-button.weda-button-large {\\n font-size: large;\\n display: block;\\n padding-left: 14px;\\n padding-right: 14px;\\n text-align: center;\\n width: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://src/web/components/button/index.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,2CAA2C;AAC7C;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,kBAAkB;AACpB;AACA;EACE,gBAAgB;EAChB,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,kBAAkB;EAClB,WAAW;AACb\",\"sourcesContent\":[\".weda-button.weui-btn.weui-btn_primary:not(.weui-btn_disabled):active {\\n background-color: var(--weui-TAG-TEXT-BLUE);\\n}\\n\\n.weda-button.weui-btn_primary {\\n background-color: var(--weui-BRAND);\\n}\\n\\n.weda-button.weui-btn.weui-btn_primary.weui-btn_wechat:not(.weui-btn_disabled):active {\\n background-color: var(--weui-TAG-TEXT-GREEN);\\n}\\n\\n.weda-button.weui-btn_primary.weui-btn_wechat {\\n background-color: var(--weui-WECHAT);\\n}\\n\\n.weda-button.weda-button-mini {\\n font-size: smaller;\\n}\\n.weda-button.weda-button-large {\\n font-size: large;\\n display: block;\\n padding-left: 14px;\\n padding-right: 14px;\\n text-align: center;\\n width: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/react-scripts/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".weda-formcells__flag {\\n display: inline-block;\\n margin-left: 4px;\\n font-family: SimSun;\\n font-size: 12px;\\n color: #f60;\\n align-self: flex-start;\\n}\\n\\n.weda-formcells__label.weui-cell {\\n align-items: flex-start;\\n}\\n\\n.weda-ui .weui-cells__group_form .weui-cells {\\n margin: 0;\\n}\\n.weda-formcells.weui-flex .weda-formcells__label {\\n width: 130px;\\n padding-bottom: 16px;\\n}\\n.weui-cells__group_form .weui-cell {\\n padding: 16px 16px;\\n}\\n\\n.weda-formcells .weda-formcells__label {\\n padding-bottom: 8px;\\n}\\n\\n.weda-formcells__content.weui-flex__item .weui-cell_form {\\n padding: 0;\\n}\\n\\n.weda-formcells__content.weui-flex__item .weui-cell_form {\\n padding-right: 16px;\\n}\\n\\n/* formcell 在 form container 外部兼容 and 独立 layout 适配 */\\n\\n.weda-formcells__pc.vertical .wedatea2td-form__controls,\\n.weda-formcells__pc.vertical .wedatea2td-form__label {\\n display: block;\\n}\\n.weda-formcells__pc.vertical .wedatea2td-form__label {\\n padding-bottom: 0;\\n padding-top: 0;\\n width: auto;\\n margin-bottom: 10px;\\n}\\n\\n.weda-formcells__pc.vertical .wedatea2td-form__help-text {\\n margin-top: 4px;\\n}\\n.weda-formcells__pc.vertical .wedatea2td-form__controls--text {\\n padding-top: 0;\\n}\\n\\n.weda-formcells__pc .wedatea2td-form__controls {\\n display: table-cell;\\n vertical-align: top;\\n padding-bottom: 16px;\\n}\\n.weda-formcells__pc .wedatea2td-form__label {\\n display: table-cell; /*container 外适配*/\\n vertical-align: baseline;\\n padding-top: 7px;\\n padding-bottom: 7px;\\n}\\n.wedatea2td-form .wedatea2td-form__label .wedatea2td-icon {\\n vertical-align: -4px;\\n}\\n.weda-formcells__pc .wedatea2td-form__label label,\\n.weda-formcells__pc .wedatea2td-form__label legend {\\n display: inline-block;\\n transform: translateZ(0);\\n width: 98px;\\n}\\n\\n/*formcell*/\\n\\n.weda-formcells__full-width .wedatea2td-form__controls {\\n width: 100%;\\n}\\n/*formcell end*/\\n\\n/* formcell 在 form container 外部兼容 */\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://src/web/components/form/formcell/index.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,qBAAqB;EACrB,gBAAgB;EAChB,mBAAmB;EACnB,eAAe;EACf,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,SAAS;AACX;AACA;EACE,YAAY;EACZ,oBAAoB;AACtB;AACA;EACE,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,mBAAmB;AACrB;;AAEA,oDAAoD;;AAEpD;;EAEE,cAAc;AAChB;AACA;EACE,iBAAiB;EACjB,cAAc;EACd,WAAW;EACX,mBAAmB;AACrB;;AAEA;EACE,eAAe;AACjB;AACA;EACE,cAAc;AAChB;;AAEA;EACE,mBAAmB;EACnB,mBAAmB;EACnB,oBAAoB;AACtB;AACA;EACE,mBAAmB,EAAE,gBAAgB;EACrC,wBAAwB;EACxB,gBAAgB;EAChB,mBAAmB;AACrB;AACA;EACE,oBAAoB;AACtB;AACA;;EAEE,qBAAqB;EACrB,wBAAwB;EACxB,WAAW;AACb;;AAEA,WAAW;;AAEX;EACE,WAAW;AACb;AACA,eAAe;;AAEf,mCAAmC\",\"sourcesContent\":[\".weda-formcells__flag {\\n display: inline-block;\\n margin-left: 4px;\\n font-family: SimSun;\\n font-size: 12px;\\n color: #f60;\\n align-self: flex-start;\\n}\\n\\n.weda-formcells__label.weui-cell {\\n align-items: flex-start;\\n}\\n\\n.weda-ui .weui-cells__group_form .weui-cells {\\n margin: 0;\\n}\\n.weda-formcells.weui-flex .weda-formcells__label {\\n width: 130px;\\n padding-bottom: 16px;\\n}\\n.weui-cells__group_form .weui-cell {\\n padding: 16px 16px;\\n}\\n\\n.weda-formcells .weda-formcells__label {\\n padding-bottom: 8px;\\n}\\n\\n.weda-formcells__content.weui-flex__item .weui-cell_form {\\n padding: 0;\\n}\\n\\n.weda-formcells__content.weui-flex__item .weui-cell_form {\\n padding-right: 16px;\\n}\\n\\n/* formcell 在 form container 外部兼容 and 独立 layout 适配 */\\n\\n.weda-formcells__pc.vertical .wedatea2td-form__controls,\\n.weda-formcells__pc.vertical .wedatea2td-form__label {\\n display: block;\\n}\\n.weda-formcells__pc.vertical .wedatea2td-form__label {\\n padding-bottom: 0;\\n padding-top: 0;\\n width: auto;\\n margin-bottom: 10px;\\n}\\n\\n.weda-formcells__pc.vertical .wedatea2td-form__help-text {\\n margin-top: 4px;\\n}\\n.weda-formcells__pc.vertical .wedatea2td-form__controls--text {\\n padding-top: 0;\\n}\\n\\n.weda-formcells__pc .wedatea2td-form__controls {\\n display: table-cell;\\n vertical-align: top;\\n padding-bottom: 16px;\\n}\\n.weda-formcells__pc .wedatea2td-form__label {\\n display: table-cell; /*container 外适配*/\\n vertical-align: baseline;\\n padding-top: 7px;\\n padding-bottom: 7px;\\n}\\n.wedatea2td-form .wedatea2td-form__label .wedatea2td-icon {\\n vertical-align: -4px;\\n}\\n.weda-formcells__pc .wedatea2td-form__label label,\\n.weda-formcells__pc .wedatea2td-form__label legend {\\n display: inline-block;\\n transform: translateZ(0);\\n width: 98px;\\n}\\n\\n/*formcell*/\\n\\n.weda-formcells__full-width .wedatea2td-form__controls {\\n width: 100%;\\n}\\n/*formcell end*/\\n\\n/* formcell 在 form container 外部兼容 */\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/react-scripts/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".weda-link {\\n text-align: center;\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\\n.weda-link-slot {\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://src/web/components/link/index.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,sBAAsB;AACxB;;AAEA;AACA\",\"sourcesContent\":[\".weda-link {\\n text-align: center;\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\\n.weda-link-slot {\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/react-scripts/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".weda-RichTextView {\\n font-size: 14px;\\n}\\n.weda-RichTextView blockquote {\\n margin: 0 0 10px;\\n padding: 15px 20px;\\n background-color: #f1f2f3;\\n border-left: 5px solid #ccc;\\n color: #666;\\n font-style: italic;\\n}\\n\\n.weda-RichTextView pre {\\n max-width: 100%;\\n max-height: 100%;\\n margin: 10px 0;\\n padding: 15px;\\n overflow: auto;\\n background-color: #f1f2f3;\\n border-radius: 3px;\\n color: #666;\\n font-family: monospace;\\n font-size: 1em;\\n /* font-weight: 400; */\\n font-weight: inherit;\\n line-height: 1.14285em;\\n word-wrap: break-word;\\n white-space: pre-wrap;\\n}\\n\\n.weda-RichTextView h1 {\\n font-size: 2em;\\n}\\n\\n.weda-RichTextView h2 {\\n font-size: 1.5em;\\n}\\n\\n.weda-RichTextView h3 {\\n font-size: 1.17em;\\n}\\n\\n.weda-RichTextView h4 {\\n font-size: 1em;\\n}\\n\\n.weda-RichTextView h5 {\\n font-size: 0.83em;\\n}\\n\\n.weda-RichTextView h6 {\\n font-size: 0.67em;\\n}\\n\\n.weda-RichTextView ul {\\n list-style: disc !important;\\n padding: revert !important;\\n}\\n\\n.weda-RichTextView ol {\\n list-style: decimal !important;\\n padding: revert !important;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://src/web/components/richTextView/index.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,eAAe;AACjB;AACA;EACE,gBAAgB;EAChB,kBAAkB;EAClB,yBAAyB;EACzB,2BAA2B;EAC3B,WAAW;EACX,kBAAkB;AACpB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,aAAa;EACb,cAAc;EACd,yBAAyB;EACzB,kBAAkB;EAClB,WAAW;EACX,sBAAsB;EACtB,cAAc;EACd,sBAAsB;EACtB,oBAAoB;EACpB,sBAAsB;EACtB,qBAAqB;EACrB,qBAAqB;AACvB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,2BAA2B;EAC3B,0BAA0B;AAC5B;;AAEA;EACE,8BAA8B;EAC9B,0BAA0B;AAC5B\",\"sourcesContent\":[\".weda-RichTextView {\\n font-size: 14px;\\n}\\n.weda-RichTextView blockquote {\\n margin: 0 0 10px;\\n padding: 15px 20px;\\n background-color: #f1f2f3;\\n border-left: 5px solid #ccc;\\n color: #666;\\n font-style: italic;\\n}\\n\\n.weda-RichTextView pre {\\n max-width: 100%;\\n max-height: 100%;\\n margin: 10px 0;\\n padding: 15px;\\n overflow: auto;\\n background-color: #f1f2f3;\\n border-radius: 3px;\\n color: #666;\\n font-family: monospace;\\n font-size: 1em;\\n /* font-weight: 400; */\\n font-weight: inherit;\\n line-height: 1.14285em;\\n word-wrap: break-word;\\n white-space: pre-wrap;\\n}\\n\\n.weda-RichTextView h1 {\\n font-size: 2em;\\n}\\n\\n.weda-RichTextView h2 {\\n font-size: 1.5em;\\n}\\n\\n.weda-RichTextView h3 {\\n font-size: 1.17em;\\n}\\n\\n.weda-RichTextView h4 {\\n font-size: 1em;\\n}\\n\\n.weda-RichTextView h5 {\\n font-size: 0.83em;\\n}\\n\\n.weda-RichTextView h6 {\\n font-size: 0.67em;\\n}\\n\\n.weda-RichTextView ul {\\n list-style: disc !important;\\n padding: revert !important;\\n}\\n\\n.weda-RichTextView ol {\\n list-style: decimal !important;\\n padding: revert !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/react-scripts/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".weda-text {\\n text-overflow: ellipsis;\\n overflow: hidden;\\n display: -webkit-box;\\n -webkit-box-orient: vertical;\\n /* -webkit-line-clamp: 1;\\n white-space: pre-line; */\\n}\\n.weda-text.level_1 {\\n font-size: 64px !important;\\n}\\n.weda-text.level_2 {\\n font-size: 56px !important;\\n}\\n.weda-text.level_3 {\\n font-size: 48px !important;\\n}\\n.weda-text.level_4 {\\n font-size: 40px !important;\\n}\\n.weda-text.level_5 {\\n font-size: 32px !important;\\n}\\n.weda-text.level_6 {\\n font-size: 24px !important;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://src/web/components/text/index.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,uBAAuB;EACvB,gBAAgB;EAChB,oBAAoB;EACpB,4BAA4B;EAC5B;0BACwB;AAC1B;AACA;EACE,0BAA0B;AAC5B;AACA;EACE,0BAA0B;AAC5B;AACA;EACE,0BAA0B;AAC5B;AACA;EACE,0BAA0B;AAC5B;AACA;EACE,0BAA0B;AAC5B;AACA;EACE,0BAA0B;AAC5B\",\"sourcesContent\":[\".weda-text {\\n text-overflow: ellipsis;\\n overflow: hidden;\\n display: -webkit-box;\\n -webkit-box-orient: vertical;\\n /* -webkit-line-clamp: 1;\\n white-space: pre-line; */\\n}\\n.weda-text.level_1 {\\n font-size: 64px !important;\\n}\\n.weda-text.level_2 {\\n font-size: 56px !important;\\n}\\n.weda-text.level_3 {\\n font-size: 48px !important;\\n}\\n.weda-text.level_4 {\\n font-size: 40px !important;\\n}\\n.weda-text.level_5 {\\n font-size: 32px !important;\\n}\\n.weda-text.level_6 {\\n font-size: 24px !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/react-scripts/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"a.weda-uploader-file-view__single {\\n display: inline-block;\\n vertical-align: middle;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n max-width: 100%;\\n}\\na.weda-uploader-file-view__single:hover {\\n text-decoration: underline;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://src/web/components/uploaderFileView/index.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,qBAAqB;EACrB,sBAAsB;EACtB,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,eAAe;AACjB;AACA;EACE,0BAA0B;AAC5B\",\"sourcesContent\":[\"a.weda-uploader-file-view__single {\\n display: inline-block;\\n vertical-align: middle;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n max-width: 100%;\\n}\\na.weda-uploader-file-view__single:hover {\\n text-decoration: underline;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/react-scripts/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".g-uploader-view {\\n margin: 0;\\n padding: 0;\\n}\\n\\n.g-uploader-view .g-uploader-view__image-list {\\n display: flex;\\n flex-wrap: wrap;\\n}\\n\\n.g-uploader-view .g-uploader-view__image-box {\\n height: 100px;\\n width: 100px;\\n margin-right: 8px;\\n margin-bottom: 8px;\\n background: #f2f2f2;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.g-uploader-view .g-uploader-view__empty {\\n padding: 8px;\\n background-image: url('https://main.qcloudimg.com/raw/c85c9a875e9754545ee19f20438b2caa.svg');\\n}\\n\\n.g-uploader-view .g-uploader-view__image {\\n width: 100%;\\n height: auto;\\n max-height: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://src/web/components/uploaderView/index.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,SAAS;EACT,UAAU;AACZ;;AAEA;EACE,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;EAClB,mBAAmB;EACnB,aAAa;EACb,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,YAAY;EACZ,4FAA4F;AAC9F;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;AAClB\",\"sourcesContent\":[\".g-uploader-view {\\n margin: 0;\\n padding: 0;\\n}\\n\\n.g-uploader-view .g-uploader-view__image-list {\\n display: flex;\\n flex-wrap: wrap;\\n}\\n\\n.g-uploader-view .g-uploader-view__image-box {\\n height: 100px;\\n width: 100px;\\n margin-right: 8px;\\n margin-bottom: 8px;\\n background: #f2f2f2;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.g-uploader-view .g-uploader-view__empty {\\n padding: 8px;\\n background-image: url('https://main.qcloudimg.com/raw/c85c9a875e9754545ee19f20438b2caa.svg');\\n}\\n\\n.g-uploader-view .g-uploader-view__image {\\n width: 100%;\\n height: auto;\\n max-height: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/react-scripts/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/**\\n * 组件库通用样式\\n */\\n\\nbody .weda-ui {\\n --weui-BRAND: #006eff;\\n --weui-TAG-TEXT-BLUE: #0067eb;\\n --weui-BTN-DEFAULT-COLOR: #576b95;\\n --weui-WECHAT: #07c160;\\n --weui-TAG-TEXT-GREEN: #06ae56;\\n --weui-BG-2: rgba(255, 255, 255, 0);\\n}\\n\\n.weda-ui.weui-form {\\n min-height: 0%;\\n padding: 0;\\n}\\n\\n.weda-ui .weui-cells {\\n margin-top: 0;\\n}\\n\\n.weda-ui.weui-form .weui-cells__tips {\\n margin-bottom: 16px;\\n}\\n\\n.weda-ui.weda-picker {\\n --weui-BG-2: rgba(255, 255, 255, 1);\\n}\\n\\n/* 为了避免该属性被转为REM, 所以使用大写的PX */\\n.weda-ui.weda-picker .weui-picker__item {\\n /* prettier-ignore */\\n height: 48PX;\\n /* prettier-ignore */\\n line-height: 48PX;\\n}\\n\\n.weda-ui.weda-picker .weui-btn_primary:not(.weui-btn_disabled):active {\\n background-color: var(--weui-TAG-TEXT-BLUE);\\n}\\n\\n@media (min-width: 1024px) {\\n .weda-ui .weui-cells {\\n /* prettier-ignore */\\n font-size: 1em;\\n }\\n}\\n@media (min-width: 1024px) {\\n .weui .weui-cell_active:active {\\n background-color: unset !important;\\n }\\n}\\n\\n.weda-ui.weda-radio .weui-check,\\n.weda-ui.weda-checkbox .weui-check {\\n position: absolute;\\n left: -9999px;\\n width: 0;\\n height: 0;\\n}\\n\\n.weda-ui .weui-cell {\\n font-size: inherit; /* 要让内联样式生效 */\\n}\\n\\n.weda-ui .weui-cells {\\n font-size: 1em;\\n}\\n\\n.weui-picker a:link:hover {\\n text-decoration: none;\\n}\\n\\n.weda-formcells__pc.vertical .wedatea2td-form__label label {\\n width: auto; /* vertcal 情况下label不固定宽度 */\\n}\\n\\n.weda-ui .weui-btn_input-clear {\\n visibility: hidden; /* visibilty 防止居中而且宽度auto时,出现输入时宽度抖动 */\\n display: inline;\\n}\\n.weui-input:focus:not(:-moz-placeholder-shown) + .weui-btn_input-clear {\\n visibility: visible;\\n display: inline;\\n}\\n.weui-input:focus:not(:-ms-input-placeholder) + .weui-btn_input-clear {\\n visibility: visible;\\n display: inline;\\n}\\n.weui-input:focus:not(:placeholder-shown) + .weui-btn_input-clear {\\n visibility: visible;\\n display: inline;\\n}\\n\\n.weda-ui .wedatea2td-form__controls {\\n font-size: 1em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://src/web/weda-ui.css\"],\"names\":[],\"mappings\":\"AAAA;;EAEE;;AAEF;EACE,qBAAqB;EACrB,6BAA6B;EAC7B,iCAAiC;EACjC,sBAAsB;EACtB,8BAA8B;EAC9B,mCAAmC;AACrC;;AAEA;EACE,cAAc;EACd,UAAU;AACZ;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mCAAmC;AACrC;;AAEA,6BAA6B;AAC7B;EACE,oBAAoB;EACpB,YAAY;EACZ,oBAAoB;EACpB,iBAAiB;AACnB;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE;IACE,oBAAoB;IACpB,cAAc;EAChB;AACF;AACA;EACE;IACE,kCAAkC;EACpC;AACF;;AAEA;;EAEE,kBAAkB;EAClB,aAAa;EACb,QAAQ;EACR,SAAS;AACX;;AAEA;EACE,kBAAkB,EAAE,aAAa;AACnC;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,WAAW,EAAE,0BAA0B;AACzC;;AAEA;EACE,kBAAkB,EAAE,sCAAsC;EAC1D,eAAe;AACjB;AACA;EACE,mBAAmB;EACnB,eAAe;AACjB;AAHA;EACE,mBAAmB;EACnB,eAAe;AACjB;AAHA;EACE,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,cAAc;AAChB\",\"sourcesContent\":[\"/**\\n * 组件库通用样式\\n */\\n\\nbody .weda-ui {\\n --weui-BRAND: #006eff;\\n --weui-TAG-TEXT-BLUE: #0067eb;\\n --weui-BTN-DEFAULT-COLOR: #576b95;\\n --weui-WECHAT: #07c160;\\n --weui-TAG-TEXT-GREEN: #06ae56;\\n --weui-BG-2: rgba(255, 255, 255, 0);\\n}\\n\\n.weda-ui.weui-form {\\n min-height: 0%;\\n padding: 0;\\n}\\n\\n.weda-ui .weui-cells {\\n margin-top: 0;\\n}\\n\\n.weda-ui.weui-form .weui-cells__tips {\\n margin-bottom: 16px;\\n}\\n\\n.weda-ui.weda-picker {\\n --weui-BG-2: rgba(255, 255, 255, 1);\\n}\\n\\n/* 为了避免该属性被转为REM, 所以使用大写的PX */\\n.weda-ui.weda-picker .weui-picker__item {\\n /* prettier-ignore */\\n height: 48PX;\\n /* prettier-ignore */\\n line-height: 48PX;\\n}\\n\\n.weda-ui.weda-picker .weui-btn_primary:not(.weui-btn_disabled):active {\\n background-color: var(--weui-TAG-TEXT-BLUE);\\n}\\n\\n@media (min-width: 1024px) {\\n .weda-ui .weui-cells {\\n /* prettier-ignore */\\n font-size: 1em;\\n }\\n}\\n@media (min-width: 1024px) {\\n .weui .weui-cell_active:active {\\n background-color: unset !important;\\n }\\n}\\n\\n.weda-ui.weda-radio .weui-check,\\n.weda-ui.weda-checkbox .weui-check {\\n position: absolute;\\n left: -9999px;\\n width: 0;\\n height: 0;\\n}\\n\\n.weda-ui .weui-cell {\\n font-size: inherit; /* 要让内联样式生效 */\\n}\\n\\n.weda-ui .weui-cells {\\n font-size: 1em;\\n}\\n\\n.weui-picker a:link:hover {\\n text-decoration: none;\\n}\\n\\n.weda-formcells__pc.vertical .wedatea2td-form__label label {\\n width: auto; /* vertcal 情况下label不固定宽度 */\\n}\\n\\n.weda-ui .weui-btn_input-clear {\\n visibility: hidden; /* visibilty 防止居中而且宽度auto时,出现输入时宽度抖动 */\\n display: inline;\\n}\\n.weui-input:focus:not(:placeholder-shown) + .weui-btn_input-clear {\\n visibility: visible;\\n display: inline;\\n}\\n\\n.weda-ui .wedatea2td-form__controls {\\n font-size: 1em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","/* eslint-disable import/export */\n\nexport * from './web/index';\nexport { default as default } from './web/index';\n","export { default as showToast } from './showToast';\nexport { default as showModal } from './showModal';\n","import * as ReactDOM from 'react-dom';\nimport * as React from 'react';\nimport { forwardRef, useState, useEffect, useImperativeHandle } from 'react';\nimport { Modal, Button, Text, ModalProps, ConfigProvider } from 'tea-component';\nimport type {\n ModalShowHandle,\n ModalShowOptions,\n} from 'tea-component/lib/modal/ModalShow';\n\ninterface ModalShowInstance {\n setVisible: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nconst ModalShow = forwardRef(function ModalShow(\n props: ModalProps,\n ref: React.Ref<ModalShowInstance>\n) {\n const [visible, setVisible] = useState(false);\n\n // 渲染之后,马上显示\n useEffect(() => {\n setVisible(true);\n }, []);\n\n // 实例 ref 到外部\n useImperativeHandle(ref, () => ({ setVisible }));\n\n return <Modal {...props} visible={visible} />;\n});\n\nfunction show(options: ModalShowOptions): ModalShowHandle {\n const el = document.createElement('div');\n\n const instanceRef = React.createRef<ModalShowInstance>();\n\n ReactDOM.render(\n <ConfigProvider classPrefix=\"wedatea2td\">\n <ModalShow\n {...options}\n ref={instanceRef}\n onExited={() => ReactDOM.unmountComponentAtNode(el)}\n />\n </ConfigProvider>,\n el\n );\n\n return {\n destroy: () => {\n if (instanceRef.current) {\n instanceRef.current.setVisible(false);\n }\n },\n };\n}\n\nexport default async function showModal({ data }) {\n const {\n title,\n content,\n showCancel,\n cancelText = '取消',\n cancelColor,\n confirmText = '确定',\n confirmColor,\n success = () => {},\n fail = () => {},\n complete = () => {},\n } = data;\n\n return new Promise((resolve) => {\n const base = { cancel: false, confirm: false, content: null };\n\n const modal = show({\n caption: title,\n children: (\n <>\n <Modal.Body>{content}</Modal.Body>\n <Modal.Footer>\n <Button\n // type=\"primary\"\n onClick={() => {\n resolve({ ...base, confirm: true });\n modal.destroy();\n }}\n >\n <Text style={{ color: confirmColor }}>{confirmText}</Text>\n </Button>\n {showCancel && (\n <Button\n onClick={() => {\n resolve({ ...base, cancel: true });\n modal.destroy();\n }}\n >\n <Text style={{ color: cancelColor }}>{cancelText}</Text>\n </Button>\n )}\n </Modal.Footer>\n </>\n ),\n onClose: () => {\n resolve({ ...base, cancel: true });\n modal.destroy();\n },\n });\n }).then(\n (res) => {\n success && success(res);\n return res;\n },\n (e) => {\n // console.log(e);\n fail && fail();\n complete && complete();\n throw e;\n }\n );\n}\n","export default function showToast(/* { data, event } */) {\n // console.log({ data, event });\n}\n","var api = require(\"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\nif (module.hot) {\n if (!content.locals || module.hot.invalidate) {\n var isEqualLocals = function isEqualLocals(a, b, isNamedExport) {\n if (!a && b || a && !b) {\n return false;\n }\n\n var p;\n\n for (p in a) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (a[p] !== b[p]) {\n return false;\n }\n }\n\n for (p in b) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (!a[p]) {\n return false;\n }\n }\n\n return true;\n};\n var oldLocals = content.locals;\n\n module.hot.accept(\n \"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\",\n function () {\n content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\n if (!isEqualLocals(oldLocals, content.locals)) {\n module.hot.invalidate();\n\n return;\n }\n\n oldLocals = content.locals;\n\n update(content);\n }\n )\n }\n\n module.hot.dispose(function() {\n update();\n });\n}\n\nmodule.exports = content.locals || {};","import * as React from 'react';\nimport {\n Button as TeaButton,\n ButtonProps,\n ConfigProvider,\n} from 'tea-component';\nimport classNames from '../../utils/classnames';\nimport { usePlatform } from '../../utils/platform';\nimport type { CommonPropsType, unknownFunction } from '../../types';\n\nimport './index.css';\nimport { emptyObject } from '../../utils/constant';\n\n// 不用 react-weui 而直接用底层实现的原因是 react-weui 不能支持表单类型\nconst Button = ({\n text,\n size,\n type,\n contentSlot,\n formType,\n loading,\n disabled,\n events = emptyObject as Record<string, unknownFunction>,\n className,\n style,\n id,\n}: PropsType) => {\n const platform: string = usePlatform();\n const isH5: boolean = platform === 'h5';\n const cls = classNames({\n 'weda-ui': true,\n 'weda-button': true,\n 'weda-button-large': size === 'large',\n 'weda-button-mini': size === 'mini',\n 'weui-btn': isH5,\n 'weui-btn_mini': isH5 && size === 'mini',\n 'weui-btn_primary': isH5 && (type === 'primary' || type === 'wechat'),\n 'weui-btn_default': isH5 && type === 'default',\n 'weui-btn_warn': isH5 && type === 'warn',\n 'weui-btn_wechat': isH5 && type === 'wechat',\n 'weui-btn_disabled': isH5 && disabled,\n [className]: className,\n });\n const onClick = (e) => {\n if (events.tap) {\n events.tap({}, { originEvent: e });\n }\n };\n\n if (platform === 'h5') {\n return (\n <button\n className={cls}\n disabled={disabled}\n type={formType}\n style={style}\n id={id}\n onClick={onClick}\n >\n {loading && (\n <span className=\"weui-btn_loading\">\n <i className=\"weui-loading\" />\n </span>\n )}\n {text ? text : contentSlot}\n </button>\n );\n }\n\n return (\n <ConfigProvider classPrefix=\"wedatea2td\">\n <TeaButton\n loading={loading}\n onClick={onClick}\n disabled={disabled}\n htmlType={formType}\n type={toTeaButtonType(type)}\n style={style}\n className={cls}\n id={id}\n >\n {text ? text : contentSlot}\n </TeaButton>\n </ConfigProvider>\n );\n};\n\nfunction toTeaButtonType(type: PropsType['type']): ButtonProps['type'] {\n if (type === 'primary') return type;\n if (type === 'warn') return 'error';\n if (type === 'default') return 'primary';\n return 'primary';\n}\n\nexport interface PropsType extends CommonPropsType {\n /**\n * 内容\n */\n text?: string;\n /**\n * 样式类型\n */\n type?: 'primary' | 'warn' | 'wechat' | 'default';\n /**\n * 大小\n */\n size?: 'default' | 'mini' | 'large';\n /**\n * 是否禁用\n */\n disabled?: boolean;\n /**\n * 加载中\n */\n loading?: boolean;\n\n /**\n * 用于 form 类型\n */\n formType?: 'button' | 'submit' | 'reset';\n contentSlot?: string;\n}\n\nexport default Button;\n","import * as React from 'react';\nimport type { CommonPropsType } from '../../types';\nimport classNames from '../../utils/classnames';\nimport { emptyObject } from '../../utils/constant';\n\nexport default function Container({\n children,\n title,\n events = emptyObject,\n className,\n style,\n id,\n}: PropsType) {\n return (\n <div\n role=\"container\"\n id={id}\n style={style}\n className={classNames({ 'weda-ui': true, [className]: className })}\n title={title}\n onClick={(e) => events?.tap?.({}, { originEvent: e })}\n onContextMenu={(e) => events?.longpress?.({}, { originEvent: e })}\n onTouchStart={(e) => events?.touchstart?.({}, { originEvent: e })}\n onTouchMove={(e) => events?.touchmove?.({}, { originEvent: e })}\n onTouchCancel={(e) => events?.touchcancel?.({}, { originEvent: e })}\n onTouchEnd={(e) => events?.touchend?.({}, { originEvent: e })}\n >\n {children}\n </div>\n );\n}\n\nexport interface PropsType extends CommonPropsType {\n title?: string;\n}\n","import * as React from 'react';\nimport { ConfigProvider, Drawer, DrawerProps } from 'tea-component';\nimport type { CommonPropsType } from '../../types';\n\nconst TeaDrawer = ({\n size,\n title,\n style,\n events,\n visible,\n subtitle,\n showMask,\n className,\n placement,\n extraSlot,\n footerSlot,\n childrenSlot,\n disableCloseIcon,\n outerClickClosable,\n}: PropsType) => {\n const eventsList = {\n onClose: () => events?.onClose && events.onClose({}),\n onExited: () => events?.onExited && events.onExited({}),\n };\n return (\n <ConfigProvider classPrefix=\"wedatea2td\">\n <Drawer\n size={size}\n title={title}\n style={style}\n visible={visible}\n extra={extraSlot}\n footer={footerSlot}\n subtitle={subtitle}\n showMask={showMask}\n className={className}\n placement={placement}\n disableCloseIcon={disableCloseIcon}\n outerClickClosable={outerClickClosable}\n {...eventsList}\n >\n {childrenSlot}\n </Drawer>\n </ConfigProvider>\n );\n};\n\nexport interface PropsType\n extends CommonPropsType,\n Pick<\n DrawerProps,\n | 'size'\n | 'title'\n | 'showMask'\n | 'placement'\n | 'disableCloseIcon'\n | 'outerClickClosable'\n | 'subtitle'\n > {\n visible: boolean;\n title?: string;\n extraSlot?: React.ReactNode;\n footerSlot?: React.ReactNode;\n childrenSlot?: React.ReactNode;\n}\n\nexport default TeaDrawer;\nexport { TeaDrawer };\n","var api = require(\"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\nif (module.hot) {\n if (!content.locals || module.hot.invalidate) {\n var isEqualLocals = function isEqualLocals(a, b, isNamedExport) {\n if (!a && b || a && !b) {\n return false;\n }\n\n var p;\n\n for (p in a) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (a[p] !== b[p]) {\n return false;\n }\n }\n\n for (p in b) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (!a[p]) {\n return false;\n }\n }\n\n return true;\n};\n var oldLocals = content.locals;\n\n module.hot.accept(\n \"!!../../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\",\n function () {\n content = require(\"!!../../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\n if (!isEqualLocals(oldLocals, content.locals)) {\n module.hot.invalidate();\n\n return;\n }\n\n oldLocals = content.locals;\n\n update(content);\n }\n )\n }\n\n module.hot.dispose(function() {\n update();\n });\n}\n\nmodule.exports = content.locals || {};","import * as React from 'react';\n\nimport classNames from '../../../utils/classnames';\nimport './index.css';\nimport { usePlatform } from '../../../utils/platform';\nimport { ConfigProvider, Form as TeaForm } from 'tea-component';\nimport type { CommonFormPropsType } from '../types';\n\nexport default function FormCell({\n className,\n style,\n label,\n layout,\n children,\n multiCell,\n requiredFlag,\n size,\n}: PropsType) {\n const platform = usePlatform();\n const isFlex = layout !== 'vertical';\n\n if (platform === 'pc') {\n return (\n <ConfigProvider classPrefix=\"wedatea2td\">\n <TeaForm.Item\n style={style}\n className={classNames({\n 'weda-ui': true,\n 'weui-cells_forms': !multiCell,\n 'weui-cells_checkbox': multiCell,\n 'weda-formcells__pc': !!label,\n 'weda-formcells__full-width': size === 'full',\n [layout]: layout,\n [className]: [className],\n })}\n label={label}\n required={requiredFlag}\n >\n {children}\n </TeaForm.Item>\n </ConfigProvider>\n );\n }\n return (\n <div className={className} style={style}>\n <div\n className={classNames({\n 'weda-formcells': true,\n 'weui-cells': true,\n 'weui-cells_forms': !multiCell,\n 'weui-cells_checkbox': multiCell,\n 'weui-flex': isFlex,\n })}\n >\n {label ? (\n <div\n className={classNames({\n 'weda-formcells__label': true,\n // 标题也采用使用weui-cell的样式\n 'weui-cell': true,\n })}\n >\n <label>{label}</label>\n {requiredFlag ? (\n <label className=\"weda-formcells__flag\">*</label>\n ) : null}\n </div>\n ) : null}\n <div\n className={classNames({\n 'weda-formcells__content': true,\n 'weui-flex__item': isFlex,\n })}\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nexport interface PropsType extends CommonFormPropsType {\n multiCell?: boolean;\n size?: string;\n}\n","import * as React from 'react';\nimport FormCell from './formcell';\n\n/**\n *\n * @returns {(props: any) => JSX.Element}\n */\nexport function renderDecorator<D = any>(\n filedNode: React.ReactNode,\n DecoratorComponent: React.FC<D> = FormCell\n) {\n if (!DecoratorComponent) {\n return function WedaFormField() {\n return <React.Fragment>{filedNode}</React.Fragment>;\n };\n }\n\n return function WedaFormFiled(decoratorProps) {\n if (Array.isArray(DecoratorComponent) && DecoratorComponent.length === 2) {\n decoratorProps = DecoratorComponent[1];\n DecoratorComponent = DecoratorComponent[0];\n }\n\n return (\n <DecoratorComponent {...decoratorProps}>{filedNode}</DecoratorComponent>\n );\n };\n}\n","import * as React from 'react';\nimport {\n Upload,\n Button,\n Icon,\n message,\n ErrorTip,\n ImagePreview,\n ConfigProvider,\n} from 'tea-component';\nimport classNames from '../../../utils/classnames';\nimport { getCloudInstance, getTempFileURL } from '../../../utils/tcb';\nimport { isCloudFileID, randomStr } from '../../../utils/platform';\nimport isObjectEqual from '../../../utils/isObjectEqual';\nimport { H5UploaderProps } from './uploader.h5';\nimport { emptyObject } from '../../../utils/constant';\n// 默认组件类前缀\nexport const CLASS_PREFIX = 'weda-uploader-pc';\n// 默认图片类型\nexport const IMAGE_TYPES = [\n 'image/jpg',\n 'image/png',\n 'image/tif',\n 'image/bmp',\n 'image/jpeg',\n 'image/tiff',\n];\n\n/**\n * 上传图片-官方组件\n */\n// eslint-disable-next-line react/prop-types\nexport function UploaderPC({\n layout,\n className,\n id,\n style,\n title,\n tips,\n ...props\n}) {\n const cls = classNames({\n 'weda-ui': true,\n [CLASS_PREFIX]: true,\n [layout]: layout,\n [className]: className,\n });\n return (\n <div className={cls} id={id} style={style}>\n <div className={`${CLASS_PREFIX}__header`}>\n {title && <div className={`${CLASS_PREFIX}__title`}>{title}</div>}\n {tips && (\n <div className={`${CLASS_PREFIX}__description`}>{tips || ''}</div>\n )}\n </div>\n <UploaderPCInner {...props} />\n </div>\n );\n}\n\nexport function UploaderPCInner(props) {\n const {\n tips = '',\n btnTitle = '上传图片',\n maxUploadCount = 9,\n maxSize = 10,\n value: defaultValue, // 需要兼容 cloud:和https: 协议,需要兼容 字符串和字符串数组\n acceptTypes = IMAGE_TYPES,\n uploadPath = 'weda-uploader',\n events = emptyObject,\n single = false,\n onChange,\n } = props;\n\n // 上传中\n const [uploading, setUploading] = React.useState(false);\n //上传进度\n const [progress, setProgress] = React.useState(0);\n // 文件列表\n const [fileIDList, setfileIDList] = React.useState([]);\n const fileRef = React.useRef<string[] | string>([]);\n React.useEffect(() => {\n let initialValue = []\n .concat(defaultValue)\n .filter((d) => typeof d === 'string' && d !== '');\n if (single) {\n initialValue = initialValue[0] ? [initialValue[0]] : [];\n }\n setfileIDList(initialValue);\n }, [defaultValue]);\n\n // 值变化事件\n React.useEffect(() => {\n if (!isObjectEqual(fileRef.current, fileIDList)) {\n if (single) {\n const file = fileIDList[0] || '';\n onChange && onChange(file);\n events.change && events.change({ value: file });\n } else {\n onChange && onChange(fileIDList);\n events.change && events.change({ value: fileIDList });\n }\n fileRef.current = fileIDList;\n }\n });\n\n // 方法:上传前,判断图片大小、数量是否满足,取消默认组件的上传事件,用自定义的 tcb 上传方法\n const beforeHandle = (file, fileList, isAccepted, error) => {\n if (!isAccepted) {\n try {\n const errorList = [];\n if (error.find((item) => item?.code === 'file-invalid-type')) {\n errorList.push('上传图片类型错误');\n }\n if (error.find((item) => item?.code === 'file-too-large')) {\n errorList.push(`上传图片大小不能超过${maxSize}M`);\n }\n message.error({ content: errorList.join(', ') });\n } catch (e) {}\n return false;\n }\n uploadTcb(file);\n return false;\n };\n\n // 自定义上传到 Tcb 的 COS\n const uploadTcb = (file) => {\n setUploading(true);\n getCloudInstance().then(async (tcb) => {\n try {\n const cloudPath = `${uploadPath}/${randomStr()}-${file?.name}`;\n const { fileID } = await tcb.uploadFile({\n cloudPath,\n filePath: file,\n onUploadProgress: onProgress,\n });\n fileID && setfileIDList((list) => [...list, fileID]);\n fileID && events.success && events.success({ value: fileID, file });\n } catch (err) {\n message.error({ content: `${err}` || '上传失败' });\n events.error && events.error(err);\n } finally {\n setUploading(false);\n setProgress(0);\n }\n });\n };\n\n // 计算上传进度\n const onProgress = (progressEvent) => {\n let percentCompleted = 0;\n try {\n percentCompleted = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total\n );\n percentCompleted < 100 ? percentCompleted : 100;\n } catch (e) {}\n setProgress(percentCompleted);\n };\n\n // 删除图片\n const deleteHandle = (fileID) => {\n setfileIDList((list) => list.filter((d) => d !== fileID));\n };\n\n // 转换后的属性\n const extraProps = {};\n extraProps['accept'] =\n acceptTypes.includes('image/*') || acceptTypes.length === 0\n ? IMAGE_TYPES\n : Array.from(new Set(acceptTypes));\n tips && (extraProps['title'] = tips);\n maxSize && (extraProps['maxSize'] = maxSize * 1024 * 1024);\n\n return (\n <ConfigProvider classPrefix=\"wedatea2td\">\n <div className=\"_weda-fn-upload-result\">\n {fileIDList.map((d) => (\n <div className=\"_weda-fn-upload-result__item\" key={d}>\n <TcbImage fileID={d} />\n <div className=\"_weda-fn-upload-result__op\">\n <Button\n onClick={() => deleteHandle(d)}\n className={`${CLASS_PREFIX}__btn`}\n >\n 删除\n </Button>\n </div>\n </div>\n ))}\n {uploading && (\n <div className=\"_weda-fn-upload-result__item\">\n <div className=\"_weda-fn-upload-result__status\" key=\"_place_image\">\n <Icon type=\"loading\" />\n {!!progress && (\n <span className=\"wedatea2td-mt-1n wedatea2td-text-label wedatea2td-fz-reset\">\n 上传{progress}%...\n </span>\n )}\n </div>\n </div>\n )}\n <div className={`${CLASS_PREFIX}__input-box`}>\n {((!single && fileIDList.length < maxUploadCount) ||\n (single && fileIDList.length < 1)) && ( // single 模式时,仅当数组为空时显示\n <Upload {...extraProps} beforeUpload={beforeHandle}>\n <li className=\"_weda-fn-upload-result__item _weda-fn-upload-result__item--upload\">\n <div className=\"_weda-fn-upload-result__status\">\n <i\n className=\"wedatea2td-icon wedatea2td-icon-plus\"\n role=\"img\"\n aria-label=\"plus\"\n ></i>\n <span className=\"wedatea2td-mt-1n wedatea2td-text-label wedatea2td-fz-reset\">\n {btnTitle}\n </span>\n </div>\n </li>\n </Upload>\n )}\n </div>\n </div>\n </ConfigProvider>\n );\n}\n\nexport interface TcbImageProps {\n fileID?: string; // 云存储id\n isZoom?: boolean; // 是否点击放大\n onError?: (e: unknown) => void; // 图片显示错误事件\n}\nexport const TcbImage = (props: TcbImageProps) => {\n const { fileID, isZoom, ...rest } = props;\n const [src, setSrc] = React.useState('');\n const [isError, setIsError] = React.useState(false);\n React.useEffect(() => {\n const getSrc = async () => {\n try {\n const _src = await getTempFileURL(fileID);\n _src ? setSrc(_src) : setIsError(true);\n } catch (e) {\n message.error({ content: '图片加载失败' });\n }\n };\n isCloudFileID(fileID) ? getSrc() : setSrc(fileID);\n }, [fileID]);\n\n return isError ? (\n <ErrorTip />\n ) : src ? (\n isZoom ? (\n <ImagePreview\n key={fileID}\n className={`${CLASS_PREFIX}__image`}\n {...rest}\n src={src}\n previewSrc={src}\n /** @ts-expect-error tea imagepreview onError */\n onError={(e) => {\n setIsError(true);\n props?.onError && props.onError(e);\n }}\n />\n ) : (\n <img\n key={fileID}\n className={`${CLASS_PREFIX}__image`}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...rest}\n src={src}\n onError={(e) => {\n setIsError(true);\n props?.onError && props.onError(e);\n }}\n />\n )\n ) : null;\n};\n\nexport interface PropsType extends H5UploaderProps {\n tips?: string;\n value: string | string[];\n btnTitle?: string;\n uploadPath?: string;\n}\n","import * as React from 'react';\nimport weui from '../../../utils/weui';\nimport type { CommonFormPropsType } from '../types';\nimport isObjectEqual from '../../../utils/isObjectEqual';\nimport {\n ConfigProvider,\n Button,\n Icon,\n Text,\n List,\n Progress,\n Tooltip,\n} from 'tea-component';\nimport {\n filterStrList,\n isCloudFileID,\n isHttpFileID,\n transSize,\n downloadFile,\n transFileCloudidToName,\n randomStr,\n} from '../../../utils/platform';\nimport { getCloudInstance, getTempFileURL } from '../../../utils/tcb';\nimport classNames from '../../../utils/classnames';\nimport { renderDecorator } from '../renderDecorator';\nimport type { unknownFunction } from '../../../types';\nimport { emptyArray, emptyObject } from '../../../utils/constant';\n// 默认组件类前缀\nconst CLASS_PREFIX = 'weda-upload-file-mobile';\n// 默认图片类型\nexport const FILES_TYPES = [\n '.doc',\n '.docx',\n '.xml',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n];\n// 上传状态字典\nconst statusMap = {\n UPLOAD_STATUS_PENDING: { title: '等待上传', icon: 'pending' },\n UPLOAD_STATUS_LOADING: { title: '上传中', icon: 'loading' },\n UPLOAD_STATUS_SUCCESS: { title: '上传成功', icon: 'success' },\n UPLOAD_STATUS_ERROR: { title: '上传失败', icon: 'error' },\n};\n// 上传文件Context\nconst FileContext = React.createContext(null);\n/**\n * 上传文件 H5 版本\n */\nconst defaultStyle = { margin: '0,-5px' };\nexport function UploadFileH5({\n // 系统属性\n layout,\n id = '',\n style = defaultStyle,\n labelVisible = true,\n label = '上传文件',\n requiredFlag = false,\n disabled = false,\n className = '',\n acceptTypes = emptyArray,\n // 组件属性\n tips = '',\n btnTitle = '点击上传',\n maxUploadCount = 9,\n maxSize = 10,\n deleteVisible = true,\n downloadVisible = true,\n value = emptyArray, // 需要兼容 cloud:和https: 协议,需要兼容字符串和字符串数组\n events = emptyObject,\n defaultValue,\n uploadPath = 'weda-uploader',\n single = true,\n onChange = null,\n isEdit = true,\n}: IUploadFileH5) {\n const [fileIDList, setfileIDList] = React.useState(\n filterStrList([].concat(defaultValue, value))\n ); // 上传成功文件ID列表,fileID[]\n const [fileList, setFileList] = React.useState([]); // 上传中的文件列表,file[],file为原始文件 + uuid属性\n const [fileSizeObj, setFileSizeObj] = React.useState({}); // 管理上传文件大小 {uuid:size}\n // 两次默认值不同, 需要刷新\n const prevDefaultRef = React.useRef<any>([]);\n const fileRef = React.useRef(fileIDList);\n React.useMemo(() => {\n //有有效默认值时不刷新,解决初次渲染默认值不显示问题\n if (\n defaultValue &&\n !isObjectEqual(prevDefaultRef.current, defaultValue) &&\n (JSON.stringify(prevDefaultRef.current) == '[]' ||\n !prevDefaultRef.current)\n ) {\n prevDefaultRef.current = defaultValue;\n setfileIDList(filterStrList([].concat(defaultValue)));\n }\n }, [defaultValue]);\n React.useEffect(() => {\n // 外部 onChange 事件\n const pureFileIDList = fileIDList.filter(\n (d) => isCloudFileID(d) || isHttpFileID(d)\n );\n if (single) {\n const file = pureFileIDList[0] || '';\n file && onChange && onChange(file);\n events?.change?.({ value: file });\n } else {\n onChange && onChange(pureFileIDList);\n events?.change?.({ value: pureFileIDList });\n }\n if (!isObjectEqual(fileRef.current, fileIDList)) {\n events?.success?.({ value: pureFileIDList });\n fileRef.current = fileIDList;\n }\n }, [fileIDList]);\n\n // 外层组件类\n const cls = classNames({\n 'weda-ui': true,\n //'weui-cells': true,\n //'weui-cells_form': true,\n 'weui-cells_checkbox': true,\n [className]: className,\n });\n const accepts = React.useMemo(() => {\n return acceptTypes.includes('*') || acceptTypes.length === 0\n ? ['*']\n : Array.from(new Set(acceptTypes));\n }, [acceptTypes]);\n\n // 上传后文件列表 fileIDList 改变事件,'add'|'delete'\n const handleChange = ({ fileID, uuid, type, size }) => {\n // 上传时新增事件\n if (type === 'add') {\n fileID && setFileSizeObj((obj) => ({ ...obj, [fileID]: size }));\n fileID && setfileIDList([...fileIDList, fileID]);\n } else {\n fileID && setfileIDList(fileIDList.filter((f) => f !== fileID));\n }\n uuid && setFileList((list) => list.filter((item) => uuid !== item?._uuid));\n };\n\n // 上传组件属性\n const uploadProps = {\n multiple: !single,\n };\n tips && (uploadProps['label'] = tips);\n maxSize && (uploadProps['maxSize'] = maxSize * 1024 * 1024);\n const btnDisabled =\n fileIDList.length >= maxUploadCount ||\n (single && fileIDList.length > 0) ||\n disabled;\n\n return renderDecorator(\n <ConfigProvider classPrefix=\"wedatea2td\">\n <FileContext.Provider\n value={{\n uploadPath,\n downloadVisible,\n deleteVisible,\n onChange: handleChange,\n isEdit,\n events,\n fileSizeObj,\n }}\n >\n <div data-testid=\"uploadFileH5\" className={cls} id={id} style={style}>\n <div className={classNames(`${CLASS_PREFIX}`)}>\n {isEdit && (\n <div className={classNames(`${CLASS_PREFIX}__hd`, layout)}>\n <div>\n {btnDisabled ? (\n <Button\n type=\"weak\"\n className={classNames(`${CLASS_PREFIX}__btn--weak`)}\n disabled={btnDisabled}\n >\n {btnTitle}\n </Button>\n ) : (\n <div>\n <input\n id=\"uploaderInput\"\n type=\"file\"\n data-testid=\"button-up\"\n className=\"weui-uploader-mobile__input\"\n accept={accepts.join(',')}\n multiple={!single}\n onChange={(e) => {\n const fileList = [...e.target.files];\n if (single && fileList.length > 1) {\n weui.alert(`上传文件总数不能超过1个`);\n return false;\n }\n if (\n fileList.length + fileIDList.length >\n maxUploadCount\n ) {\n weui.alert(\n `上传文件总数不能超过${maxUploadCount}个`\n );\n return false;\n }\n if (\n maxSize &&\n fileList.some((f) => f.size > maxSize * 1024 * 1024)\n ) {\n weui.alert(`请上传不超过${maxSize}M的文件`);\n return false;\n }\n if (\n fileList.some((f) => f.size > 1024 * 1024 * 1024)\n ) {\n weui.alert(`请上传不超过1024M的文件`);\n return false;\n }\n fileList.forEach((f) => (f['_uuid'] = randomStr()));\n setFileList((list) => [...list, ...fileList]);\n }}\n />\n <a\n type=\"weak\"\n className=\"wedatea2td-btn wedatea2td-btn--weak\"\n style={{ fontSize: '1em' }}\n >\n 点击上传\n </a>\n {!single && (\n <Text className={`${CLASS_PREFIX}__tips`}>\n 支持批量上传\n </Text>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n <div className={`${CLASS_PREFIX}__bd`}>\n <List>\n {fileIDList.map((d) => (\n <List.Item key={d}>\n {\n <TcbFileEcho\n fileID={d}\n fileList={fileList}\n onChange={handleChange}\n deleteVisible={deleteVisible}\n downloadVisible={downloadVisible}\n />\n }\n </List.Item>\n ))}\n {fileList.map((item) => (\n <List.Item key={item?._uuid}>\n {\n <TcbFileUpload\n file={item}\n downloadVisible={downloadVisible}\n deleteVisible={deleteVisible}\n />\n }\n </List.Item>\n ))}\n </List>\n </div>\n </div>\n </div>\n </FileContext.Provider>\n </ConfigProvider>\n )({\n id,\n className: cls,\n style,\n label: labelVisible ? label : null,\n layout,\n multiCell: false,\n requiredFlag,\n });\n}\nexport interface IUploadFileH5 extends CommonFormPropsType {\n className?: string; // 传入类\n label?: string; // 官方属性:标题\n tips?: string; // 官方属性:提示\n btnTitle?: string; // 官方属性:上传按钮标题\n maxUploadCount?: number; // 官方属性:上传文件最大数量,作用于 数组,用 single 控制数组还是单个对象\n deleteVisible?: boolean;\n downloadVisible?: boolean;\n acceptTypes?: Readonly<string[] | string>;\n disabled?: boolean;\n defaultValue?: string | string[];\n maxSize?: number; // 官方属性:单个图片大小限制,单位是M\n value?: Readonly<string | string[]>; // 官方属性:值\n uploadPath?: string; // 上传路径\n single?: boolean; // 单张上传还是多张上传,对应 onChange 参数为字符串还是字符串数组,value 在处理过程统一转为字符串数组\n onChange?: (v: any) => void; // 配合 fomily 受控使用\n isEdit: boolean; // 当前是编辑态还是展示态,展示态会去掉删除等按钮\n}\n\n/**\n * 基于 FileID 文件回显组件\n */\nconst TcbFileEcho = ({ fileID }: ITcbFileEcho) => {\n const [src, setSrc] = React.useState('');\n const { fileSizeObj } = React.useContext(FileContext) || {};\n React.useEffect(() => {\n const fetchFileId = async (id) => {\n if (isCloudFileID(id)) {\n try {\n const fileSrc = await getTempFileURL(id);\n setSrc(fileSrc);\n } catch (e) {}\n } else {\n setSrc(id);\n }\n };\n fetchFileId(fileID);\n }, [fileID]);\n //上传文件名称\n const label = React.useMemo(() => {\n if (isCloudFileID(fileID)) {\n return transFileCloudidToName(fileID);\n } else {\n return fileID;\n }\n }, [fileID]);\n //上传文件列表展示\n return (\n <div className={`${CLASS_PREFIX}__item`}>\n <div className={`${CLASS_PREFIX}__item-left`}>\n <UploadFileStatus title={label} size={fileSizeObj[fileID] || '--'} />\n </div>\n <div className={`${CLASS_PREFIX}__btn-group`}>\n <UploadFileAction\n status=\"UPLOAD_STATUS_SUCCESS\"\n fileID={fileID}\n src={src}\n />\n </div>\n </div>\n );\n};\ninterface ITcbFileEcho {\n fileID?: string;\n fileList?: any;\n file?: any;\n onChange?: unknownFunction;\n deleteVisible?: boolean;\n downloadVisible?: boolean;\n}\ninterface ITcbFileUpload {\n file?: any;\n downloadVisible?: boolean;\n deleteVisible?: boolean;\n}\n/**\n * 基于 File 上传文件过程组件\n */\nconst TcbFileUpload = ({ file }: ITcbFileUpload) => {\n const { uploadPath, onChange, events } = React.useContext(FileContext) || {};\n const [percent, setPercent] = React.useState(0); // 上传进度\n const [status, setStatus] = React.useState('UPLOAD_STATUS_PENDING'); // 上传状态\n const cancleRef = React.useRef(''); // 取消的uuid\n\n // 上传文件相关属性\n const { size, title, uuid } = React.useMemo(() => {\n const size = transSize(file?.size);\n const title = file?.name || '';\n const uuid = file?._uuid;\n return { size, title, uuid };\n }, [file?._uuid]);\n\n React.useEffect(() => {\n handleUpload(file);\n }, [file?._uuid]);\n\n // 上传过程\n const handleUpload = async (file) => {\n const tcb = await getCloudInstance();\n try {\n setStatus('UPLOAD_STATUS_PENDING');\n const { fileID } = await tcb.uploadFile({\n cloudPath: `${uploadPath}/${randomStr()}-${file?.name}`,\n filePath: file,\n onUploadProgress: (progressEvent) => {\n let percent = 0;\n percent = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total\n );\n setStatus('UPLOAD_STATUS_LOADING');\n setPercent(percent < 100 ? percent : 100);\n },\n });\n !cancleRef.current && onChange?.({ fileID, type: 'add', uuid, size });\n setStatus('UPLOAD_STATUS_SUCCESS');\n } catch (err) {\n setStatus('UPLOAD_STATUS_ERROR');\n events?.error?.(err);\n }\n };\n\n return (\n <div className={`${CLASS_PREFIX}__item`} role=\"TcbFileUpload\">\n <div className={`${CLASS_PREFIX}__item-left`}>\n <UploadFileStatus\n status={status}\n percent={percent}\n size={size}\n title={title}\n percentSize={((file?.size / 1024) * percent) / 100}\n />\n </div>\n <div className={`${CLASS_PREFIX}__btn-group`}>\n <UploadFileAction\n file={file}\n uuid={file?._uuid}\n status={status}\n onCancel={(uuid) => {\n cancleRef.current = uuid;\n onChange?.({ type: 'delete', uuid });\n }}\n onReLoad={handleUpload}\n />\n </div>\n </div>\n );\n};\n\ninterface IUploadFileStatus {\n status?: string;\n percent?: number;\n size?: any;\n title?: string;\n percentSize?: number;\n}\n/**\n * 上传文件状态组件\n */\nconst UploadFileStatus = ({\n status = 'UPLOAD_STATUS_SUCCESS',\n percent = 0,\n size,\n title = null,\n percentSize = 0,\n}: IUploadFileStatus) => {\n const { isEdit } = React.useContext(FileContext) || {};\n //上传中、待上传状态\n if (\n status == 'UPLOAD_STATUS_LOADING' ||\n (status == 'UPLOAD_STATUS_PENDING' && percent)\n ) {\n return (\n <>\n <div className={`${CLASS_PREFIX}__file-detail`}>\n <Text className={`${CLASS_PREFIX}__file-name`}>{title}</Text>\n <div className={`${CLASS_PREFIX}__file-status`}>\n <div className={`${CLASS_PREFIX}__file-status`}>\n <Progress\n percent={percent}\n theme=\"default\"\n strokeColor={'#0052D9'}\n className={`${CLASS_PREFIX}__file-progress`}\n />\n </div>\n </div>\n </div>\n <div className={`${CLASS_PREFIX}__file-foot`}>\n <div>\n <Text>{`${Math.floor(percentSize)}K/`}</Text>\n\n <Text>{size}</Text>\n </div>\n <Text>\n {status === 'UPLOAD_STATUS_PENDING' ? '等待上传' : '上传中'}\n </Text>\n </div>\n </>\n );\n }\n\n return (\n <>\n <div className={`${CLASS_PREFIX}__file-detail`}>\n <Tooltip title={title}>\n <Text className={`${CLASS_PREFIX}__file-name`}>{title}</Text>\n </Tooltip>\n {isEdit && (\n <div className={`${CLASS_PREFIX}__file-status`}>\n <Icon\n type={\n statusMap[status]?.icon ||\n statusMap['UPLOAD_STATUS_PENDING'].icon\n }\n ></Icon>\n <Text className={`${CLASS_PREFIX}__file-status--msg`}>\n {statusMap[status]?.title ||\n statusMap['UPLOAD_STATUS_PENDING'].title}\n </Text>\n </div>\n )}\n </div>\n {isEdit && (\n <div className={`${CLASS_PREFIX}__file-foot`}>\n <div>\n <Text>{size}</Text>\n </div>\n </div>\n )}\n </>\n );\n};\n\ninterface IUploadFileAction {\n status?: string;\n fileID?: string;\n uuid?: string;\n src?: string;\n file?: any;\n onReLoad?: any;\n onCancel?: any;\n}\n\n/**\n * 操作列组件, onChange 从最外层 UploadFilePc 传进来\n * props: { status, fileID, uuid, src, onChange }\n */\nconst UploadFileAction = ({\n status = 'UPLOAD_STATUS_PENDING',\n fileID = '',\n uuid = '',\n src = '',\n file = null,\n onReLoad = null,\n onCancel = null,\n}: IUploadFileAction) => {\n const { onChange, downloadVisible, deleteVisible, isEdit } =\n React.useContext(FileContext) || {};\n // 操作列按钮-删除\n const renderDelete = () =>\n isEdit && (\n <Icon\n type=\"delete\"\n style={{ cursor: 'pointer' }}\n onClick={() => onChange?.({ fileID, uuid, type: 'delete' })}\n />\n );\n\n // 操作列按钮-取消\n const renderCancel = () =>\n isEdit && (\n <Icon\n type=\"dismiss\"\n style={{ cursor: 'pointer' }}\n onClick={() => onCancel?.(uuid)}\n />\n );\n\n // 操作列按钮-重新上传\n const renderReLoad = () =>\n isEdit && (\n <Icon\n type=\"refresh\"\n style={{ cursor: 'pointer' }}\n onClick={() => {\n onReLoad?.(file);\n }}\n />\n );\n\n // 操作列按钮-下载\n const renderDownLoad = () => (\n <Icon\n type=\"download\"\n style={{ cursor: 'pointer' }}\n onClick={() => downloadFile(src)}\n />\n );\n\n switch (status) {\n case 'UPLOAD_STATUS_PENDING':\n return renderCancel();\n case 'UPLOAD_STATUS_LOADING':\n return renderCancel();\n case 'UPLOAD_STATUS_SUCCESS':\n return (\n <>\n {deleteVisible && renderDelete()}{' '}\n {downloadVisible && renderDownLoad()}\n </>\n );\n case 'UPLOAD_STATUS_ERROR':\n return (\n <>\n {deleteVisible && renderDelete()} {renderReLoad()}\n </>\n );\n default:\n return null;\n }\n};\n","import * as React from 'react';\nimport {\n Upload,\n ConfigProvider,\n Button,\n message,\n Icon,\n Text,\n List,\n} from 'tea-component';\nimport {\n filterStrList,\n isCloudFileID,\n isHttpFileID,\n transSize,\n downloadFile,\n cutFileTitle,\n transFileCloudidToName,\n randomStr,\n} from '../../../utils/platform';\nimport { getCloudInstance, getTempFileURL } from '../../../utils/tcb';\nimport classNames from '../../../utils/classnames';\nimport { renderDecorator } from '../renderDecorator';\nimport type { CommonFormPropsType } from '../types';\nimport isObjectEqual from '../../../utils/isObjectEqual';\nimport type { unknownFunction } from '../../../types';\nimport { emptyArray, emptyObject } from '../../../utils/constant';\n\n// 默认组件类前缀\nconst CLASS_PREFIX = 'weda-upload-file-pc';\n\n// 上传状态字典\nconst statusMap = {\n 0: { title: '待上传', icon: 'pending-gray' },\n 1: { title: '上传 ...', icon: 'loading' },\n 2: { title: '上传成功', icon: 'success' },\n 3: { title: '上传失败', icon: 'error' },\n};\n\n// 上传文件Context\nconst FileContext = React.createContext(null);\n\n/**\n * 上传文件 PC 版本\n */\nexport function UploadFilePc({\n // 系统属性\n layout,\n id = '',\n style,\n labelVisible = true,\n label = '上传文件',\n requiredFlag = false,\n disabled = false,\n className = '',\n events = emptyObject,\n // 组件属性\n decorator,\n tips = '',\n btnTitle = '点击上传',\n maxUploadCount = 9,\n maxSize = 1024,\n single = true,\n defaultValue = emptyArray, // 组件默认初始化值\n value = emptyArray, // 用于模型组件中 formily 的值管理\n acceptTypes = emptyArray,\n downloadVisible = true,\n deleteVisible = true,\n uploadPath = 'weda-uploader',\n onChange = null,\n isEdit = true,\n}: IUploaderFilePc) {\n const [fileIDList, setfileIDList] = React.useState(\n filterStrList([].concat(defaultValue, value))\n ); // 上传成功文件ID列表,fileID[]\n const [fileList, setFileList] = React.useState([]); // 上传中的文件列表,file[],file为原始文件 + uuid属性\n const [fileSizeObj, setFileSizeObj] = React.useState({}); // 管理上传文件大小 {uuid:size}\n // 两次默认值不同, 需要刷新\n const prevDefaultRef = React.useRef<any>([]);\n const fileRef = React.useRef(fileIDList);\n React.useMemo(() => {\n //有有效默认值时不刷新,解决初次渲染默认值不显示问题\n if (\n defaultValue &&\n !isObjectEqual(prevDefaultRef.current, defaultValue) &&\n (JSON.stringify(prevDefaultRef.current) == '[]' ||\n !prevDefaultRef.current)\n ) {\n prevDefaultRef.current = defaultValue;\n setfileIDList(filterStrList([].concat(defaultValue)));\n }\n }, [defaultValue]);\n React.useEffect(() => {\n // 外部 onChange 事件\n const pureFileIDList = fileIDList.filter(\n (d) => isCloudFileID(d) || isHttpFileID(d)\n );\n if (single) {\n const file = pureFileIDList[0] || '';\n onChange?.(file);\n events?.change?.({ value: file });\n } else {\n onChange?.(pureFileIDList);\n events?.change?.({ value: pureFileIDList });\n }\n if (!isObjectEqual(fileRef.current, fileIDList)) {\n events?.success?.({ value: pureFileIDList });\n fileRef.current = fileIDList;\n }\n }, [fileIDList]);\n // 外层组件类\n const cls = classNames({\n 'weda-ui': true,\n [className]: className,\n });\n\n // 批量上传文件前置事件\n const handleBefore = (file, fileList, isAccepted, error) => {\n if (fileList.length + fileIDList.length > maxUploadCount) {\n message.warning({ content: `上传文件总数不能超过${maxUploadCount}个` });\n return false;\n }\n if (!isAccepted) {\n try {\n const errorList = [];\n if (error.find((item) => item?.code === 'file-invalid-type')) {\n errorList.push('上传文件类型错误');\n }\n if (error.find((item) => item?.code === 'file-too-large')) {\n errorList.push(`上传文件大小不能超过${maxSize}M`);\n }\n message.error({ content: errorList.join(', ') });\n } catch (e) {}\n return false;\n }\n file['_uuid'] = randomStr();\n setFileList((list) => [...list, file]);\n return false;\n };\n\n // 上传后文件列表 fileIDList 改变事件,'add'|'delete'\n const handleChange = ({ fileID, uuid, type, size }) => {\n // 上传时新增事件\n if (type === 'add') {\n fileID && setFileSizeObj((obj) => ({ ...obj, [fileID]: size }));\n fileID && setfileIDList((list) => [...list, fileID]);\n } else {\n fileID && setfileIDList((list) => list.filter((d) => d !== fileID));\n }\n uuid && setFileList((list) => list.filter((item) => uuid !== item?._uuid));\n };\n\n // 上传组件属性\n const uploadProps = { multiple: !single };\n if (\n !(\n !acceptTypes?.length ||\n acceptTypes?.includes('*') ||\n acceptTypes?.includes('')\n )\n ) {\n uploadProps['accept'] = Array.from(new Set(acceptTypes));\n }\n tips && (uploadProps['title'] = tips);\n maxSize && (uploadProps['maxSize'] = maxSize * 1024 * 1024);\n const btnDisabled =\n fileIDList.length >= maxUploadCount || (single && fileIDList.length > 0);\n\n return renderDecorator(\n <ConfigProvider classPrefix=\"wedatea2td\">\n <FileContext.Provider\n value={{\n uploadPath,\n downloadVisible,\n deleteVisible,\n onChange: handleChange,\n isEdit,\n events,\n fileSizeObj,\n }}\n >\n <div className={`${CLASS_PREFIX}`}>\n {isEdit && (\n <div className={`${CLASS_PREFIX}__input-box`}>\n {disabled || btnDisabled ? (\n <Button type=\"weak\" disabled={true}>\n {btnTitle}\n </Button>\n ) : (\n <Upload {...uploadProps} beforeUpload={handleBefore}>\n <Button type=\"weak\" className={`${CLASS_PREFIX}__btn--weak`}>\n {btnTitle}\n </Button>\n {!single && (\n <Text\n theme=\"weak\"\n className={`${CLASS_PREFIX}__btn-descripe`}\n >\n 支持批量上传\n </Text>\n )}\n </Upload>\n )}\n </div>\n )}\n <List split=\"divide\">\n <List.Item>\n <div\n className={`${CLASS_PREFIX}--item ${CLASS_PREFIX}--item-header`}\n >\n <div\n className={`${CLASS_PREFIX}--item-title ${CLASS_PREFIX}--item-label`}\n >\n 文件名\n </div>\n <div\n className={`${CLASS_PREFIX}--item-size ${CLASS_PREFIX}--item-label`}\n >\n 大小\n </div>\n <div\n className={`${CLASS_PREFIX}--item-status ${CLASS_PREFIX}--item-label`}\n >\n 状态\n </div>\n <div className={`${CLASS_PREFIX}--item-action`}>操作</div>\n </div>\n </List.Item>\n\n {fileIDList.map((d) => (\n <List.Item key={d}>{<TcbFileEcho fileID={d} />}</List.Item>\n ))}\n\n {fileList.map((item) => (\n <List.Item key={item?._uuid}>\n {<TcbFileUpload file={item} />}\n </List.Item>\n ))}\n\n {isEdit && fileIDList.length === 0 && fileList.length === 0 && (\n <List.Item className={`${CLASS_PREFIX}--item-empty`}>\n <div className={`${CLASS_PREFIX}--item`}>\n 点击上方“{btnTitle}”按钮\n </div>\n </List.Item>\n )}\n </List>\n </div>\n </FileContext.Provider>\n </ConfigProvider>,\n decorator\n )({\n id,\n className: cls,\n style,\n label: labelVisible ? label : null,\n layout,\n multiCell: false,\n requiredFlag,\n });\n}\n\nexport interface IUploaderFilePc extends CommonFormPropsType {\n btnTitle?: string;\n maxUploadCount?: number;\n downloadVisible?: boolean;\n deleteVisible?: boolean;\n defaultValue?: Readonly<string | string[]>;\n maxSize?: number;\n single?: boolean;\n acceptTypes?: Readonly<string[]>;\n tips?: string;\n value?: Readonly<string | string[]>;\n uploadPath?: string;\n isEdit?: boolean;\n onChange?: unknownFunction;\n}\n\ninterface ITcbFileEcho {\n fileID?: string;\n}\n\n/**\n * 基于 FileID 回显文件表格行组件\n */\nconst TcbFileEcho = ({ fileID }: ITcbFileEcho) => {\n const [src, setSrc] = React.useState('');\n const { fileSizeObj } = React.useContext(FileContext) || {};\n React.useEffect(() => {\n const fetchFileId = async (id) => {\n if (isCloudFileID(id)) {\n try {\n const fileSrc = await getTempFileURL(id);\n setSrc(fileSrc);\n } catch (e) {}\n } else {\n setSrc(id);\n }\n };\n fetchFileId(fileID);\n }, [fileID]);\n\n const title = React.useMemo(() => {\n if (isCloudFileID(fileID)) {\n return transFileCloudidToName(fileID);\n } else {\n return fileID;\n }\n }, [fileID]);\n\n return (\n <div className={`${CLASS_PREFIX}--item ${CLASS_PREFIX}--item-body`}>\n <div className={`${CLASS_PREFIX}--item-title`} title={title}>\n {cutFileTitle(title)}\n </div>\n <div className={`${CLASS_PREFIX}--item-size`}>\n {fileSizeObj[fileID] || '--'}\n </div>\n <div className={`${CLASS_PREFIX}--item-status`}>\n <UploadFileStatus />\n </div>\n <div className={`${CLASS_PREFIX}--item-action`}>\n <UploadFileAction status=\"2\" fileID={fileID} src={src} />\n </div>\n </div>\n );\n};\n\ninterface ITcbFileUpload {\n file?: {\n size: number | string;\n name: string;\n _uuid?: string;\n };\n}\n\n/**\n * 基于 File 上传文件过程表格行组件\n */\nconst TcbFileUpload = ({ file }: ITcbFileUpload) => {\n const { uploadPath, onChange, events } = React.useContext(FileContext) || {};\n const [percent, setPercent] = React.useState(0); // 上传进度\n const [status, setStatus] = React.useState('0'); // 上传状态\n const cancleRef = React.useRef(''); // 取消的uuid\n\n // 上传文件相关属性\n const { size, title, uuid } = React.useMemo(() => {\n const size = transSize(file?.size);\n const title = file?.name || '';\n const uuid = file?._uuid;\n return { size, title, uuid };\n }, [file?._uuid]);\n\n React.useEffect(() => {\n handleUpload(file);\n }, [file?._uuid]);\n\n // 上传过程\n const handleUpload = async (file) => {\n const tcb = await getCloudInstance();\n try {\n setStatus('0');\n const { fileID } = await tcb.uploadFile({\n cloudPath: `${uploadPath}/${randomStr()}-${file?.name}`,\n filePath: file,\n onUploadProgress: (progressEvent) => {\n let percent = 0;\n percent = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total\n );\n setStatus('1');\n setPercent(percent < 100 ? percent : 100);\n },\n });\n !cancleRef.current && onChange?.({ fileID, type: 'add', uuid, size });\n setStatus('2');\n } catch (e) {\n setStatus('3');\n events.error && events.error(e);\n }\n };\n\n return (\n <div className={`${CLASS_PREFIX}--item ${CLASS_PREFIX}--item-body`}>\n <div className={`${CLASS_PREFIX}--item-title`} title={title}>\n {cutFileTitle(title)}\n </div>\n <div className={`${CLASS_PREFIX}--item-size`}>{size}</div>\n <div className={`${CLASS_PREFIX}--item-status`}>\n <UploadFileStatus status={status} percent={percent} />\n </div>\n <div className={`${CLASS_PREFIX}--item-action`}>\n <UploadFileAction\n file={file}\n uuid={file?._uuid}\n status={status}\n onCancel={(uuid) => {\n cancleRef.current = uuid;\n onChange?.({ type: 'delete', uuid });\n }}\n onReLoad={handleUpload}\n />\n </div>\n </div>\n );\n};\n\ninterface IUploadFileStatus {\n status?: string;\n percent?: number;\n}\n\n/**\n * 上传文件状态组件\n */\nconst UploadFileStatus = ({ status = '2', percent = 0 }: IUploadFileStatus) => {\n if (status == '1' && percent) {\n return (\n <>\n <Icon type=\"loading\" />\n 上传{percent}% ...\n </>\n );\n }\n return (\n <>\n <Icon type={statusMap[status]?.icon || statusMap['0'].icon} />\n {statusMap[status]?.title || statusMap['0'].title}\n </>\n );\n};\n\ninterface IUploadFileAction {\n status?: string;\n fileID?: string;\n uuid?: string;\n src?: string;\n file?: any;\n onReLoad?: any;\n onCancel?: any;\n}\n\n/**\n * 操作列组件, onChange 从最外层 UploadFilePc 传进来\n * props: { status, fileID, uuid, src, onChange }\n */\nconst UploadFileAction = ({\n status = '0',\n fileID = '',\n uuid = '',\n src = '',\n file = null,\n onReLoad = null,\n onCancel = null,\n}: IUploadFileAction) => {\n const { onChange, downloadVisible, deleteVisible, isEdit } =\n React.useContext(FileContext) || {};\n\n // 操作列按钮-删除\n const renderDelete = () =>\n isEdit &&\n deleteVisible && (\n <Button\n type=\"link\"\n onClick={() => onChange?.({ fileID, uuid, type: 'delete' })}\n >\n 删除\n </Button>\n );\n\n // 操作列按钮-取消\n const renderCancel = () =>\n isEdit && (\n <Button onClick={() => onCancel?.(uuid)} type=\"link\">\n 取消\n </Button>\n );\n\n // 操作列按钮-重新上传\n const renderReLoad = () =>\n isEdit && (\n <Button\n type=\"link\"\n onClick={() => {\n onReLoad?.(file);\n }}\n >\n 重新上传\n </Button>\n );\n\n // 操作列按钮-下载\n const renderDownLoad = () =>\n downloadVisible && (\n <Button\n type=\"link\"\n title=\"点击下载文件\"\n onClick={() => downloadFile(src)}\n >\n 下载\n </Button>\n );\n\n switch (status) {\n case '0':\n return renderCancel();\n case '1':\n return renderCancel();\n case '2':\n return (\n <>\n {renderDelete()}\n {renderDownLoad()}\n </>\n );\n case '3':\n return (\n <>\n {renderDelete()}\n {renderReLoad()}\n </>\n );\n default:\n return null;\n }\n};\n","import '@tcwd/style-wedatheme/index.css';\n// import loadable from '@loadable/component';\n// import { fallback } from '../utils/loading-fallback';\n\n// export const Button = loadable(() => import('./button'), {fallback});\n// export const Text = loadable(() => import('./text'), {fallback});\n// export const Container = loadable(() => import('./container'), {fallback});\n// export const Image = loadable(() => import('./image'), {fallback});\n// export const Slot = loadable(() => import('./slot'), {fallback});\n// export const ScrollView = loadable(() => import('./scrollView'), {fallback});\n// export const Swiper = loadable(() => import('./swiper'), {fallback});\n// export const Modal = loadable(() => import('./modal'), {fallback});\n// export const RichText = loadable(() => import('./richText'), {fallback});\n// export const RichTextView = loadable(() => import('./richTextView'), {fallback});\n// export const Link = loadable(() => import('./link'), {fallback});\n// export const Drawer = loadable(() => import('./drawer'), {fallback});\n// export const UploaderView = loadable(() => import('./uploaderView'), {fallback});\n// // picker\n// export const Picker = loadable(() => import('./picker/picker'), {fallback});\n// export const DatePicker = loadable(() => import('./picker/datePicker'), {fallback});\n// export const TimePicker = loadable(() => import('./picker/timePicker'), {fallback});\n// // form\n// export const Form = loadable(() => import('./form/form'), {fallback});\n// export const Input = loadable(() => import('./form/input'), {fallback});\n// export const Textarea = loadable(() => import('./form/textarea'), {fallback});\n// export const Checkbox = loadable(() => import('./form/checkbox'), {fallback});\n// export const Radio = loadable(() => import('./form/radio'), {fallback});\n// export const Switch = loadable(() => import('./form/switch'), {fallback});\n// export const Select = loadable(() => import('./form/select'), {fallback});\n// export const Uploader = loadable(() => import('./form/uploader'), {fallback});\n// export const Tips = loadable(() => import('./form/tips'), {fallback});\n// export const EnumSelect = loadable(() => import('./form/enumSelect'), {fallback});\n// export const Tabs = loadable(() => import('./tabs'), {fallback});\n\nexport { default as Button } from './button';\nexport { default as Text } from './text';\nexport { default as Container } from './container';\n// export { default as Image } from './image';\n// export { default as Slot } from './slot';\n// export { default as ScrollView } from './scrollView';\n// export { default as Swiper } from './swiper';\n// export { default as Carousel } from './carousel';\n// export { default as Modal } from './modal';\nexport { default as RichText } from './richText';\nexport { default as RichTextView } from './richTextView';\nexport { default as Link } from './link';\nexport { default as Drawer } from './drawer';\nexport { default as UploaderView } from './uploaderView';\nexport { default as UploaderFileView } from './uploaderFileView';\n// export { default as WedaVideo } from './wedaVideo/index';\n\n// export { default as Picker } from './picker/picker';\n// export { default as DatePicker } from './picker/datePicker';\n// export { default as TimePicker } from './picker/timePicker';\n\n// form\n// export { default as Form } from './form/form';\n// export { default as Input } from './form/input';\n// export { default as Textarea } from './form/textarea';\n// export { default as Checkbox } from './form/checkbox';\n// export { default as Radio } from './form/radio';\n// export { default as Switch } from './form/switch';\n// export { default as Select } from './form/select';\n// export { default as Uploader } from './form/uploader';\n// export { default as UploaderFile } from './form/uploaderFile';\n// export { default as Tips } from './form/tips';\n// export { default as Tabs } from './tabs';\n\n// export { default as Location } from './form/location';\n\n// export { default as EnumSelect } from './form/enumSelect';\n// export { default as Calendar } from './calendar';\n// export { default as NavLayout } from './navLayout';\n\n// // Data Contaier\n// export { default as ListView } from './listView';\n// export { default as NavigationBar } from './navigationBar';\n// export { default as Line } from './chart/line';\n// export { default as Bar } from './chart/bar';\n// export { default as Pie } from './chart/pie';\n// export { default as DataView } from './dataView';\n\n// export { default as StatisticsCard } from './chart/statisticsCard';\n// export { default as GraphicCard } from './graphicCard';\n\n// export { default as UserInfo } from './userInfo';\n// export { default as Phone } from './phone';\n// export { default as PhoneCode } from './phoneCode';\n// export { default as Share } from './share';\n\n// export { default as Lottery } from './lottery';\n// open\n// import Auth from './auth';\n\nexport { default as RichTextEdit } from './richtextedit';\nimport 'weui/dist/style/weui.css';\nimport '../weda-ui.css';\n","var api = require(\"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\nif (module.hot) {\n if (!content.locals || module.hot.invalidate) {\n var isEqualLocals = function isEqualLocals(a, b, isNamedExport) {\n if (!a && b || a && !b) {\n return false;\n }\n\n var p;\n\n for (p in a) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (a[p] !== b[p]) {\n return false;\n }\n }\n\n for (p in b) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (!a[p]) {\n return false;\n }\n }\n\n return true;\n};\n var oldLocals = content.locals;\n\n module.hot.accept(\n \"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\",\n function () {\n content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\n if (!isEqualLocals(oldLocals, content.locals)) {\n module.hot.invalidate();\n\n return;\n }\n\n oldLocals = content.locals;\n\n update(content);\n }\n )\n }\n\n module.hot.dispose(function() {\n update();\n });\n}\n\nmodule.exports = content.locals || {};","import * as React from 'react';\nimport type { CommonPropsType } from '../../types';\nimport classNames from '../../utils/classnames';\nimport { emptyArray, emptyObject } from '../../utils/constant';\nimport './index.css';\n\nexport interface PropsType extends CommonPropsType {\n /**\n * 内容\n */\n content?: string;\n /**\n * 链接地址\n */\n url?: string;\n /**\n * 参数\n */\n params?: Readonly<{ key: string; value: string }[]>;\n contentSlot?: React.ReactNode;\n isOpenInNewWindow: boolean;\n}\n\n// 所有绝对地址直接交由浏览器,新开窗口交由浏览器\n// 当前窗口相对地址交给平台\nexport default function Link({\n content,\n url = '',\n events = emptyObject,\n style,\n className,\n contentSlot,\n params = emptyArray, // TODO 格式定义,\n isOpenInNewWindow,\n}: PropsType) {\n url = url.trim();\n const cls = classNames({\n 'weda-link': true,\n 'weda-ui': true,\n [className]: className,\n });\n\n // URL 构造函数不支持 '//xxx.com' 的格式\n if (url.indexOf('//') === 0) {\n url = location.protocol + url;\n }\n\n // \"proto:\" 或 \"//\" 起头的是绝对路径\n let isAbosolutePath = /^(?:[a-z]+:)/i.test(url);\n\n let base,\n path,\n href,\n paramObj = {},\n urlObj;\n if (!isAbosolutePath) {\n // 相对地址使用站位域名,不实际使用\n base =\n location.origin && location.origin !== 'null'\n ? location.origin\n : 'https://we.da';\n }\n\n try {\n urlObj = new URL(url, base);\n params.forEach((x) => {\n urlObj.searchParams.append(x.key, x.value);\n });\n\n href = urlObj.href;\n path = urlObj.pathname;\n\n for (const [key, value] of urlObj.searchParams) {\n paramObj[key] = value;\n }\n\n // 相对地址去掉站位域名\n if (!isAbosolutePath) {\n href = urlObj.pathname + urlObj.search + urlObj.hash;\n href = href.replace(/^\\//, '');\n }\n } catch (e) {\n // 非法 url\n isAbosolutePath = true;\n href = url;\n path = '';\n paramObj = params.reduce((p, x) => {\n p[x.key] = x.value;\n return p;\n }, {});\n }\n\n return (\n <a\n style={{ ...style }}\n className={cls}\n target={isOpenInNewWindow ? '_blank' : '_self'}\n href={href}\n onClick={(e) => {\n events.tap && events.tap({}, { originEvent: e });\n\n if (!e.defaultPrevented) {\n if (!isAbosolutePath) {\n e.preventDefault();\n app.navigateTo({\n pageId: path,\n packageName: '',\n mode: 'weDa',\n params: paramObj,\n });\n }\n }\n }}\n rel=\"noopener noreferrer\"\n >\n {contentSlot && <div className=\"weda-link-slot\">{contentSlot}</div>}\n {content}\n </a>\n );\n}\n","// 默认加载失败图片\nexport const defaultBase64 =\n 'data:image/png;base64,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';\n","import React, { useEffect, useState } from 'react';\nimport { useSetState } from '../../utils/useSetState';\nimport classNames from '../../utils/classnames';\nimport Editor, { EditorState, convertEditorStateToHTML } from 'kedao';\n\nimport { ContentUtils } from 'kedao/lib/utils';\nimport { createStateFromContent } from 'kedao/lib/editor';\n\nimport { getCloudInstance, getTempFileURL } from '../../utils/tcb';\nimport {\n message,\n Button,\n Input,\n Modal,\n Progress,\n Upload,\n Text,\n} from 'tea-component';\nimport { v4 as uuidv4 } from 'uuid';\nimport { defaultBase64 } from './const';\n\nimport { renderDecorator } from '../form/renderDecorator';\nimport { usePlatform } from '../../utils/platform';\n\n// 默认图片类型\nconst IMAGE_TYPES = [\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/bmp',\n 'image/tiff',\n 'image/svg+xml',\n];\n\nexport default function RichText({\n // 系统属性\n id,\n style,\n className,\n events,\n // 组件属性\n label,\n labelVisible,\n value: initialValue,\n readOnly,\n layout,\n requiredFlag,\n onChange,\n maxSize,\n acceptTypes,\n cloudPath,\n disabled,\n decorator,\n}) {\n const [editorState, setEditorState] = useState();\n\n const cls = classNames({\n 'weda-ui': true,\n 'weda-richText': true,\n [className]: className,\n });\n const platform = usePlatform();\n const isH5 = platform === 'h5';\n const subCls = classNames({\n 'weui-cell': isH5,\n 'weui-cell_active': isH5,\n 'weui-cell_form': isH5,\n 'weui-cell_disabled': isH5 && disabled,\n });\n\n const onDataChange = function (value) {\n events.change && events.change({ value: value === '<p></p>' ? '' : value });\n if (onChange) {\n if (value === '<p></p>') {\n onChange('');\n } else {\n onChange(value);\n }\n }\n };\n\n useEffect(() => {\n const state = createStateFromContent(initialValue, {});\n setEditorState(state);\n }, []);\n\n const extendControls = [\n {\n key: 'richtext-uploader',\n type: 'component',\n component: (\n <CustomUploader\n acceptTypes={acceptTypes}\n maxSize={maxSize}\n cloudPath={cloudPath}\n onChange={(url) => {\n const state = ContentUtils.insertMedias(editorState, [\n { type: 'IMAGE', url },\n ]);\n setEditorState(state);\n }}\n />\n ),\n },\n ];\n\n // 修改img显示逻辑\n const blockRenderFn = (contentBlock, { editor, editorState }) => {\n if (contentBlock.getType() === 'atomic') {\n const entity = editorState\n .getCurrentContent()\n .getEntity(contentBlock.getEntityAt(0));\n if (entity.getType() === 'IMAGE') {\n return {\n component: RichTextImg, // 替换img的组件\n editable: false, // editable并不代表组件内容实际可编辑,建议设置为false\n props: { editor, editorState }, // 传入的内容可以在组件中通过this.props.blockProps获取到\n };\n }\n }\n };\n\n const richTextEl = (\n <div className={subCls}>\n <div\n style={{\n border: '1px solid #d1d1d1',\n backgroundColor: '#fff',\n ...style,\n }}\n >\n <Editor\n key={id}\n value={editorState}\n readOnly={readOnly}\n language=\"zh\"\n blockRendererFn={blockRenderFn}\n onBlur={(s) => {\n setEditorState(s);\n const html = convertEditorStateToHTML(s, {});\n onDataChange(html);\n if (html.length > 32768) {\n message.warning({\n content: '富文本长度过长,可能导致保存失败',\n });\n }\n }}\n excludeControls={['media', 'fullscreen']}\n /** @ts-ignore jsx */\n extendControls={extendControls}\n handleKeyCommand={(command, editState) => {\n const newState = ContentUtils.handleKeyCommand(editState, command);\n console.log(newState, editState, command);\n if (newState) {\n setEditorState(newState);\n return true;\n }\n return false;\n }}\n />\n </div>\n </div>\n );\n return renderDecorator(\n richTextEl,\n decorator\n )({\n id,\n className: cls,\n style,\n label: labelVisible ? label : null,\n layout,\n multiCell: false,\n requiredFlag,\n });\n}\n\nexport const CustomUploader = (props) => {\n const { onChange = () => {}, acceptTypes, maxSize, cloudPath } = props;\n const [\n { fileList, percent, visible, uploading, inputUrl, previewImg },\n setState,\n ] = useSetState({\n fileList: [],\n percent: 0,\n visible: false,\n uploading: false,\n inputUrl: '',\n previewImg: defaultBase64,\n });\n\n // 获取base64\n const getBase64 = (file) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n /** @ts-ignore jsx */\n setState({ previewImg: reader.result });\n };\n reader.readAsDataURL(file);\n };\n\n // 计算上传进度\n const onProgress = (progressEvent) => {\n let percentCompleted = 0;\n try {\n percentCompleted = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total\n );\n percentCompleted < 100 ? percentCompleted : 100;\n } catch (e) {\n message.error({\n content: '上传图片失败',\n });\n }\n setState({ uploading: true, percent: percentCompleted });\n };\n return (\n <>\n <button\n role=\"richtext\"\n type=\"button\"\n data-title=\"媒体上传\"\n className=\"control-item button\"\n onClick={() => setState({ visible: true })}\n >\n <svg\n viewBox=\"64 64 896 896\"\n focusable=\"false\"\n data-icon=\"file-image\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M534 352V136H232v752h560V394H576a42 42 0 01-42-42zm-134 50c22.1 0 40 17.9 40 40s-17.9 40-40 40-40-17.9-40-40 17.9-40 40-40zm296 294H328.1c-6.7 0-10.4-7.7-6.3-12.9l99.8-127.2a8 8 0 0112.6 0l41.1 52.4 77.8-99.2a8.1 8.1 0 0112.7 0l136.5 174c4.1 5.2.4 12.9-6.3 12.9z\"\n fill=\"#e6f7ff\"\n ></path>\n <path\n d=\"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM602 137.8L790.2 326H602V137.8zM792 888H232V136h302v216a42 42 0 0042 42h216v494z\"\n fill=\"#006eff\"\n ></path>\n <path\n d=\"M553.1 509.1l-77.8 99.2-41.1-52.4a8 8 0 00-12.6 0l-99.8 127.2a7.98 7.98 0 006.3 12.9H696c6.7 0 10.4-7.7 6.3-12.9l-136.5-174a8.1 8.1 0 00-12.7 0zM360 442a40 40 0 1080 0 40 40 0 10-80 0z\"\n fill=\"#006eff\"\n ></path>\n </svg>\n </button>\n <Modal\n onClose={() => {\n setState({ visible: false });\n }}\n visible={visible}\n maskClosable={true}\n >\n <p>输入链接插入图片</p>\n <div className=\"richText-upload-link\">\n <Input\n value={inputUrl}\n placeholder=\"输入图片地址\"\n onChange={(value) => setState({ inputUrl: value })}\n />\n &nbsp;\n <Button\n type=\"primary\"\n onClick={() => {\n onChange(inputUrl);\n setState({ visible: false });\n }}\n >\n 确认\n </Button>\n </div>\n <p style={{ marginBottom: '16px' }}>或拖拽上传插入图片</p>\n <Upload\n accept={acceptTypes.join()}\n maxSize={1024 * 1024}\n beforeUpload={(file) => {\n getBase64(file);\n let typeRegex = new RegExp(\n `^((${acceptTypes.join(')|(').replace('+', '\\\\+')}))$`\n );\n if (acceptTypes.join().includes('*')) {\n typeRegex = new RegExp(`^image/.+$`);\n }\n if (!typeRegex.test(file.type)) {\n message.error({\n content: '文件格式不支持',\n });\n return false;\n }\n if (file.size > maxSize * 1024 * 1024) {\n message.error({\n content: `文件大小超过上限${maxSize}M`,\n });\n return false;\n }\n setState({\n uploading: true,\n percent: 0,\n fileList: [\n {\n name: file.name,\n },\n ],\n });\n getCloudInstance().then(async (tcb) => {\n try {\n const fileType = file.name.split('.').pop().toLowerCase();\n const path = `${cloudPath}/uploader-${uuidv4()}.${fileType}`;\n const { fileID } = await tcb.uploadFile({\n cloudPath: path,\n filePath: file,\n onUploadProgress: onProgress,\n });\n onChange(fileID);\n setState({\n visible: false,\n fileList: [],\n });\n } catch (e) {\n setState({\n fileList: [],\n });\n message.error({\n content: '上传图片失败',\n });\n } finally {\n setState({ uploading: false, percent: 100 });\n }\n });\n return false;\n }}\n >\n {({ open, isDragging }) => (\n <Upload.Dragger\n filename={fileList[0] && fileList[0].name}\n percent={percent}\n image={previewImg}\n className=\"richtext_upload_dragger\"\n >\n {isDragging ? (\n '释放鼠标'\n ) : (\n <>\n <a onClick={open}>点击上传</a>\n <Text theme=\"weak\">/拖拽到此区域</Text>\n </>\n )}\n </Upload.Dragger>\n )}\n </Upload>\n {uploading && (\n <Progress style={{ marginTop: '10px' }} percent={percent} />\n )}\n </Modal>\n </>\n );\n};\n\nexport const RichTextImg = ({ contentState, block }) => {\n const blockData = contentState.getEntity(block.getEntityAt(0)).getData();\n const { url } = blockData || {};\n const [src, setSrc] = React.useState('');\n const [width, setWidth] = React.useState('unset');\n\n useEffect(() => {\n const getSrc = async () => {\n try {\n if (url.includes('cloud://')) {\n const _src = await getTempFileURL(url);\n setSrc(_src || url);\n } else {\n setSrc(url);\n }\n } catch (e) {\n message.error({\n content: `显示图片失败:${e.message || '未知原因'}`,\n });\n }\n };\n getSrc();\n }, [url]);\n\n return (\n src && (\n <>\n <div className=\"bf-media\">\n <div draggable=\"true\" className=\"bf-image\" style={{ float: 'left' }}>\n <div style={{ position: 'relative', display: 'inline-block' }}>\n <img\n src={src}\n key={url + Math.random()}\n style={{ maxWidth: '100%', width }}\n onError={() => {\n setSrc(defaultBase64);\n setWidth('80px');\n }}\n />\n <div className=\"bf-pre-csize\"></div>\n </div>\n </div>\n <div\n style={{\n clear: 'both',\n height: '0px',\n lineHeight: 0,\n float: 'none',\n }}\n ></div>\n </div>\n </>\n )\n );\n};\n\nRichText.defaultProps = {\n // 系统属性\n events: {},\n style: { width: '100%' },\n // 组件属性\n label: '标题',\n labelVisible: true,\n name: 'formRichText',\n value: '',\n readOnly: false,\n layout: 'vertical',\n requiredFlag: false,\n maxSize: 10,\n acceptTypes: IMAGE_TYPES,\n cloudPath: 'weda-richtext-upload',\n};\n\nCustomUploader.defaultProps = {\n maxSize: 10,\n acceptTypes: IMAGE_TYPES,\n cloudPath: 'weda-richtext-upload',\n};\n","var api = require(\"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\nif (module.hot) {\n if (!content.locals || module.hot.invalidate) {\n var isEqualLocals = function isEqualLocals(a, b, isNamedExport) {\n if (!a && b || a && !b) {\n return false;\n }\n\n var p;\n\n for (p in a) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (a[p] !== b[p]) {\n return false;\n }\n }\n\n for (p in b) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (!a[p]) {\n return false;\n }\n }\n\n return true;\n};\n var oldLocals = content.locals;\n\n module.hot.accept(\n \"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\",\n function () {\n content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\n if (!isEqualLocals(oldLocals, content.locals)) {\n module.hot.invalidate();\n\n return;\n }\n\n oldLocals = content.locals;\n\n update(content);\n }\n )\n }\n\n module.hot.dispose(function() {\n update();\n });\n}\n\nmodule.exports = content.locals || {};","import React, { useEffect, useState } from 'react';\nimport classNames from '../../utils/classnames';\nimport { getTempFileURL } from '../../utils/tcb';\nimport './index.css';\nimport { LOAD_ERR_IMG_BASE64 } from '../../utils/constant';\nimport type { CommonPropsType } from '../../types';\nimport destr from 'destr';\n\nexport interface PropsType extends CommonPropsType {\n value: string;\n}\n\nexport default function RichTextView({\n value = '',\n className,\n style,\n id,\n}: PropsType) {\n const parseValue = destr(value);\n const cls = classNames({\n 'weda-ui': true,\n 'weda-RichTextView': true,\n [className]: className,\n });\n const [displayValue, setDisplayValue] = useState('');\n const regex = new RegExp(/<img [^>]*src=\\\\*\"([^\"]*?)\\\\*\"/g);\n const iferror = `javascript:this.width='80';this.src='${LOAD_ERR_IMG_BASE64}';this.onerror=null`;\n\n let tempValue = parseValue\n .toString()\n .replace(/<img /g, `<img onerror=${iferror} style=\"max-width:100%\" `);\n\n const getSrc = async (img) => {\n const url = img.replace(regex, '$1');\n if (img.includes('cloud://')) {\n const newURL = await getTempFileURL(url);\n if (newURL) {\n tempValue = tempValue.replace(new RegExp(url, 'g'), newURL);\n setDisplayValue(tempValue);\n }\n }\n };\n\n useEffect(() => {\n setDisplayValue(tempValue);\n try {\n const imgs = parseValue.match(regex);\n if (imgs && imgs.length > 0) {\n imgs.forEach((img) => {\n getSrc(img);\n });\n }\n } catch (e) {}\n }, [value]);\n\n return (\n displayValue && (\n <div className={cls} style={style} id={id}>\n <div dangerouslySetInnerHTML={{ __html: displayValue }}></div>\n </div>\n )\n );\n}\n","import React, { useState } from 'react';\nimport Editor, { EditorState, convertEditorStateToHTML } from 'kedao';\n\nimport { ContentUtils } from 'kedao/lib/utils';\nimport { createStateFromContent } from 'kedao/lib/editor';\n\nexport default function RichTextEdit({ value }) {\n const [editorState, setEditorState] = useState(\n value ? createStateFromContent(value) : EditorState.createEmpty()\n );\n\n const handleChange = (newEditorState: EditorState) => {\n setEditorState(newEditorState);\n console.log('html', convertEditorStateToHTML(newEditorState, {}));\n };\n return (\n <div className=\"App\">\n <Editor\n excludeControls={['media', 'fullscreen']}\n value={editorState}\n onChange={handleChange}\n />\n </div>\n );\n}\n","var api = require(\"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\nif (module.hot) {\n if (!content.locals || module.hot.invalidate) {\n var isEqualLocals = function isEqualLocals(a, b, isNamedExport) {\n if (!a && b || a && !b) {\n return false;\n }\n\n var p;\n\n for (p in a) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (a[p] !== b[p]) {\n return false;\n }\n }\n\n for (p in b) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (!a[p]) {\n return false;\n }\n }\n\n return true;\n};\n var oldLocals = content.locals;\n\n module.hot.accept(\n \"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\",\n function () {\n content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\n if (!isEqualLocals(oldLocals, content.locals)) {\n module.hot.invalidate();\n\n return;\n }\n\n oldLocals = content.locals;\n\n update(content);\n }\n )\n }\n\n module.hot.dispose(function() {\n update();\n });\n}\n\nmodule.exports = content.locals || {};","import * as React from 'react';\nimport classNames from '../../utils/classnames';\nimport type { CommonPropsType, unknownFunction } from '../../types';\nimport './index.css';\n\nexport interface PropsType extends CommonPropsType {\n text: string;\n level: string;\n maxLines: number;\n space: boolean;\n userSelect: boolean;\n contenteditable: HTMLParagraphElement['contentEditable'];\n onInput?: unknownFunction;\n onBlur?: unknownFunction;\n}\nexport default function Text({\n text,\n maxLines,\n space,\n userSelect,\n style,\n className,\n events,\n id,\n level,\n contenteditable,\n onInput,\n onBlur,\n}: PropsType) {\n const textStyle: React.CSSProperties = {\n WebkitLineClamp: maxLines,\n whiteSpace: space ? 'pre-wrap' : 'pre-line',\n };\n\n if (!userSelect) {\n textStyle.userSelect = 'none';\n }\n const levelName = level === '0' || !level ? '' : `level_${level}`;\n\n const inlineStyle = React.useMemo(\n () => ({ ...textStyle, ...style }),\n [textStyle, style]\n );\n return (\n <p\n //@ts-expect-error contentEditable type def sucks\n contentEditable={contenteditable}\n onInput={onInput}\n onBlur={onBlur}\n style={inlineStyle}\n className={classNames('weda-text', 'weda-ui', className, levelName)}\n id={id}\n onClick={(e) => events.tap({}, { originEvent: e })}\n >\n {text}\n </p>\n );\n}\n","var api = require(\"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\nif (module.hot) {\n if (!content.locals || module.hot.invalidate) {\n var isEqualLocals = function isEqualLocals(a, b, isNamedExport) {\n if (!a && b || a && !b) {\n return false;\n }\n\n var p;\n\n for (p in a) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (a[p] !== b[p]) {\n return false;\n }\n }\n\n for (p in b) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (!a[p]) {\n return false;\n }\n }\n\n return true;\n};\n var oldLocals = content.locals;\n\n module.hot.accept(\n \"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\",\n function () {\n content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\n if (!isEqualLocals(oldLocals, content.locals)) {\n module.hot.invalidate();\n\n return;\n }\n\n oldLocals = content.locals;\n\n update(content);\n }\n )\n }\n\n module.hot.dispose(function() {\n update();\n });\n}\n\nmodule.exports = content.locals || {};","import * as React from 'react';\nimport { UploadFilePc } from '../form/uploaderFile/uploadFile.pc';\nimport { UploadFileH5 } from '../form/uploaderFile/uploadFile.h5';\nimport {\n filterStrList,\n isCloudFileID,\n downloadFile,\n usePlatform,\n transFileCloudidToName,\n} from '../../utils/platform';\nimport { getTempFileURL } from '../../utils/tcb';\nimport './index.css';\n\nconst CLASS_PREFIX = 'weda-uploader-file-view';\n\n/**\n * 上传文件回显,传showType强制展示某端样式,否则根据平台自动判断\n */\nexport default function UploaderFileView({\n value,\n className,\n single = true, // 展示为单行 a 标签\n showType, // 展示端为 pc 还是 h5 样式\n ...rest\n}) {\n const fileIDList = filterStrList(value);\n if (single) {\n return <FileView fileID={fileIDList[0]} />;\n } else {\n const platform = usePlatform();\n const showTypeMix = showType ? (showType === 'h5' ? 'h5' : 'pc') : platform;\n const uploadFileProps = {\n ...rest,\n className: `${CLASS_PREFIX} ${className}`,\n decorator: null,\n labelVisible: false,\n value: fileIDList,\n isEdit: false,\n };\n return showTypeMix === 'pc' ? (\n <UploadFilePc {...uploadFileProps} />\n ) : (\n <UploadFileH5 {...uploadFileProps} />\n );\n }\n}\n\n/**\n * 单个文件回显,用在表格里面\n */\nconst FileView = ({ fileID }) => {\n const [src, setSrc] = React.useState('');\n\n React.useEffect(() => {\n const fetchFileId = async (id) => {\n if (isCloudFileID(id)) {\n try {\n const fileSrc = await getTempFileURL(id);\n setSrc(fileSrc);\n } catch (e) {}\n } else {\n setSrc(id);\n }\n };\n fetchFileId(fileID);\n }, [fileID]);\n\n const title = React.useMemo(() => {\n if (isCloudFileID(fileID)) {\n return transFileCloudidToName(fileID);\n } else {\n return fileID;\n }\n }, [fileID]);\n return (\n <a\n title={title}\n onClick={() => downloadFile(src)}\n className={`${CLASS_PREFIX}__single`}\n >\n {title}\n </a>\n );\n};\n","var api = require(\"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\nif (module.hot) {\n if (!content.locals || module.hot.invalidate) {\n var isEqualLocals = function isEqualLocals(a, b, isNamedExport) {\n if (!a && b || a && !b) {\n return false;\n }\n\n var p;\n\n for (p in a) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (a[p] !== b[p]) {\n return false;\n }\n }\n\n for (p in b) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (!a[p]) {\n return false;\n }\n }\n\n return true;\n};\n var oldLocals = content.locals;\n\n module.hot.accept(\n \"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\",\n function () {\n content = require(\"!!../../../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../../../node_modules/postcss-loader/src/index.js??postcss!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\n if (!isEqualLocals(oldLocals, content.locals)) {\n module.hot.invalidate();\n\n return;\n }\n\n oldLocals = content.locals;\n\n update(content);\n }\n )\n }\n\n module.hot.dispose(function() {\n update();\n });\n}\n\nmodule.exports = content.locals || {};","import * as React from 'react';\nimport { TcbImage } from '../form/uploader/uploader.pc';\nimport classNames from '../../utils/classnames';\nimport './index.css';\nimport type { CommonPropsType } from '../../types';\nimport { emptyObject } from '../../utils/constant';\n\nconst CLASS_PREFIX = 'g-uploader-view';\n\n/**\n * 图片上传-展示组件\n */\nexport default function UploaderView({\n srcList, // 兼容 cloud:和https: 协议,兼容 字符串和字符串数组\n alt = '[加载失败]',\n gutter = 8,\n height = 100,\n width = 100,\n events = emptyObject,\n isZoom = true,\n isEmptyPlace = true,\n className,\n id,\n style,\n}: PropsType) {\n const cls = classNames({\n [CLASS_PREFIX]: true,\n [className]: className,\n });\n\n // 成功事件,返回加载成功的链接\n const [successList, setSuccessList] = React.useState([]);\n // 失败事件,返回加载失败的链接\n const [errorList, setErrorList] = React.useState([]);\n\n React.useEffect(() => {\n events.load && events.load({ success: successList, error: errorList });\n }, [successList, errorList]);\n\n const boxStyle = {\n marginRight: gutter,\n marginBottom: gutter,\n height: height,\n width: width,\n };\n\n const values = []\n .concat(srcList)\n .filter((d) => typeof d === 'string' && d !== '');\n\n return (\n <div className={cls} id={id} style={style}>\n <div className={`${CLASS_PREFIX}__image-list`}>\n {values.map((d, i) => {\n const imgProps = {\n fileID: d,\n className: `${CLASS_PREFIX}__image`,\n alt: alt,\n isZoom,\n onLoad: () => setSuccessList((list) => [...list, d]),\n onError: () => setErrorList((list) => [...list, d]),\n };\n return (\n <div\n className={`${CLASS_PREFIX}__image-box`}\n key={`${d}-${i}`}\n style={boxStyle}\n title={d}\n >\n <TcbImage {...imgProps} />\n </div>\n );\n })}\n {values.length === 0 && isEmptyPlace && (\n <div className={`${CLASS_PREFIX}__image-box`} style={boxStyle}>\n <img className={`${CLASS_PREFIX}__image`} alt=\"暂无图片\" />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport interface PropsType extends CommonPropsType {\n srcList?: string[] | string;\n alt?: string; // 替代文字\n isZoom?: boolean; // 能否点击放大\n gutter?: number; // 图片间距\n height?: number; // 图片最大高度\n width?: number; // 图片最大宽度\n isEmptyPlace?: boolean; // 是否显示空值\n}\n","import * as components from './components';\nimport * as actions from './actions';\n\nexport default { components, actions };\n","/* !\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n\nfunction classNames(...args) {\n const classes = [];\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (!arg) continue;\n\n const argType = typeof arg;\n\n if (argType === 'string' || argType === 'number') {\n classes.push(arg);\n } else if (Array.isArray(arg)) {\n if (arg.length) {\n const inner = classes.push(classNames(...arg));\n if (inner) {\n classes.push(inner);\n }\n }\n } else if (argType === 'object') {\n if (arg.toString === Object.prototype.toString) {\n Object.keys(arg).forEach((key) => {\n arg[key] && classes.push(key);\n });\n } else {\n classes.push(arg.toString());\n }\n }\n }\n\n return classes.join(' ');\n}\n\nexport default classNames;\n","export const TitleType = {\n LEFT: 'left',\n TOP: 'top',\n NONE: 'none',\n} as const;\n\nexport const LOAD_ERR_IMG_BASE64 =\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIiBmaWxsPSJub25lIj4KICA8cGF0aCBkPSJNMjUuMzIgMTYuMzU5N0MyNi4wNzY0IDE2LjM1OTcgMjYuODI1NCAxNi41MDg3IDI3LjUyNDMgMTYuNzk4MUMyOC4yMjMxIDE3LjA4NzYgMjguODU4MSAxNy41MTE5IDI5LjM5MjkgMTguMDQ2OEMyOS45Mjc4IDE4LjU4MTYgMzAuMzUyMSAxOS4yMTY2IDMwLjY0MTYgMTkuOTE1NEMzMC45MzEgMjAuNjE0MyAzMS4wOCAyMS4zNjMzIDMxLjA4IDIyLjExOTdDMzEuMDggMjIuODc2MSAzMC45MzEgMjMuNjI1MSAzMC42NDE2IDI0LjMyMzlDMzAuMzUyMSAyNS4wMjI4IDI5LjkyNzggMjUuNjU3OCAyOS4zOTI5IDI2LjE5MjZDMjguODU4MSAyNi43Mjc1IDI4LjIyMzEgMjcuMTUxOCAyNy41MjQzIDI3LjQ0MTJDMjYuODI1NCAyNy43MzA3IDI2LjA3NjQgMjcuODc5NyAyNS4zMiAyNy44Nzk3QzIzLjc5MjQgMjcuODc5NyAyMi4zMjczIDI3LjI3MjggMjEuMjQ3MSAyNi4xOTI2QzIwLjE2NjkgMjUuMTEyNCAxOS41NiAyMy42NDczIDE5LjU2IDIyLjExOTdDMTkuNTYgMjAuNTkyIDIwLjE2NjkgMTkuMTI3IDIxLjI0NzEgMTguMDQ2OEMyMi4zMjczIDE2Ljk2NjUgMjMuNzkyNCAxNi4zNTk3IDI1LjMyIDE2LjM1OTdaTTI4IDMuNTU5NjlWMTQuODc2OEMyNy4xNzc3IDE0LjU4NjYgMjYuMTkyIDE0LjQzODggMjUuMzIgMTQuNDM5N0MyNC4wMzEgMTQuNDM5NyAyMi44MTU3IDE0Ljc1NzEgMjEuNzQ4OCAxNS4zMTg0TDIwLjc5NTIgMTMuMTU5N0wxNi4wMjU5IDIwLjAyNzVMOC40NDU3NiAxNi40NDFMMy41NiAyMy4zOTk3SDE3Ljc0NjJDMTcuOTg2NyAyNC44MjkgMTguNjI4MiAyNi4xNjA2IDE5LjU5NTggMjcuMjM5N0gxVjMuNTU5NjlIMjhaTTI1Ljk2IDI0LjAzOTdIMjQuNjhWMjUuMzE5N0gyNS45NlYyNC4wMzk3Wk0yNS45NiAxOC45MTk3SDI0LjY4VjIzLjM5OTdIMjUuOTZWMTguOTE5N1pNNi4xMiAxMC41OTk3QzYuMTIgMTEuOTk4MSA3LjE5OTA0IDEzLjEwODUgOC42MDc2OCAxMy4xNTg0QzEwLjAyMDggMTMuMjA3NyAxMS4yNCAxMi4wNDggMTEuMjQgMTAuNTk5N0MxMS4yNCA5LjI0NjA5IDEwLjA2NDMgOC4wODU3NyA4Ljc1MjMyIDguMDQwOTdDNy4yOTU2OCA3Ljk5MTY5IDYuMTIgOS4xNTEzNyA2LjEyIDEwLjU5OTdaIiBmaWxsPSIjQkNDNEQwIj48L3BhdGg+Cjwvc3ZnPgo=' as const;\n\nexport const REL_DICT = {\n equal: 'eq', // 等于\n unequal: 'neq', // 不等于\n include: 'search', // 包含\n exclude: '_exclude', // 不包含\n begin_with: '_begin_with', // 开头是\n greater: 'gt', // 大于\n greater_or_equal: 'gte', // 大于等于\n bigger_or_equal: 'gte', //大于等于\n less: 'lt', // 小于\n less_or_equal: 'lte', // 小于等于\n in: 'in', // 多选值\n not_in: 'nin', // 不在多选值\n} as const;\n\nexport const emptyObject = {} as const;\nexport const emptyArray = [] as const;\n","import isEqual from 'lodash.isequal';\n\nexport function serde(a) {\n return JSON.parse(JSON.stringify(a));\n}\n\nconst isObj = (a) => typeof a === 'object' && a !== null;\n\nexport default function (a, b, shouldSerde = false) {\n if (shouldSerde && isObj(a) && isObj(b)) {\n // for Proxy created by mbox\n return isEqual(serde(a), serde(b));\n }\n return isEqual(a, b);\n}\n","import { useMediaQuery } from '@react-hookz/web';\nimport { REL_DICT } from './constant';\n\n/**\n * 当前环境是否为 H5 端\n */\nexport const isH5Platform = () => {\n if (window.matchMedia) {\n return window.matchMedia('(max-width: 1024px)')?.matches;\n } else {\n let is = false;\n try {\n const ua = navigator && navigator.userAgent;\n is = /Android|webOS|BlackBerry|iPhone|iPad|iPod|iOS/i.test(ua);\n } catch (e) {\n null;\n }\n return is;\n }\n};\n\n/**\n * 判断当前是否是 cloud 开头的文件协议\n */\nexport const isCloudFileID = (url) => {\n return /^cloud:\\/\\/.*/.test(url);\n};\n\n/**\n * 判断当前是否是 http/https 开头的文件协议\n */\nexport const isHttpFileID = (url) => {\n return /^http(s?):\\/\\/.*/.test(url);\n};\n\nexport function usePlatform() {\n const smallScreen = useMediaQuery('(max-width: 1024px)') ?? isH5Platform();\n const touchDevice = useMediaQuery('(pointer:coarse)') ?? smallScreen;\n return touchDevice || smallScreen ? 'h5' : 'pc';\n}\n\n/**\n * 在h5下,判断当前是否是移动浏览器\n */\nexport function inH5IsMobile() {\n try {\n // 区分h5是在编辑器还是移动浏览器\n let is_mobile_ua = false;\n const ua = navigator && navigator.userAgent;\n is_mobile_ua = /Android|webOS|BlackBerry|iPhone|iPad|iPod|iOS/i.test(ua);\n return is_mobile_ua;\n } catch (e) {\n console.log('isMobile err', e);\n }\n}\n\n/**\n * 过滤非字符串,返回字符串数组\n * 用于兼容单个组件和组件数组\n */\nexport const filterStrList = (value) => {\n return [].concat(value).filter((d) => typeof d === 'string' && d !== '');\n};\n\n/**\n * 文件字节转换\n */\nexport const transSize = (size) => {\n const b = parseInt(size) || 0;\n const getBig = (d) => Math.ceil(d / 1024) || 0;\n if (b < 1024) {\n return `${size}B`;\n }\n const k = getBig(size);\n if (k < 1024) {\n return `${k}K`;\n }\n const m = getBig(k);\n if (m < 1024) {\n return `${m}M`;\n }\n const g = getBig(m);\n return `${g}G`;\n};\n\n/**\n * 链接转换为下载\n */\nexport const downloadFile = (url) => {\n if (!url) {\n return;\n }\n const urlObj = new URL(url);\n urlObj.searchParams.append('response-content-disposition', 'attawchment');\n const urls = urlObj.toString();\n window.open(urls);\n setTimeout(() => {\n window.URL.revokeObjectURL(urls);\n }, 0);\n};\n\n/**\n * 文件名截取,保留后缀类型\n */\nexport const cutFileTitle = (str = '', count = 10) => {\n let [title, type] = [str, ''];\n const dotIndex = `${str}`.lastIndexOf('.');\n if (dotIndex > -1) {\n type = str.slice(dotIndex + 1);\n title = str.slice(0, dotIndex);\n }\n if (title.length > count) {\n title = `${title.slice(0, 7)}...${title.slice(-3)}`;\n }\n if (type) {\n title = `${title}.${type}`;\n }\n return title;\n};\n\n/**\n * 判断是否在 ide 中\n */\nexport const isInIde = () => !!window?.app?.cloud?.IS_WEDA_IDE;\n\n/**\n * 解析素材资源\n */\nexport const resolveStaticResourceUrl = (path) => {\n try {\n // eslint-disable-next-line no-unsafe-optional-chaining\n const resourceUrl =\n window?.app?.__internal__?.resolveStaticResourceUrl(path);\n return resourceUrl;\n } catch (error) {\n return '';\n }\n};\n\n/**\n * cloudid和文件名转换\n */\nexport const transFileCloudidToName = (fileID) => {\n const uuidReg = /(file-)?[0-9a-f]{8}((-)?[0-9a-f]{4}){3}(-)?[0-9a-f]{12}-/;\n const lastIndex = `${fileID}`.lastIndexOf('/');\n const name = `${fileID}`.slice(lastIndex + 1);\n const title = name.replace(uuidReg, '');\n return title;\n};\n\n/**\n * 判断是否是url\n */\nconst reg =\n // eslint-disable-next-line no-useless-escape\n /(((^https?:(?:\\/\\/)?)(?:[-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9.-]+(?::\\d+)?|(?:www.|[-;:&=\\+\\$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[\\+~%\\/.\\w-_]*)?\\??(?:[-\\+=&;%@.\\w_]*)#?(?:[\\w]*))?)$/;\n\nexport const isUrl = (path) => reg.test(path);\n\n/**\n * 生成随机数\n */\nexport const randomStr = (len = 32) => {\n const s = [];\n const hexDigits = '0123456789abcdef';\n const dictLen = hexDigits.length;\n for (var i = 0; i < len; i++) {\n const index = Math.floor(Math.random() * dictLen);\n s[i] = hexDigits[index];\n }\n const result = s.join('');\n return result;\n};\n\n/**\n * 根据编辑器传入数据筛选条件,转换接口参数条件\n */\nexport const getWhereList = (where) => {\n const result = [];\n Array.isArray(where) &&\n where.forEach((item1) => {\n if (item1?.groupLogic !== 'or' && Array.isArray(item1?.logicData)) {\n item1?.logicData.forEach((item2) => {\n let [rel, val] = [REL_DICT[item2?.rel], item2?.value];\n if ('_begin_with' === rel) {\n rel = 'regex';\n val = `^${val}`;\n }\n if ('_exclude' === rel) {\n rel = 'regex';\n val = `^((?!${val}).)*$`;\n }\n if (item2?.logic !== 'or' && item2?.key && rel && val !== undefined) {\n result.push({ key: item2.key, rel, val });\n }\n });\n }\n });\n return result;\n};\n","import { isInIde } from './platform';\n/**\n * 云存储/云函数相关\n */\n\n// cloudbase._useDefaultAdapter();\n// const tcb = cloudbase.init({\n// env: 'hole-2ggmiaj108259587',\n// });\n\n// export default app;\n\n// import cloudbase from '@cloudbase/js-sdk';\n\n// cloudbase._useDefaultAdapter();\n// const tcb = cloudbase.init({\n// env: 'hole-2ggmiaj108259587',\n// });\n\n// export function getNativeCloudInstance() {\n// return tcb;\n// }\n\nexport async function getCloudInstance() {\n const tcb = await window?.app?.cloud?.getCloudInstance();\n return tcb;\n}\n\n/**\n * 获取单个临时链接\n * 单个cos文件,返回字符串\n * 多个cos文件,返回 {fileID: src} 这样的对象\n */\nexport async function getTempFileURL(data) {\n if (window?.app?.cloud?.getTempFileURL) {\n return await window?.app?.cloud?.getTempFileURL(data);\n }\n}\n\n/**\n * 云函数获取数据\n */\nexport async function callDataSource(param) {\n const { params, dataSourceName, methodName } = param;\n try {\n const res = await window?.app?.cloud?.callDataSource?.({\n params,\n dataSourceName,\n methodName,\n });\n return res;\n } catch (error) {\n console.error('错误', error);\n return {};\n }\n}\n\n/**\n * 云API:获取用户自定义导航内容\n * param\n * WeAppId: string,\n * EnvId: string,\n * PublishType?: string,\n */\nexport async function getAppCustomNav() {\n try {\n const PublishType = isInIde() ? 'preview' : '';\n const WeAppId = window?.app?.id;\n const res = await callWedaApi({\n action: 'DescribeAppCustomNav',\n serviceType: 'lowcode',\n data: {\n WeAppId,\n PublishType,\n },\n });\n return res;\n } catch (error) {\n console.error('错误', error);\n return {};\n }\n}\n\nexport function callWedaApi(...args) {\n return window.app.cloud.callWedaApi(...args);\n}\n","import { useCallback, useState } from 'react';\n\nexport const useSetState = <T extends object>(\n initialState: T = {} as T\n): [T, (patch: Partial<T> | ((prevState: T) => Partial<T>)) => void] => {\n const [state, set] = useState<T>(initialState);\n const setState = useCallback((patch) => {\n set((prevState) =>\n Object.assign(\n {},\n prevState,\n patch instanceof Function ? patch(prevState) : patch\n )\n );\n }, []);\n\n return [state, setState];\n};\n","import * as weui from 'weui.js';\n\nexport default weui;\n","var api = require(\"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../node_modules/postcss-loader/src/index.js??postcss!./weda-ui.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\nif (module.hot) {\n if (!content.locals || module.hot.invalidate) {\n var isEqualLocals = function isEqualLocals(a, b, isNamedExport) {\n if (!a && b || a && !b) {\n return false;\n }\n\n var p;\n\n for (p in a) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (a[p] !== b[p]) {\n return false;\n }\n }\n\n for (p in b) {\n if (isNamedExport && p === 'default') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (!a[p]) {\n return false;\n }\n }\n\n return true;\n};\n var oldLocals = content.locals;\n\n module.hot.accept(\n \"!!../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../node_modules/postcss-loader/src/index.js??postcss!./weda-ui.css\",\n function () {\n content = require(\"!!../../node_modules/react-scripts/node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!../../node_modules/postcss-loader/src/index.js??postcss!./weda-ui.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\n if (!isEqualLocals(oldLocals, content.locals)) {\n module.hot.invalidate();\n\n return;\n }\n\n oldLocals = content.locals;\n\n update(content);\n }\n )\n }\n\n module.hot.dispose(function() {\n update();\n });\n}\n\nmodule.exports = content.locals || {};"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACNA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;;;AAUA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAfA;AAAA;AAAA;AACA;AAgBA;AACA;AAEA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAHA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AACA;AAAA;AAAA;AACA;;AADA;AAAA;AACA;AADA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAEA;AAFA;AAeA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AALA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPA;AAAA;AAAA;AAAA;AAAA;AAWA;AACA;AAAA;AAAA;AACA;AACA;AAJA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AANA;AAAA;AAAA;AAAA;AAAA;AAXA;AAAA;AAAA;AAAA;AAAA;AAFA;AAyBA;AACA;AAAA;AAAA;AACA;AACA;AA/BA;AAiCA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AA7DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDA;AAAA;AAAA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjFA;AACA;AAKA;AACA;AAGA;AACA;AACA;;;AAEA;AAYA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AACA;AAaA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AATA;AAAA;AAAA;AAAA;AAAA;AAgBA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAeA;AACA;AAxEA;AAaA;;;AAbA;AACA;AAwEA;AACA;AACA;AACA;AACA;AACA;AACA;AA8BA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HA;AAEA;AACA;;AAEA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAzBA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;;;AAGA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAFA;AAIA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAZA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAoBA;AACA;AA1CA;AA8DA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjFA;AAEA;AACA;AACA;AACA;;AAGA;AASA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AASA;AACA;AAZA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAmBA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AADA;AAWA;AACA;AACA;AACA;AAHA;AADA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATA;AAAA;AAAA;AAAA;AAAA;AAcA;AACA;AACA;AAFA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAvBA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAmCA;AACA;AAxEA;AAUA;;;AAVA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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AAFA;AACA;AAUA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAIA;AACA;AACA;AAAA;AACA;AAIA;AACA;AApBA;AAsBA;AACA;AAhFA;AACA;AADA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/bA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjFA;AAEA;AACA;AACA;;AAmBA;AACA;AACA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAFA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AARA;AAAA;AACA;AADA;AASA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAZA;AAAA;AAAA;AAAA;AAAA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AApBA;AAsBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtBA;AAAA;AAAA;AAAA;AAAA;AA0BA;AA9FA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AASA;AACA;AAEA;AACA;AACA;;;AAEA;AASA;AAmBA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAFA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AACA;AAMA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AATA;AAAA;AAAA;AAAA;AAAA;AAJA;AACA;AAmBA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAJA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAFA;AADA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AADA;AAGA;AACA;AACA;AACA;AAjBA;AAkBA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AA3BA;AAAA;AAAA;AAAA;AAAA;AAPA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAuCA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AASA;AACA;AA9IA;AA2BA;;;AA3BA;AA+IA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AANA;AAHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAWA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AADA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AALA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AACA;AAFA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAFA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAFA;AAAA;AAAA;AAAA;AAAA;AAjBA;AAAA;AAAA;AAAA;AAAA;AAPA;AAAA;AAAA;AAAA;AAAA;AA+BA;AACA;AAAA;AAAA;AACA;AACA;AACA;AALA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAHA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AAAA;AAAA;AACA;AALA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPA;AAAA;AAAA;AAAA;AAAA;AAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AADA;AAGA;AACA;AACA;AAAA;AACA;AACA;AADA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AADA;AAJA;AASA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAHA;AAAA;AAKA;AACA;AACA;AAHA;AACA;AALA;AAAA;AAIA;AAKA;AACA;AACA;AACA;AAFA;AAVA;AAAA;AACA;AADA;AAAA;AAAA;AAeA;AACA;AADA;AAGA;AACA;AADA;AACA;AAnBA;AAAA;AAsBA;AAAA;AAAA;AAAA;AAtBA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAyBA;AACA;AA1DA;AA4DA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAJA;AASA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFA;AATA;AAAA;AAAA;AAAA;AAAA;AADA;AA5DA;AAAA;AAAA;AAAA;AAAA;AA+EA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzGA;AAAA;AAAA;AAAA;AAAA;AA/BA;AA6IA;AACA;AAtLA;AAKA;;;AALA;AAuLA;AAAA;AACA;AADA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAGA;AACA;AAJA;AAAA;AACA;AADA;AAMA;AACA;AAPA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AASA;AACA;AADA;AACA;AAVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAaA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAVA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAeA;AACA;AACA;AACA;AACA;AAJA;AADA;AAAA;AAAA;AAAA;AAAA;AAfA;AAAA;AAAA;AAAA;AAAA;AADA;AA4BA;AACA;AAvDA;AACA;AADA;AAwDA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAdA;AAiBA;AACA;AACA;AACA;AAHA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjFA;AACA;AACA;AACA;AACA;AAEA;;AAMA;AAKA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAFA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAFA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AARA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAUA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAnDA;AACA;AADA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AAGA;;AAEA;AAAA;AACA;AADA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAHA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAQA;AACA;AAnBA;AACA;AADA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjFA;AACA;AAEA;;AAYA;AAaA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAFA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AARA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AACA;AA3CA;AACA;AADA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjFA;AACA;AACA;AACA;AAOA;AACA;;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AANA;AACA;AAOA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAhCA;AAWA;;;AAXA;AACA;AA+BA;AAAA;AACA;AADA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AADA;AAGA;AACA;AAJA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AADA;AAOA;AACA;AARA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AASA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AACA;AAlCA;AACA;AADA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjFA;AACA;AACA;AACA;AAEA;;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAYA;AACA;AADA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAKA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAJA;AAOA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AANA;AAQA;AAEA;AAEA;AACA;AAJA;AAMA;AAAA;AAAA;AAAA;AANA;AAAA;AAAA;AAAA;AAAA;AASA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAtBA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AA8BA;AACA;AAtEA;AACA;AADA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAFA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA1BA;AACA;AAEA;AAAA;AACA;AADA;AAwBA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AAHA;AAMA;AAGA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAbA;AAeA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AATA;AACA;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AADA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxMA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;;AAVA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AACA;AADA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AAUA;AAAA;AAAA;AAMA;AACA;AACA;AACA;;AATA;AAAA;AACA;AADA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AASA;AAAA;AAAA;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAtBA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAIA;AACA;AACA;AAHA;AACA;AAJA;AAGA;AAHA;AACA;AADA;AAAA;AAAA;AAUA;AAVA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AAsBA;AAAA;AAAA;AACA;;AADA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAHA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAFA;AAHA;AACA;AALA;AAIA;AAJA;AACA;AADA;AAAA;AAAA;AAcA;AAdA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AAmBA;AAAA;AACA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtFA;AAEA;AAEA;AACA;AADA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAOA;AAEA;AACA;AACA;AAhBA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;A","sourceRoot":""}