{"version":3,"file":"js/chunk.3badb8c409f57fa8.js","mappings":"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","sources":["webpack:///./src/components/homepage/HomepageUserMedal/index.tsx","webpack:///./src/api/homepage.ts","webpack:///./node_modules/antd/es/col/index.js","webpack:///./node_modules/antd/es/grid/RowContext.js","webpack:///./node_modules/antd/es/grid/col.js","webpack:///./node_modules/antd/es/grid/row.js","webpack:///./node_modules/antd/es/grid/style/index.js","webpack:///./node_modules/antd/es/row/index.js"],"sourcesContent":["import * as api from '@/api/homepage';\nimport bg from '@/static/imgs/homepage-usermedal-bg.png';\nimport { useRequest } from 'ahooks';\nimport { Avatar, Col, Modal, Row } from 'antd';\nimport './index.scss';\n\ntype HomepageUserMedalProps = {\n open: boolean;\n closeModal: () => void;\n isAuthenticated: boolean;\n uid: string | null;\n};\n\nconst HomepageUserMedal: React.FC<HomepageUserMedalProps> = (props) => {\n const { data: userMedal } = useRequest(api.getUserMedal, {\n manual: !props.isAuthenticated,\n defaultParams: [props.uid],\n });\n return (\n <Modal\n className=\"homepage-usermedal\"\n width={596}\n open={props.open}\n footer={null}\n onCancel={props.closeModal}\n maskClosable={false}\n centered\n >\n <div style={{ backgroundImage: `url(${bg})` }} className=\"h-106px\" />\n <div className=\"p-25px\">\n <Row gutter={[12, 20]}>\n {userMedal?.map((item) => (\n <Col key={item.title} span={6}>\n <div key={item.title} className=\"flex flex-col items-center\">\n <Avatar\n src={item.display_url}\n size={64}\n style={{ objectFit: 'cover' }}\n />\n <div\n className={`text-14px font-500 ${\n item.user_acquired_status && 'text-hex-3598E8'\n }`}\n >\n {item.title}\n </div>\n <div\n className={`text-12px text-hex-86909C ${\n item.user_acquired_status && 'text-hex-3598E8'\n }`}\n >\n {item.description}\n </div>\n </div>\n </Col>\n ))}\n </Row>\n </div>\n </Modal>\n );\n};\n\nexport default HomepageUserMedal;\n","import request from './request';\n\n// 获取广告内容\nexport async function areaDetail(areaCode: string) {\n return request<API.Homepage.Area>(`/api/publicity/areas/${areaCode}`, {\n skipErrorHandler: true,\n });\n}\n\n// 获取广告弹窗内容\nexport async function getPopDetail() {\n return request<API.Homepage.Pop>(`/api/publicity/pop`, {\n skipErrorHandler: true,\n });\n}\n\n// 活动列表\nexport async function listActivities(\n params: API.Homepage.ActivityForListParams,\n) {\n return request<API.Homepage.ActivityForList[]>(`/api/activity/activities`, {\n params,\n });\n}\n\n// 获取社区表单\nexport async function listCommunityForms(\n params: API.Homepage.FormForListParams,\n) {\n return request<API.PageResponse<API.Homepage.FormForList>>(\n '/api/crf/community/forms',\n { params },\n );\n}\n\n/**\n * 贡献排行榜\n * @param statsType\n * portal_rank: 总榜\n * portal_rank_last30d: 月榜\n */\nexport async function rankForList(params: API.Homepage.RankForListParams) {\n return request<API.ToolPageResponse<API.Homepage.RankForList>>(\n '/api/stats/rank/ranks',\n { params },\n );\n}\n\n/**\n * 科研导航-首页展示\n * @returns\n */\nexport async function navigationForList() {\n return request<API.ToolPageResponse<API.Homepage.NavigationForList>>(\n '/api/tools/navigation/navigations/index',\n );\n}\n\n/**\n * 工具广场\n * @returns\n */\nexport async function toolsForList() {\n return request<API.ToolPageResponse<API.Homepage.ToolForList>>(\n '/api/tools/portal',\n );\n}\n\n/**\n * 收藏\n * @param navigationId\n * @returns\n */\nexport async function navigationBookmark(navigationId: number) {\n return request(`/api/tools/navigation/${navigationId}/like`, {\n method: 'POST',\n });\n}\n\n/**\n * 取消收藏\n * @param navigationId\n * @returns\n */\nexport async function navigationUnbookmark(navigationId: number) {\n return request(`/api/tools/navigation/${navigationId}/unlike`, {\n method: 'POST',\n });\n}\n\n/**\n *\n * @returns\n */\nexport async function getStats() {\n return request<API.Homepage.StatsDetail>('/api/stats/threads/count');\n}\n\n// 积分任务列表\nexport async function listTasks(params: { is_jifen_enabled?: number }) {\n return request<API.Homepage.TaskForList[]>('/api/task/tasks', {\n // 首页会自动调用该接口,用户未登录时屏蔽报错\n // FIXME 注意,原则上,这里不应该设置 skipErrorHandler,而应该在业务组件中判断,若用户未登录,则不调用该接口\n skipErrorHandler: true,\n params,\n });\n}\n\n// 触发任务事件通知\nexport async function taskSignals(data: API.Homepage.TaskCheckSignalsData) {\n return request<API.Homepage.TaskForList[]>('/api/task/signals', {\n method: 'POST',\n data,\n });\n}\n// 签到\nexport async function taskCheck(data: API.Homepage.TaskCheckData) {\n return request<API.Homepage.TaskForList[]>('/api/task/check', {\n method: 'POST',\n data,\n });\n}\n// 用户签到详情\nexport async function getUsercheck(params: { device_t: number }) {\n return request<API.Homepage.TaskUsercheckDetail>('/api/task/usercheck', {\n params,\n // 首页会自动调用该接口,用户未登录时屏蔽报错\n // FIXME 注意,原则上,这里不应该设置 skipErrorHandler,而应该在业务组件中判断,若用户未登录,则不调用该接口\n skipErrorHandler: true,\n });\n}\n\n// 共建积分概要\nexport async function getBuildingOverview() {\n return request<API.Homepage.BuildingOverviewDetail>(\n '/api/task/building-overview',\n );\n}\n\n// 共建榜前10\nexport async function getBuildingRank(params: { kind: 'all' | 'week' }) {\n return request<API.Homepage.BuildingRankForGet>(\n '/api/task/stat/building-rank',\n { params },\n );\n}\n\n// 用户勋章列表\nexport async function getUserMedal(uid: string | null) {\n return request<API.Homepage.UserMedalForList[]>(\n `/api/task/users/${uid}/user-medal`,\n );\n}\n\n// 获取用户完成任务的提示\nexport async function getUnreadUserTask() {\n return request<API.Homepage.UnreadUserTaskForGet>(\n '/api/task/get-unread-user-task',\n );\n}\n\n// 获取用户勋章提示\nexport async function getUnreadUserMedal() {\n return request<API.Homepage.UnreadUserMedalForGet>(\n '/api/task/get-unread-user-medal',\n );\n}\n\n// 最新动态\nexport async function listEvents(params: API.PageParams) {\n return request<API.ToolPageResponse<API.Homepage.EventForList>>(\n '/api/event/events',\n {\n params,\n },\n );\n}\n\n// 获取用户是否有机构工作台\nexport async function getHasDashboard() {\n return request<API.Homepage.HasJoinedDashboard>(\n '/api/system/userinfo/dashboard',\n );\n}\n","import { Col } from '../grid';\nexport default Col;","import { createContext } from 'react';\nconst RowContext = /*#__PURE__*/createContext({});\nexport default RowContext;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport RowContext from './RowContext';\nimport { useColStyle } from './style';\nfunction parseFlex(flex) {\n if (typeof flex === 'number') {\n return `${flex} ${flex} auto`;\n }\n if (/^\\d+(\\.\\d+)?(px|em|rem|%)$/.test(flex)) {\n return `0 0 ${flex}`;\n }\n return flex;\n}\nconst sizes = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];\nconst Col = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n const {\n gutter,\n wrap,\n supportFlexGap\n } = React.useContext(RowContext);\n const {\n prefixCls: customizePrefixCls,\n span,\n order,\n offset,\n push,\n pull,\n className,\n children,\n flex,\n style\n } = props,\n others = __rest(props, [\"prefixCls\", \"span\", \"order\", \"offset\", \"push\", \"pull\", \"className\", \"children\", \"flex\", \"style\"]);\n const prefixCls = getPrefixCls('col', customizePrefixCls);\n const [wrapSSR, hashId] = useColStyle(prefixCls);\n let sizeClassObj = {};\n sizes.forEach(size => {\n let sizeProps = {};\n const propSize = props[size];\n if (typeof propSize === 'number') {\n sizeProps.span = propSize;\n } else if (typeof propSize === 'object') {\n sizeProps = propSize || {};\n }\n delete others[size];\n sizeClassObj = Object.assign(Object.assign({}, sizeClassObj), {\n [`${prefixCls}-${size}-${sizeProps.span}`]: sizeProps.span !== undefined,\n [`${prefixCls}-${size}-order-${sizeProps.order}`]: sizeProps.order || sizeProps.order === 0,\n [`${prefixCls}-${size}-offset-${sizeProps.offset}`]: sizeProps.offset || sizeProps.offset === 0,\n [`${prefixCls}-${size}-push-${sizeProps.push}`]: sizeProps.push || sizeProps.push === 0,\n [`${prefixCls}-${size}-pull-${sizeProps.pull}`]: sizeProps.pull || sizeProps.pull === 0,\n [`${prefixCls}-rtl`]: direction === 'rtl'\n });\n });\n const classes = classNames(prefixCls, {\n [`${prefixCls}-${span}`]: span !== undefined,\n [`${prefixCls}-order-${order}`]: order,\n [`${prefixCls}-offset-${offset}`]: offset,\n [`${prefixCls}-push-${push}`]: push,\n [`${prefixCls}-pull-${pull}`]: pull\n }, className, sizeClassObj, hashId);\n const mergedStyle = {};\n // Horizontal gutter use padding\n if (gutter && gutter[0] > 0) {\n const horizontalGutter = gutter[0] / 2;\n mergedStyle.paddingLeft = horizontalGutter;\n mergedStyle.paddingRight = horizontalGutter;\n }\n // Vertical gutter use padding when gap not support\n if (gutter && gutter[1] > 0 && !supportFlexGap) {\n const verticalGutter = gutter[1] / 2;\n mergedStyle.paddingTop = verticalGutter;\n mergedStyle.paddingBottom = verticalGutter;\n }\n if (flex) {\n mergedStyle.flex = parseFlex(flex);\n // Hack for Firefox to avoid size issue\n // https://github.com/ant-design/ant-design/pull/20023#issuecomment-564389553\n if (wrap === false && !mergedStyle.minWidth) {\n mergedStyle.minWidth = 0;\n }\n }\n return wrapSSR( /*#__PURE__*/React.createElement(\"div\", Object.assign({}, others, {\n style: Object.assign(Object.assign({}, mergedStyle), style),\n className: classes,\n ref: ref\n }), children));\n});\nif (process.env.NODE_ENV !== 'production') {\n Col.displayName = 'Col';\n}\nexport default Col;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport useFlexGapSupport from '../_util/hooks/useFlexGapSupport';\nimport useResponsiveObserver, { responsiveArray } from '../_util/responsiveObserver';\nimport RowContext from './RowContext';\nimport { useRowStyle } from './style';\nconst RowAligns = ['top', 'middle', 'bottom', 'stretch'];\nconst RowJustify = ['start', 'end', 'center', 'space-around', 'space-between', 'space-evenly'];\nfunction useMergePropByScreen(oriProp, screen) {\n const [prop, setProp] = React.useState(typeof oriProp === 'string' ? oriProp : '');\n const calcMergeAlignOrJustify = () => {\n if (typeof oriProp === 'string') {\n setProp(oriProp);\n }\n if (typeof oriProp !== 'object') {\n return;\n }\n for (let i = 0; i < responsiveArray.length; i++) {\n const breakpoint = responsiveArray[i];\n // if do not match, do nothing\n if (!screen[breakpoint]) continue;\n const curVal = oriProp[breakpoint];\n if (curVal !== undefined) {\n setProp(curVal);\n return;\n }\n }\n };\n React.useEffect(() => {\n calcMergeAlignOrJustify();\n }, [JSON.stringify(oriProp), screen]);\n return prop;\n}\nconst Row = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n prefixCls: customizePrefixCls,\n justify,\n align,\n className,\n style,\n children,\n gutter = 0,\n wrap\n } = props,\n others = __rest(props, [\"prefixCls\", \"justify\", \"align\", \"className\", \"style\", \"children\", \"gutter\", \"wrap\"]);\n const {\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n const [screens, setScreens] = React.useState({\n xs: true,\n sm: true,\n md: true,\n lg: true,\n xl: true,\n xxl: true\n });\n // to save screens info when responsiveObserve callback had been call\n const [curScreens, setCurScreens] = React.useState({\n xs: false,\n sm: false,\n md: false,\n lg: false,\n xl: false,\n xxl: false\n });\n // ================================== calc responsive data ==================================\n const mergeAlign = useMergePropByScreen(align, curScreens);\n const mergeJustify = useMergePropByScreen(justify, curScreens);\n const supportFlexGap = useFlexGapSupport();\n const gutterRef = React.useRef(gutter);\n const responsiveObserver = useResponsiveObserver();\n // ================================== Effect ==================================\n React.useEffect(() => {\n const token = responsiveObserver.subscribe(screen => {\n setCurScreens(screen);\n const currentGutter = gutterRef.current || 0;\n if (!Array.isArray(currentGutter) && typeof currentGutter === 'object' || Array.isArray(currentGutter) && (typeof currentGutter[0] === 'object' || typeof currentGutter[1] === 'object')) {\n setScreens(screen);\n }\n });\n return () => responsiveObserver.unsubscribe(token);\n }, []);\n // ================================== Render ==================================\n const getGutter = () => {\n const results = [undefined, undefined];\n const normalizedGutter = Array.isArray(gutter) ? gutter : [gutter, undefined];\n normalizedGutter.forEach((g, index) => {\n if (typeof g === 'object') {\n for (let i = 0; i < responsiveArray.length; i++) {\n const breakpoint = responsiveArray[i];\n if (screens[breakpoint] && g[breakpoint] !== undefined) {\n results[index] = g[breakpoint];\n break;\n }\n }\n } else {\n results[index] = g;\n }\n });\n return results;\n };\n const prefixCls = getPrefixCls('row', customizePrefixCls);\n const [wrapSSR, hashId] = useRowStyle(prefixCls);\n const gutters = getGutter();\n const classes = classNames(prefixCls, {\n [`${prefixCls}-no-wrap`]: wrap === false,\n [`${prefixCls}-${mergeJustify}`]: mergeJustify,\n [`${prefixCls}-${mergeAlign}`]: mergeAlign,\n [`${prefixCls}-rtl`]: direction === 'rtl'\n }, className, hashId);\n // Add gutter related style\n const rowStyle = {};\n const horizontalGutter = gutters[0] != null && gutters[0] > 0 ? gutters[0] / -2 : undefined;\n const verticalGutter = gutters[1] != null && gutters[1] > 0 ? gutters[1] / -2 : undefined;\n if (horizontalGutter) {\n rowStyle.marginLeft = horizontalGutter;\n rowStyle.marginRight = horizontalGutter;\n }\n if (supportFlexGap) {\n // Set gap direct if flex gap support\n [, rowStyle.rowGap] = gutters;\n } else if (verticalGutter) {\n rowStyle.marginTop = verticalGutter;\n rowStyle.marginBottom = verticalGutter;\n }\n // \"gutters\" is a new array in each rendering phase, it'll make 'React.useMemo' effectless.\n // So we deconstruct \"gutters\" variable here.\n const [gutterH, gutterV] = gutters;\n const rowContext = React.useMemo(() => ({\n gutter: [gutterH, gutterV],\n wrap,\n supportFlexGap\n }), [gutterH, gutterV, wrap, supportFlexGap]);\n return wrapSSR( /*#__PURE__*/React.createElement(RowContext.Provider, {\n value: rowContext\n }, /*#__PURE__*/React.createElement(\"div\", Object.assign({}, others, {\n className: classes,\n style: Object.assign(Object.assign({}, rowStyle), style),\n ref: ref\n }), children)));\n});\nif (process.env.NODE_ENV !== 'production') {\n Row.displayName = 'Row';\n}\nexport default Row;","import { genComponentStyleHook, mergeToken } from '../../theme/internal';\n// ============================== Row-Shared ==============================\nconst genGridRowStyle = token => {\n const {\n componentCls\n } = token;\n return {\n // Grid system\n [componentCls]: {\n display: 'flex',\n flexFlow: 'row wrap',\n minWidth: 0,\n '&::before, &::after': {\n display: 'flex'\n },\n '&-no-wrap': {\n flexWrap: 'nowrap'\n },\n // The origin of the X-axis\n '&-start': {\n justifyContent: 'flex-start'\n },\n // The center of the X-axis\n '&-center': {\n justifyContent: 'center'\n },\n // The opposite of the X-axis\n '&-end': {\n justifyContent: 'flex-end'\n },\n '&-space-between': {\n justifyContent: 'space-between'\n },\n '&-space-around ': {\n justifyContent: 'space-around'\n },\n // Align at the top\n '&-top': {\n alignItems: 'flex-start'\n },\n // Align at the center\n '&-middle': {\n alignItems: 'center'\n },\n '&-bottom': {\n alignItems: 'flex-end'\n }\n }\n };\n};\n// ============================== Col-Shared ==============================\nconst genGridColStyle = token => {\n const {\n componentCls\n } = token;\n return {\n // Grid system\n [componentCls]: {\n position: 'relative',\n maxWidth: '100%',\n // Prevent columns from collapsing when empty\n minHeight: 1\n }\n };\n};\nconst genLoopGridColumnsStyle = (token, sizeCls) => {\n const {\n componentCls,\n gridColumns\n } = token;\n const gridColumnsStyle = {};\n for (let i = gridColumns; i >= 0; i--) {\n if (i === 0) {\n gridColumnsStyle[`${componentCls}${sizeCls}-${i}`] = {\n display: 'none'\n };\n gridColumnsStyle[`${componentCls}-push-${i}`] = {\n insetInlineStart: 'auto'\n };\n gridColumnsStyle[`${componentCls}-pull-${i}`] = {\n insetInlineEnd: 'auto'\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-push-${i}`] = {\n insetInlineStart: 'auto'\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-pull-${i}`] = {\n insetInlineEnd: 'auto'\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-offset-${i}`] = {\n marginInlineStart: 0\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-order-${i}`] = {\n order: 0\n };\n } else {\n gridColumnsStyle[`${componentCls}${sizeCls}-${i}`] = {\n display: 'block',\n flex: `0 0 ${i / gridColumns * 100}%`,\n maxWidth: `${i / gridColumns * 100}%`\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-push-${i}`] = {\n insetInlineStart: `${i / gridColumns * 100}%`\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-pull-${i}`] = {\n insetInlineEnd: `${i / gridColumns * 100}%`\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-offset-${i}`] = {\n marginInlineStart: `${i / gridColumns * 100}%`\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-order-${i}`] = {\n order: i\n };\n }\n }\n return gridColumnsStyle;\n};\nconst genGridStyle = (token, sizeCls) => genLoopGridColumnsStyle(token, sizeCls);\nconst genGridMediaStyle = (token, screenSize, sizeCls) => ({\n [`@media (min-width: ${screenSize}px)`]: Object.assign({}, genGridStyle(token, sizeCls))\n});\n// ============================== Export ==============================\nexport const useRowStyle = genComponentStyleHook('Grid', token => [genGridRowStyle(token)]);\nexport const useColStyle = genComponentStyleHook('Grid', token => {\n const gridToken = mergeToken(token, {\n gridColumns: 24 // Row is divided into 24 parts in Grid\n });\n\n const gridMediaSizesMap = {\n '-sm': gridToken.screenSMMin,\n '-md': gridToken.screenMDMin,\n '-lg': gridToken.screenLGMin,\n '-xl': gridToken.screenXLMin,\n '-xxl': gridToken.screenXXLMin\n };\n return [genGridColStyle(gridToken), genGridStyle(gridToken, ''), genGridStyle(gridToken, '-xs'), Object.keys(gridMediaSizesMap).map(key => genGridMediaStyle(gridToken, gridMediaSizesMap[key], key)).reduce((pre, cur) => Object.assign(Object.assign({}, pre), cur), {})];\n});","import { Row } from '../grid';\nexport default Row;"],"names":["props","userMedal","useRequest","api","manual","isAuthenticated","defaultParams","uid","data","className","width","open","footer","onCancel","closeModal","maskClosable","centered","style","backgroundImage","bg","gutter","map","item","span","src","display_url","size","objectFit","user_acquired_status","title","description","areaDetail","areaCode","request","skipErrorHandler","getPopDetail","listActivities","params","listCommunityForms","navigationForList","toolsForList","navigationBookmark","navigationId","method","navigationUnbookmark","getStats","listTasks","taskCheck","getUsercheck","getBuildingOverview","getBuildingRank","getUserMedal","getUnreadUserTask","getUnreadUserMedal","listEvents","Col","RowContext","createContext","__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","sizes","React","ref","ConfigContext","getPrefixCls","direction","wrap","supportFlexGap","customizePrefixCls","prefixCls","order","offset","push","pull","children","flex","others","useColStyle","wrapSSR","hashId","sizeClassObj","forEach","sizeProps","propSize","assign","undefined","classes","classNames","mergedStyle","horizontalGutter","paddingLeft","paddingRight","verticalGutter","paddingTop","paddingBottom","test","parseFlex","minWidth","useMergePropByScreen","oriProp","screen","prop","setProp","responsiveArray","breakpoint","curVal","calcMergeAlignOrJustify","JSON","stringify","Row","justify","align","xs","sm","md","lg","xl","xxl","screens","setScreens","curScreens","setCurScreens","mergeAlign","mergeJustify","useFlexGapSupport","gutterRef","responsiveObserver","useResponsiveObserver","token","subscribe","currentGutter","current","Array","isArray","unsubscribe","results","useRowStyle","gutters","g","index","rowStyle","marginLeft","marginRight","rowGap","marginTop","marginBottom","gutterH","gutterV","rowContext","value","genGridRowStyle","componentCls","display","flexFlow","flexWrap","justifyContent","alignItems","genGridColStyle","position","maxWidth","minHeight","genGridStyle","sizeCls","gridColumns","gridColumnsStyle","insetInlineStart","insetInlineEnd","marginInlineStart","genLoopGridColumnsStyle","genComponentStyleHook","gridToken","mergeToken","gridMediaSizesMap","screenSMMin","screenMDMin","screenLGMin","screenXLMin","screenXXLMin","keys","key","screenSize","genGridMediaStyle","reduce","pre","cur"],"sourceRoot":""}