@next-bricks/nav 0.2.5 → 0.2.7
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.
- package/dist/bricks.json +1 -1
- package/dist/chunks/327.325b8566.js +3 -0
- package/dist/chunks/327.325b8566.js.map +1 -0
- package/dist/chunks/{3532.46da3c2d.js → 3532.c0eeabdd.js} +2 -2
- package/dist/chunks/{3532.46da3c2d.js.map → 3532.c0eeabdd.js.map} +1 -1
- package/dist/chunks/{4969.031f8217.js → 4969.bc83848a.js} +2 -2
- package/dist/chunks/4969.bc83848a.js.map +1 -0
- package/dist/chunks/{5636.be59ed9e.js → 5636.ab9986cb.js} +2 -2
- package/dist/chunks/{5636.be59ed9e.js.map → 5636.ab9986cb.js.map} +1 -1
- package/dist/chunks/6051.18d57d32.js +2 -0
- package/dist/chunks/6051.18d57d32.js.map +1 -0
- package/dist/chunks/{9102.76869d94.js → 9102.672a13cf.js} +3 -3
- package/dist/chunks/{9102.76869d94.js.map → 9102.672a13cf.js.map} +1 -1
- package/dist/chunks/eo-nav-menu.2ed57722.js +3 -0
- package/dist/chunks/eo-nav-menu.2ed57722.js.map +1 -0
- package/dist/chunks/{main.78a04185.js → main.8ad4c306.js} +2 -2
- package/dist/chunks/{main.78a04185.js.map → main.8ad4c306.js.map} +1 -1
- package/dist/{index.eefcac87.js → index.4fa9185b.js} +2 -2
- package/dist/{index.eefcac87.js.map → index.4fa9185b.js.map} +1 -1
- package/dist-types/nav-menu/site-map/SiteMapItem.d.ts +1 -1
- package/package.json +2 -2
- package/dist/chunks/327.134a9f0e.js +0 -3
- package/dist/chunks/327.134a9f0e.js.map +0 -1
- package/dist/chunks/3669.c168beec.js +0 -2
- package/dist/chunks/3669.c168beec.js.map +0 -1
- package/dist/chunks/4969.031f8217.js.map +0 -1
- package/dist/chunks/eo-nav-menu.acdb8ace.js +0 -3
- package/dist/chunks/eo-nav-menu.acdb8ace.js.map +0 -1
- /package/dist/chunks/{327.134a9f0e.js.LICENSE.txt → 327.325b8566.js.LICENSE.txt} +0 -0
- /package/dist/chunks/{9102.76869d94.js.LICENSE.txt → 9102.672a13cf.js.LICENSE.txt} +0 -0
- /package/dist/chunks/{eo-nav-menu.acdb8ace.js.LICENSE.txt → eo-nav-menu.2ed57722.js.LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunks/3532.46da3c2d.js","mappings":"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","sources":["webpack:///./src/images/launchpad.svg","webpack:///./src/launchpad/SearchBar/SearchBar.module.css?483e","webpack:///./src/launchpad/common/wrapBrick.tsx","webpack:///./src/launchpad/SearchBar/SearchBar.tsx","webpack:///./src/launchpad/DesktopCell/DesktopCell.module.css?0d52","webpack:///./src/launchpad/DesktopApp/DesktopApp.module.css?89de","webpack:///./src/launchpad/utils/getImageUrl.tsx","webpack:///./src/launchpad/DesktopApp/DesktopApp.tsx","webpack:///./src/launchpad/DesktopDirContext.ts","webpack:///./src/launchpad/DesktopDir/DesktopDir.module.css?ef5b","webpack:///./src/launchpad/DesktopDir/DesktopDir.tsx","webpack:///./src/launchpad/DesktopCustom/DesktopCustom.module.css?b0be","webpack:///./src/launchpad/DesktopCustom/DesktopCustom.tsx","webpack:///./src/shared/DeferredService.ts","webpack:///./src/launchpad/LaunchpadService.ts","webpack:///./src/launchpad/DesktopCell/DesktopCell.tsx","webpack:///./src/launchpad/LaunchpadSettingsContext.ts","webpack:///./src/launchpad/Desktop/Desktop.module.css?26dc","webpack:///./src/launchpad/Desktop/Desktop.tsx","webpack:///./src/launchpad/DesktopSlider/DesktopSlider.module.css?8883","webpack:///./src/launchpad/MyDesktop/MyDesktop.module.css?82d4","webpack:///./src/launchpad/FavoriteDesktopCell/FavoriteDesktopCell.module.css?3e83","webpack:///./src/launchpad/FavoriteDesktopCell/FavoriteDesktopCell.tsx","webpack:///./src/launchpad/site-map/SiteMap.module.css?cc0f","webpack:///./src/launchpad/site-map/SiteMap.tsx","webpack:///./src/launchpad/MyDesktop/MyDesktop.tsx","webpack:///./src/launchpad/DesktopSlider/desktopCursor.ts","webpack:///./src/launchpad/DesktopSlider/DesktopSlider.tsx","webpack:///./src/launchpad/DesktopDirContent/DesktopDirContent.module.css?8ba4","webpack:///./src/launchpad/DesktopDirContent/DesktopDirContent.tsx","webpack:///./src/launchpad/Launchpad/Launchpad.module.css?c690","webpack:///./src/launchpad/Launchpad/Launchpad.tsx","webpack:///./src/launchpad/LaunchpadWrapper/LaunchpadWrapper.module.css?ec6f","webpack:///./src/launchpad/LaunchpadWrapper/LaunchpadWrapper.tsx","webpack:///./src/launchpad/LaunchpadPortal/LaunchpadPortal.tsx","webpack:///./src/launchpad/LaunchpadButton/LaunchpadButton.tsx","webpack:///./src/launchpad/i18n.ts","webpack:///./src/launchpad/LaunchpadButton/LaunchpadButton.shadow.css","webpack:///./src/launchpad/Desktop/Desktop.module.css","webpack:///./src/launchpad/DesktopApp/DesktopApp.module.css","webpack:///./src/launchpad/DesktopCell/DesktopCell.module.css","webpack:///./src/launchpad/DesktopCustom/DesktopCustom.module.css","webpack:///./src/launchpad/DesktopDir/DesktopDir.module.css","webpack:///./src/launchpad/DesktopDirContent/DesktopDirContent.module.css","webpack:///./src/launchpad/DesktopSlider/DesktopSlider.module.css","webpack:///./src/launchpad/FavoriteDesktopCell/FavoriteDesktopCell.module.css","webpack:///./src/launchpad/Launchpad/Launchpad.module.css","webpack:///./src/launchpad/LaunchpadWrapper/LaunchpadWrapper.module.css","webpack:///./src/launchpad/MyDesktop/MyDesktop.module.css","webpack:///./src/launchpad/SearchBar/SearchBar.module.css","webpack:///./src/launchpad/site-map/SiteMap.module.css","webpack:///../../src/JsonStorage.ts"],"sourcesContent":["import * as React from \"react\";\nconst SvgLaunchpad = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={16} height={16} viewBox=\"0 0 16 16\" {...props}><g fill=\"currentColor\" fillRule=\"nonzero\"><path d=\"M0 0h4v4H0zM0 6h4v4H0zM6 0h4v4H6zM6 6h4v4H6zM12 0h4v4h-4zM12 6h4v4h-4zM0 12h4v4H0zM6 12h4v4H6zM12 12h4v4h-4z\" /></g></svg>;\nexport default SvgLaunchpad;","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./SearchBar.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./SearchBar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { wrapBrick } from \"@next-core/react-element\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\n\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nexport const WrappedGeneralIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\n \"eo-icon\"\n);\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./SearchBar.module.css\";\nimport { WrappedGeneralIcon } from \"../common/wrapBrick.js\";\nimport { K, NS } from \"../i18n.js\";\nimport { useTranslation } from \"@next-core/i18n/react\";\nexport interface SearchBarProps {\n onChange: (value: string) => void;\n}\n\nexport function SearchBar(props: SearchBarProps): React.ReactElement {\n const { t } = useTranslation(NS);\n const [focus, setFocus] = React.useState(false);\n\n const searchInputRef = React.useCallback((element: HTMLInputElement) => {\n if (element) {\n // Wait for portal mounted first.\n Promise.resolve().then(() => {\n try {\n element.focus();\n } catch (e) {\n // Do nothing.\n }\n });\n }\n }, []);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n props.onChange(e.target.value);\n };\n\n const handleClick = (e: React.MouseEvent): void => {\n e.stopPropagation();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent): void => {\n const key =\n e.key ||\n /* istanbul ignore next: compatibility */ e.keyCode ||\n /* istanbul ignore next: compatibility */ e.which;\n if (\n [\n \"Tab\",\n \"Enter\",\n \"ArrowLeft\",\n \"ArrowUp\",\n \"ArrowRight\",\n \"ArrowDown\",\n 9,\n 13,\n 37,\n 38,\n 39,\n 40,\n ].includes(key)\n ) {\n e.preventDefault();\n }\n };\n\n const handleFocus = (): void => {\n setFocus(true);\n };\n\n const handleBlur = (): void => {\n setFocus(false);\n };\n\n return (\n <div\n className={classNames(styles.searchBar, {\n [styles.focus]: focus,\n })}\n >\n <div\n className={styles.inputContainer}\n role=\"inputContainer\"\n onClick={handleClick}\n >\n <span\n className={classNames(styles.inputAffixWrapper, {\n [styles.inputAffixWrapperFocused]: focus,\n })}\n >\n <span className={styles.antInputPrefix}>\n <WrappedGeneralIcon icon=\"search\" lib=\"antd\" theme=\"outlined\" />\n </span>\n <input\n role=\"input\"\n className={styles.input}\n placeholder={t(K.SEARCH_BY_NAME_KEYWORD) as string}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n ref={searchInputRef}\n />\n </span>\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopCell.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopCell.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopApp.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopApp.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { MicroApp } from \"@next-core/types\";\n\nexport function getImageUrl(app: MicroApp, defaultAppIcon: string): string {\n return app.icons && app.icons.large\n ? /^(?:https?|data):|^\\//.test(app.icons.large)\n ? app.icons.large\n : `${\n window.STANDALONE_MICRO_APPS\n ? // 如果是独立打包模式\n app.standaloneMode\n ? // 如果是独立打包模式下的standalone app, 则使用 PUBLIC_ROOT 再去掉末尾的 '-/'\n // 例如: sa-static/my-app/versions/1.1.1/webroot/-/micro-apps/my-app/large.png (没设置cdn)\n // 例如: https://cdn-air.uwintech.cn/next/sa-static/my-app/versions/1.1.1/webroot/-/micro-apps/my-app/large.png (设置了cdn)\n `${window.PUBLIC_ROOT?.replace(/-\\/$/, \"\")}${app.id}/versions/${\n app.currentVersion\n }/webroot/-/micro-apps/${app.id}/${app.icons.large}`\n : // 如果是独立打包模式下的普通app,则使用PUBLIC_CDN + 默认前缀micro-apps\n `${window.PUBLIC_CDN || \"\"}micro-apps/${app.id}/${\n app.icons.large\n }`\n : // 非独立打包应用使用旧模式进行设置\n `${window.PUBLIC_ROOT || \"\"}micro-apps/${app.id}/${\n app.icons.large\n }`\n }`\n : defaultAppIcon;\n}\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { MicroApp } from \"@next-core/types\";\nimport styles from \"./DesktopApp.module.css\";\nimport defaultAppIcon from \"../../images/default-app-icon.png\";\nimport { getImageUrl } from \"../utils/getImageUrl.js\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport { GeneralIcon, GeneralIconProps } from \"@next-bricks/icons/general-icon\";\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nconst WrappedGeneralIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\ninterface DesktopAppProps {\n app: MicroApp;\n isFavorite?: boolean;\n showAddIcon?: boolean;\n onAddClick?: () => void;\n onClick?: () => void;\n size?: string;\n}\n\nexport function DesktopApp({\n app,\n onAddClick,\n onClick,\n isFavorite,\n showAddIcon,\n size,\n}: DesktopAppProps): React.ReactElement {\n const installing = app.installStatus === \"running\";\n\n const handleAppClick = (e: React.MouseEvent): void => {\n e.stopPropagation();\n if (installing) {\n e.preventDefault();\n }\n onClick?.();\n };\n\n const handleAddIconClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onAddClick?.();\n };\n\n return (\n <>\n <WrappedLink\n className={classNames(\n styles.appLink,\n styles[size as string],\n app.iconBackground === \"circle\" ? styles.circle : styles.square,\n {\n [styles.installing]: installing,\n }\n )}\n url={app.homepage}\n onClick={handleAppClick}\n >\n <img\n className={styles.appIcon}\n src={getImageUrl(app, defaultAppIcon)}\n />\n\n {showAddIcon && isFavorite && (\n <WrappedGeneralIcon\n className={classNames(\n styles.addIcon,\n app.iconBackground === \"circle\"\n ? styles.circleIcon\n : styles.squareIcon\n )}\n icon=\"plus\"\n lib=\"antd\"\n theme=\"outlined\"\n onClick={handleAddIconClick}\n />\n )}\n </WrappedLink>\n <span className={styles.appName}>\n {installing && (\n <WrappedGeneralIcon\n style={{ paddingRight: 5 }}\n icon=\"loading-3-quarters\"\n lib=\"antd\"\n theme=\"outlined\"\n />\n )}\n {app.localeName}\n </span>\n </>\n );\n}\n","import React from \"react\";\nimport { NormalizedDesktopDir } from \"./interfaces.js\";\n\nexport interface DirWithCoordinates {\n dir: NormalizedDesktopDir;\n coordinates: {\n x: number;\n y: number;\n };\n activeIndex: number;\n}\n\nexport interface ContextOfDesktopDir {\n desktopDir?: DirWithCoordinates;\n setDesktopDir?: React.Dispatch<DirWithCoordinates | undefined>;\n}\n\nexport const DesktopDirContext = React.createContext<ContextOfDesktopDir>({});\n\nexport const useDesktopDirContext = (): ContextOfDesktopDir =>\n React.useContext(DesktopDirContext);\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopDir.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopDir.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport { useDesktopDirContext } from \"../DesktopDirContext.js\";\nimport styles from \"./DesktopDir.module.css\";\nimport defaultAppIcon from \"../../images/default-app-icon.png\";\nimport { NormalizedDesktopDir } from \"../interfaces.js\";\nimport { getImageUrl } from \"../utils/getImageUrl.js\";\nimport { MicroApp } from \"@next-core/types\";\n\nexport function DesktopDir(props: NormalizedDesktopDir): React.ReactElement {\n const { setDesktopDir } = useDesktopDirContext();\n const handleDirClick = (e: React.MouseEvent): void => {\n e.stopPropagation();\n // 记录鼠标点击的位置,在文件夹展开时以此为原点做动画。\n setDesktopDir?.({\n dir: {\n name: props.name,\n items: props.items,\n },\n coordinates: {\n x: e.clientX,\n y: e.clientY,\n },\n activeIndex: -1,\n });\n };\n\n return (\n <>\n <a\n className={classNames(styles.dirLink, {\n [styles[props.size as string]]: !!props.size,\n })}\n onClick={handleDirClick}\n role=\"button\"\n >\n {props.items\n .slice(0, 4)\n .map((item) =>\n item.type === \"app\" ? (\n <img\n className={styles.appIcon}\n key={item.id}\n src={getImageUrl(item.app as MicroApp, defaultAppIcon)}\n />\n ) : (\n <img\n className={styles.appIcon}\n key={item.id}\n src={defaultAppIcon}\n />\n )\n )}\n </a>\n <span className={styles.dirName}>{props.name}</span>\n </>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopCustom.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopCustom.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./DesktopCustom.module.css\";\nimport defaultAppIcon from \"../../images/default-app-icon.png\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { GeneralIcon, GeneralIconProps } from \"@next-bricks/icons/general-icon\";\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nconst WrappedGeneralIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\ninterface DesktopCustomProps {\n name: string;\n url: string;\n isFavorite?: boolean;\n showAddIcon?: boolean;\n onAddClick: () => void;\n onClick?: () => void;\n size?: string;\n responsive?: boolean;\n}\n\nexport function DesktopCustom({\n name,\n url,\n showAddIcon,\n isFavorite,\n onClick,\n onAddClick,\n size,\n responsive = true,\n}: DesktopCustomProps): React.ReactElement {\n const handleItemClick = (e: React.MouseEvent): void => {\n e.stopPropagation();\n onClick?.();\n };\n\n const handleAddIconClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onAddClick?.();\n };\n return (\n <>\n <WrappedLink\n className={classNames(\n styles.appLink,\n styles.circle,\n styles[size as string],\n {\n [styles.responsive]: responsive,\n }\n )}\n href={url}\n target=\"_blank\"\n onClick={handleItemClick}\n >\n <img className={styles.appIcon} src={defaultAppIcon} />\n {showAddIcon && isFavorite && (\n <WrappedGeneralIcon\n className={classNames(styles.addIcon, styles.circleIcon)}\n icon=\"plus-circle-filled\"\n lib=\"antd\"\n theme=\"outlined\"\n onClick={handleAddIconClick}\n />\n )}\n </WrappedLink>\n <span className={styles.appName}>{name}</span>\n </>\n );\n}\n","export class DeferredService {\n private preFetchId: number | null = null;\n private preFetchScheduled = false;\n private firstFetchPromise: Promise<unknown> | null = null;\n private isFetching = false;\n private readonly task: () => Promise<unknown>;\n\n constructor(task: () => Promise<unknown>) {\n this.task = task;\n }\n\n schedulePrefetch(): void {\n if (!this.preFetchScheduled) {\n this.preFetchScheduled = true;\n const preFetchLaunchpadInfo = async (): Promise<void> => {\n this.preFetchId = null;\n this.fetch();\n };\n // istanbul ignore if\n if (typeof window.requestIdleCallback === \"function\") {\n this.preFetchId = window.requestIdleCallback(preFetchLaunchpadInfo);\n } else {\n this.preFetchId = setTimeout(\n preFetchLaunchpadInfo\n ) as unknown as number;\n }\n }\n }\n\n fetch(eager?: boolean): Promise<unknown> {\n if (this.preFetchId) {\n // istanbul ignore if\n if (typeof window.cancelIdleCallback === \"function\") {\n cancelIdleCallback(this.preFetchId);\n } else {\n clearTimeout(this.preFetchId);\n }\n this.preFetchId = null;\n }\n\n let promise: Promise<unknown>;\n if (!this.isFetching || eager) {\n this.isFetching = true;\n promise = this.task();\n promise\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.error(error);\n this.firstFetchPromise = null;\n })\n .finally(() => {\n this.isFetching = false;\n });\n if (!this.firstFetchPromise) {\n this.firstFetchPromise = promise;\n }\n if (eager) {\n return promise;\n }\n }\n return this.firstFetchPromise!;\n }\n}\n","import { JsonStorage } from \"@next-shared/general/JsonStorage\";\nimport { MicroApp, Storyboard } from \"@next-core/types\";\nimport {\n LaunchpadApi_ListCollectionResponseItem,\n LaunchpadApi_listCollection,\n LaunchpadApi_CreateCollectionRequestBody,\n LaunchpadApi_createCollection,\n LaunchpadApi_deleteCollection,\n} from \"@next-api-sdk/user-service-sdk\";\nimport { LaunchpadApi_getLaunchpadInfo } from \"@next-api-sdk/micro-app-standalone-sdk\";\nimport { getRuntime } from \"@next-core/runtime\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport { pick } from \"lodash\";\nimport { i18n } from \"@next-core/i18n\";\nimport { LaunchpadSettings } from \"./LaunchpadSettingsContext.js\";\nimport {\n DesktopData,\n DesktopItemApp,\n DesktopItemCustom,\n SiteMapItem,\n} from \"./interfaces.js\";\nimport { DeferredService } from \"../shared/DeferredService.js\";\n\ninterface LaunchpadBaseInfo {\n settings: LaunchpadSettings;\n microApps: MicroApp[];\n desktops: DesktopData[];\n siteSort: SiteMapItem[];\n}\n\nexport class LaunchpadService {\n readonly storageKey = `launchpad-recently-visited:${(\n auth.getAuth() as Record<string, string>\n )?.org}`;\n private storage: JsonStorage;\n private favoriteList: LaunchpadApi_ListCollectionResponseItem[] = [];\n private filteredFavoriteList: LaunchpadApi_ListCollectionResponseItem[] = [];\n private microApps: MicroApp[] = [];\n private customList: DesktopItemCustom[] = [];\n private maxVisitorLength = 7;\n private initialized = false;\n private baseInfo: LaunchpadBaseInfo = {\n settings: {\n columns: 7,\n rows: 4,\n },\n microApps: [],\n desktops: [],\n siteSort: [],\n };\n public loaded = false;\n public favoritesLoaded = false;\n\n private readonly deferredLaunchpadInfo: DeferredService;\n private readonly deferredFavorites: DeferredService;\n\n constructor() {\n this.storage = new JsonStorage(localStorage);\n this.deferredLaunchpadInfo = new DeferredService(this.doFetchLaunchpadInfo);\n this.deferredFavorites = new DeferredService(this.doFetchFavorites);\n\n this.init();\n }\n\n init(): void {\n const runtime = getRuntime();\n this.baseInfo = {\n desktops: runtime.getDesktops() as DesktopData[],\n microApps: [runtime.getCurrentApp() as MicroApp],\n settings: runtime.getLaunchpadSettings(),\n siteSort: runtime.getLaunchpadSiteMap() as SiteMapItem[],\n };\n\n this.initValue();\n }\n\n private initValue(): void {\n this.customList = this.baseInfo.desktops\n .map((desktop) => desktop.items.filter((i) => i.type === \"custom\"))\n .flat() as DesktopItemCustom[];\n\n const microApps = this.baseInfo.microApps\n // 兼容较老版本接口未返回 `status` 的情况。\n .filter(\n (item) =>\n item &&\n (!item.status ||\n item.status === \"enabled\" ||\n item.status === \"developing\")\n );\n\n this.setMicroApps(microApps);\n }\n\n setMaxVisitorLength(value: number) {\n this.maxVisitorLength = value;\n }\n\n preFetchFavorites(): void {\n this.deferredFavorites.schedulePrefetch();\n }\n\n async fetchFavoriteList(\n eager?: boolean\n ): Promise<LaunchpadApi_ListCollectionResponseItem[]> {\n await this.deferredFavorites.fetch(eager);\n return this.favoriteList;\n }\n\n private doFetchFavorites = async (): Promise<void> => {\n const result = (\n await LaunchpadApi_listCollection(\n { page: 1, pageSize: 25 },\n {\n interceptorParams: { ignoreLoadingBar: true },\n noAbortOnRouteChange: true,\n }\n )\n ).list;\n this.setFavorites(result);\n this.favoritesLoaded = true;\n };\n\n preFetchLaunchpadInfo(): void {\n if (window.STANDALONE_MICRO_APPS) {\n this.deferredLaunchpadInfo.schedulePrefetch();\n }\n }\n\n fetchLaunchpadInfo(): Promise<unknown> {\n return this.deferredLaunchpadInfo.fetch();\n }\n\n private doFetchLaunchpadInfo = async (): Promise<void> => {\n const launchpadInfo = await LaunchpadApi_getLaunchpadInfo(\n {},\n {\n interceptorParams: { ignoreLoadingBar: true },\n noAbortOnRouteChange: true,\n }\n );\n\n for (const storyboard of launchpadInfo.storyboards as Storyboard[]) {\n const app = storyboard.app as unknown as MicroApp;\n if (app) {\n if (app.locales) {\n // Prefix to avoid conflict between brick package's i18n namespace.\n const ns = `$tmp-${app.id}`;\n // Support any languages in `app.locales`.\n Object.entries(app.locales).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, ns, resources);\n });\n // Use `app.name` as the fallback `app.localeName`.\n app.localeName = i18n.getFixedT(null, ns)(\"name\", app.name) as string;\n // Remove the temporary i18n resource bundles.\n Object.keys(app.locales).forEach((lang) => {\n i18n.removeResourceBundle(lang, ns);\n });\n } else {\n app.localeName = app.name;\n }\n }\n }\n\n this.baseInfo = {\n ...launchpadInfo,\n settings: (launchpadInfo.settings as Record<string, unknown>)\n .launchpad as LaunchpadSettings,\n microApps: (launchpadInfo.storyboards as Storyboard[])\n .map((storyboard) => storyboard.app)\n .filter(Boolean) as unknown as MicroApp[],\n } as unknown as LaunchpadBaseInfo;\n this.initValue();\n this.loaded = true;\n };\n\n getBaseInfo(): LaunchpadBaseInfo {\n return this.baseInfo;\n }\n\n getFavoritesLength(): number {\n return this.favoriteList.length;\n }\n\n typeAdaptor(type: string): string {\n if (type === \"customItem\") {\n return \"custom\";\n }\n\n if (type === \"microApp\") {\n return \"app\";\n }\n\n return type;\n }\n\n setFavorites(list: LaunchpadApi_ListCollectionResponseItem[]): void {\n this.filteredFavoriteList =\n list?.filter(\n (v) =>\n v.launchpadCollection?.type === \"microApp\" ||\n (v.launchpadCollection as any).type === \"customItem\"\n ) ?? [];\n\n this.favoriteList = list;\n }\n\n setMicroApps(microApps: MicroApp[]) {\n this.microApps = microApps;\n this.syncValidRecentlyVisitor();\n }\n\n syncValidRecentlyVisitor() {\n if (window.STANDALONE_MICRO_APPS) {\n // standalone模式时,刷新页面不会请求launchpad数据,拿不全microApps和customList,所以 syncValidRecentlyVisitor 直接返回\n return;\n }\n const visitors = this.getAllVisitors();\n const result = visitors.filter((v) => {\n if (v.type === \"app\") {\n return this.microApps.some((app) => app.id === v.id);\n } else {\n return this.customList.some((f) => f.type === v.type && f.id === v.id);\n }\n });\n\n this.setAllVisitors(result);\n }\n\n async setAsFavorite(params: LaunchpadApi_CreateCollectionRequestBody) {\n await LaunchpadApi_createCollection(params, {\n interceptorParams: { ignoreLoadingBar: true },\n });\n }\n\n async deleteFavorite(id: string | number) {\n await LaunchpadApi_deleteCollection(id, {\n interceptorParams: { ignoreLoadingBar: true },\n });\n }\n\n isFavorite(item: DesktopItemApp | DesktopItemCustom) {\n if (item.type === \"app\") {\n return this.filteredFavoriteList.some(\n (f) =>\n this.typeAdaptor((f.launchpadCollection as any).type) === \"app\" &&\n f.microAppId === item.id\n );\n }\n\n return this.filteredFavoriteList.some(\n (f) =>\n this.typeAdaptor((f.launchpadCollection as any).type) === \"custom\" &&\n (f as any).customItemId === item.id\n );\n }\n\n getItem(\n type: \"app\" | \"custom\",\n id: string\n ): DesktopItemApp | DesktopItemCustom {\n return (this.storage.getItem(this.storageKey) || []).find(\n (v: DesktopItemApp | DesktopItemCustom) => v.id === id && v.type === type\n );\n }\n\n getItemIndex(type: \"app\" | \"custom\", id: string): number {\n return (this.storage.getItem(this.storageKey) || []).findIndex(\n (v: DesktopItemApp | DesktopItemCustom) => v.id === id && v.type === type\n );\n }\n\n hasItem(type: \"app\" | \"custom\", id: string): boolean {\n return (this.storage.getItem(this.storageKey) || []).some(\n (v: DesktopItemApp | DesktopItemCustom) => v.id === id && v.type === type\n );\n }\n\n getAllVisitors(): (DesktopItemApp | DesktopItemCustom)[] {\n return this.storage.getItem(this.storageKey) || [];\n }\n\n setItem(\n type: \"app\" | \"custom\",\n item: DesktopItemApp | DesktopItemCustom\n ): void {\n const visitors = this.getAllVisitors();\n\n if (!this.hasItem(type, item.id)) {\n visitors.unshift(item);\n } else {\n const index = this.getItemIndex(type, item.id);\n visitors.splice(index, 1);\n visitors.unshift(item);\n }\n\n // 默认只保存一行\n if (visitors.length > this.maxVisitorLength) {\n visitors.pop();\n }\n this.setAllVisitors(visitors);\n }\n\n setAllVisitors(visitors: (DesktopItemApp | DesktopItemCustom)[]) {\n this.storage.setItem(this.storageKey, visitors);\n }\n\n pushVisitor(\n type: \"app\" | \"custom\",\n item: MicroApp | DesktopItemCustom\n ): void {\n if (type === \"app\") {\n const app = item as MicroApp;\n item = {\n id: app.id,\n app: {\n name: app.name,\n icons: app.icons,\n localeName: app.localeName,\n id: app.id,\n homepage: app.homepage,\n currentVersion: app.currentVersion,\n standaloneMode: (app as MicroApp & { standaloneMode: boolean })\n .standaloneMode,\n } as MicroApp,\n type: \"app\",\n } as any;\n }\n\n this.setItem(type, item as DesktopItemApp | DesktopItemCustom);\n }\n\n getVisitor(\n type: \"app\" | \"custom\",\n id: string\n ): DesktopItemApp | DesktopItemCustom | undefined {\n return this.getItem(type, id);\n }\n\n getRealDesktopItem(\n item: LaunchpadApi_ListCollectionResponseItem\n ): MicroApp | DesktopItemCustom {\n if (item.launchpadCollection?.type === \"microApp\") {\n return this.microApps.find(\n (app) => app.id === item.microAppId\n ) as MicroApp;\n } else {\n return this.customList.find(\n (custom) => custom.id === (item as any).customItemId\n ) as DesktopItemCustom;\n }\n }\n\n setFavoriteAsVisitor(item: LaunchpadApi_ListCollectionResponseItem) {\n const type = this.typeAdaptor(item.launchpadCollection?.type as string);\n if (type === \"link\") return;\n const data = this.getRealDesktopItem(item);\n if (data) {\n this.pushVisitor(type as \"custom\" | \"app\", data);\n }\n }\n\n getSitemapList() {\n const curMicroApps = this.baseInfo.microApps.filter((app) => !app.internal);\n const siteMapList = this.baseInfo.siteSort;\n\n return siteMapList?.map((item) => ({\n ...item,\n apps: (item.apps || []).map((row) => {\n const find = curMicroApps.find((item) => item.id === row.id) || {};\n return {\n ...row,\n ...pick(find, [\n \"name\",\n \"icons\",\n \"localeName\",\n \"homepage\",\n \"currentVersion\",\n \"standaloneMode\",\n ]),\n };\n }),\n }));\n }\n}\n\nconst service = new LaunchpadService();\nexport const launchpadService = service;\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./DesktopCell.module.css\";\nimport { DesktopApp } from \"../DesktopApp/DesktopApp.js\";\nimport { DesktopDir } from \"../DesktopDir/DesktopDir.js\";\nimport { DesktopCustom } from \"../DesktopCustom/DesktopCustom.js\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport { Dialog } from \"@next-core/runtime\";\nimport {\n DesktopItem,\n DesktopItemApp,\n DesktopItemCustom,\n} from \"../interfaces.js\";\nimport { MicroApp } from \"@next-core/types\";\n\ninterface DesktopCellProps {\n item: DesktopItem;\n active?: boolean;\n showAddIcon?: boolean;\n position?: \"left\" | \"center\" | \"right\";\n onSetAsFavorite?: () => void;\n isFavorite?: boolean;\n size?: string;\n}\n\nexport function DesktopCell(props: DesktopCellProps): React.ReactElement {\n const checkFavoriteUpperLimit = () => {\n const favoriteLength = launchpadService.getFavoritesLength();\n if (favoriteLength >= 25) {\n Dialog.show({\n title: \"收藏数量已达上限\",\n content: \"当前收藏链接数量已达上限(25个),请删除部分链接后再添加。\",\n contentStyle: {\n zIndex: 5001,\n },\n });\n\n return false;\n }\n return true;\n };\n\n const addItemToFavorite = async () => {\n if (checkFavoriteUpperLimit()) {\n let params: any;\n if (props.item.type === \"app\") {\n const app = props.item as Partial<DesktopItemApp>;\n params = {\n microAppId: app.id,\n launchpadCollection: {\n type: \"microApp\",\n name: (app.app as MicroApp).name,\n },\n };\n } else {\n const custom = props.item as DesktopItemCustom;\n params = {\n customItemId: custom.id,\n launchpadCollection: {\n type: \"customItem\",\n name: custom.name,\n },\n };\n }\n try {\n await launchpadService.setAsFavorite(params);\n props?.onSetAsFavorite?.();\n } catch (e) {\n // Noting to cache\n }\n }\n };\n\n const handleAppClick = () => {\n const app = (props.item as DesktopItemApp).app;\n launchpadService.pushVisitor(\"app\", app as MicroApp);\n };\n\n const handleCustomClick = () => {\n const custom = props.item as DesktopItemCustom;\n launchpadService.pushVisitor(\"custom\", custom);\n };\n\n return (\n <div\n className={classNames(styles.cellWrapper, {\n [styles.positionLeft]: props?.position === \"left\",\n })}\n >\n <div\n className={classNames(styles.cellItem, styles[props.size as string], {\n [styles.active]: props.active,\n })}\n >\n {props.item.type === \"app\" ? (\n <DesktopApp\n showAddIcon={props.showAddIcon}\n isFavorite={props.isFavorite}\n app={props.item.app as MicroApp}\n onClick={handleAppClick}\n onAddClick={addItemToFavorite}\n size={props.size}\n />\n ) : props.item.type === \"custom\" ? (\n <DesktopCustom\n showAddIcon={props.showAddIcon}\n isFavorite={props.isFavorite}\n name={props.item.name}\n url={props.item.url}\n onClick={handleCustomClick}\n onAddClick={addItemToFavorite}\n size={props.size}\n />\n ) : (\n <DesktopDir\n name={props.item.name}\n items={props.item.items}\n size={props.size}\n />\n )}\n </div>\n </div>\n );\n}\n","import React from \"react\";\n\nexport interface LaunchpadSettings {\n columns: number;\n rows: number;\n}\n\nexport const LaunchpadSettingsContext = React.createContext<LaunchpadSettings>({\n columns: 7,\n rows: 4,\n});\n\nexport const useLaunchpadSettingsContext = (): LaunchpadSettings =>\n React.useContext(LaunchpadSettingsContext);\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Desktop.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Desktop.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { DesktopCell } from \"../DesktopCell/DesktopCell.js\";\nimport { useLaunchpadSettingsContext } from \"../LaunchpadSettingsContext.js\";\nimport styles from \"./Desktop.module.css\";\nimport { DesktopData } from \"../interfaces.js\";\n\ninterface DesktopProps {\n desktop: DesktopData;\n desktopCount: number;\n arrowWidthPercent: number;\n activeIndex: number;\n}\n\nexport function Desktop(props: DesktopProps): React.ReactElement {\n const { columns, rows } = useLaunchpadSettingsContext();\n\n return (\n <div\n className={styles.desktop}\n style={{\n padding: `0 ${props.arrowWidthPercent / props.desktopCount}%`,\n gridTemplateColumns: `repeat(${columns},1fr)`,\n gridTemplateRows: `repeat(${rows},1fr)`,\n }}\n >\n {props.desktop.items.map((item, index) => (\n <DesktopCell\n key={index}\n item={item}\n active={index === props.activeIndex}\n />\n ))}\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopSlider.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopSlider.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./MyDesktop.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./MyDesktop.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FavoriteDesktopCell.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FavoriteDesktopCell.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useMemo } from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./FavoriteDesktopCell.module.css\";\nimport { LaunchpadApi_ListCollectionResponseItem } from \"@next-api-sdk/user-service-sdk\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport { WrappedGeneralIcon, WrappedLink } from \"../common/wrapBrick.js\";\nimport { omit } from \"lodash\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\n\ninterface FavoriteDesktopCellProps {\n item: LaunchpadApi_ListCollectionResponseItem;\n onDelete?: (item: LaunchpadApi_ListCollectionResponseItem) => void;\n}\n\nexport function FavoriteDesktopCell({\n item,\n}: FavoriteDesktopCellProps): React.ReactElement {\n const disabled = useMemo(\n () =>\n item.launchpadCollection?.type === \"microApp\"\n ? !item.microAppId\n : (item.launchpadCollection as any)?.type === \"customItem\"\n ? !(item as any)?.customItemId\n : false,\n [item]\n );\n\n const setAsVisitor = () => {\n if (item.launchpadCollection?.type === \"link\") return;\n launchpadService.setFavoriteAsVisitor(item);\n };\n const handleCellClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n setAsVisitor();\n\n if (\n (item.launchpadCollection?.link?.startsWith(\"https://\") ||\n item.launchpadCollection?.link?.startsWith(\"http://\")) &&\n !item.launchpadCollection?.link?.startsWith(document.baseURI)\n ) {\n e.preventDefault();\n window.open(item.launchpadCollection.link, \"_blank\");\n }\n };\n\n const realLink = useMemo(() => {\n const link = item.launchpadCollection?.link;\n if (item.launchpadCollection?.type === \"microApp\") return link;\n const baseUrl = document.baseURI;\n if (link?.startsWith(baseUrl)) return link?.replace(baseUrl, \"/\");\n return item.launchpadCollection?.link;\n }, [item]);\n\n return (\n <div>\n <div\n className={classNames(styles.cellWrapper, {\n [styles.disabled]: disabled,\n })}\n >\n <WrappedLink\n className={styles.link}\n url={realLink}\n onClick={handleCellClick}\n >\n <>\n <span className={classNames(styles.appLink, styles.square)}>\n <WrappedGeneralIcon\n {...((omit(item?.launchpadCollection?.icon, [\n \"prefix\",\n \"type\",\n ]) ?? {}) as GeneralIconProps)}\n style={{ fontSize: 18 }}\n />\n </span>\n <span className={styles.name}>\n {item?.launchpadCollection?.name}\n </span>\n </>\n </WrappedLink>\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./SiteMap.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./SiteMap.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { forwardRef, useEffect } from \"react\";\nimport styles from \"./SiteMap.module.css\";\nimport { MicroApp } from \"@next-core/types\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\ninterface SiteCategory {\n name: string;\n id: string;\n order: string;\n apps: {\n id?: string;\n sort?: string;\n name?: string;\n homepage?: string;\n }[];\n}\nexport interface SiteMapProps {\n categoryList: SiteCategory[];\n containerStyle?: React.CSSProperties;\n onLoad?: () => void;\n}\n\nexport function LeacySiteMap(\n props: SiteMapProps,\n ref: any\n): React.ReactElement {\n const handleWheel = (e: React.WheelEvent) => {\n e.stopPropagation();\n };\n\n useEffect(() => {\n props.onLoad?.();\n }, []);\n\n const handleClick = (app: MicroApp): void => {\n launchpadService.pushVisitor(\"app\", app);\n };\n\n return (\n <div\n className={styles.scrollContainer}\n style={props.containerStyle}\n ref={ref}\n onWheel={handleWheel}\n >\n <div className={styles.siteMapContainer}>\n {props.categoryList?.map((item) => (\n <div className={styles.groupWrapper} key={item.name}>\n <div>{item.name}</div>\n <ul className={styles.group}>\n {item.apps?.map((row, index) => (\n <li className={styles.item} key={index}>\n <WrappedLink\n type=\"plain\"\n url={row.homepage}\n onClick={() => handleClick(row as MicroApp)}\n >\n {row.name}\n </WrappedLink>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nexport const SiteMap = forwardRef(LeacySiteMap);\n","import React, { createRef, useEffect, useMemo, useRef, useState } from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport { GeneralIcon, GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport type { LaunchpadApi_ListCollectionResponseItem } from \"@next-api-sdk/user-service-sdk\";\nimport classNames from \"classnames\";\nimport { isEmpty } from \"lodash\";\nimport { DesktopCell } from \"../DesktopCell/DesktopCell.js\";\nimport styles from \"./MyDesktop.module.css\";\nimport { FavoriteDesktopCell } from \"../FavoriteDesktopCell/FavoriteDesktopCell.js\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport { SiteMap } from \"../site-map/SiteMap.js\";\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nconst WrappedGeneralIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\ninterface MyDesktopProps {\n desktopCount: number;\n arrowWidthPercent: number;\n}\n\nenum ModeType {\n Favorities = \"favorities\",\n Sitemap = \"sitemap\",\n}\n\nlet remberMode = ModeType.Sitemap;\n\nexport function MyDesktop(props: MyDesktopProps, ref: any): React.ReactElement {\n const [recentlyVisitedList] = useState(launchpadService.getAllVisitors());\n const [favoriteList, setFavoriteList] = useState<\n LaunchpadApi_ListCollectionResponseItem[]\n >([]);\n const [isLoading, setIsLoading] = useState(!launchpadService.favoritesLoaded);\n // const [firstRendered, setFirstRendered] = useState(true);\n const [mode, setMode] = useState<ModeType>(remberMode);\n const siteMapRef = createRef<HTMLDivElement>();\n const deskContainerRef = useRef<HTMLDivElement>(null);\n const [siteMapHeight, setSiteMapHeight] = useState<number>();\n\n const getFavoriteList = async (eager?: boolean): Promise<void> => {\n const favoriteList = await launchpadService.fetchFavoriteList(eager);\n setIsLoading(false);\n setFavoriteList(favoriteList);\n };\n\n const handleMode = (e: React.MouseEvent, mode: ModeType): void => {\n e.stopPropagation();\n remberMode = mode;\n setMode(mode);\n };\n useEffect(() => {\n (async () => {\n getFavoriteList();\n })();\n }, []);\n\n const handleOnSetAsFavorite = (): void => {\n getFavoriteList(true);\n };\n\n const handleSiteMapLoad = () => {\n const siteMap = siteMapRef.current;\n const deskContainer = deskContainerRef.current;\n if (siteMap && deskContainer) {\n // wait for launchpad open\n Promise.resolve().then(() => {\n const siteMapDom = siteMap.getBoundingClientRect();\n const deskContainerDom = deskContainer.getBoundingClientRect();\n const siteMapHeight = deskContainerDom.bottom - siteMapDom.top;\n\n setSiteMapHeight(siteMapHeight);\n });\n }\n };\n\n const renderRecentlyVisited = useMemo(() => {\n return (\n <div className={styles.visited}>\n <div className={styles.title}>最近访问</div>\n <div className={styles.desktop}>\n {recentlyVisitedList?.map((item, index) => (\n <DesktopCell\n size=\"small\"\n key={index}\n item={item}\n showAddIcon={true}\n isFavorite={!launchpadService.isFavorite(item)}\n onSetAsFavorite={handleOnSetAsFavorite}\n />\n ))}\n </div>\n </div>\n );\n }, [recentlyVisitedList, isLoading]);\n\n const renderMyFavorites = useMemo(() => {\n return (\n <div className={classNames([styles.section, styles.favorites])}>\n {isLoading && (\n <div className={styles.spin}>\n <WrappedGeneralIcon\n lib=\"antd\"\n icon=\"loading\"\n theme=\"outlined\"\n style={{ fontSize: \"2.5rem\" }}\n spinning\n />\n </div>\n )}\n {!isEmpty(favoriteList) ? (\n <div className={styles.favoriteContainer}>\n {favoriteList?.map((item, index) => (\n <FavoriteDesktopCell key={index} item={item} />\n ))}\n </div>\n ) : (\n !isLoading && (\n <div className={styles.emptyTips}>\n 把常用的页面链接加入收藏夹,方便快速访问 ~{\" \"}\n <WrappedLink\n url=\"/launchpad-collection\"\n style={{ marginLeft: 30 }}\n >\n 管理我的收藏\n </WrappedLink>\n </div>\n )\n )}\n </div>\n );\n }, [favoriteList, isLoading]);\n\n const renderSiteMap = useMemo(() => {\n const categoryList = launchpadService\n .getSitemapList()\n ?.filter((item) => item.apps?.length > 0);\n\n return (\n <SiteMap\n ref={siteMapRef}\n categoryList={categoryList}\n containerStyle={{\n height: siteMapHeight,\n overflow: \"auto\",\n }}\n onLoad={handleSiteMapLoad}\n />\n );\n }, [siteMapHeight]);\n\n return (\n <div\n ref={deskContainerRef}\n style={{\n flex: 1,\n padding: `0 ${\n props.desktopCount ? props.arrowWidthPercent / props.desktopCount : 10\n }%`,\n }}\n >\n {!!recentlyVisitedList?.length && renderRecentlyVisited}\n <div className={styles.modeWrapper}>\n <div className={styles.header}>\n {mode === ModeType.Favorities ? (\n <div className={styles.title}>\n {\" \"}\n 我的收藏\n <WrappedGeneralIcon\n className={styles.modeIcon}\n icon=\"launchpad-sitmap\"\n lib=\"easyops\"\n category=\"app\"\n onClick={(e) => handleMode(e, ModeType.Sitemap)}\n />\n </div>\n ) : (\n <div className={styles.title}>\n 系统地图\n <WrappedGeneralIcon\n className={styles.modeIcon}\n icon=\"launchpad-collection\"\n lib=\"easyops\"\n category=\"app\"\n onClick={(e) => handleMode(e, ModeType.Favorities)}\n />\n </div>\n )}\n {mode === ModeType.Favorities && (\n <div className={styles.settingsContainer}>\n <WrappedLink url={\"/launchpad-collection\"}>\n <WrappedGeneralIcon\n className={styles.settings}\n icon=\"launchpad-setting\"\n lib=\"easyops\"\n category=\"app\"\n />\n 管理收藏\n </WrappedLink>\n </div>\n )}\n </div>\n\n {mode === ModeType.Favorities ? renderMyFavorites : renderSiteMap}\n </div>\n </div>\n );\n}\n","// See https://github.com/facebook/jest/issues/11471\n// Open launchpad with the previous visited desktop.\nlet rememberedDesktopCursor = 0;\n\nexport function getRememberedDesktopCursor(): number {\n return rememberedDesktopCursor;\n}\n\nexport function setRememberedDesktopCursor(newValue: number): void {\n rememberedDesktopCursor = newValue;\n}\n","import React, { useEffect } from \"react\";\nimport { chunk } from \"lodash\";\nimport classNames from \"classnames\";\nimport { MicroApp } from \"@next-core/types\";\nimport { getHistory } from \"@next-core/runtime\";\nimport { Desktop } from \"../Desktop/Desktop.js\";\nimport { useLaunchpadSettingsContext } from \"../LaunchpadSettingsContext.js\";\nimport { useDesktopDirContext } from \"../DesktopDirContext.js\";\nimport styles from \"./DesktopSlider.module.css\";\nimport { MyDesktop } from \"../MyDesktop/MyDesktop.js\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport {\n getRememberedDesktopCursor,\n setRememberedDesktopCursor,\n} from \"./desktopCursor.js\";\nimport { DesktopData, DesktopItemCustom } from \"../interfaces.js\";\nimport { WrappedGeneralIcon } from \"../common/wrapBrick.js\";\n\ntype appItem = MicroApp & { type?: \"app\" | \"custom\" };\n\ninterface DesktopSliderProps {\n microApps: MicroApp[];\n q?: string;\n desktops?: DesktopData[];\n arrowWidthPercent: number;\n}\n\nexport function DesktopSlider(props: DesktopSliderProps): React.ReactElement {\n const enableMyDesktop = true;\n const [desktopCursor, setDesktopCursor] = React.useState(\n getRememberedDesktopCursor()\n );\n const [appCursor, setAppCursor] = React.useState(-1);\n const { columns, rows } = useLaunchpadSettingsContext();\n const { setDesktopDir } = useDesktopDirContext();\n const slideDuration = 400;\n\n useEffect(() => {\n enableMyDesktop && launchpadService.setMaxVisitorLength(8);\n }, [columns, enableMyDesktop]);\n const mapItemToDesktop = (apps: appItem[]): DesktopData => ({\n name: \"-\",\n items: apps.map((app) => {\n if (app.type === \"custom\") {\n return {\n id: app.id,\n name: app.name,\n url: app.homepage,\n type: \"custom\",\n app,\n };\n }\n return {\n type: \"app\",\n id: app.id,\n app,\n };\n }),\n });\n\n const transformCustomItem = (item: DesktopItemCustom): appItem => ({\n localeName: item.name,\n homepage: item.url,\n ...item,\n type: \"custom\",\n });\n\n let desktops: DesktopData[] = [];\n let validItems = props.microApps;\n\n if (typeof props?.desktops === \"object\" && props.desktops.length > 0) {\n validItems = [];\n\n const id2app = props.microApps.reduce((acc, app) => {\n acc.set(app.id, app);\n return acc;\n }, new Map<string, appItem>());\n\n desktops = props.desktops\n .map((desktop) => ({\n name: desktop.name,\n items: desktop.items\n .map((item) => {\n if (item.type === \"app\") {\n if (id2app.has(item.id)) {\n const app = id2app.get(item.id);\n validItems.push(app as MicroApp);\n id2app.delete(item.id);\n return {\n type: item.type,\n id: item.id,\n app,\n };\n }\n // ignore not found apps\n } else if (item.type === \"dir\") {\n const items = item.items\n .map((item) => {\n if (item.type === \"app\") {\n if (id2app.has(item.id)) {\n const app = id2app.get(item.id);\n validItems.push(app as MicroApp);\n id2app.delete(item.id);\n return {\n type: item.type,\n id: item.id,\n app,\n };\n }\n } else if (item.type === \"custom\") {\n validItems.push(transformCustomItem(item));\n return item;\n }\n })\n .filter(Boolean);\n // ignore empty dirs\n if (items.length > 0) {\n return {\n type: item.type,\n id: item.id,\n name: item.name,\n items,\n };\n }\n } else if (item.type === \"custom\") {\n validItems.push(transformCustomItem(item));\n return item;\n }\n })\n .filter(Boolean)\n .slice(0, columns * rows),\n }))\n // ignore empty desktops\n .filter((desktop) => desktop.items.length > 0) as DesktopData[];\n } else if (!props.desktops) {\n // 如果没有定义桌面列表(例如本地开发模式),则自动按数量切割。\n desktops = chunk(props.microApps, columns * rows).map(mapItemToDesktop);\n }\n let filteredDesktop: DesktopData = {} as DesktopData;\n if (props.q) {\n const lowerQ = props.q.toLowerCase();\n filteredDesktop = mapItemToDesktop(\n validItems\n .filter(\n (app) =>\n (app.localeName as string).toLowerCase().includes(lowerQ) ||\n app.name.toLowerCase().includes(lowerQ) ||\n app.id.toLowerCase().includes(lowerQ)\n )\n .slice(0, columns * rows)\n );\n }\n\n // When sliding desktop, reset app cursor.\n React.useEffect(() => {\n setAppCursor(-1);\n }, [desktopCursor]);\n\n // When making search, set app cursor to the first app.\n React.useEffect(() => {\n setAppCursor(\n props.q && filteredDesktop && filteredDesktop.items.length > 0 ? 0 : -1\n );\n }, [props.q]);\n\n const lockRef = React.useRef(false);\n\n const throttledSetDesktopCursor = (index: number): void => {\n if (lockRef.current) {\n return;\n }\n setRememberedDesktopCursor(index);\n setDesktopCursor(index);\n // 一次滑动一个屏幕,锁定期间内,不能继续滑动屏幕。\n lockRef.current = true;\n setTimeout(() => {\n lockRef.current = false;\n }, slideDuration);\n };\n\n const slideLeft = React.useCallback((): void => {\n if (desktopCursor > 0) {\n throttledSetDesktopCursor(desktopCursor - 1);\n }\n }, [desktopCursor]);\n\n const slideRight = React.useCallback((): void => {\n const length = desktops.length;\n if (desktopCursor < length) {\n throttledSetDesktopCursor(desktopCursor + 1);\n }\n }, [desktopCursor, desktops.length]);\n\n const handleSlideLeft = (e: React.MouseEvent): void => {\n e.stopPropagation();\n slideLeft();\n };\n\n const handleSlideRight = (e: React.MouseEvent): void => {\n e.stopPropagation();\n slideRight();\n };\n\n const handleSlideTo = (e: React.MouseEvent, index: number): void => {\n e.stopPropagation();\n if (desktopCursor !== index) {\n throttledSetDesktopCursor(index);\n }\n };\n\n // Press arrow key to select an app.\n React.useEffect(() => {\n const onKeydown = (event: KeyboardEvent): void => {\n // 第一栏为我的面板,须过滤掉(PS: 但是搜索时 desktopCursor 为0是可以的)\n if (enableMyDesktop && desktopCursor === 0 && !props.q) return;\n const key =\n event.key ||\n /* istanbul ignore next: compatibility */ event.keyCode ||\n /* istanbul ignore next: compatibility */ event.which;\n const currentDesktop = props.q\n ? filteredDesktop\n : desktops[desktopCursor - 1];\n if (key === \"Enter\" || key === 13) {\n event.preventDefault();\n if (appCursor >= 0 && appCursor < currentDesktop.items.length) {\n const cell = currentDesktop.items[appCursor];\n if (cell.type === \"app\") {\n launchpadService.pushVisitor(\"app\", cell.app as MicroApp);\n getHistory().push((cell.app as MicroApp).homepage);\n } else if (cell.type === \"custom\") {\n launchpadService.pushVisitor(\"custom\", cell);\n window.open(cell.url);\n } else if (cell.type === \"dir\") {\n // Calculate the approximate coordinates of a dir.\n const x = appCursor % columns;\n const y = Math.floor(appCursor / columns);\n setDesktopDir?.({\n activeIndex: 0,\n dir: {\n name: cell.name,\n items: cell.items,\n },\n coordinates: {\n x: (window.innerWidth * (x + 1)) / (columns + 1),\n y: (window.innerHeight * (y + 1)) / (rows + 1),\n },\n });\n }\n }\n } else {\n let offset = 0;\n if (key === \"ArrowRight\" || key === 39) {\n offset = 1;\n } else if (key === \"ArrowLeft\" || key === 37) {\n offset = appCursor === -1 ? currentDesktop.items.length : -1;\n } else if (key === \"ArrowDown\" || key === 40) {\n offset = appCursor === -1 ? 1 : columns;\n } else if (key === \"ArrowUp\" || key === 38) {\n offset = appCursor === -1 ? currentDesktop.items.length : -columns;\n }\n if (offset !== 0) {\n event.preventDefault();\n const next = appCursor + offset;\n if (next >= 0 && next < currentDesktop.items.length) {\n setAppCursor(next);\n }\n }\n }\n };\n window.addEventListener(\"keydown\", onKeydown);\n return () => {\n window.removeEventListener(\"keydown\", onKeydown);\n };\n }, [desktopCursor, appCursor, props.q, columns, setDesktopDir]);\n\n const deltaXRef = React.useRef(0);\n const deltaYRef = React.useRef(0);\n const responsibleRef = React.useRef(true);\n\n const tryToSlideByWheel = (): void => {\n // Mac 的 trackpad,部分鼠标滚轮会有“拖尾效应”,拖尾期间,不再响应滚轮事件。\n if (!responsibleRef.current) {\n return;\n }\n // 取绝对值较大的方向\n const axisRef =\n Math.abs(deltaYRef.current) > Math.abs(deltaXRef.current)\n ? deltaYRef\n : deltaXRef;\n // 经测试,滚轮纵轴一次位移 4,横轴一次位移 40。\n const threshold = axisRef === deltaYRef ? 4 : 40;\n if (axisRef.current >= threshold) {\n slideRight();\n } else if (axisRef.current <= -threshold) {\n slideLeft();\n } else {\n return;\n }\n // 触发滑动后,重设 delta,拖尾期间,不再响应滚轮事件。\n deltaXRef.current = 0;\n deltaYRef.current = 0;\n responsibleRef.current = false;\n };\n\n const resetDeltaTimeoutRef = React.useRef<any>();\n\n const handleWheel = (e: React.WheelEvent): void => {\n deltaXRef.current += e.deltaX;\n deltaYRef.current += e.deltaY;\n tryToSlideByWheel();\n if (resetDeltaTimeoutRef.current) {\n clearTimeout(resetDeltaTimeoutRef.current);\n }\n // 间隔 50ms 内的连续滚轮事件被认作一次滚动。\n resetDeltaTimeoutRef.current = setTimeout(() => {\n deltaXRef.current = 0;\n deltaYRef.current = 0;\n responsibleRef.current = true;\n }, 50);\n };\n\n const sliderChildrenLength = desktops.length + 1;\n\n return (\n <div\n onWheel={handleWheel}\n className={classNames(styles.desktopSlider, {\n [styles.filtered]: props.q,\n })}\n >\n <div className={styles.desktopSelector}>\n {[\n ...[\n {\n name: (\n <WrappedGeneralIcon lib=\"antd\" theme=\"filled\" icon=\"home\" />\n ),\n },\n ],\n ...desktops,\n ].map((desktop, index) => (\n <React.Fragment key={index}>\n {index !== 0 && <span className={styles.selectorSeparator} />}\n <a\n className={classNames(styles.desktopName, {\n [styles.active]: desktopCursor === index,\n })}\n onClick={(e) => handleSlideTo(e, index)}\n role=\"button\"\n >\n {desktop.name}\n </a>\n </React.Fragment>\n ))}\n </div>\n <div className={styles.scrollContainer}>\n <div\n className={styles.desktopList}\n style={{\n width: `${sliderChildrenLength * 100}%`,\n marginLeft: `${desktopCursor * -100}%`,\n transition: `margin-left ${slideDuration}ms ease-out`,\n }}\n >\n {enableMyDesktop && (\n <MyDesktop\n desktopCount={desktops.length}\n arrowWidthPercent={props.arrowWidthPercent}\n />\n )}\n {desktops.map((desktop, index) => (\n <Desktop\n key={index}\n desktop={desktop}\n desktopCount={desktops.length}\n arrowWidthPercent={props.arrowWidthPercent}\n activeIndex={desktopCursor - 1 === index ? appCursor : -1}\n />\n ))}\n </div>\n {\n // Show filtered apps as a single desktop.\n props.q && (\n <div className={styles.filteredList}>\n <Desktop\n desktop={filteredDesktop}\n desktopCount={1}\n arrowWidthPercent={props.arrowWidthPercent}\n activeIndex={appCursor}\n />\n </div>\n )\n }\n </div>\n <a\n className={classNames(styles.arrowLeft, {\n [styles.available]: desktopCursor > 0,\n })}\n style={{ width: `${props.arrowWidthPercent}%` }}\n onClick={handleSlideLeft}\n role=\"button\"\n >\n <span className={styles.arrowButton}>\n <WrappedGeneralIcon lib=\"antd\" theme=\"outlined\" icon=\"left\" />\n </span>\n </a>\n <a\n className={classNames(styles.arrowRight, {\n [styles.available]: desktopCursor < sliderChildrenLength - 1,\n })}\n style={{ width: `${props.arrowWidthPercent}%` }}\n onClick={handleSlideRight}\n role=\"button\"\n >\n <span className={styles.arrowButton}>\n <WrappedGeneralIcon lib=\"antd\" theme=\"outlined\" icon=\"right\" />\n </span>\n </a>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopDirContent.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopDirContent.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { getHistory } from \"@next-core/runtime\";\nimport {\n useDesktopDirContext,\n DirWithCoordinates,\n} from \"../DesktopDirContext.js\";\nimport { DesktopCell } from \"../DesktopCell/DesktopCell.js\";\nimport { useLaunchpadSettingsContext } from \"../LaunchpadSettingsContext.js\";\nimport styles from \"./DesktopDirContent.module.css\";\nimport { MicroApp } from \"@next-core/types\";\n\ninterface DesktopDirContentProps extends DirWithCoordinates {\n arrowWidthPercent: number;\n}\n\nexport function DesktopDirContent(\n props: DesktopDirContentProps\n): React.ReactElement {\n const { columns, rows } = useLaunchpadSettingsContext();\n const { setDesktopDir } = useDesktopDirContext();\n const [entering, setEntering] = React.useState(false);\n const [appCursor, setAppCursor] = React.useState(props.activeIndex);\n\n const items = props.dir.items.slice(0, columns * rows);\n // 展开的文件夹容器的大小即 DOM 容器的大小,以其中心为基准,变换至鼠标点击的位置,\n // 以模拟出一种从鼠标点击处展开的动画效果。\n const translateX =\n props.coordinates.x - document.documentElement.clientWidth / 2;\n const translateY =\n props.coordinates.y - document.documentElement.clientHeight / 2;\n\n React.useEffect(() => {\n const onKeydown = (event: KeyboardEvent): void => {\n event.stopPropagation();\n event.preventDefault();\n const key =\n event.key ||\n /* istanbul ignore next: compatibility */ event.keyCode ||\n /* istanbul ignore next: compatibility */ event.which;\n if (key === \"Escape\" || key === 27) {\n setDesktopDir?.(undefined);\n } else if (key === \"Enter\" || key === 13) {\n if (appCursor >= 0 && appCursor < items.length) {\n const item = items[appCursor];\n if (item.type === \"app\") {\n getHistory().push((item.app as MicroApp).homepage);\n } else {\n window.open(item.url);\n }\n }\n } else {\n let offset = 0;\n if (key === \"ArrowRight\" || key === 39) {\n offset = 1;\n } else if (key === \"ArrowLeft\" || key === 37) {\n offset = appCursor === -1 ? items.length : -1;\n } else if (key === \"ArrowDown\" || key === 40) {\n offset = appCursor === -1 ? 1 : columns;\n } else if (key === \"ArrowUp\" || key === 38) {\n offset = appCursor === -1 ? items.length : -columns;\n }\n if (offset !== 0) {\n const next = appCursor + offset;\n if (next >= 0 && next < items.length) {\n setAppCursor(next);\n }\n }\n }\n };\n document.addEventListener(\"keydown\", onKeydown);\n return () => {\n document.removeEventListener(\"keydown\", onKeydown);\n };\n }, [props.dir, appCursor, columns, rows, setDesktopDir]);\n\n const handleCloseDir = (e: React.MouseEvent): void => {\n e.stopPropagation();\n setDesktopDir?.(undefined);\n };\n\n const handleEntering = (): void => {\n setEntering(true);\n };\n\n const rowsInDir = Math.ceil(items.length / columns);\n\n return (\n <CSSTransition\n in={true}\n timeout={150}\n appear={true}\n classNames=\"no-rules-class-name\"\n onEntering={handleEntering}\n >\n <div\n className={styles.dirContainer}\n onClick={handleCloseDir}\n style={{\n padding: `0 ${props.arrowWidthPercent}% 36px`,\n transform: entering\n ? \"none\"\n : `translate(${translateX}px,${translateY}px) scale(0.01)`,\n }}\n >\n <div className={styles.dirName}>{props.dir.name}</div>\n <div\n className={styles.dirContent}\n style={{\n height: `${((rowsInDir + 0.2) * 100) / (rows + 1)}%`,\n gridTemplateColumns: `repeat(${columns},1fr)`,\n gridTemplateRows: `repeat(${rowsInDir},1fr)`,\n }}\n >\n {items.map((item, index) => (\n <DesktopCell\n key={item.id}\n item={item}\n active={appCursor === index}\n />\n ))}\n </div>\n </div>\n </CSSTransition>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Launchpad.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Launchpad.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { handleHttpError } from \"@next-core/runtime\";\nimport { MicroApp } from \"@next-core/types\";\nimport { SearchBar } from \"../SearchBar/SearchBar.js\";\nimport { DesktopSlider } from \"../DesktopSlider/DesktopSlider.js\";\nimport { DesktopDirContext, DirWithCoordinates } from \"../DesktopDirContext.js\";\nimport { LaunchpadSettingsContext } from \"../LaunchpadSettingsContext.js\";\nimport { DesktopDirContent } from \"../DesktopDirContent/DesktopDirContent.js\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport { GeneralIcon, GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport styles from \"./Launchpad.module.css\";\n\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface LaunchpadProps {\n onWillClose?: () => void;\n}\n\nexport function Launchpad(props: LaunchpadProps): React.ReactElement {\n const { settings, desktops } = launchpadService.getBaseInfo();\n\n const getFilterMicroApps = (): MicroApp[] =>\n // 过滤掉状态为开发中的小产品\n launchpadService\n .getBaseInfo()\n .microApps // 兼容较老版本接口未返回 `status` 的情况。\n .filter(\n (item) =>\n item &&\n (!item.status ||\n item.status === \"enabled\" ||\n item.status === \"developing\")\n );\n\n const [q, setQ] = React.useState(\"\");\n const [microApps, setMicroApps] = React.useState(getFilterMicroApps());\n const [desktopDir, setDesktopDir] = React.useState<DirWithCoordinates>();\n const [loading, setLoading] = React.useState(\n !!window.STANDALONE_MICRO_APPS && !launchpadService.loaded\n );\n\n React.useEffect(() => {\n const startFetchLaunchpadInfo = async (): Promise<void> => {\n try {\n await launchpadService.fetchLaunchpadInfo();\n setLoading(false);\n setMicroApps(getFilterMicroApps());\n } catch (error) {\n props.onWillClose?.();\n handleHttpError(error);\n }\n };\n if (window.STANDALONE_MICRO_APPS) {\n startFetchLaunchpadInfo();\n } else {\n launchpadService.init();\n }\n }, []);\n\n React.useEffect(() => {\n const onKeydown = (event: KeyboardEvent): void => {\n const key =\n event.key ||\n /* istanbul ignore next: compatibility */ event.keyCode ||\n /* istanbul ignore next: compatibility */ event.which;\n if (key === \"Escape\" || key === 27) {\n props.onWillClose?.();\n }\n };\n window.addEventListener(\"keydown\", onKeydown);\n return () => {\n window.removeEventListener(\"keydown\", onKeydown);\n };\n }, [props.onWillClose]);\n\n const handleChange = (value: string): void => {\n setQ(value);\n };\n\n const arrowWidthPercent = 9;\n\n return (\n <LaunchpadSettingsContext.Provider value={settings}>\n <DesktopDirContext.Provider\n value={{\n desktopDir,\n setDesktopDir,\n }}\n >\n <div className={styles.launchpad} onClick={props.onWillClose}>\n {loading ? (\n <div className={styles.loadingWrapper}>\n <WrappedIcon\n icon=\"loading\"\n lib=\"antd\"\n theme=\"outlined\"\n spinning\n />\n </div>\n ) : (\n <>\n <CSSTransition\n in={!desktopDir}\n timeout={100}\n classNames={{\n enter: styles.fadeEnter,\n enterActive: styles.fadeEnterActive,\n exit: styles.fadeExit,\n exitActive: styles.fadeExitActive,\n exitDone: styles.fadeExitDone,\n }}\n >\n <div className={styles.launchpadContainer}>\n <SearchBar onChange={handleChange} />\n <DesktopSlider\n q={q}\n microApps={microApps}\n desktops={desktops}\n arrowWidthPercent={arrowWidthPercent}\n />\n </div>\n </CSSTransition>\n {desktopDir && (\n <DesktopDirContent\n {...desktopDir}\n arrowWidthPercent={arrowWidthPercent}\n />\n )}\n </>\n )}\n </div>\n </DesktopDirContext.Provider>\n </LaunchpadSettingsContext.Provider>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./LaunchpadWrapper.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./LaunchpadWrapper.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { Launchpad, LaunchpadProps } from \"../Launchpad/Launchpad.js\";\nimport styles from \"./LaunchpadWrapper.module.css\";\n\nexport interface LaunchpadWrapperProps extends LaunchpadProps {\n onClose?: () => void;\n}\n\nexport function LaunchpadWrapper(\n props: LaunchpadWrapperProps\n): React.ReactElement {\n const [fadeIn, setFadeIn] = React.useState(true);\n\n const handleWillClose = (): void => {\n setFadeIn(false);\n props.onWillClose?.();\n };\n\n const onExited = (): void => {\n props.onClose?.();\n };\n\n return (\n <CSSTransition\n in={fadeIn}\n timeout={100}\n appear={true}\n classNames={{ ...styles }}\n onExited={onExited}\n >\n <Launchpad onWillClose={handleWillClose} />\n </CSSTransition>\n );\n}\n","import React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n LaunchpadWrapper,\n LaunchpadWrapperProps,\n} from \"../LaunchpadWrapper/LaunchpadWrapper.js\";\n\nexport interface LaunchpadPortalProps extends LaunchpadWrapperProps {\n visible: boolean;\n}\n\nexport function LaunchpadPortal(\n props: LaunchpadPortalProps\n): React.ReactPortal | null {\n const elem = document.createElement(\"div\");\n\n // Currently the `useEffect()` can't be covered when shallow rendering.\n // Ref https://github.com/airbnb/enzyme/issues/2086\n // Todo(steve): check issue status and remove ignore.\n /* istanbul ignore next */\n React.useEffect(() => {\n document.body.appendChild(elem);\n return () => {\n document.body.removeChild(elem);\n };\n });\n\n if (!props.visible) {\n return null;\n }\n\n return createPortal(\n <LaunchpadWrapper\n onWillClose={props.onWillClose}\n onClose={props.onClose}\n />,\n elem\n );\n}\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { getRuntime, getHistory } from \"@next-core/runtime\";\nimport LaunchpadSvg from \"../../images/launchpad.svg\";\nimport { LaunchpadPortal } from \"../LaunchpadPortal/LaunchpadPortal.js\";\nimport hotkeys from \"hotkeys-js\";\nimport { launchpadService } from \"../LaunchpadService.js\";\n\nexport function LaunchpadButton(): React.ReactElement {\n const [visible, setVisible] = useState(false);\n const openLaunchpad = (): void => {\n setVisible(true);\n };\n\n const handleLaunchpadClose = (): void => {\n setVisible(false);\n };\n const handleLaunchpadWillClose = useCallback((): void => {\n getRuntime().toggleLaunchpadEffect(false);\n }, []);\n\n useEffect(() => {\n const unlisten = getHistory().listen(() => {\n // 当切换页面时,关闭 Launchpad。\n handleLaunchpadWillClose();\n setVisible(false);\n });\n return unlisten;\n }, [handleLaunchpadWillClose]);\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n hotkeys.filter = function () {\n return true;\n };\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n hotkeys(\"alt+l\", (event) => {\n event.preventDefault();\n setVisible((preVisble) => {\n const curVisble = !preVisble;\n if (!curVisble) handleLaunchpadWillClose();\n return curVisble;\n });\n });\n\n return () => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n hotkeys.unbind(\"alt+l\");\n };\n }, [handleLaunchpadWillClose]);\n\n useEffect(() => {\n // 当打开/关闭 Launchpad 时,切换背景模糊,切换悬浮展开模式;\n getRuntime().toggleLaunchpadEffect(visible);\n }, [visible]);\n\n useEffect(() => {\n launchpadService.preFetchLaunchpadInfo();\n launchpadService.preFetchFavorites();\n }, []);\n\n return (\n <>\n <a role=\"button\" className=\"launchpadLink\" onClick={openLaunchpad}>\n <LaunchpadSvg />\n </a>\n <LaunchpadPortal\n visible={visible}\n onWillClose={handleLaunchpadWillClose}\n onClose={handleLaunchpadClose}\n />\n </>\n );\n}\n","export enum K {\n SEARCH_BY_NAME_KEYWORD = \"SEARCH_BY_NAME_KEYWORD\",\n}\n\nconst en: Locale = {\n SEARCH_BY_NAME_KEYWORD: \"Search by name/keyword\",\n};\n\nconst zh: Locale = {\n SEARCH_BY_NAME_KEYWORD: \"通过名称/关键字搜索\",\n};\n\nexport const NS = \"bricks/basic/launchpad\";\n\nexport const locales = { en, zh };\n\ntype Locale = { [key in K]: string };\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.launchpadLink{width:24px;height:24px;display:flex;justify-content:center;align-items:center}.launchpadLink svg{vertical-align:top;filter:grayscale(100%);opacity:0.6;width:16px;height:16px;cursor:pointer}.launchpadLink:hover svg{color:var(--color-brand-hover)!important;filter:none;opacity:1}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.desktop--LCHJxkdK{flex:1;display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(4,1fr)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"desktop\": `desktop--LCHJxkdK`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.appLink--lI6ZH8_J{display:flex;width:80px;height:80px;color:#fff;justify-content:center;align-items:center;position:relative}.appLink--lI6ZH8_J.circle--CqDDCO2g,\n .appLink--lI6ZH8_J.square--KkzxvIhL{background-color:rgba(255,255,255,0.1)}.appLink--lI6ZH8_J.small--oHLIwdUo{width:56px;height:56px}@media (max-height: 860px), (max-width: 1280px){.appLink--lI6ZH8_J.small--oHLIwdUo.appLink--lI6ZH8_J{transform:scale(0.8)}.appLink--lI6ZH8_J.small--oHLIwdUo + .appName--YMtvoP3g{font-size:14px;height:21px}}@media (max-height: 700px), (max-width: 1024px){.appLink--lI6ZH8_J.small--oHLIwdUo.appLink--lI6ZH8_J{transform:scale(0.7)}.appLink--lI6ZH8_J.small--oHLIwdUo + .appName--YMtvoP3g{font-size:12px;height:18px}}.appLink--lI6ZH8_J.circle--CqDDCO2g{border-radius:40px}.appLink--lI6ZH8_J.square--KkzxvIhL{border-radius:10px}.appLink--lI6ZH8_J.installing--wQF5JcJn{opacity:0.5}.appLink--lI6ZH8_J:hover .addIcon--EM1rukmN{display:block}.addIcon--EM1rukmN{position:absolute;font-size:20px;color:white;display:none}.circleIcon--C6tDgTcK{right:-7px;bottom:5px}.squareIcon--Vl9EHU0t{right:-3px;bottom:5px}.appLink--lI6ZH8_J:hover{color:#fff;opacity:0.6}.appIcon--CfrDjC_d{width:100%}.appName--YMtvoP3g{display:block;font-size:16px;line-height:1.5;height:24px;text-align:center}@media (max-height: 860px), (max-width: 1280px){.appLink--lI6ZH8_J{transform:scale(0.75)}.appName--YMtvoP3g{font-size:14px;height:21px}}@media (max-height: 700px), (max-width: 1024px){.appLink--lI6ZH8_J{transform:scale(0.6)}.appName--YMtvoP3g{font-size:12px;height:18px}}@media (max-height: 640px), (max-width: 900px){.appLink--lI6ZH8_J{transform:scale(0.5)}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"appLink\": `appLink--lI6ZH8_J`,\n\t\"circle\": `circle--CqDDCO2g`,\n\t\"square\": `square--KkzxvIhL`,\n\t\"small\": `small--oHLIwdUo`,\n\t\"appName\": `appName--YMtvoP3g`,\n\t\"installing\": `installing--wQF5JcJn`,\n\t\"addIcon\": `addIcon--EM1rukmN`,\n\t\"circleIcon\": `circleIcon--C6tDgTcK`,\n\t\"squareIcon\": `squareIcon--Vl9EHU0t`,\n\t\"appIcon\": `appIcon--CfrDjC_d`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.cellWrapper--NydKY8Uu{display:flex;justify-content:center;align-items:center;overflow:hidden}.cellWrapper--NydKY8Uu.positionLeft--VreE62uh{justify-content:flex-start}.cellItem--Se6r55Ne{height:144px;padding:10px;min-width:120px;display:flex;justify-content:space-between;align-items:center;flex-direction:column}.cellItem--Se6r55Ne.small--QJ2gld44{height:110px}.cellItem--Se6r55Ne.active--KANJZK5a{background-color:rgba(0,0,0,0.3);border-radius:6px}@media (max-height: 860px), (max-width: 1280px){.cellItem--Se6r55Ne{height:134px;min-width:100px;justify-content:normal}.cellItem--Se6r55Ne.small--QJ2gld44{height:110px;min-width:76px;justify-content:normal}}@media (max-height: 700px), (max-width: 1024px){.cellItem--Se6r55Ne{height:129px;min-width:80px;justify-content:normal}.cellItem--Se6r55Ne.small--QJ2gld44{height:100px;min-width:60px;justify-content:normal}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"cellWrapper\": `cellWrapper--NydKY8Uu`,\n\t\"positionLeft\": `positionLeft--VreE62uh`,\n\t\"cellItem\": `cellItem--Se6r55Ne`,\n\t\"small\": `small--QJ2gld44`,\n\t\"active\": `active--KANJZK5a`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.appLink--XvctrW4d{display:flex;width:80px;height:80px;color:#fff;justify-content:center;align-items:center;position:relative}.appLink--XvctrW4d.circle--ZQ_SHyEN,\n .appLink--XvctrW4d.square--C8X1afGq{background-color:rgba(255,255,255,0.1)}.appLink--XvctrW4d.small--Mux_F8QK{width:56px;height:56px}@media (max-height: 860px), (max-width: 1280px){.appLink--XvctrW4d.small--Mux_F8QK.appLink--XvctrW4d{transform:scale(0.8)}.appLink--XvctrW4d.small--Mux_F8QK + .appName--wsBI2CZC{font-size:14px;height:21px}}@media (max-height: 700px), (max-width: 1024px){.appLink--XvctrW4d.small--Mux_F8QK.appLink--XvctrW4d{transform:scale(0.7)}.appLink--XvctrW4d.small--Mux_F8QK + .appName--wsBI2CZC{font-size:12px;height:18px}}.appLink--XvctrW4d.circle--ZQ_SHyEN{border-radius:40px}.appLink--XvctrW4d.square--C8X1afGq{border-radius:10px}.addIcon--DHJxfx2l{position:absolute;display:none;font-size:20px;color:white}.circleIcon--NoKu04zb{right:-7px;bottom:5px}.squareIcon--JeHz5VMI{right:-3px;bottom:5px}.appLink--XvctrW4d:hover{color:#fff}.appIcon--K35YGQTl{width:100%}.appName--wsBI2CZC{display:block;font-size:16px;line-height:1.5;height:24px;text-align:center}@media (max-height: 860px), (max-width: 1280px){.appLink--XvctrW4d{transform:scale(0.75)}.appName--wsBI2CZC{font-size:14px;height:21px}}@media (max-height: 700px), (max-width: 1024px){.appLink--XvctrW4d{transform:scale(0.6)}.appName--wsBI2CZC{font-size:12px;height:18px}}@media (max-height: 640px), (max-width: 900px){.appLink--XvctrW4d{transform:scale(0.5)}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"appLink\": `appLink--XvctrW4d`,\n\t\"circle\": `circle--ZQ_SHyEN`,\n\t\"square\": `square--C8X1afGq`,\n\t\"small\": `small--Mux_F8QK`,\n\t\"appName\": `appName--wsBI2CZC`,\n\t\"addIcon\": `addIcon--DHJxfx2l`,\n\t\"circleIcon\": `circleIcon--NoKu04zb`,\n\t\"squareIcon\": `squareIcon--JeHz5VMI`,\n\t\"appIcon\": `appIcon--K35YGQTl`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.dirLink--Ezp7L944{display:grid;grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(2,1fr);width:80px;height:80px;color:#fff;justify-content:center;align-items:center;background-color:rgba(0,0,0,0.15);border-radius:10px;font-size:21px;padding:7px}.dirLink--Ezp7L944.small--S5JXqzG8{width:56px;height:56px}.dirLink--Ezp7L944 .appIcon--TdWlSNU2,\n .dirLink--Ezp7L944 .anticon{width:33px;height:33px}.dirLink--Ezp7L944 .anticon{display:flex;justify-content:center;align-items:center;overflow:hidden}.dirLink--Ezp7L944:hover{color:#fff}.dirName--zvy885aK{display:block;font-size:16px;line-height:1.5;height:24px;text-align:center}@media (max-height: 860px), (max-width: 1280px){.dirLink--Ezp7L944{transform:scale(0.75)}.dirName--zvy885aK{font-size:14px;height:21px}}@media (max-height: 700px), (max-width: 1024px){.dirLink--Ezp7L944{transform:scale(0.6)}.dirName--zvy885aK{font-size:12px;height:18px}}@media (max-height: 640px), (max-width: 900px){.dirLink--Ezp7L944{transform:scale(0.5)}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"dirLink\": `dirLink--Ezp7L944`,\n\t\"small\": `small--S5JXqzG8`,\n\t\"appIcon\": `appIcon--TdWlSNU2`,\n\t\"dirName\": `dirName--zvy885aK`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.dirContainer--yobNkKHJ{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%;position:absolute;left:0;top:0;transition:transform 150ms ease-out}.dirName--S6uKBACL{margin-bottom:40px;font-size:24px;line-height:32px;text-align:center}.dirContent--zQ9gweDn{display:grid;background-color:rgba(18,21,26,0.4);border-radius:20px;width:100%}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"dirContainer\": `dirContainer--yobNkKHJ`,\n\t\"dirName\": `dirName--S6uKBACL`,\n\t\"dirContent\": `dirContent--zQ9gweDn`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.desktopSlider--AScHB1Kd{flex:1;position:relative;padding-top:110px;padding-bottom:50px}.filtered--OQSTba5B .desktopList--nOFGKtg0,\n .filtered--OQSTba5B .arrowLeft--xkZ60z9A,\n .filtered--OQSTba5B .arrowRight--SFdZw31z,\n .filtered--OQSTba5B .desktopSelector--rYqx7sAu{display:none}.scrollContainer--PyCfQg85{width:100%;height:100%;overflow:hidden}.desktopList--nOFGKtg0{display:flex;height:100%}.filteredList--qgFcXHyE{display:flex;height:100%}.arrowLeft--xkZ60z9A,\n.arrowRight--SFdZw31z{position:absolute;top:110px;bottom:50px;justify-content:center;align-items:center;display:none}.arrowLeft--xkZ60z9A.available--yspNdU90, .arrowRight--SFdZw31z.available--yspNdU90{display:flex}.arrowLeft--xkZ60z9A{left:0}.arrowRight--SFdZw31z{right:0}.arrowButton--MHbxtjNQ{width:70px;height:70px;font-size:36px;display:flex;justify-content:center;align-items:center;color:#e6e6e6;background-color:rgba(255,255,255,0.1);border-radius:6px;visibility:hidden}.arrowLeft--xkZ60z9A:hover .arrowButton--MHbxtjNQ,\n.arrowRight--SFdZw31z:hover .arrowButton--MHbxtjNQ{visibility:visible}.desktopSelector--rYqx7sAu{position:absolute;top:0;left:0;right:0;height:110px;padding:36px 0;display:flex;justify-content:center;align-items:center;flex-wrap:wrap}.desktopName--M1GlY6Xe{display:block;color:rgba(255,255,255,0.65);border-radius:6px;font-size:12px;line-height:38px;padding:0 16px}.desktopName--M1GlY6Xe:hover{color:#fff}.desktopName--M1GlY6Xe.active--gh6q8Xsv{color:#fff;background-color:rgba(18,21,26,0.3)}.selectorSeparator--tLrL2o9J{display:block;margin:0 8px;width:1px;height:16px;border-left:1px dashed rgba(255,255,255,0.15)}@media (max-height: 860px), (max-width: 1280px){.arrowButton--MHbxtjNQ{width:60px;height:60px;font-size:30px}.desktopSlider--AScHB1Kd{padding-top:98px}.desktopSelector--rYqx7sAu{padding:30px 0;height:98px}}@media (max-height: 700px), (max-width: 1024px){.arrowButton--MHbxtjNQ{width:50px;height:50px;font-size:25px}.desktopSlider--AScHB1Kd{padding-top:86px}.desktopSelector--rYqx7sAu{padding:24px 0;height:86px}}@media (max-height: 640px), (max-width: 900px){.arrowButton--MHbxtjNQ{width:40px;height:40px;font-size:20px}.desktopSlider--AScHB1Kd{padding-top:74px}.desktopSelector--rYqx7sAu{padding:18px 0;height:74px}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"desktopSlider\": `desktopSlider--AScHB1Kd`,\n\t\"filtered\": `filtered--OQSTba5B`,\n\t\"desktopList\": `desktopList--nOFGKtg0`,\n\t\"arrowLeft\": `arrowLeft--xkZ60z9A`,\n\t\"arrowRight\": `arrowRight--SFdZw31z`,\n\t\"desktopSelector\": `desktopSelector--rYqx7sAu`,\n\t\"scrollContainer\": `scrollContainer--PyCfQg85`,\n\t\"filteredList\": `filteredList--qgFcXHyE`,\n\t\"available\": `available--yspNdU90`,\n\t\"arrowButton\": `arrowButton--MHbxtjNQ`,\n\t\"desktopName\": `desktopName--M1GlY6Xe`,\n\t\"active\": `active--gh6q8Xsv`,\n\t\"selectorSeparator\": `selectorSeparator--tLrL2o9J`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.cellWrapper--celYo8CM{display:flex;align-items:center;position:relative;transform-origin:0 0}.cellWrapper--celYo8CM:hover{background-color:rgba(255,255,255,0.1);border-radius:10px;cursor:pointer}.cellWrapper--celYo8CM:hover .closeIcon--kqBgSmBL{display:block}.cellWrapper--celYo8CM.disabled--SXwx9i_9{color:#d8d8d8;opacity:0.5;cursor:no-drop}.cellWrapper--celYo8CM.disabled--SXwx9i_9 .appLink--xxDzS__h,\n .cellWrapper--celYo8CM.disabled--SXwx9i_9 .name--gT42Hr47{cursor:no-drop}.cellWrapper--celYo8CM.disabled--SXwx9i_9:hover{background:none;border-radius:0}.cellWrapper--celYo8CM.disabled--SXwx9i_9:hover .closeIcon--kqBgSmBL{display:none}.cellItem--JZfNDEVv{height:144px;padding:10px;min-width:120px;display:flex;justify-content:space-between;align-items:center;flex-direction:column}.appLink--xxDzS__h{display:flex;width:46px;height:46px;color:#fff;justify-content:center;align-items:center;position:relative}.appLink--xxDzS__h.circle--wjMEocD_,\n .appLink--xxDzS__h.square--lOfLBD3x{background-color:rgba(255,255,255,0.1)}.appLink--xxDzS__h.circle--wjMEocD_{border-radius:40px}.appLink--xxDzS__h.square--lOfLBD3x{border-radius:10px}.appLink--xxDzS__h.installing--drkxXY1n{opacity:0.5}.addIcon--ruhiXc4_{position:absolute;font-size:25px;color:white}.circleIcon--nexpPxUz{right:-6px;bottom:5px}.squareIcon--BkpShWWs{right:-6px;bottom:5px}.appLink--xxDzS__h:hover{color:#fff}.appIcon--w9kHpYGc{width:95%}.appName--CLwLdUBP{display:block;font-size:16px;line-height:1.5;height:24px;text-align:center}.link--bllF9zn6{display:flex;justify-content:center;align-items:center}.name--gT42Hr47{flex:1;padding-left:20px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;color:white}.closeIcon--kqBgSmBL{font-size:12px;position:absolute;top:-5px;right:-3px;color:rgba(255,255,255,0.7);display:none}@media (max-height: 860px), (max-width: 1280px){.cellWrapper--celYo8CM{transform:scale(0.8)}}@media (max-height: 700px), (max-width: 1024px){.cellWrapper--celYo8CM{transform:scale(0.7)}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"cellWrapper\": `cellWrapper--celYo8CM`,\n\t\"closeIcon\": `closeIcon--kqBgSmBL`,\n\t\"disabled\": `disabled--SXwx9i_9`,\n\t\"appLink\": `appLink--xxDzS__h`,\n\t\"name\": `name--gT42Hr47`,\n\t\"cellItem\": `cellItem--JZfNDEVv`,\n\t\"circle\": `circle--wjMEocD_`,\n\t\"square\": `square--lOfLBD3x`,\n\t\"installing\": `installing--drkxXY1n`,\n\t\"addIcon\": `addIcon--ruhiXc4_`,\n\t\"circleIcon\": `circleIcon--nexpPxUz`,\n\t\"squareIcon\": `squareIcon--BkpShWWs`,\n\t\"appIcon\": `appIcon--w9kHpYGc`,\n\t\"appName\": `appName--CLwLdUBP`,\n\t\"link\": `link--bllF9zn6`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.launchpad--jiWBelji{background:rgba(36,41,51,0.93);position:fixed;top:0;bottom:0;left:0;right:0;z-index:5000;overflow:hidden;overflow-y:auto;color:#fff;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px)}.launchpadContainer--_vrKLUwW{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}.fadeEnter--lOmmReOY{opacity:0;transform:scale(0.95)}.fadeEnterActive--PRkux5Hj{opacity:1;transform:translateX(0);transition:opacity 100ms ease-out,transform 100ms ease-out}.fadeExit--egWs3z_Z{opacity:1}.fadeExitActive--Emt0ZO0f{opacity:0;transform:scale(0.95);transition:opacity 100ms ease-out,transform 100ms ease-out}.fadeExitDone--KS8Y8j_i{display:none}.loadingWrapper--a0uhMogW{display:flex;justify-content:center;align-items:center;height:100%;font-size:58px;color:var(--theme-cyan-color)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"launchpad\": `launchpad--jiWBelji`,\n\t\"launchpadContainer\": `launchpadContainer--_vrKLUwW`,\n\t\"fadeEnter\": `fadeEnter--lOmmReOY`,\n\t\"fadeEnterActive\": `fadeEnterActive--PRkux5Hj`,\n\t\"fadeExit\": `fadeExit--egWs3z_Z`,\n\t\"fadeExitActive\": `fadeExitActive--Emt0ZO0f`,\n\t\"fadeExitDone\": `fadeExitDone--KS8Y8j_i`,\n\t\"loadingWrapper\": `loadingWrapper--a0uhMogW`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.appear--fTt52aoG{opacity:0;transform:scale(1.05)}.appearActive--VTTHohOa{opacity:1;transform:translateX(0);transition:opacity 100ms ease-out,transform 100ms ease-out}.exit--xJVirpkU{opacity:1}.exitActive--JBRp0ETG{opacity:0;transform:scale(1.05);transition:opacity 100ms ease-out,transform 100ms ease-out}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"appear\": `appear--fTt52aoG`,\n\t\"appearActive\": `appearActive--VTTHohOa`,\n\t\"exit\": `exit--xJVirpkU`,\n\t\"exitActive\": `exitActive--JBRp0ETG`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.desktop--ou0P6iGf{display:grid;grid-template-columns:repeat(8,1fr)}.desktop--ou0P6iGf .cellWrapper{justify-content:flex-start}.title--waO4P2iB{color:#fff;font-size:16px;padding-bottom:6px}.visited--tdY4xwnJ{padding-bottom:24px;margin-bottom:20px;border-bottom:1px rgba(255,255,255,0.25) solid}.favorites--lfUhBPuB .ant-spin-blur{opacity:1}.favorites--lfUhBPuB .ant-spin-blur::after{opacity:0}.modeWrapper--L03hs70G{height:0}.modeWrapper--L03hs70G .header--sdla4qan{display:flex;justify-content:space-between}.modeWrapper--L03hs70G .section--zyFAea1p{padding:10px 30px 20px}.modeWrapper--L03hs70G .modeIcon--CE2TFixF{margin-left:15px;padding:3px;border-radius:50%;opacity:0.8;background:rgba(255,255,255,0.1)}.modeWrapper--L03hs70G .modeIcon--CE2TFixF:hover{opacity:1}.modeWrapper--L03hs70G .emptyTips--IvkqCJZN{font-size:16px;line-height:24px}.modeWrapper--L03hs70G .emptyTips--IvkqCJZN a{color:#52a6f9}.modeWrapper--L03hs70G .emptyTips--IvkqCJZN a:hover{color:var(--antd-link-hover-color)}.spin--wMvBU9Kg{color:#8c8c8c;width:100%;height:200px;line-height:200px;display:flex;align-items:center;justify-content:center}.settingsContainer--Z_f8juq_ a{color:#fff}.settingsContainer--Z_f8juq_ .settings--nnLSnU29{cursor:pointer;margin-right:10px;color:rgba(255,255,255,0.7);font-size:13px;transition-duration:0.8s;transition-property:transform}.settingsContainer--Z_f8juq_:hover .settings--nnLSnU29{transform:rotate(180deg)}.favoriteContainer--CjB0c4Dt{display:grid;grid-template-columns:repeat(5,1fr);grid-gap:2.5rem 7%;gap:2.5rem 7%}@media (max-height: 860px), (max-width: 1280px){.favoriteContainer--CjB0c4Dt{gap:1.7rem 4%}}@media (max-height: 720px), (max-width: 1024px){.favoriteContainer--CjB0c4Dt{gap:1rem 3%}.visited--tdY4xwnJ{padding-bottom:18px;margin-bottom:15px}}@media (max-height: 640px), (max-width: 900px){.favoriteContainer--CjB0c4Dt{gap:0.8rem 2%}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"desktop\": `desktop--ou0P6iGf`,\n\t\"title\": `title--waO4P2iB`,\n\t\"visited\": `visited--tdY4xwnJ`,\n\t\"favorites\": `favorites--lfUhBPuB`,\n\t\"modeWrapper\": `modeWrapper--L03hs70G`,\n\t\"header\": `header--sdla4qan`,\n\t\"section\": `section--zyFAea1p`,\n\t\"modeIcon\": `modeIcon--CE2TFixF`,\n\t\"emptyTips\": `emptyTips--IvkqCJZN`,\n\t\"spin\": `spin--wMvBU9Kg`,\n\t\"settingsContainer\": `settingsContainer--Z_f8juq_`,\n\t\"settings\": `settings--nnLSnU29`,\n\t\"favoriteContainer\": `favoriteContainer--CjB0c4Dt`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.searchBar--k7ys_9bU{display:flex;justify-content:center;align-items:flex-end;height:10%}.searchBar--k7ys_9bU .inputAffixWrapper--r90ghnJb{position:relative;width:100%;min-width:0;padding:4px 11px;color:var(--antd-input-color);font-size:14px;line-height:1.5715;background-image:none;display:inline-flex;height:42px;border-radius:21px;padding-left:54px;padding-right:4px;border:2px solid rgba(255,255,255,0.1);background-color:rgba(0,0,0,0.06);transition:padding-left 150ms ease-out;box-sizing:border-box}.searchBar--k7ys_9bU .inputAffixWrapper--r90ghnJb:hover{border-color:#0071eb;border-right-width:2px!important}.searchBar--k7ys_9bU .inputAffixWrapper--r90ghnJb .antInputPrefix--vr3ceVIR{width:30px;margin-left:0;margin-right:6px;display:flex;justify-content:center;color:rgba(255,255,255,0.65);flex:none;align-items:center;box-sizing:border-box}.searchBar--k7ys_9bU .inputAffixWrapper--r90ghnJb::before{width:0;visibility:hidden;content:\"\\\\a0\"}.searchBar--k7ys_9bU.focus--rcoZCXD5 .inputAffixWrapper--r90ghnJb,\n .searchBar--k7ys_9bU .inputAffixWrapperFocused--ym85u9fT{padding-left:4px;border-color:#2893f7;border-right-width:2px!important}.inputContainer--spZyJlDc{width:300px}.input--LvcE67vF{padding:0;border:none;outline:none;color:#fff;background-color:transparent;text-overflow:ellipsis;border-radius:3px}.input--LvcE67vF::placeholder{color:rgba(255,255,255,0.25)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"searchBar\": `searchBar--k7ys_9bU`,\n\t\"inputAffixWrapper\": `inputAffixWrapper--r90ghnJb`,\n\t\"antInputPrefix\": `antInputPrefix--vr3ceVIR`,\n\t\"focus\": `focus--rcoZCXD5`,\n\t\"inputAffixWrapperFocused\": `inputAffixWrapperFocused--ym85u9fT`,\n\t\"inputContainer\": `inputContainer--spZyJlDc`,\n\t\"input\": `input--LvcE67vF`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.scrollContainer--dNX8Cn8d::-webkit-scrollbar{width:6px}.scrollContainer--dNX8Cn8d::-webkit-scrollbar-thumb{visibility:hidden;border-radius:3px;background-color:rgba(69,69,73,0.45)}.scrollContainer--dNX8Cn8d::-webkit-scrollbar-track{visibility:hidden;width:12px;background-color:rgb(140,140,140,0.2)}.scrollContainer--dNX8Cn8d:hover{background:rgba(18,21,26,0.4);box-shadow:0px 5px 10px 4px rgba(0,0,0,0.1);border-radius:6px}.scrollContainer--dNX8Cn8d:hover::-webkit-scrollbar-thumb,\n .scrollContainer--dNX8Cn8d:hover::-webkit-scrollbar-track{visibility:visible}.siteMapContainer--oPV4617W{padding-top:10px;column-count:5}.siteMapContainer--oPV4617W .groupWrapper--vg8DzjpO{margin:0 30px;page-break-inside:avoid;break-inside:avoid}.siteMapContainer--oPV4617W .groupWrapper--vg8DzjpO .group--ojLUh6U2{margin:0;padding:9px 0 58px}.siteMapContainer--oPV4617W .groupWrapper--vg8DzjpO .item--UDV8jW76{list-style-type:none;font-size:12px;padding:5px 0px}.siteMapContainer--oPV4617W .groupWrapper--vg8DzjpO .item--UDV8jW76 > eo-link{cursor:pointer;color:rgba(255,255,255,0.65)}.siteMapContainer--oPV4617W .groupWrapper--vg8DzjpO .item--UDV8jW76 > eo-link:hover{color:var(--antd-link-hover-color)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"scrollContainer\": `scrollContainer--dNX8Cn8d`,\n\t\"siteMapContainer\": `siteMapContainer--oPV4617W`,\n\t\"groupWrapper\": `groupWrapper--vg8DzjpO`,\n\t\"group\": `group--ojLUh6U2`,\n\t\"item\": `item--UDV8jW76`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","export class JsonStorage {\n constructor(\n private storage: Storage,\n private prefix: string = \"brick-next-\"\n ) {}\n\n setItem<T = any>(name: string, value: T): void {\n this.storage.setItem(this.prefix + name, JSON.stringify(value));\n }\n\n getItem<T = any>(name: string): T {\n return JSON.parse(this.storage.getItem(this.prefix + name) as string) as T;\n }\n\n removeItem(name: string): void {\n return this.storage.removeItem(this.prefix + name);\n }\n\n clear(): void {\n return this.storage.clear();\n }\n}\n"],"names":["props","React","_extends","xmlns","width","height","viewBox","fill","fillRule","d","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","undefined","WrappedLink","wrapBrick","WrappedGeneralIcon","SearchBar","useTranslation","NS","focus","setFocus","searchInputRef","element","Promise","resolve","then","e","className","classNames","styles","searchBar","inputContainer","role","onClick","stopPropagation","inputAffixWrapper","inputAffixWrapperFocused","antInputPrefix","icon","lib","theme","input","placeholder","t","K","SEARCH_BY_NAME_KEYWORD","onChange","target","value","onKeyDown","key","keyCode","which","includes","preventDefault","onFocus","handleFocus","onBlur","handleBlur","ref","getImageUrl","app","defaultAppIcon","_window$PUBLIC_ROOT","icons","large","test","concat","window","STANDALONE_MICRO_APPS","standaloneMode","PUBLIC_ROOT","replace","id","currentVersion","PUBLIC_CDN","DesktopApp","_ref","onAddClick","isFavorite","showAddIcon","size","installing","installStatus","appLink","iconBackground","circle","square","url","homepage","appIcon","src","addIcon","circleIcon","squareIcon","appName","style","paddingRight","localeName","DesktopDirContext","useDesktopDirContext","DesktopDir","setDesktopDir","dirLink","dir","name","items","coordinates","x","clientX","y","clientY","activeIndex","slice","map","item","type","dirName","DesktopCustom","responsive","href","DeferredService","constructor","task","_defineProperty","this","schedulePrefetch","_this","preFetchScheduled","preFetchLaunchpadInfo","_asyncToGenerator","preFetchId","fetch","apply","arguments","requestIdleCallback","setTimeout","eager","promise","cancelIdleCallback","clearTimeout","isFetching","catch","error","console","firstFetchPromise","finally","launchpadService","_auth$getAuth","auth","getAuth","org","settings","columns","rows","microApps","desktops","siteSort","result","LaunchpadApi_listCollection","page","pageSize","interceptorParams","ignoreLoadingBar","noAbortOnRouteChange","list","setFavorites","favoritesLoaded","launchpadInfo","LaunchpadApi_getLaunchpadInfo","_loop","storyboard","locales","ns","Object","entries","forEach","_ref3","lang","resources","i18n","addResourceBundle","getFixedT","keys","removeResourceBundle","storyboards","baseInfo","_objectSpread","launchpad","filter","Boolean","initValue","loaded","storage","JsonStorage","localStorage","deferredLaunchpadInfo","doFetchLaunchpadInfo","deferredFavorites","doFetchFavorites","init","runtime","getRuntime","getDesktops","getCurrentApp","getLaunchpadSettings","getLaunchpadSiteMap","customList","desktop","i","flat","status","setMicroApps","setMaxVisitorLength","maxVisitorLength","preFetchFavorites","fetchFavoriteList","_this2","favoriteList","fetchLaunchpadInfo","getBaseInfo","getFavoritesLength","length","typeAdaptor","_list$filter","filteredFavoriteList","v","_v$launchpadCollectio","launchpadCollection","syncValidRecentlyVisitor","getAllVisitors","some","f","setAllVisitors","setAsFavorite","params","LaunchpadApi_createCollection","deleteFavorite","LaunchpadApi_deleteCollection","microAppId","customItemId","getItem","storageKey","find","getItemIndex","findIndex","hasItem","setItem","visitors","index","splice","unshift","pop","pushVisitor","getVisitor","getRealDesktopItem","_item$launchpadCollec","custom","setFavoriteAsVisitor","_item$launchpadCollec2","data","getSitemapList","curMicroApps","internal","siteMapList","apps","row","pick","DesktopCell","addItemToFavorite","Dialog","show","title","content","contentStyle","zIndex","_props$onSetAsFavorit","onSetAsFavorite","call","cellWrapper","positionLeft","position","cellItem","active","handleAppClick","handleCustomClick","LaunchpadSettingsContext","useLaunchpadSettingsContext","Desktop","padding","arrowWidthPercent","desktopCount","gridTemplateColumns","gridTemplateRows","FavoriteDesktopCell","_omit","_item$launchpadCollec10","_item$launchpadCollec11","disabled","useMemo","realLink","_item$launchpadCollec7","_item$launchpadCollec8","_item$launchpadCollec9","link","baseUrl","document","baseURI","startsWith","_item$launchpadCollec4","_item$launchpadCollec5","_item$launchpadCollec6","_item$launchpadCollec3","open","omit","fontSize","LeacySiteMap","_props$categoryList","useEffect","_props$onLoad","onLoad","scrollContainer","containerStyle","onWheel","siteMapContainer","categoryList","_item$apps","groupWrapper","group","handleClick","SiteMap","forwardRef","ModeType","remberMode","Sitemap","MyDesktop","recentlyVisitedList","useState","setFavoriteList","isLoading","setIsLoading","mode","setMode","siteMapRef","createRef","deskContainerRef","useRef","siteMapHeight","setSiteMapHeight","getFavoriteList","_x","handleMode","handleOnSetAsFavorite","handleSiteMapLoad","siteMap","current","deskContainer","siteMapDom","getBoundingClientRect","bottom","top","renderRecentlyVisited","visited","renderMyFavorites","section","favorites","spin","spinning","isEmpty","emptyTips","marginLeft","favoriteContainer","renderSiteMap","_launchpadService$get","overflow","flex","modeWrapper","header","Favorities","modeIcon","category","settingsContainer","rememberedDesktopCursor","DesktopSlider","desktopCursor","setDesktopCursor","appCursor","setAppCursor","mapItemToDesktop","transformCustomItem","validItems","id2app","reduce","acc","set","Map","has","get","push","delete","chunk","filteredDesktop","q","lowerQ","toLowerCase","lockRef","throttledSetDesktopCursor","slideLeft","slideRight","onKeydown","event","currentDesktop","cell","getHistory","Math","floor","innerWidth","innerHeight","offset","next","addEventListener","removeEventListener","deltaXRef","deltaYRef","responsibleRef","resetDeltaTimeoutRef","sliderChildrenLength","deltaX","deltaY","tryToSlideByWheel","axisRef","abs","threshold","desktopSlider","filtered","desktopSelector","selectorSeparator","desktopName","handleSlideTo","desktopList","transition","filteredList","arrowLeft","available","arrowButton","arrowRight","DesktopDirContent","entering","setEntering","translateX","documentElement","clientWidth","translateY","clientHeight","rowsInDir","ceil","CSSTransition","in","timeout","appear","onEntering","handleEntering","dirContainer","transform","dirContent","WrappedIcon","Launchpad","getFilterMicroApps","setQ","desktopDir","loading","setLoading","startFetchLaunchpadInfo","_props$onWillClose","onWillClose","handleHttpError","_props$onWillClose2","Provider","loadingWrapper","enter","fadeEnter","enterActive","fadeEnterActive","exit","fadeExit","exitActive","fadeExitActive","exitDone","fadeExitDone","launchpadContainer","LaunchpadWrapper","fadeIn","setFadeIn","onExited","_props$onClose","onClose","handleWillClose","LaunchpadPortal","elem","createElement","body","appendChild","removeChild","visible","createPortal","LaunchpadButton","setVisible","handleLaunchpadWillClose","useCallback","toggleLaunchpadEffect","listen","hotkeys","preVisble","curVisble","unbind","openLaunchpad","LaunchpadSvg","handleLaunchpadClose","en","zh","___CSS_LOADER_EXPORT___","module","toString","prefix","JSON","stringify","parse","removeItem","clear"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"chunks/3532.c0eeabdd.js","mappings":"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","sources":["webpack:///./src/images/launchpad.svg","webpack:///./src/launchpad/SearchBar/SearchBar.module.css?483e","webpack:///./src/launchpad/common/wrapBrick.tsx","webpack:///./src/launchpad/SearchBar/SearchBar.tsx","webpack:///./src/launchpad/DesktopCell/DesktopCell.module.css?0d52","webpack:///./src/launchpad/DesktopApp/DesktopApp.module.css?89de","webpack:///./src/launchpad/utils/getImageUrl.tsx","webpack:///./src/launchpad/DesktopApp/DesktopApp.tsx","webpack:///./src/launchpad/DesktopDirContext.ts","webpack:///./src/launchpad/DesktopDir/DesktopDir.module.css?ef5b","webpack:///./src/launchpad/DesktopDir/DesktopDir.tsx","webpack:///./src/launchpad/DesktopCustom/DesktopCustom.module.css?b0be","webpack:///./src/launchpad/DesktopCustom/DesktopCustom.tsx","webpack:///./src/shared/DeferredService.ts","webpack:///./src/launchpad/LaunchpadService.ts","webpack:///./src/launchpad/DesktopCell/DesktopCell.tsx","webpack:///./src/launchpad/LaunchpadSettingsContext.ts","webpack:///./src/launchpad/Desktop/Desktop.module.css?26dc","webpack:///./src/launchpad/Desktop/Desktop.tsx","webpack:///./src/launchpad/DesktopSlider/DesktopSlider.module.css?8883","webpack:///./src/launchpad/MyDesktop/MyDesktop.module.css?82d4","webpack:///./src/launchpad/FavoriteDesktopCell/FavoriteDesktopCell.module.css?3e83","webpack:///./src/launchpad/FavoriteDesktopCell/FavoriteDesktopCell.tsx","webpack:///./src/launchpad/site-map/SiteMap.module.css?cc0f","webpack:///./src/launchpad/site-map/SiteMap.tsx","webpack:///./src/launchpad/MyDesktop/MyDesktop.tsx","webpack:///./src/launchpad/DesktopSlider/desktopCursor.ts","webpack:///./src/launchpad/DesktopSlider/DesktopSlider.tsx","webpack:///./src/launchpad/DesktopDirContent/DesktopDirContent.module.css?8ba4","webpack:///./src/launchpad/DesktopDirContent/DesktopDirContent.tsx","webpack:///./src/launchpad/Launchpad/Launchpad.module.css?c690","webpack:///./src/launchpad/Launchpad/Launchpad.tsx","webpack:///./src/launchpad/LaunchpadWrapper/LaunchpadWrapper.module.css?ec6f","webpack:///./src/launchpad/LaunchpadWrapper/LaunchpadWrapper.tsx","webpack:///./src/launchpad/LaunchpadPortal/LaunchpadPortal.tsx","webpack:///./src/launchpad/LaunchpadButton/LaunchpadButton.tsx","webpack:///./src/launchpad/i18n.ts","webpack:///./src/launchpad/LaunchpadButton/LaunchpadButton.shadow.css","webpack:///./src/launchpad/Desktop/Desktop.module.css","webpack:///./src/launchpad/DesktopApp/DesktopApp.module.css","webpack:///./src/launchpad/DesktopCell/DesktopCell.module.css","webpack:///./src/launchpad/DesktopCustom/DesktopCustom.module.css","webpack:///./src/launchpad/DesktopDir/DesktopDir.module.css","webpack:///./src/launchpad/DesktopDirContent/DesktopDirContent.module.css","webpack:///./src/launchpad/DesktopSlider/DesktopSlider.module.css","webpack:///./src/launchpad/FavoriteDesktopCell/FavoriteDesktopCell.module.css","webpack:///./src/launchpad/Launchpad/Launchpad.module.css","webpack:///./src/launchpad/LaunchpadWrapper/LaunchpadWrapper.module.css","webpack:///./src/launchpad/MyDesktop/MyDesktop.module.css","webpack:///./src/launchpad/SearchBar/SearchBar.module.css","webpack:///./src/launchpad/site-map/SiteMap.module.css","webpack:///../../src/JsonStorage.ts"],"sourcesContent":["import * as React from \"react\";\nconst SvgLaunchpad = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={16} height={16} viewBox=\"0 0 16 16\" {...props}><g fill=\"currentColor\" fillRule=\"nonzero\"><path d=\"M0 0h4v4H0zM0 6h4v4H0zM6 0h4v4H6zM6 6h4v4H6zM12 0h4v4h-4zM12 6h4v4h-4zM0 12h4v4H0zM6 12h4v4H6zM12 12h4v4h-4z\" /></g></svg>;\nexport default SvgLaunchpad;","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./SearchBar.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./SearchBar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { wrapBrick } from \"@next-core/react-element\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\n\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nexport const WrappedGeneralIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\n \"eo-icon\"\n);\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./SearchBar.module.css\";\nimport { WrappedGeneralIcon } from \"../common/wrapBrick.js\";\nimport { K, NS } from \"../i18n.js\";\nimport { useTranslation } from \"@next-core/i18n/react\";\nexport interface SearchBarProps {\n onChange: (value: string) => void;\n}\n\nexport function SearchBar(props: SearchBarProps): React.ReactElement {\n const { t } = useTranslation(NS);\n const [focus, setFocus] = React.useState(false);\n\n const searchInputRef = React.useCallback((element: HTMLInputElement) => {\n if (element) {\n // Wait for portal mounted first.\n Promise.resolve().then(() => {\n try {\n element.focus();\n } catch (e) {\n // Do nothing.\n }\n });\n }\n }, []);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n props.onChange(e.target.value);\n };\n\n const handleClick = (e: React.MouseEvent): void => {\n e.stopPropagation();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent): void => {\n const key =\n e.key ||\n /* istanbul ignore next: compatibility */ e.keyCode ||\n /* istanbul ignore next: compatibility */ e.which;\n if (\n [\n \"Tab\",\n \"Enter\",\n \"ArrowLeft\",\n \"ArrowUp\",\n \"ArrowRight\",\n \"ArrowDown\",\n 9,\n 13,\n 37,\n 38,\n 39,\n 40,\n ].includes(key)\n ) {\n e.preventDefault();\n }\n };\n\n const handleFocus = (): void => {\n setFocus(true);\n };\n\n const handleBlur = (): void => {\n setFocus(false);\n };\n\n return (\n <div\n className={classNames(styles.searchBar, {\n [styles.focus]: focus,\n })}\n >\n <div\n className={styles.inputContainer}\n role=\"inputContainer\"\n onClick={handleClick}\n >\n <span\n className={classNames(styles.inputAffixWrapper, {\n [styles.inputAffixWrapperFocused]: focus,\n })}\n >\n <span className={styles.antInputPrefix}>\n <WrappedGeneralIcon icon=\"search\" lib=\"antd\" theme=\"outlined\" />\n </span>\n <input\n role=\"input\"\n className={styles.input}\n placeholder={t(K.SEARCH_BY_NAME_KEYWORD) as string}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n ref={searchInputRef}\n />\n </span>\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopCell.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopCell.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopApp.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopApp.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { MicroApp } from \"@next-core/types\";\n\nexport function getImageUrl(app: MicroApp, defaultAppIcon: string): string {\n return app.icons && app.icons.large\n ? /^(?:https?|data):|^\\//.test(app.icons.large)\n ? app.icons.large\n : `${\n window.STANDALONE_MICRO_APPS\n ? // 如果是独立打包模式\n app.standaloneMode\n ? // 如果是独立打包模式下的standalone app, 则使用 PUBLIC_ROOT 再去掉末尾的 '-/'\n // 例如: sa-static/my-app/versions/1.1.1/webroot/-/micro-apps/my-app/large.png (没设置cdn)\n // 例如: https://cdn-air.uwintech.cn/next/sa-static/my-app/versions/1.1.1/webroot/-/micro-apps/my-app/large.png (设置了cdn)\n `${window.PUBLIC_ROOT?.replace(/-\\/$/, \"\")}${app.id}/versions/${\n app.currentVersion\n }/webroot/-/micro-apps/${app.id}/${app.icons.large}`\n : // 如果是独立打包模式下的普通app,则使用PUBLIC_CDN + 默认前缀micro-apps\n `${window.PUBLIC_CDN || \"\"}micro-apps/${app.id}/${\n app.icons.large\n }`\n : // 非独立打包应用使用旧模式进行设置\n `${window.PUBLIC_ROOT || \"\"}micro-apps/${app.id}/${\n app.icons.large\n }`\n }`\n : defaultAppIcon;\n}\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { MicroApp } from \"@next-core/types\";\nimport styles from \"./DesktopApp.module.css\";\nimport defaultAppIcon from \"../../images/default-app-icon.png\";\nimport { getImageUrl } from \"../utils/getImageUrl.js\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport { GeneralIcon, GeneralIconProps } from \"@next-bricks/icons/general-icon\";\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nconst WrappedGeneralIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\ninterface DesktopAppProps {\n app: MicroApp;\n isFavorite?: boolean;\n showAddIcon?: boolean;\n onAddClick?: () => void;\n onClick?: () => void;\n size?: string;\n}\n\nexport function DesktopApp({\n app,\n onAddClick,\n onClick,\n isFavorite,\n showAddIcon,\n size,\n}: DesktopAppProps): React.ReactElement {\n const installing = app.installStatus === \"running\";\n\n const handleAppClick = (e: React.MouseEvent): void => {\n e.stopPropagation();\n if (installing) {\n e.preventDefault();\n }\n onClick?.();\n };\n\n const handleAddIconClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onAddClick?.();\n };\n\n return (\n <>\n <WrappedLink\n className={classNames(\n styles.appLink,\n styles[size as string],\n app.iconBackground === \"circle\" ? styles.circle : styles.square,\n {\n [styles.installing]: installing,\n }\n )}\n url={app.homepage}\n onClick={handleAppClick}\n >\n <img\n className={styles.appIcon}\n src={getImageUrl(app, defaultAppIcon)}\n />\n\n {showAddIcon && isFavorite && (\n <WrappedGeneralIcon\n className={classNames(\n styles.addIcon,\n app.iconBackground === \"circle\"\n ? styles.circleIcon\n : styles.squareIcon\n )}\n icon=\"plus\"\n lib=\"antd\"\n theme=\"outlined\"\n onClick={handleAddIconClick}\n />\n )}\n </WrappedLink>\n <span className={styles.appName}>\n {installing && (\n <WrappedGeneralIcon\n style={{ paddingRight: 5 }}\n icon=\"loading-3-quarters\"\n lib=\"antd\"\n theme=\"outlined\"\n />\n )}\n {app.localeName}\n </span>\n </>\n );\n}\n","import React from \"react\";\nimport { NormalizedDesktopDir } from \"./interfaces.js\";\n\nexport interface DirWithCoordinates {\n dir: NormalizedDesktopDir;\n coordinates: {\n x: number;\n y: number;\n };\n activeIndex: number;\n}\n\nexport interface ContextOfDesktopDir {\n desktopDir?: DirWithCoordinates;\n setDesktopDir?: React.Dispatch<DirWithCoordinates | undefined>;\n}\n\nexport const DesktopDirContext = React.createContext<ContextOfDesktopDir>({});\n\nexport const useDesktopDirContext = (): ContextOfDesktopDir =>\n React.useContext(DesktopDirContext);\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopDir.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopDir.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport { useDesktopDirContext } from \"../DesktopDirContext.js\";\nimport styles from \"./DesktopDir.module.css\";\nimport defaultAppIcon from \"../../images/default-app-icon.png\";\nimport { NormalizedDesktopDir } from \"../interfaces.js\";\nimport { getImageUrl } from \"../utils/getImageUrl.js\";\nimport { MicroApp } from \"@next-core/types\";\n\nexport function DesktopDir(props: NormalizedDesktopDir): React.ReactElement {\n const { setDesktopDir } = useDesktopDirContext();\n const handleDirClick = (e: React.MouseEvent): void => {\n e.stopPropagation();\n // 记录鼠标点击的位置,在文件夹展开时以此为原点做动画。\n setDesktopDir?.({\n dir: {\n name: props.name,\n items: props.items,\n },\n coordinates: {\n x: e.clientX,\n y: e.clientY,\n },\n activeIndex: -1,\n });\n };\n\n return (\n <>\n <a\n className={classNames(styles.dirLink, {\n [styles[props.size as string]]: !!props.size,\n })}\n onClick={handleDirClick}\n role=\"button\"\n >\n {props.items\n .slice(0, 4)\n .map((item) =>\n item.type === \"app\" ? (\n <img\n className={styles.appIcon}\n key={item.id}\n src={getImageUrl(item.app as MicroApp, defaultAppIcon)}\n />\n ) : (\n <img\n className={styles.appIcon}\n key={item.id}\n src={defaultAppIcon}\n />\n )\n )}\n </a>\n <span className={styles.dirName}>{props.name}</span>\n </>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopCustom.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopCustom.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./DesktopCustom.module.css\";\nimport defaultAppIcon from \"../../images/default-app-icon.png\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { GeneralIcon, GeneralIconProps } from \"@next-bricks/icons/general-icon\";\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nconst WrappedGeneralIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\ninterface DesktopCustomProps {\n name: string;\n url: string;\n isFavorite?: boolean;\n showAddIcon?: boolean;\n onAddClick: () => void;\n onClick?: () => void;\n size?: string;\n responsive?: boolean;\n}\n\nexport function DesktopCustom({\n name,\n url,\n showAddIcon,\n isFavorite,\n onClick,\n onAddClick,\n size,\n responsive = true,\n}: DesktopCustomProps): React.ReactElement {\n const handleItemClick = (e: React.MouseEvent): void => {\n e.stopPropagation();\n onClick?.();\n };\n\n const handleAddIconClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onAddClick?.();\n };\n return (\n <>\n <WrappedLink\n className={classNames(\n styles.appLink,\n styles.circle,\n styles[size as string],\n {\n [styles.responsive]: responsive,\n }\n )}\n href={url}\n target=\"_blank\"\n onClick={handleItemClick}\n >\n <img className={styles.appIcon} src={defaultAppIcon} />\n {showAddIcon && isFavorite && (\n <WrappedGeneralIcon\n className={classNames(styles.addIcon, styles.circleIcon)}\n icon=\"plus-circle-filled\"\n lib=\"antd\"\n theme=\"outlined\"\n onClick={handleAddIconClick}\n />\n )}\n </WrappedLink>\n <span className={styles.appName}>{name}</span>\n </>\n );\n}\n","export class DeferredService {\n private preFetchId: number | null = null;\n private preFetchScheduled = false;\n private firstFetchPromise: Promise<unknown> | null = null;\n private isFetching = false;\n private readonly task: () => Promise<unknown>;\n\n constructor(task: () => Promise<unknown>) {\n this.task = task;\n }\n\n schedulePrefetch(): void {\n if (!this.preFetchScheduled) {\n this.preFetchScheduled = true;\n const preFetchLaunchpadInfo = async (): Promise<void> => {\n this.preFetchId = null;\n this.fetch();\n };\n // istanbul ignore if\n if (typeof window.requestIdleCallback === \"function\") {\n this.preFetchId = window.requestIdleCallback(preFetchLaunchpadInfo);\n } else {\n this.preFetchId = setTimeout(\n preFetchLaunchpadInfo\n ) as unknown as number;\n }\n }\n }\n\n fetch(eager?: boolean): Promise<unknown> {\n if (this.preFetchId) {\n // istanbul ignore if\n if (typeof window.cancelIdleCallback === \"function\") {\n cancelIdleCallback(this.preFetchId);\n } else {\n clearTimeout(this.preFetchId);\n }\n this.preFetchId = null;\n }\n\n let promise: Promise<unknown>;\n if (!this.isFetching || eager) {\n this.isFetching = true;\n promise = this.task();\n promise\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.error(error);\n this.firstFetchPromise = null;\n })\n .finally(() => {\n this.isFetching = false;\n });\n if (!this.firstFetchPromise) {\n this.firstFetchPromise = promise;\n }\n if (eager) {\n return promise;\n }\n }\n return this.firstFetchPromise!;\n }\n}\n","import { JsonStorage } from \"@next-shared/general/JsonStorage\";\nimport { MicroApp, Storyboard } from \"@next-core/types\";\nimport {\n LaunchpadApi_ListCollectionResponseItem,\n LaunchpadApi_listCollection,\n LaunchpadApi_CreateCollectionRequestBody,\n LaunchpadApi_createCollection,\n LaunchpadApi_deleteCollection,\n} from \"@next-api-sdk/user-service-sdk\";\nimport { LaunchpadApi_getLaunchpadInfo } from \"@next-api-sdk/micro-app-standalone-sdk\";\nimport { getRuntime } from \"@next-core/runtime\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport { pick } from \"lodash\";\nimport { i18n } from \"@next-core/i18n\";\nimport { LaunchpadSettings } from \"./LaunchpadSettingsContext.js\";\nimport {\n DesktopData,\n DesktopItemApp,\n DesktopItemCustom,\n SiteMapItem,\n} from \"./interfaces.js\";\nimport { DeferredService } from \"../shared/DeferredService.js\";\n\ninterface LaunchpadBaseInfo {\n settings: LaunchpadSettings;\n microApps: MicroApp[];\n desktops: DesktopData[];\n siteSort: SiteMapItem[];\n}\n\nexport class LaunchpadService {\n readonly storageKey = `launchpad-recently-visited:${(\n auth.getAuth() as Record<string, string>\n )?.org}`;\n private storage: JsonStorage;\n private favoriteList: LaunchpadApi_ListCollectionResponseItem[] = [];\n private filteredFavoriteList: LaunchpadApi_ListCollectionResponseItem[] = [];\n private microApps: MicroApp[] = [];\n private customList: DesktopItemCustom[] = [];\n private maxVisitorLength = 7;\n private initialized = false;\n private baseInfo: LaunchpadBaseInfo = {\n settings: {\n columns: 7,\n rows: 4,\n },\n microApps: [],\n desktops: [],\n siteSort: [],\n };\n public loaded = false;\n public favoritesLoaded = false;\n\n private readonly deferredLaunchpadInfo: DeferredService;\n private readonly deferredFavorites: DeferredService;\n\n constructor() {\n this.storage = new JsonStorage(localStorage);\n this.deferredLaunchpadInfo = new DeferredService(this.doFetchLaunchpadInfo);\n this.deferredFavorites = new DeferredService(this.doFetchFavorites);\n\n this.init();\n }\n\n init(): void {\n const runtime = getRuntime();\n this.baseInfo = {\n desktops: runtime.getDesktops() as DesktopData[],\n microApps: [runtime.getCurrentApp() as MicroApp],\n settings: runtime.getLaunchpadSettings(),\n siteSort: runtime.getLaunchpadSiteMap() as SiteMapItem[],\n };\n\n this.initValue();\n }\n\n private initValue(): void {\n this.customList = this.baseInfo.desktops\n .map((desktop) => desktop.items.filter((i) => i.type === \"custom\"))\n .flat() as DesktopItemCustom[];\n\n const microApps = this.baseInfo.microApps\n // 兼容较老版本接口未返回 `status` 的情况。\n .filter(\n (item) =>\n item &&\n (!item.status ||\n item.status === \"enabled\" ||\n item.status === \"developing\")\n );\n\n this.setMicroApps(microApps);\n }\n\n setMaxVisitorLength(value: number) {\n this.maxVisitorLength = value;\n }\n\n preFetchFavorites(): void {\n this.deferredFavorites.schedulePrefetch();\n }\n\n async fetchFavoriteList(\n eager?: boolean\n ): Promise<LaunchpadApi_ListCollectionResponseItem[]> {\n await this.deferredFavorites.fetch(eager);\n return this.favoriteList;\n }\n\n private doFetchFavorites = async (): Promise<void> => {\n const result = (\n await LaunchpadApi_listCollection(\n { page: 1, pageSize: 25 },\n {\n interceptorParams: { ignoreLoadingBar: true },\n noAbortOnRouteChange: true,\n }\n )\n ).list;\n this.setFavorites(result);\n this.favoritesLoaded = true;\n };\n\n preFetchLaunchpadInfo(): void {\n if (window.STANDALONE_MICRO_APPS) {\n this.deferredLaunchpadInfo.schedulePrefetch();\n }\n }\n\n fetchLaunchpadInfo(): Promise<unknown> {\n return this.deferredLaunchpadInfo.fetch();\n }\n\n private doFetchLaunchpadInfo = async (): Promise<void> => {\n const launchpadInfo = await LaunchpadApi_getLaunchpadInfo(\n {},\n {\n interceptorParams: { ignoreLoadingBar: true },\n noAbortOnRouteChange: true,\n }\n );\n\n for (const storyboard of launchpadInfo.storyboards as Storyboard[]) {\n const app = storyboard.app as unknown as MicroApp;\n if (app) {\n if (app.locales) {\n // Prefix to avoid conflict between brick package's i18n namespace.\n const ns = `$tmp-${app.id}`;\n // Support any languages in `app.locales`.\n Object.entries(app.locales).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, ns, resources);\n });\n // Use `app.name` as the fallback `app.localeName`.\n app.localeName = i18n.getFixedT(null, ns)(\"name\", app.name) as string;\n // Remove the temporary i18n resource bundles.\n Object.keys(app.locales).forEach((lang) => {\n i18n.removeResourceBundle(lang, ns);\n });\n } else {\n app.localeName = app.name;\n }\n }\n }\n\n this.baseInfo = {\n ...launchpadInfo,\n settings: (launchpadInfo.settings as Record<string, unknown>)\n .launchpad as LaunchpadSettings,\n microApps: (launchpadInfo.storyboards as Storyboard[])\n .map((storyboard) => storyboard.app)\n .filter(Boolean) as unknown as MicroApp[],\n } as unknown as LaunchpadBaseInfo;\n this.initValue();\n this.loaded = true;\n };\n\n getBaseInfo(): LaunchpadBaseInfo {\n return this.baseInfo;\n }\n\n getFavoritesLength(): number {\n return this.favoriteList.length;\n }\n\n typeAdaptor(type: string): string {\n if (type === \"customItem\") {\n return \"custom\";\n }\n\n if (type === \"microApp\") {\n return \"app\";\n }\n\n return type;\n }\n\n setFavorites(list: LaunchpadApi_ListCollectionResponseItem[]): void {\n this.filteredFavoriteList =\n list?.filter(\n (v) =>\n v.launchpadCollection?.type === \"microApp\" ||\n (v.launchpadCollection as any).type === \"customItem\"\n ) ?? [];\n\n this.favoriteList = list;\n }\n\n setMicroApps(microApps: MicroApp[]) {\n this.microApps = microApps;\n this.syncValidRecentlyVisitor();\n }\n\n syncValidRecentlyVisitor() {\n if (window.STANDALONE_MICRO_APPS) {\n // standalone模式时,刷新页面不会请求launchpad数据,拿不全microApps和customList,所以 syncValidRecentlyVisitor 直接返回\n return;\n }\n const visitors = this.getAllVisitors();\n const result = visitors.filter((v) => {\n if (v.type === \"app\") {\n return this.microApps.some((app) => app.id === v.id);\n } else {\n return this.customList.some((f) => f.type === v.type && f.id === v.id);\n }\n });\n\n this.setAllVisitors(result);\n }\n\n async setAsFavorite(params: LaunchpadApi_CreateCollectionRequestBody) {\n await LaunchpadApi_createCollection(params, {\n interceptorParams: { ignoreLoadingBar: true },\n });\n }\n\n async deleteFavorite(id: string | number) {\n await LaunchpadApi_deleteCollection(id, {\n interceptorParams: { ignoreLoadingBar: true },\n });\n }\n\n isFavorite(item: DesktopItemApp | DesktopItemCustom) {\n if (item.type === \"app\") {\n return this.filteredFavoriteList.some(\n (f) =>\n this.typeAdaptor((f.launchpadCollection as any).type) === \"app\" &&\n f.microAppId === item.id\n );\n }\n\n return this.filteredFavoriteList.some(\n (f) =>\n this.typeAdaptor((f.launchpadCollection as any).type) === \"custom\" &&\n (f as any).customItemId === item.id\n );\n }\n\n getItem(\n type: \"app\" | \"custom\",\n id: string\n ): DesktopItemApp | DesktopItemCustom {\n return (this.storage.getItem(this.storageKey) || []).find(\n (v: DesktopItemApp | DesktopItemCustom) => v.id === id && v.type === type\n );\n }\n\n getItemIndex(type: \"app\" | \"custom\", id: string): number {\n return (this.storage.getItem(this.storageKey) || []).findIndex(\n (v: DesktopItemApp | DesktopItemCustom) => v.id === id && v.type === type\n );\n }\n\n hasItem(type: \"app\" | \"custom\", id: string): boolean {\n return (this.storage.getItem(this.storageKey) || []).some(\n (v: DesktopItemApp | DesktopItemCustom) => v.id === id && v.type === type\n );\n }\n\n getAllVisitors(): (DesktopItemApp | DesktopItemCustom)[] {\n return this.storage.getItem(this.storageKey) || [];\n }\n\n setItem(\n type: \"app\" | \"custom\",\n item: DesktopItemApp | DesktopItemCustom\n ): void {\n const visitors = this.getAllVisitors();\n\n if (!this.hasItem(type, item.id)) {\n visitors.unshift(item);\n } else {\n const index = this.getItemIndex(type, item.id);\n visitors.splice(index, 1);\n visitors.unshift(item);\n }\n\n // 默认只保存一行\n if (visitors.length > this.maxVisitorLength) {\n visitors.pop();\n }\n this.setAllVisitors(visitors);\n }\n\n setAllVisitors(visitors: (DesktopItemApp | DesktopItemCustom)[]) {\n this.storage.setItem(this.storageKey, visitors);\n }\n\n pushVisitor(\n type: \"app\" | \"custom\",\n item: MicroApp | DesktopItemCustom\n ): void {\n if (type === \"app\") {\n const app = item as MicroApp;\n item = {\n id: app.id,\n app: {\n name: app.name,\n icons: app.icons,\n localeName: app.localeName,\n id: app.id,\n homepage: app.homepage,\n currentVersion: app.currentVersion,\n standaloneMode: (app as MicroApp & { standaloneMode: boolean })\n .standaloneMode,\n } as MicroApp,\n type: \"app\",\n } as any;\n }\n\n this.setItem(type, item as DesktopItemApp | DesktopItemCustom);\n }\n\n getVisitor(\n type: \"app\" | \"custom\",\n id: string\n ): DesktopItemApp | DesktopItemCustom | undefined {\n return this.getItem(type, id);\n }\n\n getRealDesktopItem(\n item: LaunchpadApi_ListCollectionResponseItem\n ): MicroApp | DesktopItemCustom {\n if (item.launchpadCollection?.type === \"microApp\") {\n return this.microApps.find(\n (app) => app.id === item.microAppId\n ) as MicroApp;\n } else {\n return this.customList.find(\n (custom) => custom.id === (item as any).customItemId\n ) as DesktopItemCustom;\n }\n }\n\n setFavoriteAsVisitor(item: LaunchpadApi_ListCollectionResponseItem) {\n const type = this.typeAdaptor(item.launchpadCollection?.type as string);\n if (type === \"link\") return;\n const data = this.getRealDesktopItem(item);\n if (data) {\n this.pushVisitor(type as \"custom\" | \"app\", data);\n }\n }\n\n getSitemapList() {\n const curMicroApps = this.baseInfo.microApps.filter((app) => !app.internal);\n const siteMapList = this.baseInfo.siteSort;\n\n return siteMapList?.map((item) => ({\n ...item,\n apps: (item.apps || []).map((row) => {\n const find = curMicroApps.find((item) => item.id === row.id) || {};\n return {\n ...row,\n ...pick(find, [\n \"name\",\n \"icons\",\n \"localeName\",\n \"homepage\",\n \"currentVersion\",\n \"standaloneMode\",\n ]),\n };\n }),\n }));\n }\n}\n\nconst service = new LaunchpadService();\nexport const launchpadService = service;\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./DesktopCell.module.css\";\nimport { DesktopApp } from \"../DesktopApp/DesktopApp.js\";\nimport { DesktopDir } from \"../DesktopDir/DesktopDir.js\";\nimport { DesktopCustom } from \"../DesktopCustom/DesktopCustom.js\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport { Dialog } from \"@next-core/runtime\";\nimport {\n DesktopItem,\n DesktopItemApp,\n DesktopItemCustom,\n} from \"../interfaces.js\";\nimport { MicroApp } from \"@next-core/types\";\n\ninterface DesktopCellProps {\n item: DesktopItem;\n active?: boolean;\n showAddIcon?: boolean;\n position?: \"left\" | \"center\" | \"right\";\n onSetAsFavorite?: () => void;\n isFavorite?: boolean;\n size?: string;\n}\n\nexport function DesktopCell(props: DesktopCellProps): React.ReactElement {\n const checkFavoriteUpperLimit = () => {\n const favoriteLength = launchpadService.getFavoritesLength();\n if (favoriteLength >= 25) {\n Dialog.show({\n title: \"收藏数量已达上限\",\n content: \"当前收藏链接数量已达上限(25个),请删除部分链接后再添加。\",\n contentStyle: {\n zIndex: 5001,\n },\n });\n\n return false;\n }\n return true;\n };\n\n const addItemToFavorite = async () => {\n if (checkFavoriteUpperLimit()) {\n let params: any;\n if (props.item.type === \"app\") {\n const app = props.item as Partial<DesktopItemApp>;\n params = {\n microAppId: app.id,\n launchpadCollection: {\n type: \"microApp\",\n name: (app.app as MicroApp).name,\n },\n };\n } else {\n const custom = props.item as DesktopItemCustom;\n params = {\n customItemId: custom.id,\n launchpadCollection: {\n type: \"customItem\",\n name: custom.name,\n },\n };\n }\n try {\n await launchpadService.setAsFavorite(params);\n props?.onSetAsFavorite?.();\n } catch (e) {\n // Noting to cache\n }\n }\n };\n\n const handleAppClick = () => {\n const app = (props.item as DesktopItemApp).app;\n launchpadService.pushVisitor(\"app\", app as MicroApp);\n };\n\n const handleCustomClick = () => {\n const custom = props.item as DesktopItemCustom;\n launchpadService.pushVisitor(\"custom\", custom);\n };\n\n return (\n <div\n className={classNames(styles.cellWrapper, {\n [styles.positionLeft]: props?.position === \"left\",\n })}\n >\n <div\n className={classNames(styles.cellItem, styles[props.size as string], {\n [styles.active]: props.active,\n })}\n >\n {props.item.type === \"app\" ? (\n <DesktopApp\n showAddIcon={props.showAddIcon}\n isFavorite={props.isFavorite}\n app={props.item.app as MicroApp}\n onClick={handleAppClick}\n onAddClick={addItemToFavorite}\n size={props.size}\n />\n ) : props.item.type === \"custom\" ? (\n <DesktopCustom\n showAddIcon={props.showAddIcon}\n isFavorite={props.isFavorite}\n name={props.item.name}\n url={props.item.url}\n onClick={handleCustomClick}\n onAddClick={addItemToFavorite}\n size={props.size}\n />\n ) : (\n <DesktopDir\n name={props.item.name}\n items={props.item.items}\n size={props.size}\n />\n )}\n </div>\n </div>\n );\n}\n","import React from \"react\";\n\nexport interface LaunchpadSettings {\n columns: number;\n rows: number;\n}\n\nexport const LaunchpadSettingsContext = React.createContext<LaunchpadSettings>({\n columns: 7,\n rows: 4,\n});\n\nexport const useLaunchpadSettingsContext = (): LaunchpadSettings =>\n React.useContext(LaunchpadSettingsContext);\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Desktop.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Desktop.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { DesktopCell } from \"../DesktopCell/DesktopCell.js\";\nimport { useLaunchpadSettingsContext } from \"../LaunchpadSettingsContext.js\";\nimport styles from \"./Desktop.module.css\";\nimport { DesktopData } from \"../interfaces.js\";\n\ninterface DesktopProps {\n desktop: DesktopData;\n desktopCount: number;\n arrowWidthPercent: number;\n activeIndex: number;\n}\n\nexport function Desktop(props: DesktopProps): React.ReactElement {\n const { columns, rows } = useLaunchpadSettingsContext();\n\n return (\n <div\n className={styles.desktop}\n style={{\n padding: `0 ${props.arrowWidthPercent / props.desktopCount}%`,\n gridTemplateColumns: `repeat(${columns},1fr)`,\n gridTemplateRows: `repeat(${rows},1fr)`,\n }}\n >\n {props.desktop.items.map((item, index) => (\n <DesktopCell\n key={index}\n item={item}\n active={index === props.activeIndex}\n />\n ))}\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopSlider.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopSlider.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./MyDesktop.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./MyDesktop.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FavoriteDesktopCell.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FavoriteDesktopCell.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useMemo } from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./FavoriteDesktopCell.module.css\";\nimport { LaunchpadApi_ListCollectionResponseItem } from \"@next-api-sdk/user-service-sdk\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport { WrappedGeneralIcon, WrappedLink } from \"../common/wrapBrick.js\";\nimport { omit } from \"lodash\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\n\ninterface FavoriteDesktopCellProps {\n item: LaunchpadApi_ListCollectionResponseItem;\n onDelete?: (item: LaunchpadApi_ListCollectionResponseItem) => void;\n}\n\nexport function FavoriteDesktopCell({\n item,\n}: FavoriteDesktopCellProps): React.ReactElement {\n const disabled = useMemo(\n () =>\n item.launchpadCollection?.type === \"microApp\"\n ? !item.microAppId\n : (item.launchpadCollection as any)?.type === \"customItem\"\n ? !(item as any)?.customItemId\n : false,\n [item]\n );\n\n const setAsVisitor = () => {\n if (item.launchpadCollection?.type === \"link\") return;\n launchpadService.setFavoriteAsVisitor(item);\n };\n const handleCellClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n setAsVisitor();\n\n if (\n (item.launchpadCollection?.link?.startsWith(\"https://\") ||\n item.launchpadCollection?.link?.startsWith(\"http://\")) &&\n !item.launchpadCollection?.link?.startsWith(document.baseURI)\n ) {\n e.preventDefault();\n window.open(item.launchpadCollection.link, \"_blank\");\n }\n };\n\n const realLink = useMemo(() => {\n const link = item.launchpadCollection?.link;\n if (item.launchpadCollection?.type === \"microApp\") return link;\n const baseUrl = document.baseURI;\n if (link?.startsWith(baseUrl)) return link?.replace(baseUrl, \"/\");\n return item.launchpadCollection?.link;\n }, [item]);\n\n return (\n <div>\n <div\n className={classNames(styles.cellWrapper, {\n [styles.disabled]: disabled,\n })}\n >\n <WrappedLink\n className={styles.link}\n url={realLink}\n onClick={handleCellClick}\n >\n <>\n <span className={classNames(styles.appLink, styles.square)}>\n <WrappedGeneralIcon\n {...((omit(item?.launchpadCollection?.icon, [\n \"prefix\",\n \"type\",\n ]) ?? {}) as GeneralIconProps)}\n style={{ fontSize: 18 }}\n />\n </span>\n <span className={styles.name}>\n {item?.launchpadCollection?.name}\n </span>\n </>\n </WrappedLink>\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./SiteMap.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./SiteMap.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { forwardRef, useEffect } from \"react\";\nimport styles from \"./SiteMap.module.css\";\nimport { MicroApp } from \"@next-core/types\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\ninterface SiteCategory {\n name: string;\n id: string;\n order: string;\n apps: {\n id?: string;\n sort?: string;\n name?: string;\n homepage?: string;\n }[];\n}\nexport interface SiteMapProps {\n categoryList: SiteCategory[];\n containerStyle?: React.CSSProperties;\n onLoad?: () => void;\n}\n\nexport function LeacySiteMap(\n props: SiteMapProps,\n ref: any\n): React.ReactElement {\n const handleWheel = (e: React.WheelEvent) => {\n e.stopPropagation();\n };\n\n useEffect(() => {\n props.onLoad?.();\n }, []);\n\n const handleClick = (app: MicroApp): void => {\n launchpadService.pushVisitor(\"app\", app);\n };\n\n return (\n <div\n className={styles.scrollContainer}\n style={props.containerStyle}\n ref={ref}\n onWheel={handleWheel}\n >\n <div className={styles.siteMapContainer}>\n {props.categoryList?.map((item) => (\n <div className={styles.groupWrapper} key={item.name}>\n <div>{item.name}</div>\n <ul className={styles.group}>\n {item.apps?.map((row, index) => (\n <li className={styles.item} key={index}>\n <WrappedLink\n type=\"plain\"\n url={row.homepage}\n onClick={() => handleClick(row as MicroApp)}\n >\n {row.name}\n </WrappedLink>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nexport const SiteMap = forwardRef(LeacySiteMap);\n","import React, { createRef, useEffect, useMemo, useRef, useState } from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport { GeneralIcon, GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport type { LaunchpadApi_ListCollectionResponseItem } from \"@next-api-sdk/user-service-sdk\";\nimport classNames from \"classnames\";\nimport { isEmpty } from \"lodash\";\nimport { DesktopCell } from \"../DesktopCell/DesktopCell.js\";\nimport styles from \"./MyDesktop.module.css\";\nimport { FavoriteDesktopCell } from \"../FavoriteDesktopCell/FavoriteDesktopCell.js\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport { SiteMap } from \"../site-map/SiteMap.js\";\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nconst WrappedGeneralIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\ninterface MyDesktopProps {\n desktopCount: number;\n arrowWidthPercent: number;\n}\n\nenum ModeType {\n Favorities = \"favorities\",\n Sitemap = \"sitemap\",\n}\n\nlet remberMode = ModeType.Sitemap;\n\nexport function MyDesktop(props: MyDesktopProps, ref: any): React.ReactElement {\n const [recentlyVisitedList] = useState(launchpadService.getAllVisitors());\n const [favoriteList, setFavoriteList] = useState<\n LaunchpadApi_ListCollectionResponseItem[]\n >([]);\n const [isLoading, setIsLoading] = useState(!launchpadService.favoritesLoaded);\n // const [firstRendered, setFirstRendered] = useState(true);\n const [mode, setMode] = useState<ModeType>(remberMode);\n const siteMapRef = createRef<HTMLDivElement>();\n const deskContainerRef = useRef<HTMLDivElement>(null);\n const [siteMapHeight, setSiteMapHeight] = useState<number>();\n\n const getFavoriteList = async (eager?: boolean): Promise<void> => {\n const favoriteList = await launchpadService.fetchFavoriteList(eager);\n setIsLoading(false);\n setFavoriteList(favoriteList);\n };\n\n const handleMode = (e: React.MouseEvent, mode: ModeType): void => {\n e.stopPropagation();\n remberMode = mode;\n setMode(mode);\n };\n useEffect(() => {\n (async () => {\n getFavoriteList();\n })();\n }, []);\n\n const handleOnSetAsFavorite = (): void => {\n getFavoriteList(true);\n };\n\n const handleSiteMapLoad = () => {\n const siteMap = siteMapRef.current;\n const deskContainer = deskContainerRef.current;\n if (siteMap && deskContainer) {\n // wait for launchpad open\n Promise.resolve().then(() => {\n const siteMapDom = siteMap.getBoundingClientRect();\n const deskContainerDom = deskContainer.getBoundingClientRect();\n const siteMapHeight = deskContainerDom.bottom - siteMapDom.top;\n\n setSiteMapHeight(siteMapHeight);\n });\n }\n };\n\n const renderRecentlyVisited = useMemo(() => {\n return (\n <div className={styles.visited}>\n <div className={styles.title}>最近访问</div>\n <div className={styles.desktop}>\n {recentlyVisitedList?.map((item, index) => (\n <DesktopCell\n size=\"small\"\n key={index}\n item={item}\n showAddIcon={true}\n isFavorite={!launchpadService.isFavorite(item)}\n onSetAsFavorite={handleOnSetAsFavorite}\n />\n ))}\n </div>\n </div>\n );\n }, [recentlyVisitedList, isLoading]);\n\n const renderMyFavorites = useMemo(() => {\n return (\n <div className={classNames([styles.section, styles.favorites])}>\n {isLoading && (\n <div className={styles.spin}>\n <WrappedGeneralIcon\n lib=\"antd\"\n icon=\"loading\"\n theme=\"outlined\"\n style={{ fontSize: \"2.5rem\" }}\n spinning\n />\n </div>\n )}\n {!isEmpty(favoriteList) ? (\n <div className={styles.favoriteContainer}>\n {favoriteList?.map((item, index) => (\n <FavoriteDesktopCell key={index} item={item} />\n ))}\n </div>\n ) : (\n !isLoading && (\n <div className={styles.emptyTips}>\n 把常用的页面链接加入收藏夹,方便快速访问 ~{\" \"}\n <WrappedLink\n url=\"/launchpad-collection\"\n style={{ marginLeft: 30 }}\n >\n 管理我的收藏\n </WrappedLink>\n </div>\n )\n )}\n </div>\n );\n }, [favoriteList, isLoading]);\n\n const renderSiteMap = useMemo(() => {\n const categoryList = launchpadService\n .getSitemapList()\n ?.filter((item) => item.apps?.length > 0);\n\n return (\n <SiteMap\n ref={siteMapRef}\n categoryList={categoryList}\n containerStyle={{\n height: siteMapHeight,\n overflow: \"auto\",\n }}\n onLoad={handleSiteMapLoad}\n />\n );\n }, [siteMapHeight]);\n\n return (\n <div\n ref={deskContainerRef}\n style={{\n flex: 1,\n padding: `0 ${\n props.desktopCount ? props.arrowWidthPercent / props.desktopCount : 10\n }%`,\n }}\n >\n {!!recentlyVisitedList?.length && renderRecentlyVisited}\n <div className={styles.modeWrapper}>\n <div className={styles.header}>\n {mode === ModeType.Favorities ? (\n <div className={styles.title}>\n {\" \"}\n 我的收藏\n <WrappedGeneralIcon\n className={styles.modeIcon}\n icon=\"launchpad-sitmap\"\n lib=\"easyops\"\n category=\"app\"\n onClick={(e) => handleMode(e, ModeType.Sitemap)}\n />\n </div>\n ) : (\n <div className={styles.title}>\n 系统地图\n <WrappedGeneralIcon\n className={styles.modeIcon}\n icon=\"launchpad-collection\"\n lib=\"easyops\"\n category=\"app\"\n onClick={(e) => handleMode(e, ModeType.Favorities)}\n />\n </div>\n )}\n {mode === ModeType.Favorities && (\n <div className={styles.settingsContainer}>\n <WrappedLink url={\"/launchpad-collection\"}>\n <WrappedGeneralIcon\n className={styles.settings}\n icon=\"launchpad-setting\"\n lib=\"easyops\"\n category=\"app\"\n />\n 管理收藏\n </WrappedLink>\n </div>\n )}\n </div>\n\n {mode === ModeType.Favorities ? renderMyFavorites : renderSiteMap}\n </div>\n </div>\n );\n}\n","// See https://github.com/facebook/jest/issues/11471\n// Open launchpad with the previous visited desktop.\nlet rememberedDesktopCursor = 0;\n\nexport function getRememberedDesktopCursor(): number {\n return rememberedDesktopCursor;\n}\n\nexport function setRememberedDesktopCursor(newValue: number): void {\n rememberedDesktopCursor = newValue;\n}\n","import React, { useEffect } from \"react\";\nimport { chunk } from \"lodash\";\nimport classNames from \"classnames\";\nimport { MicroApp } from \"@next-core/types\";\nimport { getHistory } from \"@next-core/runtime\";\nimport { Desktop } from \"../Desktop/Desktop.js\";\nimport { useLaunchpadSettingsContext } from \"../LaunchpadSettingsContext.js\";\nimport { useDesktopDirContext } from \"../DesktopDirContext.js\";\nimport styles from \"./DesktopSlider.module.css\";\nimport { MyDesktop } from \"../MyDesktop/MyDesktop.js\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport {\n getRememberedDesktopCursor,\n setRememberedDesktopCursor,\n} from \"./desktopCursor.js\";\nimport { DesktopData, DesktopItemCustom } from \"../interfaces.js\";\nimport { WrappedGeneralIcon } from \"../common/wrapBrick.js\";\n\ntype appItem = MicroApp & { type?: \"app\" | \"custom\" };\n\ninterface DesktopSliderProps {\n microApps: MicroApp[];\n q?: string;\n desktops?: DesktopData[];\n arrowWidthPercent: number;\n}\n\nexport function DesktopSlider(props: DesktopSliderProps): React.ReactElement {\n const enableMyDesktop = true;\n const [desktopCursor, setDesktopCursor] = React.useState(\n getRememberedDesktopCursor()\n );\n const [appCursor, setAppCursor] = React.useState(-1);\n const { columns, rows } = useLaunchpadSettingsContext();\n const { setDesktopDir } = useDesktopDirContext();\n const slideDuration = 400;\n\n useEffect(() => {\n enableMyDesktop && launchpadService.setMaxVisitorLength(8);\n }, [columns, enableMyDesktop]);\n const mapItemToDesktop = (apps: appItem[]): DesktopData => ({\n name: \"-\",\n items: apps.map((app) => {\n if (app.type === \"custom\") {\n return {\n id: app.id,\n name: app.name,\n url: app.homepage,\n type: \"custom\",\n app,\n };\n }\n return {\n type: \"app\",\n id: app.id,\n app,\n };\n }),\n });\n\n const transformCustomItem = (item: DesktopItemCustom): appItem => ({\n localeName: item.name,\n homepage: item.url,\n ...item,\n type: \"custom\",\n });\n\n let desktops: DesktopData[] = [];\n let validItems = props.microApps;\n\n if (typeof props?.desktops === \"object\" && props.desktops.length > 0) {\n validItems = [];\n\n const id2app = props.microApps.reduce((acc, app) => {\n acc.set(app.id, app);\n return acc;\n }, new Map<string, appItem>());\n\n desktops = props.desktops\n .map((desktop) => ({\n name: desktop.name,\n items: desktop.items\n .map((item) => {\n if (item.type === \"app\") {\n if (id2app.has(item.id)) {\n const app = id2app.get(item.id);\n validItems.push(app as MicroApp);\n id2app.delete(item.id);\n return {\n type: item.type,\n id: item.id,\n app,\n };\n }\n // ignore not found apps\n } else if (item.type === \"dir\") {\n const items = item.items\n .map((item) => {\n if (item.type === \"app\") {\n if (id2app.has(item.id)) {\n const app = id2app.get(item.id);\n validItems.push(app as MicroApp);\n id2app.delete(item.id);\n return {\n type: item.type,\n id: item.id,\n app,\n };\n }\n } else if (item.type === \"custom\") {\n validItems.push(transformCustomItem(item));\n return item;\n }\n })\n .filter(Boolean);\n // ignore empty dirs\n if (items.length > 0) {\n return {\n type: item.type,\n id: item.id,\n name: item.name,\n items,\n };\n }\n } else if (item.type === \"custom\") {\n validItems.push(transformCustomItem(item));\n return item;\n }\n })\n .filter(Boolean)\n .slice(0, columns * rows),\n }))\n // ignore empty desktops\n .filter((desktop) => desktop.items.length > 0) as DesktopData[];\n } else if (!props.desktops) {\n // 如果没有定义桌面列表(例如本地开发模式),则自动按数量切割。\n desktops = chunk(props.microApps, columns * rows).map(mapItemToDesktop);\n }\n let filteredDesktop: DesktopData = {} as DesktopData;\n if (props.q) {\n const lowerQ = props.q.toLowerCase();\n filteredDesktop = mapItemToDesktop(\n validItems\n .filter(\n (app) =>\n (app.localeName as string).toLowerCase().includes(lowerQ) ||\n app.name.toLowerCase().includes(lowerQ) ||\n app.id.toLowerCase().includes(lowerQ)\n )\n .slice(0, columns * rows)\n );\n }\n\n // When sliding desktop, reset app cursor.\n React.useEffect(() => {\n setAppCursor(-1);\n }, [desktopCursor]);\n\n // When making search, set app cursor to the first app.\n React.useEffect(() => {\n setAppCursor(\n props.q && filteredDesktop && filteredDesktop.items.length > 0 ? 0 : -1\n );\n }, [props.q]);\n\n const lockRef = React.useRef(false);\n\n const throttledSetDesktopCursor = (index: number): void => {\n if (lockRef.current) {\n return;\n }\n setRememberedDesktopCursor(index);\n setDesktopCursor(index);\n // 一次滑动一个屏幕,锁定期间内,不能继续滑动屏幕。\n lockRef.current = true;\n setTimeout(() => {\n lockRef.current = false;\n }, slideDuration);\n };\n\n const slideLeft = React.useCallback((): void => {\n if (desktopCursor > 0) {\n throttledSetDesktopCursor(desktopCursor - 1);\n }\n }, [desktopCursor]);\n\n const slideRight = React.useCallback((): void => {\n const length = desktops.length;\n if (desktopCursor < length) {\n throttledSetDesktopCursor(desktopCursor + 1);\n }\n }, [desktopCursor, desktops.length]);\n\n const handleSlideLeft = (e: React.MouseEvent): void => {\n e.stopPropagation();\n slideLeft();\n };\n\n const handleSlideRight = (e: React.MouseEvent): void => {\n e.stopPropagation();\n slideRight();\n };\n\n const handleSlideTo = (e: React.MouseEvent, index: number): void => {\n e.stopPropagation();\n if (desktopCursor !== index) {\n throttledSetDesktopCursor(index);\n }\n };\n\n // Press arrow key to select an app.\n React.useEffect(() => {\n const onKeydown = (event: KeyboardEvent): void => {\n // 第一栏为我的面板,须过滤掉(PS: 但是搜索时 desktopCursor 为0是可以的)\n if (enableMyDesktop && desktopCursor === 0 && !props.q) return;\n const key =\n event.key ||\n /* istanbul ignore next: compatibility */ event.keyCode ||\n /* istanbul ignore next: compatibility */ event.which;\n const currentDesktop = props.q\n ? filteredDesktop\n : desktops[desktopCursor - 1];\n if (key === \"Enter\" || key === 13) {\n event.preventDefault();\n if (appCursor >= 0 && appCursor < currentDesktop.items.length) {\n const cell = currentDesktop.items[appCursor];\n if (cell.type === \"app\") {\n launchpadService.pushVisitor(\"app\", cell.app as MicroApp);\n getHistory().push((cell.app as MicroApp).homepage);\n } else if (cell.type === \"custom\") {\n launchpadService.pushVisitor(\"custom\", cell);\n window.open(cell.url);\n } else if (cell.type === \"dir\") {\n // Calculate the approximate coordinates of a dir.\n const x = appCursor % columns;\n const y = Math.floor(appCursor / columns);\n setDesktopDir?.({\n activeIndex: 0,\n dir: {\n name: cell.name,\n items: cell.items,\n },\n coordinates: {\n x: (window.innerWidth * (x + 1)) / (columns + 1),\n y: (window.innerHeight * (y + 1)) / (rows + 1),\n },\n });\n }\n }\n } else {\n let offset = 0;\n if (key === \"ArrowRight\" || key === 39) {\n offset = 1;\n } else if (key === \"ArrowLeft\" || key === 37) {\n offset = appCursor === -1 ? currentDesktop.items.length : -1;\n } else if (key === \"ArrowDown\" || key === 40) {\n offset = appCursor === -1 ? 1 : columns;\n } else if (key === \"ArrowUp\" || key === 38) {\n offset = appCursor === -1 ? currentDesktop.items.length : -columns;\n }\n if (offset !== 0) {\n event.preventDefault();\n const next = appCursor + offset;\n if (next >= 0 && next < currentDesktop.items.length) {\n setAppCursor(next);\n }\n }\n }\n };\n window.addEventListener(\"keydown\", onKeydown);\n return () => {\n window.removeEventListener(\"keydown\", onKeydown);\n };\n }, [desktopCursor, appCursor, props.q, columns, setDesktopDir]);\n\n const deltaXRef = React.useRef(0);\n const deltaYRef = React.useRef(0);\n const responsibleRef = React.useRef(true);\n\n const tryToSlideByWheel = (): void => {\n // Mac 的 trackpad,部分鼠标滚轮会有“拖尾效应”,拖尾期间,不再响应滚轮事件。\n if (!responsibleRef.current) {\n return;\n }\n // 取绝对值较大的方向\n const axisRef =\n Math.abs(deltaYRef.current) > Math.abs(deltaXRef.current)\n ? deltaYRef\n : deltaXRef;\n // 经测试,滚轮纵轴一次位移 4,横轴一次位移 40。\n const threshold = axisRef === deltaYRef ? 4 : 40;\n if (axisRef.current >= threshold) {\n slideRight();\n } else if (axisRef.current <= -threshold) {\n slideLeft();\n } else {\n return;\n }\n // 触发滑动后,重设 delta,拖尾期间,不再响应滚轮事件。\n deltaXRef.current = 0;\n deltaYRef.current = 0;\n responsibleRef.current = false;\n };\n\n const resetDeltaTimeoutRef = React.useRef<any>();\n\n const handleWheel = (e: React.WheelEvent): void => {\n deltaXRef.current += e.deltaX;\n deltaYRef.current += e.deltaY;\n tryToSlideByWheel();\n if (resetDeltaTimeoutRef.current) {\n clearTimeout(resetDeltaTimeoutRef.current);\n }\n // 间隔 50ms 内的连续滚轮事件被认作一次滚动。\n resetDeltaTimeoutRef.current = setTimeout(() => {\n deltaXRef.current = 0;\n deltaYRef.current = 0;\n responsibleRef.current = true;\n }, 50);\n };\n\n const sliderChildrenLength = desktops.length + 1;\n\n return (\n <div\n onWheel={handleWheel}\n className={classNames(styles.desktopSlider, {\n [styles.filtered]: props.q,\n })}\n >\n <div className={styles.desktopSelector}>\n {[\n ...[\n {\n name: (\n <WrappedGeneralIcon lib=\"antd\" theme=\"filled\" icon=\"home\" />\n ),\n },\n ],\n ...desktops,\n ].map((desktop, index) => (\n <React.Fragment key={index}>\n {index !== 0 && <span className={styles.selectorSeparator} />}\n <a\n className={classNames(styles.desktopName, {\n [styles.active]: desktopCursor === index,\n })}\n onClick={(e) => handleSlideTo(e, index)}\n role=\"button\"\n >\n {desktop.name}\n </a>\n </React.Fragment>\n ))}\n </div>\n <div className={styles.scrollContainer}>\n <div\n className={styles.desktopList}\n style={{\n width: `${sliderChildrenLength * 100}%`,\n marginLeft: `${desktopCursor * -100}%`,\n transition: `margin-left ${slideDuration}ms ease-out`,\n }}\n >\n {enableMyDesktop && (\n <MyDesktop\n desktopCount={desktops.length}\n arrowWidthPercent={props.arrowWidthPercent}\n />\n )}\n {desktops.map((desktop, index) => (\n <Desktop\n key={index}\n desktop={desktop}\n desktopCount={desktops.length}\n arrowWidthPercent={props.arrowWidthPercent}\n activeIndex={desktopCursor - 1 === index ? appCursor : -1}\n />\n ))}\n </div>\n {\n // Show filtered apps as a single desktop.\n props.q && (\n <div className={styles.filteredList}>\n <Desktop\n desktop={filteredDesktop}\n desktopCount={1}\n arrowWidthPercent={props.arrowWidthPercent}\n activeIndex={appCursor}\n />\n </div>\n )\n }\n </div>\n <a\n className={classNames(styles.arrowLeft, {\n [styles.available]: desktopCursor > 0,\n })}\n style={{ width: `${props.arrowWidthPercent}%` }}\n onClick={handleSlideLeft}\n role=\"button\"\n >\n <span className={styles.arrowButton}>\n <WrappedGeneralIcon lib=\"antd\" theme=\"outlined\" icon=\"left\" />\n </span>\n </a>\n <a\n className={classNames(styles.arrowRight, {\n [styles.available]: desktopCursor < sliderChildrenLength - 1,\n })}\n style={{ width: `${props.arrowWidthPercent}%` }}\n onClick={handleSlideRight}\n role=\"button\"\n >\n <span className={styles.arrowButton}>\n <WrappedGeneralIcon lib=\"antd\" theme=\"outlined\" icon=\"right\" />\n </span>\n </a>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopDirContent.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./DesktopDirContent.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { getHistory } from \"@next-core/runtime\";\nimport {\n useDesktopDirContext,\n DirWithCoordinates,\n} from \"../DesktopDirContext.js\";\nimport { DesktopCell } from \"../DesktopCell/DesktopCell.js\";\nimport { useLaunchpadSettingsContext } from \"../LaunchpadSettingsContext.js\";\nimport styles from \"./DesktopDirContent.module.css\";\nimport { MicroApp } from \"@next-core/types\";\n\ninterface DesktopDirContentProps extends DirWithCoordinates {\n arrowWidthPercent: number;\n}\n\nexport function DesktopDirContent(\n props: DesktopDirContentProps\n): React.ReactElement {\n const { columns, rows } = useLaunchpadSettingsContext();\n const { setDesktopDir } = useDesktopDirContext();\n const [entering, setEntering] = React.useState(false);\n const [appCursor, setAppCursor] = React.useState(props.activeIndex);\n\n const items = props.dir.items.slice(0, columns * rows);\n // 展开的文件夹容器的大小即 DOM 容器的大小,以其中心为基准,变换至鼠标点击的位置,\n // 以模拟出一种从鼠标点击处展开的动画效果。\n const translateX =\n props.coordinates.x - document.documentElement.clientWidth / 2;\n const translateY =\n props.coordinates.y - document.documentElement.clientHeight / 2;\n\n React.useEffect(() => {\n const onKeydown = (event: KeyboardEvent): void => {\n event.stopPropagation();\n event.preventDefault();\n const key =\n event.key ||\n /* istanbul ignore next: compatibility */ event.keyCode ||\n /* istanbul ignore next: compatibility */ event.which;\n if (key === \"Escape\" || key === 27) {\n setDesktopDir?.(undefined);\n } else if (key === \"Enter\" || key === 13) {\n if (appCursor >= 0 && appCursor < items.length) {\n const item = items[appCursor];\n if (item.type === \"app\") {\n getHistory().push((item.app as MicroApp).homepage);\n } else {\n window.open(item.url);\n }\n }\n } else {\n let offset = 0;\n if (key === \"ArrowRight\" || key === 39) {\n offset = 1;\n } else if (key === \"ArrowLeft\" || key === 37) {\n offset = appCursor === -1 ? items.length : -1;\n } else if (key === \"ArrowDown\" || key === 40) {\n offset = appCursor === -1 ? 1 : columns;\n } else if (key === \"ArrowUp\" || key === 38) {\n offset = appCursor === -1 ? items.length : -columns;\n }\n if (offset !== 0) {\n const next = appCursor + offset;\n if (next >= 0 && next < items.length) {\n setAppCursor(next);\n }\n }\n }\n };\n document.addEventListener(\"keydown\", onKeydown);\n return () => {\n document.removeEventListener(\"keydown\", onKeydown);\n };\n }, [props.dir, appCursor, columns, rows, setDesktopDir]);\n\n const handleCloseDir = (e: React.MouseEvent): void => {\n e.stopPropagation();\n setDesktopDir?.(undefined);\n };\n\n const handleEntering = (): void => {\n setEntering(true);\n };\n\n const rowsInDir = Math.ceil(items.length / columns);\n\n return (\n <CSSTransition\n in={true}\n timeout={150}\n appear={true}\n classNames=\"no-rules-class-name\"\n onEntering={handleEntering}\n >\n <div\n className={styles.dirContainer}\n onClick={handleCloseDir}\n style={{\n padding: `0 ${props.arrowWidthPercent}% 36px`,\n transform: entering\n ? \"none\"\n : `translate(${translateX}px,${translateY}px) scale(0.01)`,\n }}\n >\n <div className={styles.dirName}>{props.dir.name}</div>\n <div\n className={styles.dirContent}\n style={{\n height: `${((rowsInDir + 0.2) * 100) / (rows + 1)}%`,\n gridTemplateColumns: `repeat(${columns},1fr)`,\n gridTemplateRows: `repeat(${rowsInDir},1fr)`,\n }}\n >\n {items.map((item, index) => (\n <DesktopCell\n key={item.id}\n item={item}\n active={appCursor === index}\n />\n ))}\n </div>\n </div>\n </CSSTransition>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Launchpad.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Launchpad.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { handleHttpError } from \"@next-core/runtime\";\nimport { MicroApp } from \"@next-core/types\";\nimport { SearchBar } from \"../SearchBar/SearchBar.js\";\nimport { DesktopSlider } from \"../DesktopSlider/DesktopSlider.js\";\nimport { DesktopDirContext, DirWithCoordinates } from \"../DesktopDirContext.js\";\nimport { LaunchpadSettingsContext } from \"../LaunchpadSettingsContext.js\";\nimport { DesktopDirContent } from \"../DesktopDirContent/DesktopDirContent.js\";\nimport { launchpadService } from \"../LaunchpadService.js\";\nimport { GeneralIcon, GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport styles from \"./Launchpad.module.css\";\n\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface LaunchpadProps {\n onWillClose?: () => void;\n}\n\nexport function Launchpad(props: LaunchpadProps): React.ReactElement {\n const { settings, desktops } = launchpadService.getBaseInfo();\n\n const getFilterMicroApps = (): MicroApp[] =>\n // 过滤掉状态为开发中的小产品\n launchpadService\n .getBaseInfo()\n .microApps // 兼容较老版本接口未返回 `status` 的情况。\n .filter(\n (item) =>\n item &&\n (!item.status ||\n item.status === \"enabled\" ||\n item.status === \"developing\")\n );\n\n const [q, setQ] = React.useState(\"\");\n const [microApps, setMicroApps] = React.useState(getFilterMicroApps());\n const [desktopDir, setDesktopDir] = React.useState<DirWithCoordinates>();\n const [loading, setLoading] = React.useState(\n !!window.STANDALONE_MICRO_APPS && !launchpadService.loaded\n );\n\n React.useEffect(() => {\n const startFetchLaunchpadInfo = async (): Promise<void> => {\n try {\n await launchpadService.fetchLaunchpadInfo();\n setLoading(false);\n setMicroApps(getFilterMicroApps());\n } catch (error) {\n props.onWillClose?.();\n handleHttpError(error);\n }\n };\n if (window.STANDALONE_MICRO_APPS) {\n startFetchLaunchpadInfo();\n } else {\n launchpadService.init();\n }\n }, []);\n\n React.useEffect(() => {\n const onKeydown = (event: KeyboardEvent): void => {\n const key =\n event.key ||\n /* istanbul ignore next: compatibility */ event.keyCode ||\n /* istanbul ignore next: compatibility */ event.which;\n if (key === \"Escape\" || key === 27) {\n props.onWillClose?.();\n }\n };\n window.addEventListener(\"keydown\", onKeydown);\n return () => {\n window.removeEventListener(\"keydown\", onKeydown);\n };\n }, [props.onWillClose]);\n\n const handleChange = (value: string): void => {\n setQ(value);\n };\n\n const arrowWidthPercent = 9;\n\n return (\n <LaunchpadSettingsContext.Provider value={settings}>\n <DesktopDirContext.Provider\n value={{\n desktopDir,\n setDesktopDir,\n }}\n >\n <div className={styles.launchpad} onClick={props.onWillClose}>\n {loading ? (\n <div className={styles.loadingWrapper}>\n <WrappedIcon\n icon=\"loading\"\n lib=\"antd\"\n theme=\"outlined\"\n spinning\n />\n </div>\n ) : (\n <>\n <CSSTransition\n in={!desktopDir}\n timeout={100}\n classNames={{\n enter: styles.fadeEnter,\n enterActive: styles.fadeEnterActive,\n exit: styles.fadeExit,\n exitActive: styles.fadeExitActive,\n exitDone: styles.fadeExitDone,\n }}\n >\n <div className={styles.launchpadContainer}>\n <SearchBar onChange={handleChange} />\n <DesktopSlider\n q={q}\n microApps={microApps}\n desktops={desktops}\n arrowWidthPercent={arrowWidthPercent}\n />\n </div>\n </CSSTransition>\n {desktopDir && (\n <DesktopDirContent\n {...desktopDir}\n arrowWidthPercent={arrowWidthPercent}\n />\n )}\n </>\n )}\n </div>\n </DesktopDirContext.Provider>\n </LaunchpadSettingsContext.Provider>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./LaunchpadWrapper.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./LaunchpadWrapper.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { Launchpad, LaunchpadProps } from \"../Launchpad/Launchpad.js\";\nimport styles from \"./LaunchpadWrapper.module.css\";\n\nexport interface LaunchpadWrapperProps extends LaunchpadProps {\n onClose?: () => void;\n}\n\nexport function LaunchpadWrapper(\n props: LaunchpadWrapperProps\n): React.ReactElement {\n const [fadeIn, setFadeIn] = React.useState(true);\n\n const handleWillClose = (): void => {\n setFadeIn(false);\n props.onWillClose?.();\n };\n\n const onExited = (): void => {\n props.onClose?.();\n };\n\n return (\n <CSSTransition\n in={fadeIn}\n timeout={100}\n appear={true}\n classNames={{ ...styles }}\n onExited={onExited}\n >\n <Launchpad onWillClose={handleWillClose} />\n </CSSTransition>\n );\n}\n","import React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n LaunchpadWrapper,\n LaunchpadWrapperProps,\n} from \"../LaunchpadWrapper/LaunchpadWrapper.js\";\n\nexport interface LaunchpadPortalProps extends LaunchpadWrapperProps {\n visible: boolean;\n}\n\nexport function LaunchpadPortal(\n props: LaunchpadPortalProps\n): React.ReactPortal | null {\n const elem = document.createElement(\"div\");\n\n // Currently the `useEffect()` can't be covered when shallow rendering.\n // Ref https://github.com/airbnb/enzyme/issues/2086\n // Todo(steve): check issue status and remove ignore.\n /* istanbul ignore next */\n React.useEffect(() => {\n document.body.appendChild(elem);\n return () => {\n document.body.removeChild(elem);\n };\n });\n\n if (!props.visible) {\n return null;\n }\n\n return createPortal(\n <LaunchpadWrapper\n onWillClose={props.onWillClose}\n onClose={props.onClose}\n />,\n elem\n );\n}\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { getRuntime, getHistory } from \"@next-core/runtime\";\nimport LaunchpadSvg from \"../../images/launchpad.svg\";\nimport { LaunchpadPortal } from \"../LaunchpadPortal/LaunchpadPortal.js\";\nimport hotkeys from \"hotkeys-js\";\nimport { launchpadService } from \"../LaunchpadService.js\";\n\nexport function LaunchpadButton(): React.ReactElement {\n const [visible, setVisible] = useState(false);\n const openLaunchpad = (): void => {\n setVisible(true);\n };\n\n const handleLaunchpadClose = (): void => {\n setVisible(false);\n };\n const handleLaunchpadWillClose = useCallback((): void => {\n getRuntime().toggleLaunchpadEffect(false);\n }, []);\n\n useEffect(() => {\n const unlisten = getHistory().listen(() => {\n // 当切换页面时,关闭 Launchpad。\n handleLaunchpadWillClose();\n setVisible(false);\n });\n return unlisten;\n }, [handleLaunchpadWillClose]);\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n hotkeys.filter = function () {\n return true;\n };\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n hotkeys(\"alt+l\", (event) => {\n event.preventDefault();\n setVisible((preVisble) => {\n const curVisble = !preVisble;\n if (!curVisble) handleLaunchpadWillClose();\n return curVisble;\n });\n });\n\n return () => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n hotkeys.unbind(\"alt+l\");\n };\n }, [handleLaunchpadWillClose]);\n\n useEffect(() => {\n // 当打开/关闭 Launchpad 时,切换背景模糊,切换悬浮展开模式;\n getRuntime().toggleLaunchpadEffect(visible);\n }, [visible]);\n\n useEffect(() => {\n launchpadService.preFetchLaunchpadInfo();\n launchpadService.preFetchFavorites();\n }, []);\n\n return (\n <>\n <a role=\"button\" className=\"launchpadLink\" onClick={openLaunchpad}>\n <LaunchpadSvg />\n </a>\n <LaunchpadPortal\n visible={visible}\n onWillClose={handleLaunchpadWillClose}\n onClose={handleLaunchpadClose}\n />\n </>\n );\n}\n","export enum K {\n SEARCH_BY_NAME_KEYWORD = \"SEARCH_BY_NAME_KEYWORD\",\n}\n\nconst en: Locale = {\n SEARCH_BY_NAME_KEYWORD: \"Search by name/keyword\",\n};\n\nconst zh: Locale = {\n SEARCH_BY_NAME_KEYWORD: \"通过名称/关键字搜索\",\n};\n\nexport const NS = \"bricks/basic/launchpad\";\n\nexport const locales = { en, zh };\n\ntype Locale = { [key in K]: string };\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.launchpadLink{width:24px;height:24px;display:flex;justify-content:center;align-items:center}.launchpadLink svg{vertical-align:top;filter:grayscale(100%);opacity:0.6;width:16px;height:16px;cursor:pointer}.launchpadLink:hover svg{color:var(--color-brand-hover)!important;filter:none;opacity:1}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.desktop--LCHJxkdK{flex:1;display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(4,1fr)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"desktop\": `desktop--LCHJxkdK`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.appLink--lI6ZH8_J{display:flex;width:80px;height:80px;color:#fff;justify-content:center;align-items:center;position:relative}.appLink--lI6ZH8_J.circle--CqDDCO2g,\n .appLink--lI6ZH8_J.square--KkzxvIhL{background-color:rgba(255,255,255,0.1)}.appLink--lI6ZH8_J.small--oHLIwdUo{width:56px;height:56px}@media (max-height: 860px), (max-width: 1280px){.appLink--lI6ZH8_J.small--oHLIwdUo.appLink--lI6ZH8_J{transform:scale(0.8)}.appLink--lI6ZH8_J.small--oHLIwdUo + .appName--YMtvoP3g{font-size:14px;height:21px}}@media (max-height: 700px), (max-width: 1024px){.appLink--lI6ZH8_J.small--oHLIwdUo.appLink--lI6ZH8_J{transform:scale(0.7)}.appLink--lI6ZH8_J.small--oHLIwdUo + .appName--YMtvoP3g{font-size:12px;height:18px}}.appLink--lI6ZH8_J.circle--CqDDCO2g{border-radius:40px}.appLink--lI6ZH8_J.square--KkzxvIhL{border-radius:10px}.appLink--lI6ZH8_J.installing--wQF5JcJn{opacity:0.5}.appLink--lI6ZH8_J:hover .addIcon--EM1rukmN{display:block}.addIcon--EM1rukmN{position:absolute;font-size:20px;color:white;display:none}.circleIcon--C6tDgTcK{right:-7px;bottom:5px}.squareIcon--Vl9EHU0t{right:-3px;bottom:5px}.appLink--lI6ZH8_J:hover{color:#fff;opacity:0.6}.appIcon--CfrDjC_d{width:100%}.appName--YMtvoP3g{display:block;font-size:16px;line-height:1.5;height:24px;text-align:center}@media (max-height: 860px), (max-width: 1280px){.appLink--lI6ZH8_J{transform:scale(0.75)}.appName--YMtvoP3g{font-size:14px;height:21px}}@media (max-height: 700px), (max-width: 1024px){.appLink--lI6ZH8_J{transform:scale(0.6)}.appName--YMtvoP3g{font-size:12px;height:18px}}@media (max-height: 640px), (max-width: 900px){.appLink--lI6ZH8_J{transform:scale(0.5)}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"appLink\": `appLink--lI6ZH8_J`,\n\t\"circle\": `circle--CqDDCO2g`,\n\t\"square\": `square--KkzxvIhL`,\n\t\"small\": `small--oHLIwdUo`,\n\t\"appName\": `appName--YMtvoP3g`,\n\t\"installing\": `installing--wQF5JcJn`,\n\t\"addIcon\": `addIcon--EM1rukmN`,\n\t\"circleIcon\": `circleIcon--C6tDgTcK`,\n\t\"squareIcon\": `squareIcon--Vl9EHU0t`,\n\t\"appIcon\": `appIcon--CfrDjC_d`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.cellWrapper--NydKY8Uu{display:flex;justify-content:center;align-items:center;overflow:hidden}.cellWrapper--NydKY8Uu.positionLeft--VreE62uh{justify-content:flex-start}.cellItem--Se6r55Ne{height:144px;padding:10px;min-width:120px;display:flex;justify-content:space-between;align-items:center;flex-direction:column}.cellItem--Se6r55Ne.small--QJ2gld44{height:110px}.cellItem--Se6r55Ne.active--KANJZK5a{background-color:rgba(0,0,0,0.3);border-radius:6px}@media (max-height: 860px), (max-width: 1280px){.cellItem--Se6r55Ne{height:134px;min-width:100px;justify-content:normal}.cellItem--Se6r55Ne.small--QJ2gld44{height:110px;min-width:76px;justify-content:normal}}@media (max-height: 700px), (max-width: 1024px){.cellItem--Se6r55Ne{height:129px;min-width:80px;justify-content:normal}.cellItem--Se6r55Ne.small--QJ2gld44{height:100px;min-width:60px;justify-content:normal}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"cellWrapper\": `cellWrapper--NydKY8Uu`,\n\t\"positionLeft\": `positionLeft--VreE62uh`,\n\t\"cellItem\": `cellItem--Se6r55Ne`,\n\t\"small\": `small--QJ2gld44`,\n\t\"active\": `active--KANJZK5a`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.appLink--XvctrW4d{display:flex;width:80px;height:80px;color:#fff;justify-content:center;align-items:center;position:relative}.appLink--XvctrW4d.circle--ZQ_SHyEN,\n .appLink--XvctrW4d.square--C8X1afGq{background-color:rgba(255,255,255,0.1)}.appLink--XvctrW4d.small--Mux_F8QK{width:56px;height:56px}@media (max-height: 860px), (max-width: 1280px){.appLink--XvctrW4d.small--Mux_F8QK.appLink--XvctrW4d{transform:scale(0.8)}.appLink--XvctrW4d.small--Mux_F8QK + .appName--wsBI2CZC{font-size:14px;height:21px}}@media (max-height: 700px), (max-width: 1024px){.appLink--XvctrW4d.small--Mux_F8QK.appLink--XvctrW4d{transform:scale(0.7)}.appLink--XvctrW4d.small--Mux_F8QK + .appName--wsBI2CZC{font-size:12px;height:18px}}.appLink--XvctrW4d.circle--ZQ_SHyEN{border-radius:40px}.appLink--XvctrW4d.square--C8X1afGq{border-radius:10px}.addIcon--DHJxfx2l{position:absolute;display:none;font-size:20px;color:white}.circleIcon--NoKu04zb{right:-7px;bottom:5px}.squareIcon--JeHz5VMI{right:-3px;bottom:5px}.appLink--XvctrW4d:hover{color:#fff}.appIcon--K35YGQTl{width:100%}.appName--wsBI2CZC{display:block;font-size:16px;line-height:1.5;height:24px;text-align:center}@media (max-height: 860px), (max-width: 1280px){.appLink--XvctrW4d{transform:scale(0.75)}.appName--wsBI2CZC{font-size:14px;height:21px}}@media (max-height: 700px), (max-width: 1024px){.appLink--XvctrW4d{transform:scale(0.6)}.appName--wsBI2CZC{font-size:12px;height:18px}}@media (max-height: 640px), (max-width: 900px){.appLink--XvctrW4d{transform:scale(0.5)}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"appLink\": `appLink--XvctrW4d`,\n\t\"circle\": `circle--ZQ_SHyEN`,\n\t\"square\": `square--C8X1afGq`,\n\t\"small\": `small--Mux_F8QK`,\n\t\"appName\": `appName--wsBI2CZC`,\n\t\"addIcon\": `addIcon--DHJxfx2l`,\n\t\"circleIcon\": `circleIcon--NoKu04zb`,\n\t\"squareIcon\": `squareIcon--JeHz5VMI`,\n\t\"appIcon\": `appIcon--K35YGQTl`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.dirLink--Ezp7L944{display:grid;grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(2,1fr);width:80px;height:80px;color:#fff;justify-content:center;align-items:center;background-color:rgba(0,0,0,0.15);border-radius:10px;font-size:21px;padding:7px}.dirLink--Ezp7L944.small--S5JXqzG8{width:56px;height:56px}.dirLink--Ezp7L944 .appIcon--TdWlSNU2,\n .dirLink--Ezp7L944 .anticon{width:33px;height:33px}.dirLink--Ezp7L944 .anticon{display:flex;justify-content:center;align-items:center;overflow:hidden}.dirLink--Ezp7L944:hover{color:#fff}.dirName--zvy885aK{display:block;font-size:16px;line-height:1.5;height:24px;text-align:center}@media (max-height: 860px), (max-width: 1280px){.dirLink--Ezp7L944{transform:scale(0.75)}.dirName--zvy885aK{font-size:14px;height:21px}}@media (max-height: 700px), (max-width: 1024px){.dirLink--Ezp7L944{transform:scale(0.6)}.dirName--zvy885aK{font-size:12px;height:18px}}@media (max-height: 640px), (max-width: 900px){.dirLink--Ezp7L944{transform:scale(0.5)}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"dirLink\": `dirLink--Ezp7L944`,\n\t\"small\": `small--S5JXqzG8`,\n\t\"appIcon\": `appIcon--TdWlSNU2`,\n\t\"dirName\": `dirName--zvy885aK`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.dirContainer--yobNkKHJ{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%;position:absolute;left:0;top:0;transition:transform 150ms ease-out}.dirName--S6uKBACL{margin-bottom:40px;font-size:24px;line-height:32px;text-align:center}.dirContent--zQ9gweDn{display:grid;background-color:rgba(18,21,26,0.4);border-radius:20px;width:100%}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"dirContainer\": `dirContainer--yobNkKHJ`,\n\t\"dirName\": `dirName--S6uKBACL`,\n\t\"dirContent\": `dirContent--zQ9gweDn`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.desktopSlider--AScHB1Kd{flex:1;position:relative;padding-top:110px;padding-bottom:50px}.filtered--OQSTba5B .desktopList--nOFGKtg0,\n .filtered--OQSTba5B .arrowLeft--xkZ60z9A,\n .filtered--OQSTba5B .arrowRight--SFdZw31z,\n .filtered--OQSTba5B .desktopSelector--rYqx7sAu{display:none}.scrollContainer--PyCfQg85{width:100%;height:100%;overflow:hidden}.desktopList--nOFGKtg0{display:flex;height:100%}.filteredList--qgFcXHyE{display:flex;height:100%}.arrowLeft--xkZ60z9A,\n.arrowRight--SFdZw31z{position:absolute;top:110px;bottom:50px;justify-content:center;align-items:center;display:none}.arrowLeft--xkZ60z9A.available--yspNdU90, .arrowRight--SFdZw31z.available--yspNdU90{display:flex}.arrowLeft--xkZ60z9A{left:0}.arrowRight--SFdZw31z{right:0}.arrowButton--MHbxtjNQ{width:70px;height:70px;font-size:36px;display:flex;justify-content:center;align-items:center;color:#e6e6e6;background-color:rgba(255,255,255,0.1);border-radius:6px;visibility:hidden}.arrowLeft--xkZ60z9A:hover .arrowButton--MHbxtjNQ,\n.arrowRight--SFdZw31z:hover .arrowButton--MHbxtjNQ{visibility:visible}.desktopSelector--rYqx7sAu{position:absolute;top:0;left:0;right:0;height:110px;padding:36px 0;display:flex;justify-content:center;align-items:center;flex-wrap:wrap}.desktopName--M1GlY6Xe{display:block;color:rgba(255,255,255,0.65);border-radius:6px;font-size:12px;line-height:38px;padding:0 16px}.desktopName--M1GlY6Xe:hover{color:#fff}.desktopName--M1GlY6Xe.active--gh6q8Xsv{color:#fff;background-color:rgba(18,21,26,0.3)}.selectorSeparator--tLrL2o9J{display:block;margin:0 8px;width:1px;height:16px;border-left:1px dashed rgba(255,255,255,0.15)}@media (max-height: 860px), (max-width: 1280px){.arrowButton--MHbxtjNQ{width:60px;height:60px;font-size:30px}.desktopSlider--AScHB1Kd{padding-top:98px}.desktopSelector--rYqx7sAu{padding:30px 0;height:98px}}@media (max-height: 700px), (max-width: 1024px){.arrowButton--MHbxtjNQ{width:50px;height:50px;font-size:25px}.desktopSlider--AScHB1Kd{padding-top:86px}.desktopSelector--rYqx7sAu{padding:24px 0;height:86px}}@media (max-height: 640px), (max-width: 900px){.arrowButton--MHbxtjNQ{width:40px;height:40px;font-size:20px}.desktopSlider--AScHB1Kd{padding-top:74px}.desktopSelector--rYqx7sAu{padding:18px 0;height:74px}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"desktopSlider\": `desktopSlider--AScHB1Kd`,\n\t\"filtered\": `filtered--OQSTba5B`,\n\t\"desktopList\": `desktopList--nOFGKtg0`,\n\t\"arrowLeft\": `arrowLeft--xkZ60z9A`,\n\t\"arrowRight\": `arrowRight--SFdZw31z`,\n\t\"desktopSelector\": `desktopSelector--rYqx7sAu`,\n\t\"scrollContainer\": `scrollContainer--PyCfQg85`,\n\t\"filteredList\": `filteredList--qgFcXHyE`,\n\t\"available\": `available--yspNdU90`,\n\t\"arrowButton\": `arrowButton--MHbxtjNQ`,\n\t\"desktopName\": `desktopName--M1GlY6Xe`,\n\t\"active\": `active--gh6q8Xsv`,\n\t\"selectorSeparator\": `selectorSeparator--tLrL2o9J`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.cellWrapper--celYo8CM{display:flex;align-items:center;position:relative;transform-origin:0 0}.cellWrapper--celYo8CM:hover{background-color:rgba(255,255,255,0.1);border-radius:10px;cursor:pointer}.cellWrapper--celYo8CM:hover .closeIcon--kqBgSmBL{display:block}.cellWrapper--celYo8CM.disabled--SXwx9i_9{color:#d8d8d8;opacity:0.5;cursor:no-drop}.cellWrapper--celYo8CM.disabled--SXwx9i_9 .appLink--xxDzS__h,\n .cellWrapper--celYo8CM.disabled--SXwx9i_9 .name--gT42Hr47{cursor:no-drop}.cellWrapper--celYo8CM.disabled--SXwx9i_9:hover{background:none;border-radius:0}.cellWrapper--celYo8CM.disabled--SXwx9i_9:hover .closeIcon--kqBgSmBL{display:none}.cellItem--JZfNDEVv{height:144px;padding:10px;min-width:120px;display:flex;justify-content:space-between;align-items:center;flex-direction:column}.appLink--xxDzS__h{display:flex;width:46px;height:46px;color:#fff;justify-content:center;align-items:center;position:relative}.appLink--xxDzS__h.circle--wjMEocD_,\n .appLink--xxDzS__h.square--lOfLBD3x{background-color:rgba(255,255,255,0.1)}.appLink--xxDzS__h.circle--wjMEocD_{border-radius:40px}.appLink--xxDzS__h.square--lOfLBD3x{border-radius:10px}.appLink--xxDzS__h.installing--drkxXY1n{opacity:0.5}.addIcon--ruhiXc4_{position:absolute;font-size:25px;color:white}.circleIcon--nexpPxUz{right:-6px;bottom:5px}.squareIcon--BkpShWWs{right:-6px;bottom:5px}.appLink--xxDzS__h:hover{color:#fff}.appIcon--w9kHpYGc{width:95%}.appName--CLwLdUBP{display:block;font-size:16px;line-height:1.5;height:24px;text-align:center}.link--bllF9zn6{display:flex;justify-content:center;align-items:center}.name--gT42Hr47{flex:1;padding-left:20px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;color:white}.closeIcon--kqBgSmBL{font-size:12px;position:absolute;top:-5px;right:-3px;color:rgba(255,255,255,0.7);display:none}@media (max-height: 860px), (max-width: 1280px){.cellWrapper--celYo8CM{transform:scale(0.8)}}@media (max-height: 700px), (max-width: 1024px){.cellWrapper--celYo8CM{transform:scale(0.7)}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"cellWrapper\": `cellWrapper--celYo8CM`,\n\t\"closeIcon\": `closeIcon--kqBgSmBL`,\n\t\"disabled\": `disabled--SXwx9i_9`,\n\t\"appLink\": `appLink--xxDzS__h`,\n\t\"name\": `name--gT42Hr47`,\n\t\"cellItem\": `cellItem--JZfNDEVv`,\n\t\"circle\": `circle--wjMEocD_`,\n\t\"square\": `square--lOfLBD3x`,\n\t\"installing\": `installing--drkxXY1n`,\n\t\"addIcon\": `addIcon--ruhiXc4_`,\n\t\"circleIcon\": `circleIcon--nexpPxUz`,\n\t\"squareIcon\": `squareIcon--BkpShWWs`,\n\t\"appIcon\": `appIcon--w9kHpYGc`,\n\t\"appName\": `appName--CLwLdUBP`,\n\t\"link\": `link--bllF9zn6`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.launchpad--jiWBelji{background:rgba(36,41,51,0.93);position:fixed;top:0;bottom:0;left:0;right:0;z-index:5000;overflow:hidden;overflow-y:auto;color:#fff;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px)}.launchpadContainer--_vrKLUwW{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}.fadeEnter--lOmmReOY{opacity:0;transform:scale(0.95)}.fadeEnterActive--PRkux5Hj{opacity:1;transform:translateX(0);transition:opacity 100ms ease-out,transform 100ms ease-out}.fadeExit--egWs3z_Z{opacity:1}.fadeExitActive--Emt0ZO0f{opacity:0;transform:scale(0.95);transition:opacity 100ms ease-out,transform 100ms ease-out}.fadeExitDone--KS8Y8j_i{display:none}.loadingWrapper--a0uhMogW{display:flex;justify-content:center;align-items:center;height:100%;font-size:58px;color:var(--theme-cyan-color)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"launchpad\": `launchpad--jiWBelji`,\n\t\"launchpadContainer\": `launchpadContainer--_vrKLUwW`,\n\t\"fadeEnter\": `fadeEnter--lOmmReOY`,\n\t\"fadeEnterActive\": `fadeEnterActive--PRkux5Hj`,\n\t\"fadeExit\": `fadeExit--egWs3z_Z`,\n\t\"fadeExitActive\": `fadeExitActive--Emt0ZO0f`,\n\t\"fadeExitDone\": `fadeExitDone--KS8Y8j_i`,\n\t\"loadingWrapper\": `loadingWrapper--a0uhMogW`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.appear--fTt52aoG{opacity:0;transform:scale(1.05)}.appearActive--VTTHohOa{opacity:1;transform:translateX(0);transition:opacity 100ms ease-out,transform 100ms ease-out}.exit--xJVirpkU{opacity:1}.exitActive--JBRp0ETG{opacity:0;transform:scale(1.05);transition:opacity 100ms ease-out,transform 100ms ease-out}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"appear\": `appear--fTt52aoG`,\n\t\"appearActive\": `appearActive--VTTHohOa`,\n\t\"exit\": `exit--xJVirpkU`,\n\t\"exitActive\": `exitActive--JBRp0ETG`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.desktop--ou0P6iGf{display:grid;grid-template-columns:repeat(8,1fr)}.desktop--ou0P6iGf .cellWrapper{justify-content:flex-start}.title--waO4P2iB{color:#fff;font-size:16px;padding-bottom:6px}.visited--tdY4xwnJ{padding-bottom:24px;margin-bottom:20px;border-bottom:1px rgba(255,255,255,0.25) solid}.favorites--lfUhBPuB .ant-spin-blur{opacity:1}.favorites--lfUhBPuB .ant-spin-blur::after{opacity:0}.modeWrapper--L03hs70G{height:0}.modeWrapper--L03hs70G .header--sdla4qan{display:flex;justify-content:space-between}.modeWrapper--L03hs70G .section--zyFAea1p{padding:10px 30px 20px}.modeWrapper--L03hs70G .modeIcon--CE2TFixF{margin-left:15px;padding:3px;border-radius:50%;opacity:0.8;background:rgba(255,255,255,0.1)}.modeWrapper--L03hs70G .modeIcon--CE2TFixF:hover{opacity:1}.modeWrapper--L03hs70G .emptyTips--IvkqCJZN{font-size:16px;line-height:24px}.modeWrapper--L03hs70G .emptyTips--IvkqCJZN a{color:#52a6f9}.modeWrapper--L03hs70G .emptyTips--IvkqCJZN a:hover{color:var(--antd-link-hover-color)}.spin--wMvBU9Kg{color:#8c8c8c;width:100%;height:200px;line-height:200px;display:flex;align-items:center;justify-content:center}.settingsContainer--Z_f8juq_ a{color:#fff}.settingsContainer--Z_f8juq_ .settings--nnLSnU29{cursor:pointer;margin-right:10px;color:rgba(255,255,255,0.7);font-size:13px;transition-duration:0.8s;transition-property:transform}.settingsContainer--Z_f8juq_:hover .settings--nnLSnU29{transform:rotate(180deg)}.favoriteContainer--CjB0c4Dt{display:grid;grid-template-columns:repeat(5,1fr);grid-gap:2.5rem 7%;gap:2.5rem 7%}@media (max-height: 860px), (max-width: 1280px){.favoriteContainer--CjB0c4Dt{gap:1.7rem 4%}}@media (max-height: 720px), (max-width: 1024px){.favoriteContainer--CjB0c4Dt{gap:1rem 3%}.visited--tdY4xwnJ{padding-bottom:18px;margin-bottom:15px}}@media (max-height: 640px), (max-width: 900px){.favoriteContainer--CjB0c4Dt{gap:0.8rem 2%}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"desktop\": `desktop--ou0P6iGf`,\n\t\"title\": `title--waO4P2iB`,\n\t\"visited\": `visited--tdY4xwnJ`,\n\t\"favorites\": `favorites--lfUhBPuB`,\n\t\"modeWrapper\": `modeWrapper--L03hs70G`,\n\t\"header\": `header--sdla4qan`,\n\t\"section\": `section--zyFAea1p`,\n\t\"modeIcon\": `modeIcon--CE2TFixF`,\n\t\"emptyTips\": `emptyTips--IvkqCJZN`,\n\t\"spin\": `spin--wMvBU9Kg`,\n\t\"settingsContainer\": `settingsContainer--Z_f8juq_`,\n\t\"settings\": `settings--nnLSnU29`,\n\t\"favoriteContainer\": `favoriteContainer--CjB0c4Dt`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.searchBar--k7ys_9bU{display:flex;justify-content:center;align-items:flex-end;height:10%}.searchBar--k7ys_9bU .inputAffixWrapper--r90ghnJb{position:relative;width:100%;min-width:0;padding:4px 11px;color:var(--antd-input-color);font-size:14px;line-height:1.5715;background-image:none;display:inline-flex;height:42px;border-radius:21px;padding-left:54px;padding-right:4px;border:2px solid rgba(255,255,255,0.1);background-color:rgba(0,0,0,0.06);transition:padding-left 150ms ease-out;box-sizing:border-box}.searchBar--k7ys_9bU .inputAffixWrapper--r90ghnJb:hover{border-color:#0071eb;border-right-width:2px!important}.searchBar--k7ys_9bU .inputAffixWrapper--r90ghnJb .antInputPrefix--vr3ceVIR{width:30px;margin-left:0;margin-right:6px;display:flex;justify-content:center;color:rgba(255,255,255,0.65);flex:none;align-items:center;box-sizing:border-box}.searchBar--k7ys_9bU .inputAffixWrapper--r90ghnJb::before{width:0;visibility:hidden;content:\"\\\\a0\"}.searchBar--k7ys_9bU.focus--rcoZCXD5 .inputAffixWrapper--r90ghnJb,\n .searchBar--k7ys_9bU .inputAffixWrapperFocused--ym85u9fT{padding-left:4px;border-color:#2893f7;border-right-width:2px!important}.inputContainer--spZyJlDc{width:300px}.input--LvcE67vF{padding:0;border:none;outline:none;color:#fff;background-color:transparent;text-overflow:ellipsis;border-radius:3px}.input--LvcE67vF::placeholder{color:rgba(255,255,255,0.25)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"searchBar\": `searchBar--k7ys_9bU`,\n\t\"inputAffixWrapper\": `inputAffixWrapper--r90ghnJb`,\n\t\"antInputPrefix\": `antInputPrefix--vr3ceVIR`,\n\t\"focus\": `focus--rcoZCXD5`,\n\t\"inputAffixWrapperFocused\": `inputAffixWrapperFocused--ym85u9fT`,\n\t\"inputContainer\": `inputContainer--spZyJlDc`,\n\t\"input\": `input--LvcE67vF`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.scrollContainer--dNX8Cn8d::-webkit-scrollbar{width:6px}.scrollContainer--dNX8Cn8d::-webkit-scrollbar-thumb{visibility:hidden;border-radius:3px;background-color:rgba(69,69,73,0.45)}.scrollContainer--dNX8Cn8d::-webkit-scrollbar-track{visibility:hidden;width:12px;background-color:rgb(140,140,140,0.2)}.scrollContainer--dNX8Cn8d:hover{background:rgba(18,21,26,0.4);box-shadow:0px 5px 10px 4px rgba(0,0,0,0.1);border-radius:6px}.scrollContainer--dNX8Cn8d:hover::-webkit-scrollbar-thumb,\n .scrollContainer--dNX8Cn8d:hover::-webkit-scrollbar-track{visibility:visible}.siteMapContainer--oPV4617W{padding-top:10px;column-count:5}.siteMapContainer--oPV4617W .groupWrapper--vg8DzjpO{margin:0 30px;page-break-inside:avoid;break-inside:avoid}.siteMapContainer--oPV4617W .groupWrapper--vg8DzjpO .group--ojLUh6U2{margin:0;padding:9px 0 58px}.siteMapContainer--oPV4617W .groupWrapper--vg8DzjpO .item--UDV8jW76{list-style-type:none;font-size:12px;padding:5px 0px}.siteMapContainer--oPV4617W .groupWrapper--vg8DzjpO .item--UDV8jW76 > eo-link{cursor:pointer;color:rgba(255,255,255,0.65)}.siteMapContainer--oPV4617W .groupWrapper--vg8DzjpO .item--UDV8jW76 > eo-link:hover{color:var(--antd-link-hover-color)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"scrollContainer\": `scrollContainer--dNX8Cn8d`,\n\t\"siteMapContainer\": `siteMapContainer--oPV4617W`,\n\t\"groupWrapper\": `groupWrapper--vg8DzjpO`,\n\t\"group\": `group--ojLUh6U2`,\n\t\"item\": `item--UDV8jW76`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","export class JsonStorage {\n constructor(\n private storage: Storage,\n private prefix: string = \"brick-next-\"\n ) {}\n\n setItem<T = any>(name: string, value: T): void {\n this.storage.setItem(this.prefix + name, JSON.stringify(value));\n }\n\n getItem<T = any>(name: string): T {\n return JSON.parse(this.storage.getItem(this.prefix + name) as string) as T;\n }\n\n removeItem(name: string): void {\n return this.storage.removeItem(this.prefix + name);\n }\n\n clear(): void {\n return this.storage.clear();\n }\n}\n"],"names":["props","React","_extends","xmlns","width","height","viewBox","fill","fillRule","d","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","undefined","WrappedLink","wrapBrick","WrappedGeneralIcon","SearchBar","useTranslation","NS","focus","setFocus","searchInputRef","element","Promise","resolve","then","e","className","classNames","styles","searchBar","inputContainer","role","onClick","stopPropagation","inputAffixWrapper","inputAffixWrapperFocused","antInputPrefix","icon","lib","theme","input","placeholder","t","K","SEARCH_BY_NAME_KEYWORD","onChange","target","value","onKeyDown","key","keyCode","which","includes","preventDefault","onFocus","handleFocus","onBlur","handleBlur","ref","getImageUrl","app","defaultAppIcon","_window$PUBLIC_ROOT","icons","large","test","concat","window","STANDALONE_MICRO_APPS","standaloneMode","PUBLIC_ROOT","replace","id","currentVersion","PUBLIC_CDN","DesktopApp","_ref","onAddClick","isFavorite","showAddIcon","size","installing","installStatus","appLink","iconBackground","circle","square","url","homepage","appIcon","src","addIcon","circleIcon","squareIcon","appName","style","paddingRight","localeName","DesktopDirContext","useDesktopDirContext","DesktopDir","setDesktopDir","dirLink","dir","name","items","coordinates","x","clientX","y","clientY","activeIndex","slice","map","item","type","dirName","DesktopCustom","responsive","href","DeferredService","constructor","task","_defineProperty","this","schedulePrefetch","_this","preFetchScheduled","preFetchLaunchpadInfo","_asyncToGenerator","preFetchId","fetch","apply","arguments","requestIdleCallback","setTimeout","eager","promise","cancelIdleCallback","clearTimeout","isFetching","catch","error","console","firstFetchPromise","finally","launchpadService","_auth$getAuth","auth","getAuth","org","settings","columns","rows","microApps","desktops","siteSort","result","LaunchpadApi_listCollection","page","pageSize","interceptorParams","ignoreLoadingBar","noAbortOnRouteChange","list","setFavorites","favoritesLoaded","launchpadInfo","LaunchpadApi_getLaunchpadInfo","_loop","storyboard","locales","ns","Object","entries","forEach","_ref3","lang","resources","i18n","addResourceBundle","getFixedT","keys","removeResourceBundle","storyboards","baseInfo","_objectSpread","launchpad","filter","Boolean","initValue","loaded","storage","JsonStorage","localStorage","deferredLaunchpadInfo","doFetchLaunchpadInfo","deferredFavorites","doFetchFavorites","init","runtime","getRuntime","getDesktops","getCurrentApp","getLaunchpadSettings","getLaunchpadSiteMap","customList","desktop","i","flat","status","setMicroApps","setMaxVisitorLength","maxVisitorLength","preFetchFavorites","fetchFavoriteList","_this2","favoriteList","fetchLaunchpadInfo","getBaseInfo","getFavoritesLength","length","typeAdaptor","_list$filter","filteredFavoriteList","v","_v$launchpadCollectio","launchpadCollection","syncValidRecentlyVisitor","getAllVisitors","some","f","setAllVisitors","setAsFavorite","params","LaunchpadApi_createCollection","deleteFavorite","LaunchpadApi_deleteCollection","microAppId","customItemId","getItem","storageKey","find","getItemIndex","findIndex","hasItem","setItem","visitors","index","splice","unshift","pop","pushVisitor","getVisitor","getRealDesktopItem","_item$launchpadCollec","custom","setFavoriteAsVisitor","_item$launchpadCollec2","data","getSitemapList","curMicroApps","internal","siteMapList","apps","row","pick","DesktopCell","addItemToFavorite","Dialog","show","title","content","contentStyle","zIndex","_props$onSetAsFavorit","onSetAsFavorite","call","cellWrapper","positionLeft","position","cellItem","active","handleAppClick","handleCustomClick","LaunchpadSettingsContext","useLaunchpadSettingsContext","Desktop","padding","arrowWidthPercent","desktopCount","gridTemplateColumns","gridTemplateRows","FavoriteDesktopCell","_omit","_item$launchpadCollec10","_item$launchpadCollec11","disabled","useMemo","realLink","_item$launchpadCollec7","_item$launchpadCollec8","_item$launchpadCollec9","link","baseUrl","document","baseURI","startsWith","_item$launchpadCollec4","_item$launchpadCollec5","_item$launchpadCollec6","_item$launchpadCollec3","open","omit","fontSize","LeacySiteMap","_props$categoryList","useEffect","_props$onLoad","onLoad","scrollContainer","containerStyle","onWheel","siteMapContainer","categoryList","_item$apps","groupWrapper","group","handleClick","SiteMap","forwardRef","ModeType","remberMode","Sitemap","MyDesktop","recentlyVisitedList","useState","setFavoriteList","isLoading","setIsLoading","mode","setMode","siteMapRef","createRef","deskContainerRef","useRef","siteMapHeight","setSiteMapHeight","getFavoriteList","_x","handleMode","handleOnSetAsFavorite","handleSiteMapLoad","siteMap","current","deskContainer","siteMapDom","getBoundingClientRect","bottom","top","renderRecentlyVisited","visited","renderMyFavorites","section","favorites","spin","spinning","isEmpty","emptyTips","marginLeft","favoriteContainer","renderSiteMap","_launchpadService$get","overflow","flex","modeWrapper","header","Favorities","modeIcon","category","settingsContainer","rememberedDesktopCursor","DesktopSlider","desktopCursor","setDesktopCursor","appCursor","setAppCursor","mapItemToDesktop","transformCustomItem","validItems","id2app","reduce","acc","set","Map","has","get","push","delete","chunk","filteredDesktop","q","lowerQ","toLowerCase","lockRef","throttledSetDesktopCursor","slideLeft","slideRight","onKeydown","event","currentDesktop","cell","getHistory","Math","floor","innerWidth","innerHeight","offset","next","addEventListener","removeEventListener","deltaXRef","deltaYRef","responsibleRef","resetDeltaTimeoutRef","sliderChildrenLength","deltaX","deltaY","tryToSlideByWheel","axisRef","abs","threshold","desktopSlider","filtered","desktopSelector","selectorSeparator","desktopName","handleSlideTo","desktopList","transition","filteredList","arrowLeft","available","arrowButton","arrowRight","DesktopDirContent","entering","setEntering","translateX","documentElement","clientWidth","translateY","clientHeight","rowsInDir","ceil","CSSTransition","in","timeout","appear","onEntering","handleEntering","dirContainer","transform","dirContent","WrappedIcon","Launchpad","getFilterMicroApps","setQ","desktopDir","loading","setLoading","startFetchLaunchpadInfo","_props$onWillClose","onWillClose","handleHttpError","_props$onWillClose2","Provider","loadingWrapper","enter","fadeEnter","enterActive","fadeEnterActive","exit","fadeExit","exitActive","fadeExitActive","exitDone","fadeExitDone","launchpadContainer","LaunchpadWrapper","fadeIn","setFadeIn","onExited","_props$onClose","onClose","handleWillClose","LaunchpadPortal","elem","createElement","body","appendChild","removeChild","visible","createPortal","LaunchpadButton","setVisible","handleLaunchpadWillClose","useCallback","toggleLaunchpadEffect","listen","hotkeys","preVisble","curVisble","unbind","openLaunchpad","LaunchpadSvg","handleLaunchpadClose","en","zh","___CSS_LOADER_EXPORT___","module","toString","prefix","JSON","stringify","parse","removeItem","clear"],"sourceRoot":""}
|