diff --git a/package.json b/package.json index e54fc52b..f83e1d1b 100644 --- a/package.json +++ b/package.json @@ -46,5 +46,9 @@ "prettier --write", "eslint --fix" ] + }, + "resolutions": { + "@emotion/react": "^11.8.1", + "@emotion/styled": "^11.8.1" } } diff --git a/packages/editor-sdk/package.json b/packages/editor-sdk/package.json index 5ec083b1..d07459a6 100644 --- a/packages/editor-sdk/package.json +++ b/packages/editor-sdk/package.json @@ -28,7 +28,6 @@ "@chakra-ui/icons": "^1.0.15", "@chakra-ui/react": "^1.7.1", "@emotion/css": "^11.7.1", - "@emotion/react": "^11.8.1", "@sinclair/typebox": "^0.21.2", "@sunmao-ui/core": "^0.7.3", "@sunmao-ui/runtime": "^0.7.3", diff --git a/packages/editor-sdk/src/components/Form/ExpressionEditor/ExpressionEditor.tsx b/packages/editor-sdk/src/components/Form/ExpressionEditor/ExpressionEditor.tsx index 9d6f64eb..15d3e3ce 100644 --- a/packages/editor-sdk/src/components/Form/ExpressionEditor/ExpressionEditor.tsx +++ b/packages/editor-sdk/src/components/Form/ExpressionEditor/ExpressionEditor.tsx @@ -19,7 +19,7 @@ import { Button, } from '@chakra-ui/react'; import { ExternalLinkIcon } from '@chakra-ui/icons'; -import { css, Global } from '@emotion/react'; +import { css, injectGlobal } from '@emotion/css'; import { parseExpression } from '@sunmao-ui/shared'; import 'codemirror/mode/javascript/javascript'; import 'codemirror/addon/mode/multiplex'; @@ -36,6 +36,12 @@ import tern, { Def } from 'tern'; import { getTypeString } from '../../../utils/type'; import ecmascript from '../../../constants/ecmascript'; +injectGlobal` + .CodeMirror-hints { + zIndex: 1800 + } +`; + // TODO: tern uses global variable, maybe there is some workaround (window as unknown as { tern: typeof tern }).tern = tern; @@ -218,6 +224,7 @@ const BaseExpressionEditor = React.forwardRef< const wrapperEl = useRef(null); const cm = useRef(null); const tServer = useRef(null); + useEffect(() => { if (!wrapperEl.current) { return; @@ -289,15 +296,13 @@ const BaseExpressionEditor = React.forwardRef< })); return ( - - - + ); } ); diff --git a/packages/editor-sdk/src/components/Select/select.tsx b/packages/editor-sdk/src/components/Select/select.tsx index cd1faf62..4ce1bd50 100644 --- a/packages/editor-sdk/src/components/Select/select.tsx +++ b/packages/editor-sdk/src/components/Select/select.tsx @@ -5,12 +5,11 @@ import RcSelect, { Option, SelectProps as RcSelectProps, } from 'rc-select'; -import getIcons from './utils'; -import { rcSelectStyle } from './style'; +import { cx } from '@emotion/css'; import { BaseOptionType, DefaultOptionType } from 'rc-select/lib/Select'; import { Placement, RenderDOMFunc } from 'rc-select/lib/BaseSelect'; -import { cx } from '@emotion/css'; -import { Global } from '@emotion/react'; +import getIcons from './utils'; +import './style'; const prefixCls = 'sunmao-select'; const defaultRenderEmpty = 'Not Found'; @@ -88,27 +87,24 @@ const SelectMain = < const notFound: React.ReactNode = notFoundContent || defaultRenderEmpty; return ( - <> - - - + ); }; diff --git a/packages/editor-sdk/src/components/Select/style.ts b/packages/editor-sdk/src/components/Select/style.ts index 7bc8b6ae..2aad4a0a 100644 --- a/packages/editor-sdk/src/components/Select/style.ts +++ b/packages/editor-sdk/src/components/Select/style.ts @@ -1,4 +1,4 @@ -import { css, keyframes } from '@emotion/react'; +import { injectGlobal, keyframes } from '@emotion/css'; const rcSelectSlideUpIn = keyframes` 0% { @@ -49,7 +49,7 @@ const rcSelectSlideDownOut = keyframes` } }`; -export const rcSelectStyle = css` +injectGlobal` .sunmao-select-single .sunmao-select-selector { display: flex; } diff --git a/packages/editor-sdk/src/components/Widgets/EventWidget.tsx b/packages/editor-sdk/src/components/Widgets/EventWidget.tsx index 9d6c1fd1..57498b2c 100644 --- a/packages/editor-sdk/src/components/Widgets/EventWidget.tsx +++ b/packages/editor-sdk/src/components/Widgets/EventWidget.tsx @@ -16,18 +16,7 @@ import { } from '@sunmao-ui/shared'; import { JSONSchema7Object } from 'json-schema'; import { PREVENT_POPOVER_WIDGET_CLOSE_CLASS } from '../../constants/widget'; - -const ComponentTargetSelect = React.lazy(() => - import('../Select').then(lib => ({ - default: lib.Select, - })) -); - -const ComponentTargetSelectOption = React.lazy(() => - import('../Select').then(lib => ({ - default: lib.Select.Option, - })) -); +import { Select as ComponentTargetSelect } from '../Select'; const EventWidgetOptions = Type.Object({}); @@ -244,9 +233,9 @@ export const EventWidget: React.FC> = observer(prop value={formik.values.componentId === '' ? undefined : formik.values.componentId} > {[{ id: GLOBAL_UTIL_METHOD_ID }].concat(components).map(c => ( - + {c.id} - + ))} diff --git a/packages/editor/package.json b/packages/editor/package.json index 7749c6a9..32bd7115 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -88,7 +88,8 @@ "vite": "^3.0.8" }, "peerDependencies": { - "@emotion/react": "^11.8.1" + "react": "16.x || 17.x", + "react-dom": "16.x || 17.x" }, "husky": { "hooks": { diff --git a/yarn.lock b/yarn.lock index 0097fcb1..9ce8355b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -684,7 +684,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.16.0": +"@babel/plugin-syntax-jsx@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz" integrity sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg== @@ -1221,7 +1221,7 @@ "@babel/helper-validator-option" "^7.14.5" "@babel/plugin-transform-typescript" "^7.16.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.16.0" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz" integrity sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw== @@ -2661,24 +2661,6 @@ source-map "^0.5.7" stylis "4.0.13" -"@emotion/babel-plugin@^11.7.1": - version "11.7.1" - resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.7.1.tgz" - integrity sha512-K3/6Y+J/sIAjplf3uIteWLhPuOyuMNnE+iyYnTF/m294vc6IL90kTHp7y8ldZYbpKlP17rpOWDKM9DvTcrOmNQ== - dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/runtime" "^7.13.10" - "@emotion/hash" "^0.8.0" - "@emotion/memoize" "^0.7.5" - "@emotion/serialize" "^1.0.2" - babel-plugin-macros "^2.6.1" - convert-source-map "^1.5.0" - escape-string-regexp "^4.0.0" - find-root "^1.1.0" - source-map "^0.5.7" - stylis "4.0.13" - "@emotion/cache@^11.10.0": version "11.10.3" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.3.tgz#c4f67904fad10c945fea5165c3a5a0583c164b87" @@ -2690,7 +2672,7 @@ "@emotion/weak-memoize" "^0.3.0" stylis "4.0.13" -"@emotion/cache@^11.4.0", "@emotion/cache@^11.5.0": +"@emotion/cache@^11.4.0": version "11.5.0" resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.5.0.tgz" integrity sha512-mAZ5QRpLriBtaj/k2qyrXwck6yeoz1V5lMt/jfj6igWU35yYlNKs2LziXVgvH81gnJZ+9QQNGelSsnuoAy6uIw== @@ -2701,17 +2683,6 @@ "@emotion/weak-memoize" "^0.2.5" stylis "^4.0.10" -"@emotion/cache@^11.9.3": - version "11.9.3" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.9.3.tgz#96638449f6929fd18062cfe04d79b29b44c0d6cb" - integrity sha512-0dgkI/JKlCXa+lEXviaMtGBL0ynpx4osh7rjOXE71q9bIF8G+XhJgvi+wDu0B0IdCVx37BffiwXlN9I3UuzFvg== - dependencies: - "@emotion/memoize" "^0.7.4" - "@emotion/sheet" "^1.1.1" - "@emotion/utils" "^1.0.0" - "@emotion/weak-memoize" "^0.2.5" - stylis "4.0.13" - "@emotion/css@^11.7.1": version "11.10.0" resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.10.0.tgz#270b4fdf2419e59cb07081d0e9f7940d88b8b443" @@ -2740,19 +2711,19 @@ dependencies: "@emotion/memoize" "0.7.4" -"@emotion/is-prop-valid@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz#f0907a416368cf8df9e410117068e20fe87c0a3a" - integrity sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA== +"@emotion/is-prop-valid@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" + integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== dependencies: - "@emotion/memoize" "^0.7.4" + "@emotion/memoize" "^0.8.0" "@emotion/memoize@0.7.4": version "0.7.4" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== -"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5": +"@emotion/memoize@^0.7.4": version "0.7.5" resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz" integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== @@ -2762,33 +2733,7 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== -"@emotion/react@^11.0.0": - version "11.9.3" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.9.3.tgz#f4f4f34444f6654a2e550f5dab4f2d360c101df9" - integrity sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@emotion/babel-plugin" "^11.7.1" - "@emotion/cache" "^11.9.3" - "@emotion/serialize" "^1.0.4" - "@emotion/utils" "^1.1.0" - "@emotion/weak-memoize" "^0.2.5" - hoist-non-react-statics "^3.3.1" - -"@emotion/react@^11.1.1": - version "11.5.0" - resolved "https://registry.npmjs.org/@emotion/react/-/react-11.5.0.tgz" - integrity sha512-MYq/bzp3rYbee4EMBORCn4duPQfgpiEB5XzrZEBnUZAL80Qdfr7CEv/T80jwaTl/dnZmt9SnTa8NkTrwFNpLlw== - dependencies: - "@babel/runtime" "^7.13.10" - "@emotion/cache" "^11.5.0" - "@emotion/serialize" "^1.0.2" - "@emotion/sheet" "^1.0.3" - "@emotion/utils" "^1.0.0" - "@emotion/weak-memoize" "^0.2.5" - hoist-non-react-statics "^3.3.1" - -"@emotion/react@^11.8.1": +"@emotion/react@^11.0.0", "@emotion/react@^11.1.1", "@emotion/react@^11.8.1": version "11.10.4" resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.4.tgz#9dc6bccbda5d70ff68fdb204746c0e8b13a79199" integrity sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA== @@ -2802,7 +2747,7 @@ "@emotion/weak-memoize" "^0.3.0" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@^1.0.0", "@emotion/serialize@^1.0.2": +"@emotion/serialize@^1.0.0": version "1.0.2" resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz" integrity sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A== @@ -2813,17 +2758,6 @@ "@emotion/utils" "^1.0.0" csstype "^3.0.2" -"@emotion/serialize@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.4.tgz#ff31fd11bb07999611199c2229e152faadc21a3c" - integrity sha512-1JHamSpH8PIfFwAMryO2bNka+y8+KA5yga5Ocf2d7ZEiJjb7xlLW7aknBGZqJLajuLOvJ+72vN+IBSwPlXD1Pg== - dependencies: - "@emotion/hash" "^0.8.0" - "@emotion/memoize" "^0.7.4" - "@emotion/unitless" "^0.7.5" - "@emotion/utils" "^1.0.0" - csstype "^3.0.2" - "@emotion/serialize@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.0.tgz#b1f97b1011b09346a40e9796c37a3397b4ea8ea8" @@ -2840,26 +2774,22 @@ resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.3.tgz" integrity sha512-YoX5GyQ4db7LpbmXHMuc8kebtBGP6nZfRC5Z13OKJMixBEwdZrJ914D6yJv/P+ZH/YY3F5s89NYX2hlZAf3SRQ== -"@emotion/sheet@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.1.tgz#015756e2a9a3c7c5f11d8ec22966a8dbfbfac787" - integrity sha512-J3YPccVRMiTZxYAY0IOq3kd+hUP8idY8Kz6B/Cyo+JuXq52Ek+zbPbSQUrVQp95aJ+lsAW7DPL1P2Z+U1jGkKA== - "@emotion/sheet@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.0.tgz#771b1987855839e214fc1741bde43089397f7be5" integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w== -"@emotion/styled@^11.0.0": - version "11.9.3" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.9.3.tgz#47f0c71137fec7c57035bf3659b52fb536792340" - integrity sha512-o3sBNwbtoVz9v7WB1/Y/AmXl69YHmei2mrVnK7JgyBJ//Rst5yqPZCecEJlMlJrFeWHp+ki/54uN265V2pEcXA== +"@emotion/styled@^11.0.0", "@emotion/styled@^11.8.1": + version "11.10.4" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.4.tgz#e93f84a4d54003c2acbde178c3f97b421fce1cd4" + integrity sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ== dependencies: - "@babel/runtime" "^7.13.10" - "@emotion/babel-plugin" "^11.7.1" - "@emotion/is-prop-valid" "^1.1.3" - "@emotion/serialize" "^1.0.4" - "@emotion/utils" "^1.1.0" + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.10.0" + "@emotion/is-prop-valid" "^1.2.0" + "@emotion/serialize" "^1.1.0" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" + "@emotion/utils" "^1.2.0" "@emotion/unitless@^0.7.5": version "0.7.5" @@ -2881,11 +2811,6 @@ resolved "https://registry.npmjs.org/@emotion/utils/-/utils-1.0.0.tgz" integrity sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA== -"@emotion/utils@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf" - integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ== - "@emotion/utils@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" @@ -5134,15 +5059,6 @@ babel-plugin-jest-hoist@^27.2.0: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@^2.6.1: - version "2.8.0" - resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz" - integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== - dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" - babel-plugin-macros@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" @@ -5977,17 +5893,6 @@ cosmiconfig@^5.2.0: js-yaml "^3.13.1" parse-json "^4.0.0" -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - cosmiconfig@^7, cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" @@ -7985,7 +7890,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -11298,7 +11203,7 @@ resolve@^1.1.7, resolve@^1.10.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0: +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0: version "1.20.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -12877,7 +12782,7 @@ yallist@^4.0.0: resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: +yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==