@next-bricks/nav 1.26.3 → 1.26.4
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunks/6128.a4b25bfc.js","mappings":"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","sources":["webpack:///./src/launchpad-quick-access/styles.shadow.css","webpack:///./src/sidebar-sub-menu/styles.shadow.css","webpack:///./src/poll-announce/notification.module.css","webpack:///./src/sidebar/sidebar-menu/styles.shadow.css","webpack:///./src/frame-breadcrumb/styles.shadow.css","webpack:///./src/directory/styles.shadow.css","webpack:///./src/sidebar/styles.shadow.css","webpack:///./src/search-launchpad/styles.shadow.css","webpack:///./src/launchpad-config/styles.shadow.css","webpack:///./src/sidebar/sidebar-menu-item/styles.shadow.css","webpack:///./src/nav-logo/styles.shadow.css","webpack:///./src/nav-menu/index.tsx","webpack:///./src/launchpad/index.tsx","webpack:///./src/launchpad-button-v2/index.tsx","webpack:///./src/launchpad-config/wrapped-bricks.ts","webpack:///./src/launchpad-config/MenuGroup.tsx","webpack:///./src/launchpad-config/index.tsx","webpack:///./src/easyops-navbar-alerts/index.tsx","webpack:///./src/launchpad-quick-access/index.tsx","webpack:///./src/search-launchpad/host-context.css?4d0b","webpack:///./src/search-launchpad/i18n.ts","webpack:///./src/search-launchpad/index.tsx","webpack:///./src/launchpad-recent-visits/index.tsx","webpack:///./src/app-bar-wrapper/index.tsx","webpack:///./src/frame-breadcrumb/index.tsx","webpack:///./src/sidebar/sidebar-menu-item/index.tsx","webpack:///./src/sidebar/utils.tsx","webpack:///./src/sidebar/sidebar-menu-group/index.tsx","webpack:///./src/sidebar/sidebar-menu-submenu/index.tsx","webpack:///./src/sidebar/sidebar-menu/index.tsx","webpack:///./src/images/fixed.svg","webpack:///./src/images/toFixed.svg","webpack:///./src/sidebar/i18n.ts","webpack:///./src/sidebar/index.tsx","webpack:///./src/sidebar-sub-menu/index.tsx","webpack:///./src/directory/index.tsx","webpack:///./src/directory-tree/DirectoryTreeContext.ts","webpack:///./src/directory-tree/Tree.tsx","webpack:///./src/directory-tree/utils.ts","webpack:///./src/directory-tree/index.tsx","webpack:///./src/directory-tree/directory-tree-leaf/index.tsx","webpack:///./src/directory-tree/constants.ts","webpack:///./src/directory-tree/directory-tree-internal-node/arrow.svg","webpack:///./src/directory-tree/directory-tree-internal-node/index.tsx","webpack:///./src/nav-logo/index.tsx","webpack:///./src/poll-announce/i18n.ts","webpack:///./src/poll-announce/notification.module.css?4226","webpack:///./src/poll-announce/index.tsx","webpack:///./src/data-providers/shared/smartDisplayForMenuTitle.ts","webpack:///./src/data-providers/get-menu-config-tree.ts","webpack:///./src/data-providers/get-menu-config-options.ts","webpack:///./src/query-search/i18n.ts","webpack:///./src/query-search/index.tsx","webpack:///./src/directory-tree/styles.shadow.css","webpack:///./src/app-bar-wrapper/styles.shadow.css","webpack:///./src/poll-announce/styles.shadow.css","webpack:///./src/launchpad-recent-visits/styles.shadow.css","webpack:///./src/easyops-navbar-alerts/styles.shadow.css","webpack:///./src/search-launchpad/host-context.css","webpack:///./src/directory-tree/directory-tree-leaf/styles.shadow.css","webpack:///./src/sidebar/sidebar-menu-group/styles.shadow.css","webpack:///./src/sidebar/sidebar-menu-submenu/styles.shadow.css","webpack:///./src/directory-tree/directory-tree-internal-node/styles.shadow.css","webpack:///./src/query-search/styles.shadow.css"],"sourcesContent":["// 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, `:host{display:block}:host([hidden]){display:none}.quick-access-list{display:grid;gap:14px;grid-template-columns:repeat(2,1fr);list-style:none;margin:0;padding:0}.sidebar-menu-item{display:flex;align-items:center;justify-content:space-between;overflow:hidden}.sidebar-menu-item > eo-link{display:block;min-width:0}.sidebar-menu-item > eo-link::part(link){display:flex;align-items:center;height:20px;gap:8px;color:var(--color-header-text)}.sidebar-menu-icon{color:var(--left-sidebar-item-collapsed-icon-color)}.menu-item-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-item-remove{color:var(--color-secondary-text);cursor:pointer}.sidebar-menu-item:not(:hover) .menu-item-remove{display:none}.menu-item-remove:hover{color:var(--color-normal-text)}.menu-item-remove:active{color:var(--color-strong-text)}.sidebar-menu-item > eo-link:hover::part(link),\n.sidebar-menu-item > eo-link:hover .sidebar-menu-icon{color:var(--color-brand-hover)}@supports not (inset: 0){.sidebar-menu-item,\n .sidebar-menu-item > eo-link::part(link){gap:0}.sidebar-menu-icon{margin-right:8px}}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.menu-container{box-sizing:border-box;background:var(--third-menu-default-bg);border:1px solid var(--stroke-color-default);border-width:0 1px 0 0;border-radius:0px;padding:20px 0px;height:100%}.menu-container .header{display:flex;gap:10px;align-items:center;font-size:var(--title-font-size);padding:0 20px 16px 20px;line-height:26px;color:var(--color-header-text)}.menu-container .header .title{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;word-wrap:break-word}.menu-container .content{padding:0 12px}.menu-container .menu-item,.menu-container .menu-sub-item::part(sub-menu-item-title){margin:0;padding-right:16px;height:40px;line-height:40px;border-radius:4px;margin-bottom:4px}.menu-container .menu-item::part(menu-item-icon),.menu-container .menu-sub-item::part(menu-item-icon){color:var(--color-secondary-text)}.menu-container .menu-item-link{width:100%;color:var(--color-secondary-text)}.menu-container .menu-item-text,.menu-container .menu-group-text,.menu-container .menu-item-link{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.menu-container .menu-item-text{display:block;box-sizing:border-box;color:var(--antd-text-color)}.menu-container .menu-item:hover{background:var(--third-menu-item-hover-bg);color:var(--color-header-text)}.menu-container .menu-item:hover .menu-item-text{color:var(--color-header-text);font-weight:var(--font-weight-400)}.menu-container .in-submenu .menu-item-text{color:var(--color-normal-text)}.menu-container .menu-sub-item::part(sub-menu-item-title):hover{color:var(--color-header-text)}.menu-container .menu-item-text.item-has-icon{margin-left:6px}.menu-container .menu-item[active]{color:var(--color-brand);background-color:var(--third-menu-item-selected-bg)}.menu-container .menu-item[active] .menu-item-text{color:var(--color-brand);font-weight:var(--font-weight-500)}`, \"\"]);\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, `.message--Fxvh9j9V{color:var(--color-normal-text);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"message\": `message--Fxvh9j9V`\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, `:host{display:block;transition:width var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}.sidebar-menu-item-list slot::slotted(*){margin-top:6px}`, \"\"]);\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, `:host{display:flex;height:22px;align-items:center}:host([hidden]){display:none}.breadcrumb-item-prefix-icon{font-size:14px}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.directory-container{padding:20px 8px 24px 24px;background:var(--color-fill-global-bg-2);border-right:1px solid var(--color-text-divider-line);height:calc(100vh - var(--app-bar-height) - 44px);overflow-y:auto;scrollbar-width:none}.directory-container-not-border{border-right:none}.directory-title{font-size:var(--sub-menu-title-font-size);margin-bottom:24px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.directory-menu-list > .menu-item-group{padding-top:14px}.directory-menu-list > .menu-item-group:first-child{padding-top:0}.directory-menu-list .menu-item-title-group,\n.directory-menu-list .menu-item-title-item{display:flex;align-items:center;justify-content:space-between}.directory-menu-list .menu-item-title-group{color:#8c8c8c;font-size:12px;margin-bottom:2px}.directory-menu-list .menu-item-title-item{font-size:14px;cursor:pointer;line-height:24px;padding:3px 0}.directory-menu-list .menu-item-title-suffix-icon{width:24px;height:24px;display:flex;justify-content:center;align-items:center;font-size:14px;border-radius:var(--small-border-radius);cursor:pointer}.directory-menu-list\n .menu-item-title-suffix-icon:not(\n .menu-item-title-suffix-icon-disabled\n ):hover{background:var(--color-info-icon-bg);color:var(--color-brand-hover)}.directory-menu-list .menu-item-title-item > .menu-title-text:hover{color:var(--color-brand-hover)}.directory-menu-list .menu-item-title-item > .menu-title-text-active{color:var(--color-brand)}.directory-menu-list .menu-item-title-suffix-icon-disabled{color:var(--color-disabled-text);cursor:not-allowed}.directory-menu-list .menu-title-text{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}:host([position=\"static\"]){height:100%}*,\n*::before,\n*::after{box-sizing:border-box}.sidebar-container{position:relative;z-index:998;height:100%}.sidebar-container,\n.inner{transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}:host(:not([position=\"static\"])) .sidebar-container{position:fixed;left:0;top:var(--app-bar-height);height:calc(100vh - var(--app-bar-height))}.inner{position:absolute;left:0;height:100%;display:flex;flex-direction:column;background-color:var(--left-menu-bg);border-right:1px solid var(--left-sidebar-border-right)}.inner:hover{background-color:var(--left-menu-hover-bg)}.inner::before{content:\"\";position:absolute;left:0;right:0;top:0;bottom:0;z-index:-1;background:var(--sidebar-bg)}.header{padding:0 12px;margin-top:14px;height:52px;flex-shrink:0}.menu-title{height:100%;display:flex;align-items:center;color:var(--left-sidebar-large-title-color)}.menu-title-icon-container{flex-shrink:0;display:flex;justify-content:center;align-items:center;width:20px;height:20px;font-size:20px;line-height:0;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-title-icon{color:var(--left-sidebar-item-collapsed-icon-color)}.menu-title-point{width:4px;height:4px;background:var(--antd-text-color);border-radius:50%}.menu-title-text{font-size:16px;font-weight:var(--font-weight-500);color:var(--left-sidebar-large-title-color);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.state-collapsed .menu-title{padding:0 calc(50% - 10px)}.state-hovered .menu-title,\n.state-expanded .menu-title{padding:0 12px}.state-collapsed .menu-title-icon-container{margin-right:12px}.state-hovered .menu-title-icon-container,\n.state-expanded .menu-title-icon-container{margin-right:0;width:0;opacity:0}.content{padding:0 12px;flex:1;overflow-y:auto;scrollbar-width:none}.content::-webkit-scrollbar{width:0;background:transparent}.content.show-shadow{box-shadow:0 -17px 10px -16px rgb(0 0 0/8%) inset}.footer{height:60px;flex-shrink:0;display:flex;align-items:center;justify-content:flex-end}.fixed-icon{display:flex;justify-content:center;align-items:center;width:20px;height:20px;margin-right:8px;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.fixed-icon > svg{width:100%;height:100%}.fixed-icon:hover > svg path[fill]{fill:var(--color-brand)}.state-collapsed .fixed-icon{visibility:hidden;opacity:0}.state-hovered .fixed-icon,\n.state-expanded .fixed-icon{visibility:visible;opacity:1}.state-hovered .inner{box-shadow:var(--left-sidebar-shadow)}.resize-line{position:absolute;right:-2px;height:100%;width:2px;cursor:col-resize}.resize-line:hover,\n.resize-line:active{background-color:rgba(26,122,255,1)}.dragging,\n.dragging .inner{transition:none}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.container{position:relative}.dropdown{margin-top:5px;position:absolute;top:100%;left:0px;width:100%;z-index:1050;padding:20px 24px 24px;overflow:hidden;box-sizing:border-box;background-color:var(--antd-select-dropdown-bg);border-radius:4px;box-shadow:var(--antd-box-shadow-base);display:none}.dropdown-active{display:block}.search-box{border-bottom:1px solid var(--color-text-divider-line);display:flex;gap:8px;align-items:center;padding:10px 0;cursor:text}.search-icon{color:var(--color-auxiliary-text)}.search-input{padding:0;margin:0;border:none;outline:none;color:inherit;background-color:transparent;font-size:14px;line-height:22px;flex:1;min-width:0}.search-input::placeholder{color:var(--color-disabled-text);opacity:1}.search-clear{display:none;color:var(--color-secondary-text);cursor:pointer}.search-clear.searching{display:inline-block}.search-clear:hover{color:var(--color-auxiliary-text)}.dropdown-content{min-width:0;display:flex;flex-direction:column;gap:24px;max-height:260px;overflow-y:auto}.spinner{display:flex;justify-content:center;align-items:center;color:var(--theme-doderblue-color);flex:1;font-size:30px}.loading > :not(.spinner){display:none}.menu-group-label,\n.menu-item-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-groups,\n.menu,\n.sub-menu{list-style:none;margin:0;padding:0}.menu,\n.sub-menu{display:flex;flex-direction:column;gap:14px}.menu-item > eo-link{display:block;min-width:0}.menu-item > eo-link::part(link){height:20px;display:flex;align-items:center;gap:8px;color:var(--color-header-text)}.menu-groups{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}.menu-groups{display:grid;gap:32px 8px}.menu-group{padding-right:12px;color:var(--color-header-text)}.menu-group-label{font-size:var(--card-title-font-size);font-weight:500;color:var(--color-header-text);margin-bottom:14px}.menu-item:not(.folder){display:flex;gap:8px;align-items:center}.menu-icon{color:var(--eo-search-launchpad-menu-icon-color)}.menu-item.active,\n.menu-item.active .menu-icon{color:var(--color-brand-active)}.sub-menu:not(.expanded){display:none}.sub-menu{margin-top:14px;margin-left:8px;border-left:1px solid var(--color-text-divider-line);padding-left:15px}.menu-item-star{cursor:pointer}.menu-item-star,\n.menu-item-toggle{color:var(--color-secondary-text)}.menu-item-star{display:none}.can-star.starred > .menu-item-star,\n.can-star:hover > .menu-item-star{display:inline-block}.can-star:not(.starred) > .menu-item-star{color:var(--color-secondary-text)}.starred > .menu-item-star{color:var(--palette-yellow-6)}.menu-item > eo-link:hover::part(link),\n.menu-item > eo-link:hover .menu-icon,\n.menu-item > eo-link:hover .menu-item-toggle{color:var(--color-brand-hover)}@supports not (inset: 0){.search-box,\n .menu,\n .sub-menu,\n .menu-item:not(.folder),\n .menu-item > eo-link::part(link){gap:0}.dropdown-content{display:grid;grid-auto-flow:row}.dropdown-content:not(.loading){height:min-content}.menu > :not(:first-child),\n .sub-menu > :not(:first-child){margin-top:14px}.search-icon,\n .menu-icon{margin-right:8px}.search-clear,\n .menu-item-star,\n .menu-item-toggle{margin-left:8px}}`, \"\"]);\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, `:host{display:block;--local-menu-icon-color:#8c8c8c}:host([hidden]){display:none;--local-menu-icon-color:rgba(255,255,255,0.45)}ul{list-style:none;margin:0;padding:0}.menu-groups{display:grid;gap:32px 16px;grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}.menu,\n.sub-menu{display:flex;flex-direction:column;gap:14px}.menu-folder-label-wrapper > eo-link,\n.menu-item > eo-link{display:block}.menu-folder-label-wrapper > eo-link::part(link),\n.menu-item > eo-link::part(link){height:20px;display:flex;align-items:center;gap:8px;color:var(--color-header-text)}.menu-group-label-wrapper,\n.menu-folder-label-wrapper,\n.menu-item:not(.folder){display:flex;gap:8px;align-items:center}.menu-group-label-wrapper{gap:3px}.menu-group:not(.empty) .menu-group-label-wrapper{margin-bottom:14px}.menu-group-label,\n.menu-item-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-group-label{font-size:var(--card-title-font-size);font-weight:500;color:var(--color-header-text)}.menu-icon{color:var(--local-menu-icon-color)}.menu-group.blocked .menu-group-label,\n.menu-item.blocked > .menu-folder-label-wrapper .menu-item-label,\n.menu-item.blocked > .menu-folder-label-wrapper .menu-icon,\n.menu-item.blocked > .menu-folder-label-wrapper .menu-item-toggle,\n.menu-item.disabled > eo-link::part(link),\n.menu-item.disabled .menu-icon{color:var(--color-disabled-text)}.menu-folder-label-wrapper > eo-link,\n.menu-item > eo-link{max-width:100%;width:-moz-fit-content;width:fit-content;min-width:0}.sub-menu:not(.expanded){display:none}.sub-menu{margin-left:8px;border-left:1px solid var(--color-text-divider-line);padding-left:15px}.menu-item:not(.empty) .sub-menu{margin-top:14px}.menu-item-toggle{color:var(--color-secondary-text)}.menu-config{visibility:hidden;color:var(--color-brand);cursor:pointer;display:flex;justify-content:center;align-items:center;height:24px;width:0}.menu-config.active,\n.menu-group-label-wrapper:hover .menu-config,\n.menu-item:not(.folder):not(.disabled):hover .menu-config,\n.menu-item:not(.folder):not(.blocked):hover .menu-config,\n.menu-folder-label-wrapper:hover .menu-config{visibility:visible;width:24px}.menu-config:hover,\n.menu-item:not(.disabled) > eo-link:hover::part(link),\n.menu-item:not(.disabled) > eo-link:hover .menu-icon,\n.menu-folder-label-wrapper > eo-link:hover::part(link),\n.menu-folder-label-wrapper > eo-link:hover .menu-icon,\n.menu-folder-label-wrapper > eo-link:hover .menu-item-toggle{color:var(--color-brand-hover)}@supports not (inset: 0){.sub-menu,\n .menu,\n .menu-group-label-wrapper,\n .menu-folder-label-wrapper,\n .menu-item:not(.folder),\n .menu-item > eo-link::part(link){gap:0}.menu > :not(:first-child),\n .sub-menu > :not(:first-child){margin-top:14px}.menu-icon{margin-right:8px}eo-dropdown-actions,\n .menu-item-toggle{margin-left:8px}}`, \"\"]);\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, `:host{display:block;--menu-item-icon-size:20px}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}eo-link{display:block}.menu-item{position:relative;display:flex;align-items:center;min-height:36px;padding:8px 12px;line-height:20px;color:var(--left-sidebar-item-normal-color);border-radius:var(--medius-border-radius);cursor:pointer;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-item-icon-container{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:var(--menu-item-icon-size);height:var(--menu-item-icon-size);font-size:var(--menu-item-icon-size);color:var(--left-sidebar-item-collapsed-icon-color)}:host([in-submenu]):host(:not([selected])) .menu-item{color:var(--left-sidebar-item-collapsed-color)}.menu-item-text{flex:1;margin-left:14px;margin-right:12px;font-size:14px;overflow:hidden;white-space:nowrap;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-item:hover{background:var(--left-sidebar-item-hover-bg)}:host([selected]) .menu-item{color:var(--left-sidebar-item-selected-color);background:var(--left-sidebar-item-selected-bg);box-shadow:0px 2px 12px 0px rgba(26,122,255,0.30196)}:host([selected]) .menu-item-icon-container{color:var(--left-sidebar-item-selected-color)}:host([selected]) .menu-item:hover{background-color:var(--left-sidebar-item-selected-hover-bg)}:host([menu-collapsed]) .menu-item{padding:0px calc(50% - var(--menu-item-icon-size) / 2)}:host([menu-collapsed]) .menu-item-text{opacity:0}:host(:not([menu-collapsed])) .menu-item-text{white-space:pre-wrap;display:-webkit-inline-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;text-overflow:ellipsis}`, \"\"]);\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, `:host{display:inline-block}:host([hidden]){display:none}.logo-container{position:relative;display:flex;justify-content:flex-start;align-items:center}.logo-link{cursor:pointer}.personalized-logo{height:24px;vertical-align:top}.easyops-icon{display:block;font-size:24px;color:var(--color-brand)}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","import React, {\n CSSProperties,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { getHistory } from \"@next-core/runtime\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport styleText from \"./nav-menu.shadow.css\";\nimport { UnregisterCallback } from \"history\";\nimport type { SidebarMenu } from \"@next-bricks/basic/menu\";\nimport type {\n MenuItem as MenuItemComponent,\n MenuComponentProps,\n} from \"@next-bricks/basic/menu-item\";\nimport { isSubMenu, isGroup, renderLinkCom, renderSpanCom } from \"./utils.js\";\nimport { initMenuItemAndMatchCurrentPathKeys } from \"@next-shared/general/menu\";\nimport type {\n SidebarMenuGroup,\n SidebarMenuItem,\n SidebarMenuSimpleItem,\n} from \"@next-shared/general/types\";\nimport type {\n Popover,\n PopoverProps,\n PopoverEvents,\n PopoverEventsMapping,\n Placement,\n} from \"@next-bricks/basic/popover\";\nimport \"@next-core/theme\";\nimport classnames from \"classnames\";\nimport { ThreeLevelMenuPopoverContent } from \"./ThreeLevelMenuPopoverContent.js\";\nimport { SiteMapItem } from \"./site-map/SiteMapItem.js\";\nimport SiteMapStyleText from \"../nav-menu/site-map/SiteMapItem.shadow.css\";\nimport ItemTagStyleText from \"../nav-menu/site-map/ItemTag.shadow.css\";\nimport GroupItemStyleText from \"../nav-menu/site-map/GroupItem.shadow.css\";\nimport \"./host-context.css\";\n\nconst { defineElement, property } = createDecorators();\n\nconst WrappedMenuItem = wrapBrick<MenuItemComponent, MenuComponentProps>(\n \"eo-menu-item\"\n);\nconst WrappedPopover = wrapBrick<\n Popover,\n PopoverProps,\n PopoverEvents,\n PopoverEventsMapping\n>(\"eo-popover\", {\n onVisibleChange: \"visible.change\",\n onBeforeVisibleChange: \"before.visible.change\",\n});\n\nconst GAP_WIDTH = 8;\n\ninterface NavMenuProps {\n menu?: SidebarMenu;\n showTooltip?: boolean;\n mainMenuTitleStyle: CSSProperties | undefined;\n}\n\ninterface MenuItemComProps {\n index?: number;\n hidden?: boolean;\n item: SidebarMenuItem;\n topData?: boolean;\n selectedKey?: string[];\n showTooltip?: boolean;\n overflow?: boolean;\n mainMenuTitleStyle?: CSSProperties;\n}\ninterface SimpleMenuItemComProps extends MenuItemComProps {\n item: SidebarMenuSimpleItem;\n}\ninterface MenuGroupComProps extends MenuItemComProps {\n item: SidebarMenuGroup;\n}\nfunction RenderMenuItemCom(props: MenuItemComProps) {\n const { item } = props;\n return isSubMenu(item as SidebarMenuGroup, props.topData) ? (\n <SubMenuItemCom {...props} item={item as SidebarMenuGroup}></SubMenuItemCom>\n ) : isGroup(item) ? (\n <GroupMenuItemCom {...props} item={item as SidebarMenuGroup} />\n ) : (\n <SimpleMenuItemCom\n {...props}\n item={item as SidebarMenuSimpleItem}\n ></SimpleMenuItemCom>\n );\n}\nfunction SimpleMenuItemCom(props: SimpleMenuItemComProps) {\n const { item, index, hidden, showTooltip, selectedKey = [] } = props;\n return (\n <WrappedMenuItem\n data-index={index}\n className={hidden ? \"overflow-menu-item\" : \"\"}\n key={item.key}\n title={showTooltip ? item.text : \"\"}\n active={item.key ? selectedKey.includes(item.key) : false}\n >\n {renderLinkCom(item, { width: \"100%\" }, props.mainMenuTitleStyle)}\n </WrappedMenuItem>\n );\n}\n\nlet scrollWidth: number;\n// istanbul ignore next;\nconst handlePopupVisibleChange = (event: CustomEvent<boolean>) => {\n // 当用户设置滚动条一直显示时,来回切换 overflow: hidden 会导致滚动条显示或隐藏\n // 造成页面宽度变化而导致的抖动的问题\n const paddingRight =\n scrollWidth ??\n (scrollWidth = window.innerWidth - document.body.clientWidth);\n\n document.body.style.paddingRight = event.detail ? paddingRight + \"px\" : \"\";\n document.body.style.overflow = event.detail ? \"hidden\" : \"\";\n document.body.style.touchAction = event.detail ? \"none\" : \"\";\n};\n\nfunction SubMenuItemCom({\n index,\n hidden,\n item,\n topData,\n showTooltip,\n selectedKey = [],\n overflow,\n mainMenuTitleStyle,\n}: MenuGroupComProps) {\n return item.items?.length > 0 ? (\n <WrappedPopover\n data-index={index}\n className={classnames(\"popover\", {\n subprime: !topData,\n \"overflow-menu-item\": hidden,\n })}\n arrow={false}\n trigger=\"hover\"\n placement={topData ? \"bottom-start\" : \"right-start\"}\n distance={0}\n anchorDisplay=\"block\"\n strategy=\"fixed\"\n >\n <WrappedMenuItem\n className=\"sub-menu-item-label 22\"\n key={item.key}\n slot=\"anchor\"\n title={showTooltip ? item.title : \"\"}\n >\n {renderSpanCom(item, !topData, { ...mainMenuTitleStyle })}\n </WrappedMenuItem>\n <div\n className={classnames(\"sub-menu-wrapper\", {\n \"overflow-menu-wrapper\": overflow,\n })}\n >\n {item.items.map((innerItem) => (\n <React.Fragment key={innerItem.key}>\n <RenderMenuItemCom\n item={innerItem}\n selectedKey={selectedKey}\n showTooltip={showTooltip}\n />\n </React.Fragment>\n ))}\n </div>\n </WrappedPopover>\n ) : null;\n}\n\nfunction GroupMenuItemCom({\n item,\n showTooltip,\n selectedKey = [],\n}: MenuGroupComProps) {\n return item.items?.length > 0 ? (\n item.childLayout === \"category\" ? (\n <ThreeLevelMenuCom\n item={item}\n selectedKey={selectedKey}\n showTooltip={showTooltip}\n placement=\"right-start\"\n anchorDisplay=\"block\"\n />\n ) : (item as SidebarMenuGroup).childLayout === \"siteMap\" ? (\n <SitMapMenCom\n item={item}\n selectedKey={selectedKey}\n showTooltip={showTooltip}\n placement=\"right-start\"\n anchorDisplay=\"block\"\n topData={false}\n />\n ) : (\n <>\n <div className=\"group-label\">{item.title}</div>\n <div className=\"group-wrapper\">\n {item.items.map((innerItem) => {\n return (\n <React.Fragment key={innerItem.key}>\n <RenderMenuItemCom\n item={innerItem}\n showTooltip={showTooltip}\n selectedKey={selectedKey}\n />\n </React.Fragment>\n );\n })}\n </div>\n </>\n )\n ) : null;\n}\n\nfunction ThreeLevelMenuCom({\n index,\n hidden,\n item,\n selectedKey = [],\n showTooltip,\n placement = \"bottom-start\",\n anchorDisplay,\n mainMenuTitleStyle,\n}: {\n index?: number;\n hidden?: boolean;\n item: SidebarMenuGroup;\n selectedKey?: string[];\n showTooltip?: boolean;\n placement?: Placement;\n anchorDisplay?: CSSProperties[\"display\"];\n mainMenuTitleStyle?: CSSProperties;\n}) {\n return item.items?.length > 0 ? (\n <WrappedPopover\n data-index={index}\n className={classnames(\"three-level-menu-popover\", \"popover\", {\n \"overflow-menu-item\": hidden,\n })}\n arrow={false}\n trigger={\"hover\"}\n placement={placement}\n distance={0}\n key={item.key}\n strategy=\"fixed\"\n anchorDisplay={anchorDisplay}\n onBeforeVisibleChange={handlePopupVisibleChange}\n >\n <WrappedMenuItem\n className=\"sub-menu-item-label\"\n key={item.key}\n slot=\"anchor\"\n title={showTooltip ? item.title : \"\"}\n >\n {renderSpanCom(item, false, mainMenuTitleStyle)}\n </WrappedMenuItem>\n <div className=\"sub-menu-wrapper\">\n <ThreeLevelMenuPopoverContent\n menuItem={item}\n selectedKey={selectedKey}\n ></ThreeLevelMenuPopoverContent>\n </div>\n </WrappedPopover>\n ) : null;\n}\n\nfunction SitMapMenCom({\n index,\n hidden,\n item,\n selectedKey = [],\n showTooltip,\n placement = \"bottom-start\",\n anchorDisplay,\n topData,\n mainMenuTitleStyle,\n}: {\n index?: number;\n hidden?: boolean;\n item: SidebarMenuGroup;\n selectedKey?: string[];\n showTooltip?: boolean;\n placement?: Placement;\n anchorDisplay?: CSSProperties[\"display\"];\n topData?: boolean;\n mainMenuTitleStyle?: CSSProperties;\n}) {\n const [visible, setVisible] = useState<boolean>();\n\n const handleVisibleChange = (event: CustomEvent<boolean>): void => {\n setVisible(event.detail);\n handlePopupVisibleChange(event);\n };\n\n return item.items?.length > 0 ? (\n <WrappedPopover\n data-index={index}\n className={classnames(\"popover\", {\n \"overflow-menu-item\": hidden,\n })}\n trigger={\"hover\"}\n placement={placement}\n distance={0}\n key={item.key}\n strategy=\"fixed\"\n arrow={false}\n anchorDisplay={anchorDisplay}\n onBeforeVisibleChange={handleVisibleChange}\n >\n <WrappedMenuItem\n className=\"sub-menu-item-label\"\n key={item.key}\n slot=\"anchor\"\n title={showTooltip ? item.title : \"\"}\n >\n {renderSpanCom(item, false, mainMenuTitleStyle)}\n </WrappedMenuItem>\n <div\n className={classnames(\"sub-menu-sit-map-wrapper\", {\n \"in-group-site-map\": !topData,\n })}\n onClick={(e) => e.stopPropagation()}\n >\n <SiteMapItem\n menuGroup={item}\n selectedKey={selectedKey}\n visible={visible}\n />\n </div>\n </WrappedPopover>\n ) : null;\n}\n\n/**\n * 菜单构件\n * @author sailor\n * @category navigation\n */\n@defineElement(\"eo-nav-menu\", {\n styleTexts: [\n SiteMapStyleText,\n ItemTagStyleText,\n GroupItemStyleText,\n styleText,\n ],\n})\nclass NavMenu extends ReactNextElement {\n /**\n * 菜单项\n */\n @property({\n attribute: false,\n })\n accessor menu: SidebarMenu | undefined;\n\n /**\n * 主菜单标题文字的自定义样式\n */\n @property({\n attribute: false,\n })\n accessor mainMenuTitleStyle: CSSProperties | undefined;\n\n /**\n * 是否显示 tooltip\n */\n @property({\n type: Boolean,\n })\n accessor showTooltip: boolean | undefined;\n\n render() {\n return (\n <NavMenuComponent\n menu={this.menu}\n showTooltip={this.showTooltip}\n mainMenuTitleStyle={this.mainMenuTitleStyle}\n />\n );\n }\n}\n\nfunction NavMenuComponent(props: NavMenuProps) {\n const { menu, showTooltip } = props;\n\n const history = getHistory();\n const navMenuWrapperRef = useRef<HTMLDivElement>(null);\n const [location, setLocation] = useState(history.location);\n const [overflowIndex, setOverflowIndex] = useState<number>(\n Number.MAX_SAFE_INTEGER\n );\n const { pathname, search } = location;\n\n const menuItems = useMemo(() => {\n return (menu?.menuItems ?? []).filter(\n (item) =>\n // 默认\n item.type === \"default\" ||\n // 没有类型\n !item.type ||\n // 分组类型并且没有子项,过滤\n ([\"group\", \"subMenu\"].includes(item.type) &&\n (item as SidebarMenuGroup).items?.length)\n );\n }, [menu?.menuItems]);\n\n const selectedKey = useMemo(() => {\n const { selectedKeys } = initMenuItemAndMatchCurrentPathKeys(\n menuItems ?? [],\n pathname,\n search,\n \"\"\n );\n return selectedKeys;\n }, [menuItems, pathname, search]);\n\n useEffect(() => {\n const unListen: UnregisterCallback = history.listen((location) => {\n setLocation(location);\n });\n return unListen;\n }, []);\n\n useEffect(() => {\n if (navMenuWrapperRef.current) {\n const resizeObserver = new ResizeObserver(() => {\n if (navMenuWrapperRef.current) {\n const { width } = navMenuWrapperRef.current.getClientRects()[0] ?? {};\n const childNodes = navMenuWrapperRef.current.childNodes;\n\n if (childNodes.length && width) {\n let wrapperWidth = width;\n let overflowIndex = childNodes.length;\n\n for (let i = 0; i < childNodes.length; i++) {\n const { width: childWidth, height: childHeight } = (\n childNodes[i] as HTMLElement\n ).getClientRects()[0];\n\n if (!childHeight && wrapperWidth - 40 < 0) {\n overflowIndex = i - 1;\n break;\n }\n\n wrapperWidth =\n wrapperWidth - childWidth - (i > 0 ? GAP_WIDTH : 0);\n if (wrapperWidth < 0) {\n overflowIndex = i;\n break;\n }\n }\n\n setOverflowIndex(overflowIndex < 0 ? 0 : overflowIndex);\n }\n }\n });\n resizeObserver.observe(navMenuWrapperRef.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }\n }, []);\n\n // istanbul ignore next;\n const overflowMenu = useMemo(\n (): SidebarMenuItem => ({\n type: \"subMenu\",\n title: \"···\",\n items: menuItems.slice(overflowIndex, menuItems.length).map((i) => ({\n ...i,\n type: i.type === \"group\" && i.items.length ? \"subMenu\" : i.type,\n })) as SidebarMenuItem[],\n }),\n [menuItems, overflowIndex]\n );\n\n return (\n <div ref={navMenuWrapperRef} className=\"nav-menu-wrapper\">\n {menuItems.map((item, index) => {\n const isHidden = overflowIndex <= index;\n return (\n <React.Fragment key={item.key}>\n {isSubMenu(item as SidebarMenuGroup, true) &&\n (item as SidebarMenuGroup).childLayout === \"category\" &&\n (item as SidebarMenuGroup).items?.length ? (\n <ThreeLevelMenuCom\n index={index}\n hidden={isHidden}\n item={item as SidebarMenuGroup}\n showTooltip={showTooltip}\n selectedKey={selectedKey}\n mainMenuTitleStyle={props.mainMenuTitleStyle}\n />\n ) : (item as SidebarMenuGroup).type === \"group\" &&\n (item as SidebarMenuGroup).childLayout === \"siteMap\" ? (\n <SitMapMenCom\n index={index}\n hidden={isHidden}\n item={item as SidebarMenuGroup}\n showTooltip={showTooltip}\n selectedKey={selectedKey}\n topData={true}\n mainMenuTitleStyle={props.mainMenuTitleStyle}\n />\n ) : (\n <RenderMenuItemCom\n index={index}\n hidden={isHidden}\n item={item}\n showTooltip={showTooltip}\n selectedKey={selectedKey}\n topData={true}\n mainMenuTitleStyle={props.mainMenuTitleStyle}\n />\n )}\n </React.Fragment>\n );\n })}\n <RenderMenuItemCom\n hidden={overflowIndex > menuItems.length}\n item={overflowMenu}\n showTooltip={showTooltip}\n selectedKey={selectedKey}\n overflow={true}\n topData={true}\n mainMenuTitleStyle={props.mainMenuTitleStyle}\n />\n <slot name=\"afterMenu\" />\n </div>\n );\n}\n\nexport { NavMenu };\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { LaunchpadButton as LaunchpadButtonComponent } from \"./LaunchpadButton/LaunchpadButton.js\";\nimport { initializeReactI18n } from \"@next-core/i18n/react\";\nimport \"@next-core/theme\";\nimport { NS, locales } from \"./i18n.js\";\nimport styleText from \"./LaunchpadButton/LaunchpadButton.shadow.css\";\n\ninitializeReactI18n(NS, locales);\n\nconst { defineElement } = createDecorators();\n\n/**\n * Launchpad 按钮构件\n * @author sailor\n * @insider\n */\n@defineElement(\"eo-launchpad-button\", {\n styleTexts: [styleText],\n})\nclass LaunchpadButton extends ReactNextElement {\n render() {\n return <LaunchpadButtonComponent />;\n }\n}\n\nexport { LaunchpadButton };\n","import React, { useEffect, useState } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { unwrapProvider } from \"@next-core/utils/general\";\nimport \"@next-core/theme\";\nimport { getHistory, getRuntime } from \"@next-core/runtime\";\nimport type { lockBodyScroll as _lockBodyScroll } from \"@next-bricks/basic/data-providers/lock-body-scroll/lock-body-scroll\";\n// import { useTranslation, initializeReactI18n } from \"@next-core/i18n/react\";\nimport hotkeys from \"hotkeys-js\";\nimport classNames from \"classnames\";\n// import { K, NS, locales } from \"./i18n.js\";\nimport LaunchpadSvg from \"../images/launchpad.svg\";\nimport styleText from \"./styles.shadow.css\";\nimport platformCategoryStyleText from \"./PlatformCategory.shadow.css\";\nimport { Launchpad } from \"./Launchpad\";\nimport {\n deferredFavorites,\n deferredLaunchpadInfo,\n deferredPlatformCategories,\n} from \"./useLaunchpadInfo\";\nimport launchpadStyleText from \"./Launchpad.shadow.css\";\nimport \"./host-context.css\";\n\n// initializeReactI18n(NS, locales);\n\nconst { defineElement } = createDecorators();\n\nconst lockBodyScroll = unwrapProvider<typeof _lockBodyScroll>(\n \"basic.lock-body-scroll\"\n);\n\n/**\n * Launchpad 启动台按钮(v2),点击后展开 Launchpad 面板,支持快捷键 Alt+L 开关、Esc 关闭。\n * @insider\n */\nexport\n@defineElement(\"eo-launchpad-button-v2\", {\n styleTexts: [styleText, platformCategoryStyleText, launchpadStyleText],\n})\nclass EoLaunchpadButtonV2 extends ReactNextElement {\n disconnectedCallback(): void {\n super.disconnectedCallback();\n lockBodyScroll(this, false);\n }\n\n render() {\n return <EoLaunchpadButtonV2Component host={this} />;\n }\n}\n\nexport function EoLaunchpadButtonV2Component({ host }: { host: HTMLElement }) {\n const [initialized, setInitialized] = useState(false);\n const [active, setActive] = useState(false);\n const toggleLaunchpad = (): void => {\n setActive((previous) => !previous);\n };\n\n useEffect(() => {\n // 当切换页面时,关闭Launchpad。\n const unlisten = getHistory().listen(() => {\n setActive(false);\n });\n return unlisten;\n }, []);\n\n useEffect(() => {\n // 打开一次 launchpad 后,保留 DOM。\n if (active && !initialized) {\n setInitialized(true);\n }\n }, [active, initialized]);\n\n // istanbul ignore next\n useEffect(() => {\n hotkeys.filter = function () {\n return true;\n };\n\n // 快捷打开/关闭 Launchpad\n hotkeys(\"alt+l\", (event) => {\n event.preventDefault();\n setActive((previous) => !previous);\n });\n\n // 按 Esc 关闭 Launchpad\n hotkeys(\"esc\", () => {\n setActive(false);\n });\n\n return () => {\n hotkeys.unbind(\"alt+l\");\n hotkeys.unbind(\"esc\");\n };\n }, []);\n\n useEffect(() => {\n lockBodyScroll(host, active);\n }, [active, host]);\n\n useEffect(() => {\n deferredLaunchpadInfo.schedulePrefetch();\n deferredFavorites.schedulePrefetch();\n getRuntime()?.getFeatureFlags()[\"launchpad-show-platform-category\"] &&\n deferredPlatformCategories.schedulePrefetch();\n }, []);\n\n return (\n <>\n <a\n role=\"button\"\n className={classNames(\"launchpad-button\", { active })}\n onClick={toggleLaunchpad}\n >\n <LaunchpadSvg />\n </a>\n <div\n className={classNames(\"mask\", { active })}\n onClick={toggleLaunchpad}\n ></div>\n {initialized && <Launchpad active={active} />}\n </>\n );\n}\n","import { wrapBrick } from \"@next-core/react-element\";\nimport { unwrapProvider } from \"@next-core/utils/general\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type {\n EoDropdownActions,\n DropdownActionsProps,\n DropdownActionsEvents,\n DropdownActionsEventsMapping,\n} from \"@next-bricks/basic/dropdown-actions\";\nimport type { showDialog as _showDialog } from \"@next-bricks/basic/data-providers/show-dialog/show-dialog\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nexport const WrappedDropdownActions = wrapBrick<\n EoDropdownActions,\n DropdownActionsProps,\n DropdownActionsEvents,\n DropdownActionsEventsMapping\n>(\"eo-dropdown-actions\", {\n onActionClick: \"action.click\",\n onVisibleChange: \"visible.change\",\n});\n\n// Use `unwrapProvider` to get the original function of a provider\nexport const showDialog =\n unwrapProvider<typeof _showDialog>(\"basic.show-dialog\");\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { get, pick } from \"lodash\";\nimport classNames from \"classnames\";\nimport { __secret_internals, checkIfByTransform } from \"@next-core/runtime\";\nimport type { SimpleAction } from \"@next-bricks/basic/actions\";\nimport {\n WrappedDropdownActions,\n WrappedIcon,\n WrappedLink,\n} from \"./wrapped-bricks\";\nimport type {\n ConfigMenuGroup,\n ConfigMenuItemDir,\n ConfigMenuItemNormal,\n ConfigVariant,\n MenuAction,\n MenuActionEventDetail,\n} from \"./interfaces\";\nimport { getLocaleName } from \"../shared/getLocaleName\";\n\nexport type ProcessedConfigMenuItemNormal = ConfigMenuItemNormal & {\n __pathname?: string;\n};\n\nexport interface MenuGroupProps {\n data: ConfigMenuGroup;\n actions?: MenuAction[];\n variant?: ConfigVariant;\n urlTemplate?: string;\n customUrlTemplate?: string;\n onMenuItemClick?(item: ProcessedConfigMenuItemNormal): void;\n onActionClick?: (detail: MenuActionEventDetail) => void;\n}\n\nexport function MenuGroup({\n data,\n actions,\n variant,\n urlTemplate,\n customUrlTemplate,\n onMenuItemClick,\n onActionClick,\n}: MenuGroupProps) {\n // Make it compatible\n data.type ??= \"group\";\n const { name, locales, items } = data;\n const [dropdownActive, setDropdownActive] = useState(false);\n\n const filteredActions = useMemo(() => {\n return __secret_internals.legacyDoTransform(\n data,\n actions?.filter((item) => checkIfByTransform(item, data))\n ) as MenuAction[] | undefined;\n }, [actions, data]);\n\n const handleActionClick = useCallback(\n (event: CustomEvent<SimpleAction>) => {\n onActionClick?.({\n data,\n action: event.detail,\n });\n },\n [data, onActionClick]\n );\n\n return (\n <li\n className={classNames(\"menu-group\", {\n empty: items.length === 0,\n blocked: data.allBlocked,\n })}\n >\n <div className=\"menu-group-label-wrapper\">\n <span className=\"menu-group-label\">{getLocaleName(locales, name)}</span>\n {variant !== \"menu-config\" && !!filteredActions?.length && (\n <WrappedDropdownActions\n actions={filteredActions}\n onVisibleChange={(event) => {\n setDropdownActive(event.detail);\n }}\n onActionClick={handleActionClick}\n >\n <WrappedIcon\n lib=\"fa\"\n icon=\"gear\"\n className={classNames(\"menu-config\", {\n active: dropdownActive,\n })}\n />\n </WrappedDropdownActions>\n )}\n </div>\n <ul className=\"menu\">\n {items.map((item) =>\n item.type === \"dir\" ? (\n <MenuItemFolder\n key={item.instanceId}\n data={item}\n actions={actions}\n variant={variant}\n urlTemplate={urlTemplate}\n customUrlTemplate={customUrlTemplate}\n onMenuItemClick={onMenuItemClick}\n onActionClick={onActionClick}\n />\n ) : (\n <MenuItem\n key={`${item.type}-${item.id}`}\n data={item}\n actions={actions}\n variant={variant}\n urlTemplate={urlTemplate}\n customUrlTemplate={customUrlTemplate}\n onClick={(data) => {\n onMenuItemClick?.({ ...item, ...data });\n }}\n onActionClick={onActionClick}\n />\n )\n )}\n </ul>\n </li>\n );\n}\n\nexport interface MenuItemProps {\n data: ConfigMenuItemNormal;\n actions?: MenuAction[];\n variant?: ConfigVariant;\n urlTemplate?: string;\n customUrlTemplate?: string;\n onClick?(data: { __pathname?: string }): void;\n onActionClick?: (detail: MenuActionEventDetail) => void;\n}\n\nexport function MenuItem({\n data,\n actions,\n variant,\n urlTemplate,\n customUrlTemplate,\n onClick,\n onActionClick,\n}: MenuItemProps) {\n const name = useMemo(() => getLocaleName(data.locales, data.name), [data]);\n\n const [dropdownActive, setDropdownActive] = useState(false);\n\n const filteredActions = useMemo(\n () =>\n __secret_internals.legacyDoTransform(\n data,\n actions?.filter((item) => checkIfByTransform(item, data))\n ) as MenuAction[] | undefined,\n [actions, data]\n );\n\n const handleActionClick = useCallback(\n (event: CustomEvent<SimpleAction>) => {\n onActionClick?.({\n data,\n action: event.detail,\n });\n },\n [data, onActionClick]\n );\n\n let __pathname: string;\n let disabled = false;\n let linkUrl = \"\";\n\n if (variant === \"launchpad-config\" || variant === \"menu-config\") {\n if (data.type === \"app\") {\n linkUrl = parseUrlTemplate(urlTemplate, data, \"\")!;\n } else {\n // 禁用外链菜单项\n const urlObject = new URL(data.url, location.origin);\n __pathname = urlObject.pathname;\n disabled = urlObject.origin !== location.origin;\n linkUrl = disabled\n ? \"\"\n : parseUrlTemplate(\n customUrlTemplate,\n {\n ...data,\n __pathname,\n },\n \"\"\n )!;\n }\n }\n\n return (\n <li\n className={classNames(\"menu-item\", {\n disabled: disabled || data.allBlocked,\n })}\n onClick={() => {\n onClick?.({ __pathname });\n }}\n >\n <WrappedLink\n tooltip={disabled ? \"该菜单项为外链,不支持配置\" : \"\"}\n url={linkUrl}\n >\n <WrappedIcon\n className=\"menu-icon\"\n lib=\"easyops\"\n icon=\"micro-app-center\"\n {...(data.menuIcon?.lib && data.menuIcon.icon\n ? (pick(data.menuIcon, [\n \"lib\",\n \"icon\",\n \"theme\",\n \"category\",\n \"prefix\",\n ]) as any)\n : null)}\n />\n <span className=\"menu-item-label\">{name}</span>\n </WrappedLink>\n {variant !== \"menu-config\" && !!filteredActions?.length && (\n <WrappedDropdownActions\n actions={filteredActions}\n onVisibleChange={(event) => {\n setDropdownActive(event.detail);\n }}\n onClick={(event) => {\n event.stopPropagation();\n }}\n onActionClick={handleActionClick}\n data-testid={`menu-item-actions-${data.id}`}\n >\n <WrappedIcon\n lib=\"fa\"\n icon=\"gear\"\n className={classNames(\"menu-config\", { active: dropdownActive })}\n />\n </WrappedDropdownActions>\n )}\n </li>\n );\n}\n\nexport interface MenuItemFolderProps {\n data: ConfigMenuItemDir;\n actions?: MenuAction[];\n variant?: ConfigVariant;\n urlTemplate?: string;\n customUrlTemplate?: string;\n onMenuItemClick?(item: ProcessedConfigMenuItemNormal): void;\n onActionClick?: (detail: MenuActionEventDetail) => void;\n}\n\nfunction MenuItemFolder({\n data,\n actions,\n variant,\n urlTemplate,\n customUrlTemplate,\n onMenuItemClick,\n onActionClick,\n}: MenuItemFolderProps) {\n const { name, locales, items } = data;\n const [dropdownActive, setDropdownActive] = useState(false);\n const [expanded, setExpanded] = useState(false);\n\n const filteredActions = useMemo(\n () =>\n __secret_internals.legacyDoTransform(\n data,\n actions?.filter((item) => checkIfByTransform(item, data))\n ) as MenuAction[] | undefined,\n [actions, data]\n );\n\n const toggle = useCallback(() => {\n setExpanded((previous) => !previous);\n }, []);\n\n const handleActionClick = useCallback(\n (event: CustomEvent<SimpleAction>) => {\n onActionClick?.({\n data,\n action: event.detail,\n });\n },\n [data, onActionClick]\n );\n\n return (\n <li\n className={classNames(\"menu-item folder\", {\n empty: items.length === 0,\n blocked: data.allBlocked,\n })}\n >\n <div className=\"menu-folder-label-wrapper\">\n <WrappedLink onClick={toggle}>\n <WrappedIcon\n lib=\"fa\"\n prefix=\"far\"\n icon=\"folder-open\"\n className=\"menu-icon\"\n />\n <span className=\"menu-item-label\">\n {getLocaleName(locales, name)}\n </span>\n <WrappedIcon\n lib=\"antd\"\n icon={expanded ? \"up\" : \"down\"}\n className=\"menu-item-toggle\"\n />\n </WrappedLink>\n {variant !== \"menu-config\" && !!filteredActions?.length && (\n <WrappedDropdownActions\n actions={filteredActions}\n onVisibleChange={(event) => {\n setDropdownActive(event.detail);\n }}\n onActionClick={handleActionClick}\n >\n <WrappedIcon\n lib=\"fa\"\n icon=\"gear\"\n className={classNames(\"menu-config\", {\n active: dropdownActive,\n })}\n />\n </WrappedDropdownActions>\n )}\n </div>\n <ul className={classNames(\"sub-menu\", { expanded })}>\n {items.map((item) => (\n <MenuItem\n key={item.instanceId}\n data={item}\n actions={actions}\n variant={variant}\n urlTemplate={urlTemplate}\n customUrlTemplate={customUrlTemplate}\n onClick={(data) => {\n onMenuItemClick?.({ ...item, ...data });\n }}\n onActionClick={onActionClick}\n />\n ))}\n </ul>\n </li>\n );\n}\n\nfunction parseUrlTemplate(\n urlTemplate: string | undefined,\n data: unknown,\n fallback?: string\n) {\n return (\n urlTemplate?.replace(/{{(.*?)}}/g, (_match, key) =>\n encodeURIComponent(String(get(data, key.trim())))\n ) ?? fallback\n );\n}\n","import React, { useMemo } from \"react\";\nimport { EventEmitter, createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport \"@next-core/theme\";\nimport type {\n ConfigMenuGroup,\n ConfigMenuItem,\n ConfigMenuItemApp,\n ConfigMenuItemCustom,\n ConfigMenuItemDir,\n ConfigMenuItemNormal,\n ConfigVariant,\n MenuAction,\n MenuActionEventDetail,\n} from \"./interfaces\";\nimport { MenuGroup, MenuGroupProps } from \"./MenuGroup\";\nimport styleText from \"./styles.shadow.css\";\n\nconst { defineElement, property, event } = createDecorators();\n\nconst BASE_PATH = \"/next/\";\n\n/**\n * 进行 Launchpad 配置。\n *\n * 也可用于菜单自定义显示产品功能清单。\n *\n * @insider\n */\nexport\n@defineElement(\"nav.launchpad-config\", {\n styleTexts: [styleText],\n})\nclass LaunchpadConfig extends ReactNextElement implements LaunchpadConfigProps {\n /** Launchpad 配置菜单分组数据 */\n @property({ attribute: false })\n accessor menuGroups: ConfigMenuGroup[] | undefined;\n\n /** 菜单操作按钮配置列表 */\n @property({ attribute: false })\n accessor actions: MenuAction[] | undefined;\n\n /**\n * @default \"launchpad-config\"\n * @description 显示变体:launchpad-config(Launchpad 配置)、factory-launchpad-config(工厂配置)、menu-config(菜单配置)、blacklist-config(黑名单配置)\n */\n @property()\n accessor variant: ConfigVariant | undefined;\n\n /**\n * 菜单项 APP 类型的链接模板,例如可配置为 `/app/{{ id }}`。\n *\n * 注:仅用于 variant: \"menu-config\"。\n */\n @property()\n accessor urlTemplate: string | undefined;\n\n /**\n * 菜单项自定义类型的链接模板,例如可配置为 `/custom?url={{ __pathname }}`。\n *\n * 注:仅用于 variant: \"menu-config\"。\n * 外链菜单链接会设置为禁用。\n * `__pathname` 是运行时变量,表示 url 解析后的 pathname。\n */\n @property()\n accessor customUrlTemplate: string | undefined;\n\n /**\n * 屏蔽的 URL 列表,例如可配置为 `[\"/app/1\", \"/app/2\"]`。\n *\n * 注:仅用于 variant: \"blacklist-config\"。\n */\n @property({ attribute: false })\n accessor blacklist: string[] | undefined;\n\n /**\n * @description 点击菜单项时触发\n * @detail 被点击的菜单项数据(app 或 custom 类型)\n */\n @event({ type: \"menu-item.click\" })\n accessor #menuItemClickEvent!: EventEmitter<ConfigMenuItemNormal>;\n\n /**\n * @description 点击菜单操作按钮时触发\n * @detail { data: 操作关联的菜单项或分组, action: 被点击的操作按钮配置 }\n */\n @event({ type: \"action.click\" })\n accessor #actionClickEvent!: EventEmitter<MenuActionEventDetail>;\n\n #handleMenuItemClick = (item: ConfigMenuItemNormal) => {\n this.#menuItemClickEvent.emit(item);\n };\n\n #onActionClick = (detail: MenuActionEventDetail) => {\n this.#actionClickEvent.emit(detail);\n };\n\n render() {\n return (\n <LaunchpadConfigComponent\n menuGroups={this.menuGroups}\n actions={this.actions}\n variant={this.variant ?? \"launchpad-config\"}\n urlTemplate={this.urlTemplate}\n customUrlTemplate={this.customUrlTemplate}\n blacklist={this.blacklist}\n onMenuItemClick={this.#handleMenuItemClick}\n onActionClick={this.#onActionClick}\n />\n );\n }\n}\n\nexport interface LaunchpadConfigProps\n extends Pick<\n MenuGroupProps,\n \"actions\" | \"variant\" | \"urlTemplate\" | \"customUrlTemplate\"\n > {\n menuGroups?: ConfigMenuGroup[];\n blacklist?: string[];\n}\n\nexport interface LaunchpadConfigEventsMapping {\n onMenuItemClick: \"menu-item.click\";\n onActionClick: \"action.click\";\n}\n\nexport interface LaunchpadConfigComponentProps\n extends LaunchpadConfigProps,\n Pick<MenuGroupProps, \"onMenuItemClick\" | \"onActionClick\"> {}\n\nexport function LaunchpadConfigComponent({\n menuGroups,\n actions,\n variant,\n urlTemplate,\n customUrlTemplate,\n blacklist,\n onMenuItemClick,\n onActionClick,\n}: LaunchpadConfigComponentProps) {\n const processedMenuGroup = useMemo<ConfigMenuGroup[] | undefined>(() => {\n if (variant === \"blacklist-config\") {\n return menuGroups?.map((group) => {\n const items = group.items.map((item) =>\n getMenuItemWithBlockInfo(item, blacklist)\n );\n const blockable = items.some((item) => item.blockable);\n const hasBlocked = blockable && items.some((item) => item.hasBlocked);\n const hasUnblocked =\n blockable && items.some((item) => item.hasUnblocked);\n const allBlocked =\n items.length > 0 && items.every((item) => item.allBlocked);\n const blockableUrls = items.flatMap((item) =>\n item.blockable\n ? ((item as ConfigMenuItemDir).blockableUrls ??\n (item as ConfigMenuItemCustom).blockableUrl ??\n (item as ConfigMenuItemApp).url)\n : []\n );\n return {\n ...group,\n type: \"group\",\n items,\n blockable,\n hasBlocked,\n hasUnblocked,\n allBlocked,\n blockableUrls,\n };\n });\n } else if (variant === \"launchpad-config\") {\n return getMenuGroupsWithoutBlockedItems(menuGroups)?.filter(Boolean);\n } else {\n return menuGroups;\n }\n }, [variant, menuGroups, blacklist]);\n\n return (\n <ul className=\"menu-groups\">\n {processedMenuGroup?.map((group) => (\n <MenuGroup\n key={group.instanceId}\n data={group}\n actions={actions}\n variant={variant}\n urlTemplate={urlTemplate}\n customUrlTemplate={customUrlTemplate}\n onMenuItemClick={onMenuItemClick}\n onActionClick={onActionClick}\n />\n ))}\n </ul>\n );\n}\n\nfunction getMenuGroupsWithoutBlockedItems<T extends ConfigMenuGroup>(\n menuGroups: T[] | undefined\n): T[] | undefined {\n return menuGroups\n ?.map<T | null>((group) => {\n const items = group.items\n .map((item) => getMenuItemWithoutBlockedItems(item))\n .filter(Boolean) as ConfigMenuItem[];\n return { ...group, items };\n })\n .filter(Boolean) as T[];\n}\n\nfunction getMenuItemWithoutBlockedItems<T extends ConfigMenuItem>(\n item: T\n): T | null {\n if (item.type === \"dir\") {\n const subItems = item.items\n .map((subItem) => getMenuItemWithoutBlockedItems(subItem))\n .filter(Boolean) as T[];\n return { ...item, items: subItems };\n }\n if (item.type === \"app\") {\n return item.url && auth.isBlockedPath(item.url) ? null : item;\n }\n return item.url && auth.isBlockedHref(item.url) ? null : item;\n}\n\nfunction getMenuItemWithBlockInfo<T extends ConfigMenuItem>(\n item: T,\n blacklist: string[] | undefined\n): T {\n if (item.type === \"dir\") {\n const subItems = item.items.map((subItem) =>\n getMenuItemWithBlockInfo(subItem, blacklist)\n );\n const blockable = subItems.some((subItem) => subItem.blockable);\n const hasBlocked = subItems.some((subItem) => subItem.hasBlocked);\n const hasUnblocked =\n blockable && subItems.some((subItem) => subItem.hasUnblocked);\n const allBlocked =\n subItems.length > 0 && subItems.every((subItem) => subItem.allBlocked);\n const blockableUrls = subItems.flatMap((subItem) =>\n subItem.blockable\n ? ((subItem as unknown as ConfigMenuItemDir).blockableUrls ??\n (subItem as ConfigMenuItemCustom).blockableUrl ??\n subItem.url)\n : []\n );\n return {\n ...item,\n items: subItems,\n blockable,\n hasBlocked,\n hasUnblocked,\n allBlocked,\n blockableUrls,\n };\n }\n\n if (item.type === \"app\") {\n const blockable = !!item.url;\n const hasBlocked = blockable && blacklist?.includes(item.url);\n const hasUnblocked = blockable && !hasBlocked;\n return {\n ...item,\n blockable,\n hasBlocked,\n hasUnblocked,\n allBlocked: hasBlocked,\n };\n }\n\n const { blockable, blockableUrl } = getBlockableUrl(item.url);\n const hasBlocked = blockable && blacklist?.includes(blockableUrl!);\n const hasUnblocked = blockable && !hasBlocked;\n return {\n ...item,\n blockable,\n hasBlocked,\n hasUnblocked,\n allBlocked: hasBlocked,\n blockableUrl,\n };\n}\n\nfunction getBlockableUrl(url: string | undefined) {\n let blockable = !!url?.startsWith(BASE_PATH);\n let blockableUrl: string | undefined;\n if (blockable) {\n const urlObj = new URL(url!, location.origin);\n if (\n urlObj.origin === location.origin &&\n urlObj.pathname.startsWith(BASE_PATH)\n ) {\n blockableUrl = urlObj.pathname.substring(BASE_PATH.length - 1);\n } else {\n blockable = false;\n blockableUrl = undefined;\n }\n }\n return { blockable, blockableUrl };\n}\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport { getRuntime } from \"@next-core/runtime\";\nimport { useCurrentApp } from \"@next-core/react-runtime\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport \"@next-core/theme\";\nimport { JsonStorage } from \"@next-shared/general/JsonStorage\";\nimport moment from \"moment\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport styleText from \"./styles.shadow.css\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\nconst { defineElement } = createDecorators();\n\n/**\n * 导航栏告警提示组件,用于显示 License 到期提醒和页面性能问题警告。\n * @insider\n */\nexport\n@defineElement(\"nav.easyops-navbar-alerts\", {\n styleTexts: [styleText],\n})\nclass EasyopsNavbarAlerts extends ReactNextElement {\n render() {\n return <EasyopsNavbarAlertsComponent />;\n }\n}\n\ninterface SlowRenderInfo {\n renderTime: number;\n suggestTime: number;\n suggestUrl?: string;\n}\n\nconst storage = new JsonStorage(localStorage);\n\nexport function EasyopsNavbarAlertsComponent() {\n const [licenseHide, setLienceseHide] = useState<boolean>(false);\n const [slowRender, setSlowRender] = useState<SlowRenderInfo | null>(null);\n const currentApp = useCurrentApp();\n const licenseDismissedKey = useMemo(() => {\n const authInfo = auth.getAuth();\n return `license:${authInfo.org}`;\n }, []);\n\n const licenseDaysLeft = useMemo(() => {\n const authInfo = auth.getAuth();\n const validDaysLeft = authInfo.license?.validDaysLeft;\n let dismissExpireAt: number;\n if (licenseHide) {\n return null;\n }\n if (\n validDaysLeft &&\n validDaysLeft <= 15 &&\n authInfo.isAdmin &&\n ((dismissExpireAt = storage.getItem(licenseDismissedKey)),\n !dismissExpireAt || moment().unix() > dismissExpireAt)\n ) {\n return validDaysLeft;\n }\n return null;\n }, [licenseDismissedKey, licenseHide]);\n\n useEffect(() => {\n const handelRouteRender = (e: Event): void => {\n const renderTime = (e as CustomEvent<{ renderTime: number }>).detail\n .renderTime;\n const { loadTime, loadInfoPage } = getRuntime().getMiscSettings() as {\n loadTime: number;\n loadInfoPage?: string;\n };\n if (currentApp?.isBuildPush && loadTime > 0 && renderTime > loadTime) {\n setSlowRender({\n renderTime: millisecondToSecond(renderTime),\n suggestTime: millisecondToSecond(loadTime),\n suggestUrl: loadInfoPage,\n });\n }\n };\n window.addEventListener(\"route.render\", handelRouteRender);\n return () => {\n window.removeEventListener(\"route.render\", handelRouteRender);\n };\n }, [currentApp]);\n\n const handleLicenseAlertDismiss = useCallback(() => {\n // 一天内不再显示。\n storage.setItem(licenseDismissedKey, moment().unix() + 86400);\n setLienceseHide(true);\n }, [licenseDismissedKey]);\n\n return (\n <>\n {slowRender && (\n <Alert\n text={`您的页面存在性能问题, 当前页面渲染时间 ${slowRender.renderTime} 秒, 规定阈值为: ${slowRender.suggestTime} 秒, 您已超过。请您针对该页面进行性能优化!`}\n type=\"warning\"\n link={\n slowRender.suggestUrl\n ? {\n label: \"建议解决思路\",\n url: slowRender.suggestUrl,\n }\n : undefined\n }\n />\n )}\n {licenseDaysLeft !== null && (\n <Alert\n text={`离 License 过期还有 ${licenseDaysLeft} 天`}\n type=\"info\"\n closable\n onClose={handleLicenseAlertDismiss}\n />\n )}\n </>\n );\n}\n\ninterface AlertProps {\n text: string;\n type: \"info\" | \"warning\";\n closable?: boolean;\n link?: {\n label: string;\n url: string;\n };\n onClose?: () => void;\n}\n\nfunction Alert({ text, type, closable, link, onClose }: AlertProps) {\n return (\n <div className={`alert ${type}`}>\n <span className=\"text\">{text}</span>\n {link && (\n <WrappedLink className=\"link\" href={link.url} target=\"_blank\">\n {link.label}\n </WrappedLink>\n )}\n {closable && (\n <WrappedIcon\n lib=\"antd\"\n icon=\"close\"\n className=\"icon\"\n role=\"button\"\n onClick={onClose}\n />\n )}\n </div>\n );\n}\n\nfunction millisecondToSecond(millisecond: number) {\n return Math.floor(millisecond * 100) / 1e5;\n}\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { useLaunchpadInfo } from \"../launchpad-button-v2/useLaunchpadInfo\";\nimport { LaunchpadsContext } from \"../launchpad-button-v2/LaunchpadContext\";\nimport { SidebarMenuItem } from \"../launchpad-button-v2/MenuGroup\";\nimport { SidebarMenuItemData } from \"../launchpad-button-v2/interfaces\";\nimport { Target } from \"@next-bricks/basic/link\";\n\nconst { defineElement, property } = createDecorators();\n\n/**\n * 快捷访问\n * @insider\n */\nexport\n@defineElement(\"eo-launchpad-quick-access\", {\n styleTexts: [styleText],\n})\nclass EoLaunchpadQuickAccess extends ReactNextElement {\n /**\n * 是否为只读模式(隐藏收藏切换按钮)\n */\n @property({\n type: Boolean,\n })\n accessor readonly: boolean | undefined;\n\n /**\n * 菜单项链接打开的目标\n */\n @property()\n accessor target: Target | undefined;\n\n render() {\n return (\n <EoLaunchpadQuickAccessComponent\n readonly={this.readonly}\n target={this.target}\n />\n );\n }\n}\n\ninterface EoLaunchpadQuickAccessComponentProps {\n readonly?: boolean;\n target?: Target;\n}\n\nexport function EoLaunchpadQuickAccessComponent({\n readonly,\n target,\n}: EoLaunchpadQuickAccessComponentProps) {\n const {\n favorites,\n loadingFavorites,\n pushRecentVisit,\n toggleStar,\n isStarred,\n } = useLaunchpadInfo(true);\n\n return (\n <LaunchpadsContext.Provider\n value={{\n searching: false,\n loadingFavorites,\n readonly,\n pushRecentVisit,\n toggleStar,\n isStarred,\n }}\n >\n <ul className=\"quick-access-list\">\n {favorites.map((item, index) => (\n <SidebarMenuItem\n key={index}\n target={target}\n item={item as SidebarMenuItemData}\n />\n ))}\n </ul>\n </LaunchpadsContext.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[0].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[2]!./host-context.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\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[0].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[2]!./host-context.css\";\n export default content && content.locals ? content.locals : undefined;\n","export enum K {\n SEARCH_PLACEHOLDER = \"SEARCH_PLACEHOLDER\"\n}\n\nconst en: Locale = {\n SEARCH_PLACEHOLDER: \"Search products/micro-applications\"\n};\n\nconst zh: Locale = {\n SEARCH_PLACEHOLDER: \"搜索产品/微应用\"\n};\n\nexport const NS = \"bricks/nav/search-launchpad\";\n\nexport const locales = { en, zh };\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};","import React, { useCallback, useRef, useState } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport classNames from \"classnames\";\nimport { LaunchpadsContext } from \"../launchpad-button-v2/LaunchpadContext\";\nimport { useLaunchpadInfo } from \"../launchpad-button-v2/useLaunchpadInfo\";\nimport { MenuGroup } from \"../launchpad-button-v2/MenuGroup\";\nimport { GeneralIcon, GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport \"./host-context.css\";\nimport { K, NS, locales } from \"./i18n.js\";\nimport { useTranslation, initializeReactI18n } from \"@next-core/i18n/react\";\n\ninitializeReactI18n(NS, locales);\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nconst { defineElement, property } = createDecorators();\n\n/**\n * launchpad 搜索\n * @insider\n */\nexport\n@defineElement(\"eo-search-launchpad\", {\n styleTexts: [styleText],\n})\nclass EoSearchLaunchpad extends ReactNextElement {\n /**\n * 简约模式\n */\n @property({\n type: Boolean,\n })\n accessor readonly: boolean | undefined;\n\n render() {\n return <EoSearchLaunchpadComponent readonly={this.readonly} />;\n }\n}\n\ninterface EoSearchLaunchpadComponentProps {\n readonly?: boolean;\n}\n\nexport function EoSearchLaunchpadComponent({\n readonly,\n}: EoSearchLaunchpadComponentProps) {\n const searchInputRef = useRef<HTMLInputElement>(null);\n const handleClickSearchBox = useCallback(() => {\n searchInputRef.current?.focus();\n }, []);\n\n const [active, setActive] = useState(false);\n\n const {\n loading,\n q,\n setQ,\n menuGroups,\n loadingFavorites,\n pushRecentVisit,\n toggleStar,\n isStarred,\n } = useLaunchpadInfo(active);\n const searching = !!q;\n const { t } = useTranslation(NS);\n\n const handleSearch = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setQ(e.target.value);\n },\n [setQ]\n );\n\n const clearSearch = useCallback(() => {\n setQ(\"\");\n }, [setQ]);\n\n return (\n <LaunchpadsContext.Provider\n value={{\n searching,\n loadingFavorites,\n readonly,\n pushRecentVisit,\n toggleStar,\n isStarred,\n }}\n >\n <div className=\"container\">\n <div className=\"search-box\" onClick={handleClickSearchBox}>\n <WrappedIcon\n lib=\"fa\"\n icon=\"magnifying-glass\"\n className=\"search-icon\"\n />\n <input\n ref={searchInputRef}\n placeholder={t(K.SEARCH_PLACEHOLDER) as string}\n value={q}\n onChange={handleSearch}\n className=\"search-input\"\n onFocus={() => setActive(true)}\n onBlur={() => setActive(false)}\n />\n <WrappedIcon\n lib=\"antd\"\n theme=\"filled\"\n icon=\"close-circle\"\n className={classNames(\"search-clear\", { searching })}\n onClick={clearSearch}\n onMouseDown={(e) => e.preventDefault()}\n />\n </div>\n <div\n className={classNames(\"dropdown\", { \"dropdown-active\": active })}\n onMouseDown={(e) => e.preventDefault()}\n >\n <div className={classNames(\"dropdown-content\", { loading })}>\n <Loading loading={loading} />\n <ul className=\"menu-groups\">\n {menuGroups.map((group) => (\n <MenuGroup\n key={group.name}\n name={group.name}\n items={group.items}\n />\n ))}\n </ul>\n </div>\n </div>\n </div>\n </LaunchpadsContext.Provider>\n );\n}\n\nfunction Loading({ loading }: { loading: boolean }) {\n return (\n loading && (\n <div className=\"spinner\">\n <WrappedIcon lib=\"fa\" icon=\"spinner\" spinning />\n </div>\n )\n );\n}","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { useLaunchpadInfo } from \"../launchpad-button-v2/useLaunchpadInfo\";\nimport type { Link, LinkProps, Target } from \"@next-bricks/basic/link\";\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\nconst { defineElement, property } = createDecorators();\n\n/**\n * launchpad 最近访问\n * @insider\n */\nexport\n@defineElement(\"eo-launchpad-recent-visits\", {\n styleTexts: [styleText],\n})\nclass EoLaunchpadRecentVisits extends ReactNextElement {\n /**\n * 菜单项链接打开的目标(仅对应用类型的访问项生效,自定义链接类型始终在新标签打开)\n */\n @property({\n attribute: false,\n })\n accessor target: Target | undefined;\n\n render() {\n return <EoLaunchpadRecentVisitsComponent target={this.target} />;\n }\n}\n\ninterface EoLaunchpadRecentVisitsComponentProps {\n target?: Target;\n}\nexport function EoLaunchpadRecentVisitsComponent({\n target,\n}: EoLaunchpadRecentVisitsComponentProps) {\n const { recentVisits, pushRecentVisit } = useLaunchpadInfo(true);\n\n return (\n <ul className=\"recent-visits\">\n {recentVisits.map((item, index) => (\n <li key={index}>\n <WrappedLink\n onClick={() => pushRecentVisit(item)}\n {...(item.type === \"app\"\n ? {\n url: item.url,\n target,\n }\n : {\n href: item.url,\n target: \"_blank\",\n })}\n >\n <span>{item.name}</span>\n </WrappedLink>\n </li>\n ))}\n </ul>\n );\n}\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport classNames from \"classnames\";\nimport styleText from \"./styles.shadow.css\";\n\nconst { defineElement, property } = createDecorators();\n\nexport interface AppBarWrapperProps {\n isFixed?: boolean;\n position?: \"static\" | \"fixed\";\n displayCenter?: boolean;\n extraAppBarContentStyle?: React.CSSProperties;\n}\n\n/**\n * 应用顶部容器\n * @slot left - 左侧内容区\n * @slot right - 右侧内容区\n */\nexport\n@defineElement(\"eo-app-bar-wrapper\", {\n styleTexts: [styleText],\n alias: [\"basic.app-bar-wrapper\"],\n})\nclass EoAppBarWrapper extends ReactNextElement implements AppBarWrapperProps {\n /**\n * 是否固定定位。\n *\n * @default true\n * @deprecated 使用 `position` 属性代替\n */\n @property({\n type: Boolean,\n })\n accessor isFixed: boolean | undefined;\n\n /**\n * 设置定位方式:静态定位或固定定位。\n *\n * 设置时优先级高于 `isFixed`。\n *\n * @default \"fixed\"\n */\n @property()\n accessor position: \"static\" | \"fixed\" | undefined;\n\n /**\n * 居中显示\n * @default false\n */\n @property({\n type: Boolean,\n })\n accessor displayCenter: boolean | undefined;\n\n /** 自定义样式 */\n @property({\n attribute: false,\n })\n accessor extraAppBarContentStyle: React.CSSProperties | undefined;\n\n render() {\n return (\n <EoAppBarWrapperComponent\n displayCenter={this.displayCenter}\n isFixed={this.isFixed}\n position={this.position}\n extraAppBarContentStyle={this.extraAppBarContentStyle}\n />\n );\n }\n}\n\nexport function EoAppBarWrapperComponent({\n isFixed = true,\n position,\n displayCenter = false,\n extraAppBarContentStyle = {},\n}: AppBarWrapperProps) {\n React.useEffect(() => {\n const mainElement = document.getElementById(\"main-mount-point\");\n const iframeMainElement = document.getElementById(\n \"legacy-iframe-mount-point\"\n );\n mainElement && (mainElement.style.marginTop = \"\");\n iframeMainElement && (iframeMainElement.style.marginTop = \"\");\n }, []);\n\n return (\n <div className=\"app-bar-container\">\n <div\n className={classNames(\n \"app-bar\",\n position === \"static\"\n ? \"static\"\n : position === \"fixed\" || isFixed\n ? \"fixed\"\n : \"absolute\"\n )}\n >\n {/* TODO: need AppBarTips */}\n <div\n className=\"app-bar-content\"\n style={{\n justifyContent: displayCenter ? \"space-around\" : \"space-between\",\n ...extraAppBarContentStyle,\n }}\n >\n <div className=\"left\">\n <slot name=\"left\" />\n </div>\n <div className=\"right\">\n <slot name=\"right\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { getRealValue } from \"@next-core/runtime\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport { useCurrentApp, useNavConfig } from \"@next-core/react-runtime\";\nimport { BreadcrumbItemConf } from \"@next-core/types\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport type { EoBreadcrumb } from \"@next-bricks/basic/breadcrumb\";\nimport type {\n EoBreadcrumbItem,\n BreadcrumbItemProps,\n} from \"@next-bricks/basic/breadcrumb-item\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { ExtendedLocationDescriptor } from \"@next-bricks/basic/link\";\n\nconst { defineElement, property } = createDecorators();\n\nconst WrappedBreadcrumb = wrapBrick<EoBreadcrumb, unknown>(\"eo-breadcrumb\");\nconst WrappedBreadcrumbItem = wrapBrick<EoBreadcrumbItem, BreadcrumbItemProps>(\n \"eo-breadcrumb-item\"\n);\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface Menu {\n title: string;\n icon?: GeneralIconProps;\n link?: ExtendedLocationDescriptor;\n}\n\nexport interface EoFrameBreadcrumbProps {\n breadcrumb?: BreadcrumbItemConf[];\n noCurrentApp?: boolean;\n menu?: Menu;\n}\n\n/**\n * 面包屑\n */\nexport\n@defineElement(\"eo-frame-breadcrumb\", {\n styleTexts: [styleText],\n})\nclass EoFrameBreadcrumb\n extends ReactNextElement\n implements EoFrameBreadcrumbProps\n{\n /**\n * 面包屑配置\n */\n @property({\n attribute: false,\n })\n accessor breadcrumb: BreadcrumbItemConf[] | undefined;\n\n /**\n * 是否隐藏当前应用名称\n */\n @property({ type: Boolean })\n accessor noCurrentApp: boolean | undefined;\n\n /**\n * 菜单配置\n */\n @property({\n attribute: false,\n })\n accessor menu: Menu | undefined;\n\n render() {\n return (\n <EoFrameBreadcrumbComponent\n breadcrumb={this.breadcrumb}\n noCurrentApp={this.noCurrentApp}\n menu={this.menu}\n />\n );\n }\n}\n\nexport function EoFrameBreadcrumbComponent(props: EoFrameBreadcrumbProps) {\n const { menu } = props;\n\n const navConfig = useNavConfig();\n const currentApp = useCurrentApp();\n const curAppBreadcrumb = currentApp?.breadcrumb;\n // 处理面包屑文本中的动态计算表达式\n const currentAppBreadcrumbItems = curAppBreadcrumb?.items?.map((item) => ({\n ...item,\n text: getRealValue(item.text),\n })) as Array<BreadcrumbItemConf & { icon: GeneralIconProps }>;\n const breadcrumbItems = props.breadcrumb?.length\n ? props.breadcrumb\n : navConfig?.breadcrumb;\n\n const noCurrentApp = props.noCurrentApp ?? curAppBreadcrumb?.noCurrentApp;\n const useCurrentMenuTitle = curAppBreadcrumb?.useCurrentMenuTitle;\n\n return (\n <WrappedBreadcrumb>\n <span slot=\"separator\">/</span>\n {currentAppBreadcrumbItems?.map((item, index) => {\n return (\n <WrappedBreadcrumbItem key={index} url={item.to}>\n {item.icon ? (\n <WrappedIcon\n className=\"breadcrumb-item-prefix-icon\"\n slot=\"prefix\"\n {...item.icon}\n />\n ) : (\n index === 0 && (\n <WrappedIcon\n className=\"breadcrumb-item-prefix-icon\"\n slot=\"prefix\"\n lib=\"antd\"\n icon=\"home\"\n theme=\"outlined\"\n />\n )\n )}\n {item.text}\n </WrappedBreadcrumbItem>\n );\n })}\n {currentApp && !noCurrentApp ? (\n <WrappedBreadcrumbItem\n url={\n breadcrumbItems?.length &&\n currentApp.homepage &&\n !currentApp.internal\n ? currentApp.homepage\n : undefined\n }\n >\n {!currentAppBreadcrumbItems?.length && (\n <WrappedIcon\n {...currentApp.menuIcon}\n slot=\"prefix\"\n className=\"breadcrumb-item-prefix-icon\"\n />\n )}\n {currentApp.localeName}\n </WrappedBreadcrumbItem>\n ) : null}\n {useCurrentMenuTitle && menu ? (\n <WrappedBreadcrumbItem url={menu.link}>\n {menu.icon && (\n <WrappedIcon\n {...menu.icon}\n className=\"breadcrumb-item-prefix-icon\"\n slot=\"prefix\"\n />\n )}\n {menu.title}\n </WrappedBreadcrumbItem>\n ) : null}\n {breadcrumbItems?.map((item, index) => (\n <WrappedBreadcrumbItem key={index} url={item.to}>\n {item.text}\n </WrappedBreadcrumbItem>\n ))}\n </WrappedBreadcrumb>\n );\n}\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\n\nconst { defineElement, property } = createDecorators();\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface EoSidebarMenuItemProps {\n url?: LinkProps[\"url\"];\n href?: LinkProps[\"href\"];\n icon?: GeneralIconProps;\n target?: LinkProps[\"target\"];\n selected?: boolean;\n inSubmenu?: boolean;\n menuCollapsed?: boolean;\n}\n\n/**\n * 侧栏菜单项\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar-menu-item\", {\n styleTexts: [styleText],\n})\nclass EoSidebarMenuItem\n extends ReactNextElement\n implements EoSidebarMenuItemProps\n{\n /**\n * 菜单项对应的系统内地址\n */\n @property({ attribute: false })\n accessor url: LinkProps[\"url\"] | undefined;\n\n /**\n * 菜单项对应的外部链接地址\n */\n @property()\n accessor href: LinkProps[\"href\"] | undefined;\n\n /**\n * 菜单项链接打开的目标\n */\n @property()\n accessor target: LinkProps[\"target\"] | undefined;\n\n /**\n * 菜单项的图标\n */\n @property({ attribute: false })\n accessor icon: GeneralIconProps | undefined;\n\n /**\n * 是否选中\n */\n @property({ type: Boolean })\n accessor selected: boolean | undefined;\n\n /**\n * 是否在二级菜单中\n */\n @property({ type: Boolean })\n accessor inSubmenu: boolean | undefined;\n\n /**\n * 菜单整体是否收起状态\n */\n @property({ type: Boolean })\n accessor menuCollapsed: boolean | undefined;\n\n render() {\n return (\n <EoSidebarMenuItemComponent\n url={this.url}\n href={this.href}\n target={this.target}\n icon={this.icon}\n selected={this.selected}\n />\n );\n }\n}\n\nexport function EoSidebarMenuItemComponent(props: EoSidebarMenuItemProps) {\n const { url, href, target, icon, selected } = props;\n\n return (\n <WrappedLink type=\"plain\" url={url} href={href} target={target}>\n <div className={\"menu-item\"}>\n <span className=\"menu-item-icon-container\">\n <WrappedIcon\n {...icon}\n className=\"menu-item-icon\"\n {...(icon && \"imgSrc\" in icon\n ? { imgStyle: { filter: selected ? \"brightness(7)\" : undefined } }\n : {})}\n />\n </span>\n <span className=\"menu-item-text\">\n <slot />\n </span>\n </div>\n </WrappedLink>\n );\n}\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\nimport { getCssPropertyValue } from \"@next-core/runtime\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport type {\n SidebarMenu as SidebarMenuType,\n SidebarMenuGroup,\n SidebarMenuItem,\n SidebarMenuSimpleItem,\n} from \"@next-shared/general/types\";\nimport type {\n EoSidebarMenu,\n EoSidebarMenuProps,\n} from \"./sidebar-menu/index.js\";\nimport type {\n EoSidebarMenuItem,\n EoSidebarMenuItemProps,\n} from \"./sidebar-menu-item/index.js\";\nimport type {\n EoSidebarMenuGroup,\n EoSidebarMenuGroupProps,\n} from \"./sidebar-menu-group/index.js\";\nimport type {\n EoSidebarMenuSubmenu,\n EoSidebarMenuSubmenuProps,\n} from \"./sidebar-menu-submenu/index.js\";\n\nconst sidebarMenuItemTagNameSet = new Set([\n \"EO-SIDEBAR-MENU-ITEM\",\n \"EO-SIDEBAR-MENU-GROUP\",\n \"EO-SIDEBAR-MENU-SUBMENU\",\n]);\n\nconst isSidebarMenuItem = (element: Element) =>\n sidebarMenuItemTagNameSet.has(element.tagName);\n\nexport function useUpdateMenuCollapsedState(menuCollapsed?: boolean) {\n const slotRef = useRef<HTMLSlotElement>(null);\n\n const updateChildrenMenuCollapsedState = useCallback(() => {\n slotRef.current?.assignedElements().forEach((ele) => {\n if (isSidebarMenuItem(ele)) {\n (ele as any).menuCollapsed = menuCollapsed;\n }\n });\n }, [menuCollapsed]);\n\n useEffect(() => {\n updateChildrenMenuCollapsedState();\n }, [menuCollapsed, updateChildrenMenuCollapsedState]);\n\n useEffect(() => {\n const slotElem = slotRef.current;\n const handleSlotchange = () => {\n updateChildrenMenuCollapsedState();\n };\n slotElem?.addEventListener(\"slotchange\", handleSlotchange);\n\n return () => {\n slotElem?.removeEventListener(\"slotchange\", handleSlotchange);\n };\n }, [updateChildrenMenuCollapsedState]);\n\n return [slotRef];\n}\n\nexport const SIDE_BAR_HAS_BEEN_USED = \"side-bar-has-been-used\";\nexport const SIDE_BAR_EXPAND_STATE = \"side-bar-expand-state\";\nexport const SIDE_BAR_RESIZE_WIDTH = \"side-bar-resize-width\";\n\nexport enum ExpandedState {\n Collapsed = \"collapsed\",\n Hovered = \"hovered\",\n Expanded = \"expanded\",\n}\n\nexport const sideBarWidth =\n parseInt(getCssPropertyValue(\"--side-bar-width\", document.body), 10) || 220;\nexport const sideBarCollapsedWidth =\n parseInt(\n getCssPropertyValue(\"--side-bar-collapsed-width\", document.body),\n 10\n ) || 60;\n\ninterface ContextOfSidebarMenu {\n selectedKeys: string[];\n openedKeys: string[];\n matchedKeys: string[];\n}\n\nconst SidebarMenuContext = createContext<ContextOfSidebarMenu>({\n selectedKeys: [],\n openedKeys: [],\n matchedKeys: [],\n});\n\nconst WrappedSidebarMenu = wrapBrick<EoSidebarMenu, EoSidebarMenuProps>(\n \"eo-sidebar-menu\"\n);\nconst WrappedSidebarMenuItem = wrapBrick<\n EoSidebarMenuItem,\n EoSidebarMenuItemProps\n>(\"eo-sidebar-menu-item\");\nconst WrappedSidebarMenuGroup = wrapBrick<\n EoSidebarMenuGroup,\n EoSidebarMenuGroupProps\n>(\"eo-sidebar-menu-group\");\nconst WrappedSidebarMenuSubmenu = wrapBrick<\n EoSidebarMenuSubmenu,\n EoSidebarMenuSubmenuProps\n>(\"eo-sidebar-menu-submenu\");\n\nfunction MenuSimpleItem(\n props: SidebarMenuSimpleItem & { id?: string; inSubmenu?: boolean }\n) {\n const { to, href, target, icon, text, id, inSubmenu } = props;\n const { selectedKeys } = useContext(SidebarMenuContext);\n\n return (\n <WrappedSidebarMenuItem\n url={to as any}\n href={href}\n target={target as any}\n icon={icon}\n inSubmenu={inSubmenu}\n selected={selectedKeys.includes(id!)}\n >\n {text}\n </WrappedSidebarMenuItem>\n );\n}\n\nfunction MenuGroup(\n props: SidebarMenuGroup & { id?: string; top?: boolean; inSubmenu?: boolean }\n) {\n const { title, items, id, top, inSubmenu } = props;\n const { matchedKeys } = useContext(SidebarMenuContext);\n const isSelected = id && matchedKeys.includes(id);\n\n if (items?.length > 0) {\n return (\n <WrappedSidebarMenuGroup selected={!!isSelected} collapsable={!top}>\n <span slot=\"title\">{title}</span>\n {props.items.map((item) => {\n return (\n <MenuItem\n key={item.key}\n {...item}\n id={item.key}\n top={false}\n inSubmenu={inSubmenu}\n />\n );\n })}\n </WrappedSidebarMenuGroup>\n );\n }\n return null;\n}\n\nfunction MenuSubmenu(props: SidebarMenuGroup & { id?: string }) {\n const { title, icon, items, id } = props;\n const { openedKeys, matchedKeys } = useContext(SidebarMenuContext);\n const isSelected = id && matchedKeys.includes(id);\n\n if (items?.length > 0) {\n return (\n <WrappedSidebarMenuSubmenu\n icon={icon}\n collapsed={!openedKeys.includes(id!)}\n selected={!!isSelected}\n >\n <span slot=\"title\">{title}</span>\n {props.items.map((item) => {\n return (\n <MenuItem\n key={item.key}\n {...item}\n id={item.key}\n top={false}\n inSubmenu={true}\n />\n );\n })}\n </WrappedSidebarMenuSubmenu>\n );\n }\n return null;\n}\n\nfunction MenuItem(\n props: SidebarMenuItem & { id?: string; top?: boolean; inSubmenu?: boolean }\n) {\n if (props.type === \"subMenu\") {\n return <MenuSubmenu {...props} />;\n } else if (props.type === \"group\") {\n return <MenuGroup {...props} />;\n } else {\n return <MenuSimpleItem {...(props as SidebarMenuSimpleItem)} />;\n }\n}\n\nexport function SidebarMenu(props: {\n menu?: SidebarMenuType;\n expandedState: ExpandedState;\n selectedKeys?: string[];\n openedKeys?: string[];\n matchedKeys?: string[];\n}) {\n const { menu, expandedState, selectedKeys, openedKeys, matchedKeys } = props;\n\n return (\n <SidebarMenuContext.Provider\n value={{\n selectedKeys: selectedKeys || [],\n openedKeys: openedKeys || [],\n matchedKeys: matchedKeys || [],\n }}\n >\n <WrappedSidebarMenu\n menuCollapsed={expandedState === ExpandedState.Collapsed}\n >\n {menu?.menuItems?.map((item) => {\n return <MenuItem key={item.key} {...item} id={item.key} top={true} />;\n })}\n </WrappedSidebarMenu>\n </SidebarMenuContext.Provider>\n );\n}\n","import React, { useCallback, useEffect, useRef } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { useUpdateMenuCollapsedState } from \"../utils.js\";\nimport classNames from \"classnames\";\n\nconst { defineElement, property } = createDecorators();\n\nexport interface EoSidebarMenuGroupProps {\n selected?: boolean;\n collapsable?: boolean;\n collapsed?: boolean;\n menuCollapsed?: boolean;\n}\n\n/**\n * 侧栏菜单分组\n * @slot title - 分组标题\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar-menu-group\", {\n styleTexts: [styleText],\n})\nclass EoSidebarMenuGroup\n extends ReactNextElement\n implements EoSidebarMenuGroupProps\n{\n /**\n * 是否允许折叠\n */\n @property({ type: Boolean })\n accessor collapsable: boolean | undefined;\n\n /**\n * 是否折叠\n */\n @property({ type: Boolean })\n accessor collapsed: boolean | undefined;\n\n /**\n * 是否选中\n * */\n @property({ type: Boolean })\n accessor selected: boolean | undefined;\n\n /**\n * 菜单整体是否收起状态\n */\n @property({ type: Boolean })\n accessor menuCollapsed: boolean | undefined;\n\n #handleCollapseChang = (collapsed: boolean) => {\n this.collapsed = collapsed;\n };\n\n render() {\n return (\n <EoSidebarMenuGroupComponent\n collapsable={this.collapsable}\n selected={this.selected}\n collapsed={this.collapsed}\n menuCollapsed={this.menuCollapsed}\n onCollapseChange={this.#handleCollapseChang}\n />\n );\n }\n}\n\ninterface EoSidebarMenuGroupComponentProps extends EoSidebarMenuGroupProps {\n onCollapseChange?: (collapsed: boolean) => void;\n}\n\nexport function EoSidebarMenuGroupComponent(\n props: EoSidebarMenuGroupComponentProps\n) {\n const {\n collapsable = false,\n collapsed,\n menuCollapsed,\n onCollapseChange,\n } = props;\n\n const [slotRef] = useUpdateMenuCollapsedState(menuCollapsed);\n\n const titleRef = useRef<HTMLDivElement>(null);\n\n const handleClick = useCallback(() => {\n !menuCollapsed && onCollapseChange?.(!collapsed);\n }, [menuCollapsed, onCollapseChange, collapsed]);\n\n useEffect(() => {\n const titleElem = titleRef.current;\n titleElem?.addEventListener(\"click\", handleClick);\n\n return () => {\n titleElem?.removeEventListener(\"click\", handleClick);\n };\n }, [handleClick]);\n\n return (\n <div\n className={classNames(\"menu-group\", {\n \"menu-group-collapsed\": menuCollapsed ? true : collapsed,\n })}\n >\n <div className=\"menu-group-title\" ref={titleRef}>\n <span className=\"menu-group-title-icon-container\">\n <span className=\"menu-group-title-icon\"></span>\n </span>\n <div className=\"menu-group-title-text\">\n <slot name=\"title\" />\n </div>\n {collapsable && <span className=\"menu-group-arrow\" />}\n </div>\n <div className=\"menu-group-list\">\n <div className=\"menu-group-list-inner\">\n <slot ref={slotRef} />\n </div>\n </div>\n </div>\n );\n}\n","import React, { useCallback, useEffect, useRef } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport classNames from \"classnames\";\nimport { useUpdateMenuCollapsedState } from \"../utils.js\";\n\nconst { defineElement, property } = createDecorators();\n\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface EoSidebarMenuSubmenuProps {\n icon?: GeneralIconProps;\n selected?: boolean;\n collapsed?: boolean;\n menuCollapsed?: boolean;\n}\n\n/**\n * 侧栏菜单子菜单\n * @slot title - 子菜单标题\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar-menu-submenu\", {\n styleTexts: [styleText],\n})\nclass EoSidebarMenuSubmenu\n extends ReactNextElement\n implements EoSidebarMenuSubmenuProps\n{\n /**\n * 菜单的图标\n */\n @property({ attribute: false })\n accessor icon: GeneralIconProps | undefined;\n\n /**\n * 是否选中\n * */\n @property({ type: Boolean })\n accessor selected: boolean | undefined;\n\n /**\n * 是否折叠\n */\n @property({ type: Boolean })\n accessor collapsed: boolean | undefined;\n\n /**\n * 菜单整体是否收起状态\n */\n @property({ type: Boolean })\n accessor menuCollapsed: boolean | undefined;\n\n #handleCollapseChang = (collapsed: boolean) => {\n this.collapsed = collapsed;\n };\n\n render() {\n return (\n <EoSidebarMenuSubmenuComponent\n icon={this.icon}\n selected={this.selected}\n collapsed={this.collapsed}\n menuCollapsed={this.menuCollapsed}\n onCollapseChange={this.#handleCollapseChang}\n />\n );\n }\n}\n\ninterface EoSidebarMenuSubmenuComponentProps extends EoSidebarMenuSubmenuProps {\n onCollapseChange?: (collapsed: boolean) => void;\n}\n\nexport function EoSidebarMenuSubmenuComponent(\n props: EoSidebarMenuSubmenuComponentProps\n) {\n const { icon, collapsed, menuCollapsed, onCollapseChange } = props;\n\n const [slotRef] = useUpdateMenuCollapsedState(menuCollapsed);\n\n const titleRef = useRef<HTMLDivElement>(null);\n\n const handleClick = useCallback(() => {\n !menuCollapsed && onCollapseChange?.(!collapsed);\n }, [menuCollapsed, onCollapseChange, collapsed]);\n\n useEffect(() => {\n const titleElem = titleRef.current;\n titleElem?.addEventListener(\"click\", handleClick);\n\n return () => {\n titleElem?.removeEventListener(\"click\", handleClick);\n };\n }, [handleClick]);\n\n return (\n <div\n className={classNames(\"menu-submenu\", {\n \"menu-submenu-collapsed\": menuCollapsed ? true : collapsed,\n })}\n >\n <div className=\"menu-submenu-title\" ref={titleRef}>\n <span className=\"menu-submenu-title-icon-container\">\n <WrappedIcon {...icon!} className=\"menu-submenu-title-icon\" />\n </span>\n <span className=\"menu-submenu-title-text\">\n <slot name=\"title\" />\n </span>\n <span className=\"menu-submenu-arrow\" />\n </div>\n <div className=\"menu-sub\">\n <div className=\"menu-sub-inner\">\n <slot ref={slotRef} />\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { useUpdateMenuCollapsedState } from \"../utils.js\";\n\nconst { defineElement, property } = createDecorators();\n\nexport interface EoSidebarMenuProps {\n menuCollapsed?: boolean;\n}\n\n/**\n * 侧栏菜单\n *\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar-menu\", {\n styleTexts: [styleText],\n})\nclass EoSidebarMenu extends ReactNextElement implements EoSidebarMenuProps {\n /**\n * 菜单整体是否收起状态\n */\n @property({ type: Boolean })\n accessor menuCollapsed: boolean | undefined;\n\n render() {\n return <EoSidebarMenuComponent menuCollapsed={this.menuCollapsed} />;\n }\n}\n\nexport function EoSidebarMenuComponent(props: EoSidebarMenuProps) {\n const { menuCollapsed } = props;\n\n const [slotRef] = useUpdateMenuCollapsedState(menuCollapsed);\n\n return (\n <div className=\"sidebar-menu\">\n <div className=\"sidebar-menu-item-list\">\n <slot ref={slotRef} />\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nconst SvgFixed = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" {...props}><g fill=\"none\" fillRule=\"evenodd\"><path d=\"M0 0h20v20H0z\" /><path fill=\"#595959\" fillRule=\"nonzero\" d=\"m14.599 11.59-1.685-1.606-.348-4.876.93-1.044s.617-.93-.62-1.045L7.323 3s-.85.657-.097 1.296l.754.755-.385 4.76-1.49 1.683s-.388.774.328 1.065l2.961-.02.668 3.887H6.388V17h7.832v-.574h-3.743l.6-3.946 3.154.097s.812-.464.368-.986\" /></g></svg>;\nexport default SvgFixed;","import * as React from \"react\";\nconst SvgToFixed = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" {...props}><g fill=\"none\" fillRule=\"evenodd\"><path d=\"M0 0h20v20H0z\" /><path fill=\"#595959\" fillRule=\"nonzero\" d=\"m13.06 3.765 3.22 3.08c.42.28.42.84.14 1.26-.42.42-.98.42-1.26.14l-.14-.14-.28-.28-3.22 4.62.98.98c.28.42.28.98-.14 1.26-.28.28-.7.28-1.12 0l-5.88-6.02q-.42-.63 0-1.26c.28-.28.84-.28 1.12 0l.98.98 4.62-3.22-.14-.14c-.42-.42-.42-.84-.14-1.26.28-.28.84-.42 1.26 0m-4.76 9.1-1.12-1.12c-.98 1.12-2.52 2.8-2.8 3.22-.42.42-.7.98-.98 1.54q1.05-.21 1.68-.84c.42-.28 2.1-1.82 3.22-2.8\" /></g></svg>;\nexport default SvgToFixed;","export enum K {\n CLICK_TO_FIX_NAVIGATION = \"CLICK_TO_FIX_NAVIGATION\",\n UNPIN_NAVIGATION = \"UNPIN_NAVIGATION\",\n FIXED_NAVIGATION = \"FIXED_NAVIGATION\",\n}\n\nconst en: Locale = {\n UNPIN_NAVIGATION: \"Unpin navigation\",\n FIXED_NAVIGATION: \"Fixed navigation\",\n CLICK_TO_FIX_NAVIGATION: \"Click to {{action}}\",\n};\n\nconst zh: Locale = {\n UNPIN_NAVIGATION: \"取消固定\",\n FIXED_NAVIGATION: \"固定导航\",\n CLICK_TO_FIX_NAVIGATION: \"点击{{action}}\",\n};\n\nexport const NS = \"bricks/nav/eo-sidebar\";\n\nexport const locales = { en, zh };\n\ntype Locale = { [key in K]: string };\n","import React, {\n MouseEventHandler,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { EventEmitter, createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport type { EoTooltip, ToolTipProps } from \"@next-bricks/basic/tooltip\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { SidebarMenu as SidebarMenuType } from \"@next-shared/general/types\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport FixedSvg from \"../images/fixed.svg\";\nimport ToFixedSvg from \"../images/toFixed.svg\";\nimport { debounceByAnimationFrame } from \"@next-shared/general/debounceByAnimationFrame\";\nimport { JsonStorage } from \"@next-shared/general/JsonStorage\";\nimport {\n ExpandedState,\n SIDE_BAR_EXPAND_STATE,\n SIDE_BAR_HAS_BEEN_USED,\n SIDE_BAR_RESIZE_WIDTH,\n SidebarMenu,\n sideBarCollapsedWidth,\n sideBarWidth,\n} from \"./utils.js\";\nimport { useTranslation, initializeReactI18n } from \"@next-core/i18n/react\";\nimport { K, NS, locales } from \"./i18n.js\";\nimport classNames from \"classnames\";\nimport { initMenuItemAndMatchCurrentPathKeys } from \"@next-shared/general/menu\";\nimport { UnregisterCallback } from \"history\";\nimport { getHistory, getRuntime } from \"@next-core/runtime\";\nimport { useCurrentApp } from \"@next-core/react-runtime\";\n\ninitializeReactI18n(NS, locales);\n\nconst { defineElement, property, event } = createDecorators();\n\nconst WrappedTooltip = wrapBrick<EoTooltip, ToolTipProps>(\"eo-tooltip\");\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface EoSidebarProps {\n menu: SidebarMenuType;\n expandedState?: ExpandedState;\n hiddenFixedIcon?: boolean;\n position?: \"static\" | \"fixed\";\n}\n\nexport interface EoSidebarEvents {\n \"actual.width.change\": CustomEvent<number>;\n \"expanded.state.change\": CustomEvent<ExpandedState>;\n}\n\nexport interface EoSidebarEventsMapping {\n onActualWidthChange: \"actual.width.change\";\n onExpandedStateChange: \"expanded.state.change\";\n}\n\n/**\n * 侧边栏\n *\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar\", {\n styleTexts: [styleText],\n})\nclass EoSidebar extends ReactNextElement implements EoSidebarProps {\n /**\n * 菜单数据\n */\n @property({ attribute: false })\n accessor menu!: SidebarMenuType;\n\n /**\n * 是否隐藏固定按钮\n */\n @property({ type: Boolean })\n accessor hiddenFixedIcon: boolean | undefined;\n\n /**\n * 侧栏状态\n */\n @property()\n accessor expandedState: ExpandedState | undefined;\n\n /**\n * 设置定位方式:静态定位或固定定位。\n *\n * @default \"fixed\"\n */\n @property()\n accessor position: \"static\" | \"fixed\" | undefined;\n\n /**\n * 宽度变化时触发\n * @detail 当前宽度\n */\n @event({ type: \"actual.width.change\" })\n accessor #actualWidthChangeEvent!: EventEmitter<number>;\n #handleActualWidthChange = (actualWidth: number): void => {\n this.#actualWidthChangeEvent.emit(actualWidth);\n };\n\n /**\n * 侧栏状态变化时触发\n * @detail 侧栏状态\n */\n @event({ type: \"expanded.state.change\" })\n accessor #expandedStateChangeEvent!: EventEmitter<ExpandedState>;\n #handleExpandedStateChange = (state: ExpandedState): void => {\n this.expandedState = state;\n this.#expandedStateChangeEvent.emit(state);\n };\n\n render() {\n return (\n <EoSidebarComponent\n menu={this.menu}\n expandedState={this.expandedState}\n hiddenFixedIcon={this.hiddenFixedIcon}\n position={this.position}\n onActualWidthChange={this.#handleActualWidthChange}\n onExpandedStateChange={this.#handleExpandedStateChange}\n />\n );\n }\n}\n\ninterface EoSidebarComponentProps extends EoSidebarProps {\n onActualWidthChange?: (actualWidth: number) => void;\n onExpandedStateChange?: (state: ExpandedState) => void;\n}\n\nexport function EoSidebarComponent(props: EoSidebarComponentProps) {\n const { t } = useTranslation(NS);\n const {\n menu,\n hiddenFixedIcon,\n position,\n onActualWidthChange,\n onExpandedStateChange,\n } = props;\n\n const showUserDefinedIcon = React.useMemo(\n () => getRuntime()?.getFeatureFlags()[\"sidebar-show-user-defined-icon\"],\n []\n );\n\n const storage = useMemo(() => new JsonStorage(localStorage), []);\n const history = getHistory();\n const currentApp = useCurrentApp();\n const [location, setLocation] = useState(history.location);\n const { pathname, search } = location;\n\n const [isFirstUsedTooltip, setIsFirstUsedTooltip] = useState<boolean>(\n !storage.getItem(SIDE_BAR_HAS_BEEN_USED)\n );\n const [showContentShadow, setShowContentShadow] = useState<boolean>();\n const [dragging, setDragging] = useState<boolean>();\n const [expandedState, setExpandedState] = useState<ExpandedState>(\n props.expandedState ||\n storage.getItem(SIDE_BAR_EXPAND_STATE) ||\n ExpandedState.Collapsed\n );\n\n const titleIcon = showUserDefinedIcon ? menu?.icon : currentApp?.menuIcon;\n\n const { selectedKeys, openedKeys, matchedKeys } = useMemo(() => {\n return initMenuItemAndMatchCurrentPathKeys(\n menu?.menuItems ?? [],\n pathname,\n search,\n \"\"\n );\n }, [menu?.menuItems, pathname, search]);\n\n useEffect(() => {\n const unListen: UnregisterCallback = history.listen((location) => {\n setLocation(location);\n });\n return unListen;\n }, [history]);\n\n const contentBottomPlaceholderRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (contentBottomPlaceholderRef.current) {\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.target === contentBottomPlaceholderRef.current) {\n setShowContentShadow(!entry.isIntersecting);\n }\n });\n },\n { threshold: 1 }\n );\n\n observer.observe(contentBottomPlaceholderRef.current);\n\n return () => {\n observer.disconnect();\n };\n }\n }, []);\n\n useEffect(() => {\n setExpandedState(\n props.expandedState ||\n storage.getItem(SIDE_BAR_EXPAND_STATE) ||\n ExpandedState.Collapsed\n );\n }, [props.expandedState]);\n\n useEffect(() => {\n storage.setItem(\n SIDE_BAR_EXPAND_STATE,\n expandedState === ExpandedState.Expanded\n ? ExpandedState.Expanded\n : ExpandedState.Collapsed\n );\n }, [expandedState]);\n\n const handleFixedIconClick = (): void => {\n setIsFirstUsedTooltip(false);\n storage.setItem(SIDE_BAR_HAS_BEEN_USED, true);\n\n setExpandedState((state) => {\n const newState =\n state === ExpandedState.Expanded\n ? ExpandedState.Collapsed\n : ExpandedState.Expanded;\n\n newState !== state && onExpandedStateChange?.(newState);\n return newState;\n });\n };\n\n const [expandedWidth, setExpandedWidth] = useState<number>(() => {\n // Use parseInt to compatible non-number types\n let memorizedWidth = parseInt(storage.getItem(SIDE_BAR_RESIZE_WIDTH), 10);\n if (memorizedWidth < sideBarWidth || Number.isNaN(memorizedWidth)) {\n memorizedWidth = sideBarWidth;\n }\n return memorizedWidth;\n });\n\n useEffect(() => {\n storage.setItem(SIDE_BAR_RESIZE_WIDTH, expandedWidth);\n }, [expandedWidth]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const handleResizeDown: MouseEventHandler = (e) => {\n setDragging(true);\n\n // Prevent text selection when dragging\n if (e.cancelable) {\n e.preventDefault();\n }\n\n const offsetX = containerRef.current?.getBoundingClientRect().left ?? 0;\n\n const drag = debounceByAnimationFrame((e: MouseEvent) => {\n const x = e.clientX - offsetX;\n const width = x >= sideBarWidth ? x : sideBarWidth;\n\n setExpandedWidth(width);\n });\n const dragEnd = (e: MouseEvent) => {\n setDragging(false);\n e.preventDefault();\n\n window.removeEventListener(\"mousemove\", drag);\n window.removeEventListener(\"mouseup\", dragEnd);\n };\n\n window.addEventListener(\"mousemove\", drag, { passive: true });\n window.addEventListener(\"mouseup\", dragEnd);\n };\n\n const handleMouseEnter = (): void => {\n setExpandedState((state) => {\n const newState =\n state === ExpandedState.Expanded\n ? ExpandedState.Expanded\n : ExpandedState.Hovered;\n\n newState !== state && onExpandedStateChange?.(newState);\n return newState;\n });\n };\n\n const handleMouseLeave = (): void => {\n setExpandedState((state) => {\n const newState =\n state === ExpandedState.Expanded\n ? ExpandedState.Expanded\n : ExpandedState.Collapsed;\n\n newState !== state && onExpandedStateChange?.(newState);\n return newState;\n });\n };\n\n const sidebarActualWidth = useMemo(() => {\n return expandedState === ExpandedState.Expanded\n ? expandedWidth\n : sideBarCollapsedWidth;\n }, [expandedState, expandedWidth]);\n\n useEffect(() => {\n onActualWidthChange?.(sidebarActualWidth);\n }, [onActualWidthChange, sidebarActualWidth]);\n\n const getContainerWidth = (inner?: boolean) => {\n // With static position, when not expanded, the outer container will keep\n // collapsed even if hovered, while only the inner container will expand.\n if (position === \"static\") {\n return expandedState === ExpandedState.Expanded ||\n (inner && expandedState === ExpandedState.Hovered)\n ? expandedWidth\n : sideBarCollapsedWidth;\n }\n return expandedState === ExpandedState.Collapsed\n ? sideBarCollapsedWidth\n : expandedWidth;\n };\n\n useEffect(() => {\n const container = containerRef.current;\n container?.addEventListener(\"mouseenter\", handleMouseEnter);\n container?.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n container?.removeEventListener(\"mouseenter\", handleMouseEnter);\n container?.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, []);\n\n return (\n <div\n className={classNames(\"sidebar-container\", `state-${expandedState}`, {\n dragging,\n })}\n style={{ width: getContainerWidth() }}\n ref={containerRef}\n data-testid=\"side-bar\"\n >\n <div className=\"inner\" style={{ width: getContainerWidth(true) }}>\n <div className=\"header\">\n <div className=\"menu-title\">\n <div className={classNames(\"menu-title-icon-container\")}>\n {titleIcon ? (\n <WrappedIcon\n {...(titleIcon as GeneralIconProps)}\n className=\"menu-title-icon\"\n />\n ) : (\n <span className=\"menu-title-point\" />\n )}\n </div>\n <div className=\"menu-title-text\" title={menu?.title}>\n {menu?.title}\n </div>\n </div>\n </div>\n\n <div\n className={classNames(\"content\", {\n \"show-shadow\": showContentShadow,\n })}\n >\n <SidebarMenu\n selectedKeys={selectedKeys}\n openedKeys={openedKeys}\n matchedKeys={matchedKeys}\n menu={menu}\n expandedState={expandedState}\n />\n <div ref={contentBottomPlaceholderRef} />\n </div>\n\n <div className=\"footer\">\n {!hiddenFixedIcon && (\n <WrappedTooltip\n content={\n (expandedState === ExpandedState.Expanded\n ? isFirstUsedTooltip\n ? t(K.CLICK_TO_FIX_NAVIGATION, {\n action: t(K.UNPIN_NAVIGATION),\n })\n : t(K.UNPIN_NAVIGATION)\n : isFirstUsedTooltip\n ? t(K.CLICK_TO_FIX_NAVIGATION, {\n action: t(K.FIXED_NAVIGATION),\n })\n : t(K.FIXED_NAVIGATION)) as string\n }\n >\n <i className=\"fixed-icon\" onClick={handleFixedIconClick}>\n <FixedSvg\n style={{\n display:\n expandedState === ExpandedState.Expanded\n ? undefined\n : \"none\",\n }}\n />\n <ToFixedSvg\n style={{\n display:\n expandedState === ExpandedState.Expanded\n ? \"none\"\n : undefined,\n }}\n />\n </i>\n </WrappedTooltip>\n )}\n </div>\n {expandedState === ExpandedState.Expanded && (\n <span className=\"resize-line\" onMouseDown={handleResizeDown} />\n )}\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect, useCallback } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport { getHistory } from \"@next-core/runtime\";\nimport { UnregisterCallback } from \"history\";\nimport \"@next-core/theme\";\nimport {\n SidebarMenuSimpleItem,\n SidebarMenuGroup,\n SidebarMenuItem,\n} from \"@next-shared/general/types\";\nimport {\n initMenuItemAndMatchCurrentPathKeys,\n isGroup,\n isSubMenu,\n} from \"@next-shared/general/menu\";\nimport { Menu as MenuComponent, SidebarMenu } from \"@next-bricks/basic/menu\";\nimport { Link, LinkProps, Target } from \"@next-bricks/basic/link\";\nimport {\n EoMenuItemSubMenu,\n EoMenuSubMenuProps,\n} from \"@next-bricks/basic/menu-item-sub-menu\";\nimport { EoMenuGroup } from \"@next-bricks/basic/menu-group\";\nimport { MenuComponentProps, MenuItem } from \"@next-bricks/basic/menu-item\";\nimport styleText from \"./styles.shadow.css\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport classNames from \"classnames\";\n\n// --- NOTE: uncomment these lines below to enable i18n for your brick ---\n// import { useTranslation, initializeReactI18n } from \"@next-core/i18n/react\";\n// import { K, NS, locales } from \"./i18n.js\";\n// initializeReactI18n(NS, locales);\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nconst WrappedMenu = wrapBrick<MenuComponent, any>(\"eo-menu\");\n\nconst WrappedMenuGroup = wrapBrick<EoMenuGroup, any>(\"eo-menu-group\");\n\nconst WrapperMenuItemSubMenu = wrapBrick<EoMenuItemSubMenu, EoMenuSubMenuProps>(\n \"eo-menu-item-sub-menu\"\n);\n\nconst WrappedMenuItem = wrapBrick<MenuItem, MenuComponentProps>(\"eo-menu-item\");\n\nconst WrappedLinkItem = wrapBrick<Link, LinkProps>(\"eo-link\");\n\ninterface SidebarSubMenuProps {\n menu?: SidebarMenu;\n showTooltip?: boolean;\n}\n\nconst { defineElement, property } = createDecorators();\n\n/**\n * 侧边栏子菜单,支持简单菜单项、分组和子菜单的嵌套渲染\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar-sub-menu\", {\n styleTexts: [styleText],\n})\nclass EoSidebarSubMenu extends ReactNextElement {\n /**\n * 菜单项\n */\n @property({\n attribute: false,\n })\n accessor menu: SidebarMenu | undefined;\n\n render() {\n return <EoSidebarSubMenuComponent menu={this.menu} />;\n }\n}\n\nexport function EoSidebarSubMenuComponent(props: SidebarSubMenuProps) {\n // const { t } = useTranslation(NS);\n // const hello = t(K.HELLO);\n const { menu } = props;\n\n const history = getHistory();\n const [location, setLocation] = useState(history.location);\n const { pathname, search } = location;\n\n const [selectedKey, setSelectedKey] = useState<string[]>([]);\n const [openedKeys, setOpenedKeys] = useState<string[]>([]);\n\n const setSelected = useCallback((): void => {\n const { selectedKeys, openedKeys } = initMenuItemAndMatchCurrentPathKeys(\n menu?.menuItems ?? [],\n pathname,\n search,\n \"\"\n );\n setSelectedKey(selectedKeys);\n setOpenedKeys(openedKeys);\n }, [menu?.menuItems, pathname, search]);\n\n useEffect(() => {\n const unListen: UnregisterCallback = history.listen((location) => {\n setLocation(location);\n });\n setSelected();\n return unListen;\n }, [history, setSelected]);\n\n const getMenuItemIndent = useCallback((item: SidebarMenuItem): number => {\n return ((item.key?.split(\".\")?.length as number) - 1) * 16;\n }, []);\n\n const renderSimpleMenuItem = (\n item: SidebarMenuSimpleItem,\n options?: {\n inSubmenu?: boolean;\n }\n ) => {\n return (\n <WrappedMenuItem\n className={classNames(\"menu-item\", {\n \"in-submenu\": options?.inSubmenu,\n })}\n style={{ paddingLeft: getMenuItemIndent(item) || 16 }}\n icon={item.icon}\n active={item.key ? selectedKey.includes(item.key) : false}\n >\n <WrappedLinkItem\n className=\"menu-item-link\"\n type=\"plain\"\n url={item.to as string}\n href={item.href}\n title={item.text}\n target={item.target as Target}\n >\n <span\n className={classNames(\"menu-item-text\", {\n \"item-has-icon\": item.icon,\n })}\n >\n {item.text}\n </span>\n </WrappedLinkItem>\n </WrappedMenuItem>\n );\n };\n\n const renderSubMenuItem = (item: SidebarMenuGroup) => {\n // istanbul ignore else\n if (item.items?.length > 0) {\n return (\n <WrapperMenuItemSubMenu\n className=\"menu-sub-item\"\n icon={item.icon}\n titleStyle={{ paddingLeft: getMenuItemIndent(item) }}\n bodyStyle={{ paddingLeft: getMenuItemIndent(item) / 2 }}\n collapsed={!openedKeys.includes(item.key!)}\n >\n <span slot=\"title\">{item.title}</span>\n {item.items.map((innerItem) => (\n <React.Fragment key={innerItem.key}>\n {renderMenuItem(innerItem, {\n inSubmenu: true,\n })}\n </React.Fragment>\n ))}\n </WrapperMenuItemSubMenu>\n );\n }\n };\n\n const renderGroupMenuItem = (item: SidebarMenuGroup) => {\n // istanbul ignore else\n if (item.items?.length > 0) {\n return (\n <WrappedMenuGroup>\n <span slot=\"title\">{item.title}</span>\n\n {item.items.map((innerItem) => {\n return (\n <React.Fragment key={innerItem.key}>\n {renderMenuItem(innerItem)}\n </React.Fragment>\n );\n })}\n </WrappedMenuGroup>\n );\n }\n };\n\n function renderMenuItem(\n item: SidebarMenuItem,\n options?:\n | {\n inSubmenu?: boolean;\n }\n | undefined\n ) {\n return isSubMenu(item as SidebarMenuGroup)\n ? renderSubMenuItem(item as SidebarMenuGroup)\n : isGroup(item)\n ? renderGroupMenuItem(item)\n : renderSimpleMenuItem(item, options);\n }\n\n return (\n <WrappedMenu className=\"menu-container\" mode=\"vertical\">\n {menu?.title && (\n <div className=\"header\">\n {menu?.icon && <WrappedIcon {...(menu?.icon as GeneralIconProps)} />}\n <span className=\"title\">{menu?.title}</span>\n </div>\n )}\n <div className=\"content\">\n {menu?.menuItems.map((item) => {\n return (\n <React.Fragment key={item.key}>\n {renderMenuItem(item)}\n </React.Fragment>\n );\n })}\n </div>\n </WrappedMenu>\n );\n}\n","import React from \"react\";\nimport { createDecorators, EventEmitter } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport { ReactUseMultipleBricks } from \"@next-core/react-runtime\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport classNames from \"classnames\";\nimport type { EoTooltip, ToolTipProps } from \"@next-bricks/basic/tooltip\";\nimport { UseBrickConf } from \"@next-core/types\";\n\nconst { defineElement, property, event } = createDecorators();\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nconst WrappedTooltip = wrapBrick<EoTooltip, ToolTipProps>(\"eo-tooltip\");\n\n/**\n * 目录\n */\nexport\n@defineElement(\"eo-directory\", {\n styleTexts: [styleText],\n})\nclass EoDirectory extends ReactNextElement implements EoDirectoryProps {\n /**\n * 设置定位方式:静态定位或固定定位。\n *\n * @default \"fixed\"\n */\n @property()\n accessor position: \"static\" | \"fixed\" = \"fixed\";\n\n /**\n * 目录标题\n */\n @property()\n accessor directoryTitle: string | undefined;\n\n /**\n * 菜单数据\n * @default []\n * @required\n */\n @property({ attribute: false })\n accessor menuItems: MenuItem[] = [];\n\n /**\n * 是否隐藏右边线\n */\n @property({ type: Boolean })\n accessor hideRightBorder: boolean = false;\n\n /**\n * 后缀 useBrick\n */\n @property({\n attribute: false,\n })\n accessor suffixBrick: { useBrick: UseBrickConf } | undefined;\n\n /**\n * 默认选中高亮的菜单项\n */\n @property({ attribute: false })\n accessor defaultSelectedKeys: string[] | undefined;\n /**\n * @description 菜单项点击时触发\n * @detail { groupKey: 对应分组的 key(仅分组子项有值), data: 被点击的菜单项 }\n */\n @event({ type: \"menu.item.click\" })\n accessor #menuItemClickEvent!: EventEmitter<MenuItemClickEventDetail>;\n /**\n * @description 点击菜单项后缀图标时触发\n * @detail { key: 对应菜单项或分组的 key }\n */\n @event({ type: \"suffix.icon.click\" })\n accessor #suffixIconClickEvent!: EventEmitter<{ key: string }>;\n\n #menuItemClick = (data: MenuItemClickEventDetail) => {\n this.#menuItemClickEvent.emit(data);\n };\n #suffixIconClick = (key: string) => {\n this.#suffixIconClickEvent.emit({ key });\n };\n\n render() {\n return (\n <EoDirectoryComponent\n menuItems={this.menuItems}\n directoryTitle={this.directoryTitle}\n hideRightBorder={this.hideRightBorder}\n suffixIconClick={this.#suffixIconClick}\n menuItemClick={this.#menuItemClick}\n defaultSelectedKeys={this.defaultSelectedKeys}\n suffixBrick={this.suffixBrick}\n />\n );\n }\n}\nexport interface EoDirectoryProps {\n position?: \"static\" | \"fixed\";\n suffixBrick?: { useBrick: UseBrickConf };\n directoryTitle: string | undefined;\n menuItems: MenuItem[];\n hideRightBorder?: boolean;\n menuItemClick?: (data: MenuItemClickEventDetail) => void;\n suffixIconClick?: (key: string) => void;\n defaultSelectedKeys?: string[] | undefined;\n}\n\nexport interface EoDirectoryEventsMapping {\n onMenuItemClick: \"menu.item.click\";\n onSuffixIconClick: \"suffix.icon.click\";\n}\ninterface MenuChildrenItem {\n title: string;\n key: string;\n [key: string]: any;\n}\ninterface MenuItem {\n title: string;\n key: string;\n type: \"group\" | \"item\";\n children?: MenuChildrenItem[];\n suffixIcon?: GeneralIconProps;\n suffixIconTooltip?: string;\n suffixIconDisabled?: boolean;\n}\ninterface MenuItemClickEventDetail {\n data: MenuChildrenItem;\n groupKey?: string;\n}\n\nexport function EoDirectoryComponent(props: EoDirectoryProps) {\n const {\n menuItems,\n directoryTitle,\n hideRightBorder,\n menuItemClick,\n suffixIconClick,\n defaultSelectedKeys,\n suffixBrick,\n } = props;\n\n return (\n <div\n className={classNames(\"directory-container\", {\n \"directory-container-not-border\": hideRightBorder,\n })}\n >\n {directoryTitle && (\n <div className=\"directory-title\" title={directoryTitle}>\n {directoryTitle}\n </div>\n )}\n <div className=\"directory-menu-list\">\n {menuItems.map((item, index) => {\n return (\n <div\n className={classNames(\"menu-item\", `menu-item-${item.type}`)}\n key={`${item.key}-${index}`}\n >\n <div\n className={classNames(`menu-item-title-${item.type}`)}\n onClick={() =>\n item.type === \"item\" && menuItemClick?.({ data: item })\n }\n >\n <span\n className={classNames(\"menu-title-text\", {\n \"menu-title-text-active\": defaultSelectedKeys?.includes(\n item.key\n ),\n })}\n >\n {item.title}\n </span>\n {suffixBrick?.useBrick ? (\n <ReactUseMultipleBricks\n useBrick={suffixBrick.useBrick}\n data={{ data: item }}\n />\n ) : null}\n {item.suffixIcon && (\n <WrappedTooltip\n content={item.suffixIconTooltip}\n placement=\"top\"\n >\n <WrappedIcon\n {...(item.suffixIcon as GeneralIconProps)}\n className={classNames(\"menu-item-title-suffix-icon\", {\n \"menu-item-title-suffix-icon-disabled\":\n item.suffixIconDisabled,\n })}\n onClick={(e) => {\n e.stopPropagation();\n if (item.suffixIconDisabled) {\n e.preventDefault();\n } else {\n suffixIconClick?.(item.key);\n }\n }}\n />\n </WrappedTooltip>\n )}\n </div>\n {item.type === \"group\" &&\n !!item.children?.length &&\n item.children.map((child, i) => {\n return (\n <div\n className=\"menu-item-title-item\"\n onClick={() =>\n menuItemClick?.({ data: child, groupKey: item.key })\n }\n key={`${child.key}-${i}`}\n >\n <span\n className={classNames(\"menu-title-text\", {\n \"menu-title-text-active\":\n defaultSelectedKeys?.includes(child.key),\n })}\n >\n {child.title}\n </span>\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport type { NodeData, SuffixBrickConf } from \".\";\n\nexport interface ContextOfDirectoryTree {\n expandedKeysSet: Set<string>;\n selectedKeysSet: Set<string>;\n internalNodeSelectable?: boolean;\n onExpand: (data: { keys: string[]; node: NodeData }) => void;\n onSelect: (data: { keys: string[]; node: NodeData }) => void;\n suffixBrick?: SuffixBrickConf;\n}\n\nexport const DirectoryTreeContext = React.createContext<ContextOfDirectoryTree>(\n {\n expandedKeysSet: new Set(),\n selectedKeysSet: new Set(),\n onExpand: () => {},\n onSelect: () => {},\n }\n);\n\nexport const useDirectoryTreeContext = (): ContextOfDirectoryTree =>\n React.useContext(DirectoryTreeContext);\n","import React, { useMemo } from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { ReactUseMultipleBricks } from \"@next-core/react-runtime\";\nimport classNames from \"classnames\";\nimport {\n EoDirectoryTreeLeaf,\n EoDirectoryTreeLeafEvents,\n EoDirectoryTreeLeafEventsMap,\n EoDirectoryTreeLeafProps,\n} from \"./directory-tree-leaf\";\nimport {\n EoDirectoryTreeInternalNode,\n EoDirectoryTreeInternalNodeEvents,\n EoDirectoryTreeInternalNodeEventsMap,\n EoDirectoryTreeInternalNodeProps,\n} from \"./directory-tree-internal-node\";\nimport { useDirectoryTreeContext } from \"./DirectoryTreeContext\";\nimport { TreeData } from \"./\";\n\nconst WrappedTreeLeaf = wrapBrick<\n EoDirectoryTreeLeaf,\n EoDirectoryTreeLeafProps,\n EoDirectoryTreeLeafEvents,\n EoDirectoryTreeLeafEventsMap\n>(\"eo-directory-tree-leaf\", {\n onSelect: \"select\",\n});\nconst WrappedTreeInternalNode = wrapBrick<\n EoDirectoryTreeInternalNode,\n EoDirectoryTreeInternalNodeProps,\n EoDirectoryTreeInternalNodeEvents,\n EoDirectoryTreeInternalNodeEventsMap\n>(\"eo-directory-tree-internal-node\", {\n onExpand: \"expand\",\n onSelect: \"select\",\n});\n\ninterface TreeLeafProps {\n treeData: TreeData;\n}\n\nfunction TreeLeaf(props: TreeLeafProps) {\n const { treeData } = props;\n const { data, index, depth } = treeData;\n const { selectedKeysSet, onSelect, suffixBrick } = useDirectoryTreeContext();\n\n const nodeData = useMemo(\n () => ({ data, index, depth }),\n [data, index, depth]\n );\n\n return (\n <WrappedTreeLeaf\n depth={depth}\n selected={selectedKeysSet.has(data.key)}\n icon={data.icon}\n faded={data.faded}\n onSelect={() => {\n const keys = [data.key];\n onSelect({ keys, node: nodeData });\n }}\n className={classNames({\n \"show-suffix-when-hover\": suffixBrick?.when === \"hover\",\n })}\n >\n <span title={data.title}>{data.title}</span>\n {suffixBrick?.useBrick && (\n <div className=\"suffix\" slot=\"suffix\">\n <ReactUseMultipleBricks\n useBrick={suffixBrick.useBrick}\n data={nodeData}\n />\n </div>\n )}\n </WrappedTreeLeaf>\n );\n}\n\ninterface TreeInternalNodeProps {\n treeData: TreeData;\n}\n\nfunction TreeInternalNode(props: TreeInternalNodeProps) {\n const { treeData } = props;\n const { data, index, depth } = treeData;\n const {\n expandedKeysSet,\n onExpand,\n selectedKeysSet,\n onSelect,\n internalNodeSelectable,\n suffixBrick,\n } = useDirectoryTreeContext();\n\n const nodeData = useMemo(\n () => ({ data, index, depth }),\n [data, index, depth]\n );\n\n return (\n <WrappedTreeInternalNode\n depth={depth}\n selectable={internalNodeSelectable}\n icon={data.icon}\n faded={data.faded}\n expanded={expandedKeysSet.has(data.key)}\n selected={selectedKeysSet.has(data.key)}\n onExpand={(e) => {\n if (e.detail) {\n expandedKeysSet.add(data.key);\n } else {\n expandedKeysSet.delete(data.key);\n }\n const keys = [...expandedKeysSet];\n onExpand({ keys, node: nodeData });\n }}\n onSelect={() => {\n const keys = [data.key];\n onSelect({ keys, node: nodeData });\n }}\n className={classNames({\n \"show-suffix-when-hover\": suffixBrick?.when === \"hover\",\n })}\n >\n <span slot=\"label\" title={data.title}>\n {data.title}\n </span>\n {suffixBrick?.useBrick && (\n <div className=\"suffix\" slot=\"suffix\">\n <ReactUseMultipleBricks\n useBrick={suffixBrick.useBrick}\n data={nodeData}\n />\n </div>\n )}\n </WrappedTreeInternalNode>\n );\n}\n\ninterface TreeNodeProps {\n treeData: TreeData;\n}\n\nfunction TreeNode(props: TreeNodeProps) {\n const { treeData } = props;\n const isLeaf = !Array.isArray(treeData.children);\n\n return isLeaf ? (\n <TreeLeaf treeData={treeData} />\n ) : (\n <TreeInternalNode treeData={treeData} />\n );\n}\n\ninterface TreeProps {\n treeData: TreeData[];\n}\n\nexport function Tree(props: TreeProps) {\n const { treeData } = props;\n\n return treeData.map((v) => {\n return <TreeNode key={v.key} treeData={v} />;\n });\n}\n","import { get, isNil } from \"lodash\";\nimport { TreeData, TreeItem } from \"./index\";\n\nexport function getAllExpandableKeys(data: TreeItem[]): string[] {\n return data.reduce((pre, cur) => {\n const isLeaf = !Array.isArray(cur.children);\n\n if (!isLeaf) {\n const keys = [cur.key].concat(\n getAllExpandableKeys(cur.children as TreeItem[])\n );\n return pre.concat(keys);\n } else {\n return pre;\n }\n }, [] as string[]);\n}\n\nexport function getExpandableKeysAccordingToSelectedKeys(\n data: TreeItem[],\n selectedKeysSet: Set<string>\n): string[] {\n return data.reduce((pre, cur) => {\n const isLeaf = !Array.isArray(cur.children);\n\n if (!isLeaf) {\n const childrenMatched = cur.children?.some((child) =>\n selectedKeysSet.has(child.key)\n );\n const childrenExpandableKeys = getExpandableKeysAccordingToSelectedKeys(\n cur.children as TreeItem[],\n selectedKeysSet\n );\n\n const keys = childrenExpandableKeys.concat(\n childrenMatched || childrenExpandableKeys.length ? [cur.key] : []\n );\n return pre.concat(keys);\n } else {\n return pre;\n }\n }, [] as string[]);\n}\n\nexport function searchTree(\n data: TreeItem[],\n q: string,\n searchFields: (string | string[])[]\n): { data: TreeItem[]; expandedKeys: string[] } {\n if (!q) {\n return { data, expandedKeys: [] };\n }\n\n const lowerQ = q.toLowerCase();\n const _expandedKeys: string[] = [];\n const _data = data\n .map((item) => {\n const selfMatched = matchItem(item, lowerQ, searchFields);\n\n if (Array.isArray(item.children)) {\n const childrenSearchResult = searchTree(\n item.children,\n lowerQ,\n searchFields\n );\n const filteredChildren = childrenSearchResult.data;\n const childrenMatched = !!filteredChildren?.length;\n\n if (childrenMatched) {\n _expandedKeys.push(item.key, ...childrenSearchResult.expandedKeys);\n\n return {\n ...item,\n children: filteredChildren,\n };\n }\n }\n\n if (selfMatched) {\n return item;\n }\n\n return undefined;\n })\n .filter(Boolean) as TreeItem[];\n return { data: _data, expandedKeys: _expandedKeys };\n}\n\nfunction matchItem(\n item: TreeItem,\n lowerQ: string,\n searchFields: (string | string[])[]\n): TreeItem | undefined {\n const keywords = searchFields.flatMap((field) =>\n getSearchKeywords(get(item, field))\n );\n const matched = keywords.some((v) => v.toLowerCase().includes(lowerQ));\n\n if (matched) {\n return item;\n }\n return undefined;\n}\n\nfunction getSearchKeywords(value: unknown): string[] {\n const result = [];\n if (isNil(value)) {\n // do nothing\n } else if (Array.isArray(value)) {\n value.map((v) => result.push(getSearchKeywords(v)));\n } else if (Object.prototype.toString.call(value) === \"[object Object]\") {\n for (const k in value as Record<string, any>) {\n result.push(\n String(k),\n getSearchKeywords((value as Record<string, any>)[k])\n );\n }\n } else {\n // string, number, bigint, boolean...\n result.push(String(value));\n }\n\n return result.flat(Infinity).filter(Boolean) as string[];\n}\n\nexport function getFlattenTreeData(\n treeItems: TreeItem[],\n expandedKeysSet: Set<string>\n) {\n const flattenList: TreeData[] = [];\n\n function dig(list: TreeItem[], parent?: TreeData): TreeData[] {\n return list.map((treeItem, index) => {\n const pos = parent ? `${parent.pos}-${index}` : String(index);\n\n const flattenData: TreeData = {\n title: treeItem.title,\n key: treeItem.key,\n pos,\n depth: pos.split(\"-\").length - 1,\n index,\n data: treeItem,\n parent,\n };\n\n flattenList.push(flattenData);\n\n if (Array.isArray(treeItem.children)) {\n flattenData.children = expandedKeysSet.has(treeItem.key)\n ? dig(treeItem.children, flattenData)\n : [];\n } else {\n flattenData.children = undefined;\n }\n\n return flattenData;\n });\n }\n\n dig(treeItems);\n\n return flattenList;\n}\n","import React, { useMemo, useState } from \"react\";\nimport { EventEmitter, createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport {\n GeneralSearch,\n SearchProps,\n SearchEvents,\n SearchEventsMap,\n} from \"@next-bricks/form/search\";\nimport { Tree } from \"./Tree\";\nimport {\n getFlattenTreeData,\n getAllExpandableKeys,\n getExpandableKeysAccordingToSelectedKeys,\n searchTree,\n} from \"./utils\";\nimport { DirectoryTreeContext } from \"./DirectoryTreeContext\";\nimport { UseBrickConf } from \"@next-core/types\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\n\nconst { defineElement, property, method, event } = createDecorators();\n\nconst WrappedSearch = wrapBrick<\n GeneralSearch,\n SearchProps,\n SearchEvents,\n SearchEventsMap\n>(\"eo-search\", {\n onChange: \"change\",\n onSearch: \"search\",\n});\n\n/**\n * 传入的 data 类型\n */\nexport interface TreeItem {\n key: string;\n title: string;\n icon?: GeneralIconProps;\n faded?: boolean;\n children?: TreeItem[];\n [key: string]: any;\n}\n\n/**\n * 内部格式化后的类型\n */\nexport interface TreeData {\n title: string;\n key: string;\n pos: string;\n depth: number;\n index: number;\n data: TreeItem;\n parent?: TreeData;\n children?: TreeData[];\n}\n\n/**\n * useBrick、事件使用的类型\n */\nexport interface NodeData {\n depth: number;\n index: number;\n data: TreeItem;\n}\n\nexport interface EoDirectoryTreeProps {\n data: TreeItem[];\n directoryTitle?: string;\n internalNodeSelectable?: boolean;\n searchable?: boolean;\n placeholder?: string;\n selectedKeys?: string[];\n expandedKeys?: string[];\n searchFields?: (string | string[])[];\n suffixBrick?: { useBrick: UseBrickConf };\n}\n\nexport interface EoDirectoryTreeEventsMapping {\n onExpand: \"expand\";\n onSelect: \"select\";\n}\n\nexport interface SuffixBrickConf {\n /**\n * @default \"always\"\n */\n when?: \"always\" | \"hover\";\n useBrick: UseBrickConf;\n}\n\n/**\n * 目录树\n */\nexport\n@defineElement(\"eo-directory-tree\", {\n styleTexts: [styleText],\n})\nclass EoDirectoryTree extends ReactNextElement {\n /**\n * 数据源\n */\n @property({\n attribute: false,\n })\n accessor data: TreeItem[] = [];\n\n /**\n * 目录标题\n */\n @property()\n accessor directoryTitle: string | undefined;\n\n /**\n * 设置中间节点是否可选,默认只有叶子节点可选\n */\n @property({ type: Boolean })\n accessor internalNodeSelectable: boolean | undefined;\n\n /**\n * 可搜索\n */\n @property({\n type: Boolean,\n })\n accessor searchable: boolean | undefined;\n\n /**\n * 搜索占位说明\n */\n @property()\n accessor placeholder: string | undefined;\n\n /**\n * 除了 title 以外,额外的搜索字段\n */\n @property({\n attribute: false,\n })\n accessor searchFields: (string | string[])[] | undefined;\n\n /**\n * 后缀 useBrick\n */\n @property({\n attribute: false,\n })\n accessor suffixBrick: SuffixBrickConf | undefined;\n\n /**\n * 选中的 keys\n */\n @property({\n attribute: false,\n })\n accessor selectedKeys: string[] | undefined;\n\n /**\n * 展开的 keys\n */\n @property({\n attribute: false,\n })\n accessor expandedKeys: string[] | undefined;\n\n /**\n * 展开全部\n */\n @method()\n expandAll() {\n this.expandedKeys = getAllExpandableKeys(this.data);\n }\n\n /**\n * 收起全部\n */\n @method()\n collapseAll() {\n this.expandedKeys = [];\n }\n\n /**\n * 根据选择项展开\n */\n @method()\n expandAccordingToSelectedKeys() {\n this.expandedKeys = getExpandableKeysAccordingToSelectedKeys(\n this.data,\n new Set(this.selectedKeys)\n );\n }\n\n /**\n * 展开事件\n * @detail { keys: 展开的 keys 列表, node: 触发展开的节点数据 }\n */\n @event({ type: \"expand\" })\n accessor #expandEvent!: EventEmitter<{ keys: string[]; node: NodeData }>;\n #handleExpand = (data: { keys: string[]; node: NodeData }) => {\n this.expandedKeys = data.keys;\n this.#expandEvent.emit(data);\n };\n\n /**\n * 选择事件\n * @detail { keys: 选中的 keys 列表, node: 触发选择的节点数据 }\n */\n @event({ type: \"select\" })\n accessor #selectEvent!: EventEmitter<{ keys: string[]; node: NodeData }>;\n #handleSelect = (data: { keys: string[]; node: NodeData }) => {\n this.selectedKeys = data.keys;\n this.#selectEvent.emit(data);\n };\n\n render() {\n return (\n <EoDirectoryTreeComponent\n element={this}\n data={this.data}\n directoryTitle={this.directoryTitle}\n internalNodeSelectable={this.internalNodeSelectable}\n placeholder={this.placeholder}\n searchable={this.searchable}\n searchFields={this.searchFields}\n suffixBrick={this.suffixBrick}\n selectedKeys={this.selectedKeys}\n expandedKeys={this.expandedKeys}\n onExpand={this.#handleExpand}\n onSelect={this.#handleSelect}\n />\n );\n }\n}\n\ninterface EoDirectoryTreeComponentProps extends EoDirectoryTreeProps {\n element: EoDirectoryTree;\n onExpand: (data: { keys: string[]; node: NodeData }) => void;\n onSelect: (data: { keys: string[]; node: NodeData }) => void;\n}\n\nexport function EoDirectoryTreeComponent(props: EoDirectoryTreeComponentProps) {\n const {\n element,\n data,\n directoryTitle,\n internalNodeSelectable,\n searchable,\n searchFields,\n placeholder,\n suffixBrick,\n onSelect,\n onExpand,\n } = props;\n\n const expandedKeysSet = useMemo(\n () => new Set(props.expandedKeys),\n [props.expandedKeys]\n );\n const selectedKeysSet = useMemo(\n () => new Set(props.selectedKeys),\n [props.selectedKeys]\n );\n\n const [q, setQ] = useState(\"\");\n\n const handleSearch = (e: CustomEvent<string>) => {\n setQ(e.detail);\n };\n\n const searchedData = useMemo(() => {\n const result = searchTree(data, q, (searchFields || []).concat(\"title\"));\n if (q) {\n element.expandedKeys = result.expandedKeys;\n }\n return result.data;\n }, [data, q, searchFields]);\n\n const treeData = useMemo(() => {\n return getFlattenTreeData(searchedData, expandedKeysSet);\n }, [searchedData, expandedKeysSet]);\n\n return (\n <DirectoryTreeContext.Provider\n value={{\n expandedKeysSet,\n selectedKeysSet,\n internalNodeSelectable,\n onSelect,\n onExpand,\n suffixBrick,\n }}\n >\n <div className=\"directory-container\">\n {directoryTitle && (\n <div className=\"directory-title-container\">\n <div className=\"directory-title\" title={directoryTitle}>\n {directoryTitle}\n </div>\n <div className=\"directory-title-toolbar\">\n <slot name=\"toolbar\" />\n </div>\n </div>\n )}\n {searchable && (\n <WrappedSearch\n className=\"directory-search\"\n trim\n placeholder={placeholder}\n onSearch={handleSearch}\n />\n )}\n <div className=\"tree\">\n <Tree treeData={treeData} />\n </div>\n </div>\n </DirectoryTreeContext.Provider>\n );\n}\n","import React, { useEffect, useRef } from \"react\";\nimport { EventEmitter, createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { IndentSize } from \"../constants\";\n\nconst { defineElement, property, event } = createDecorators();\n\nconst WrappedEoIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface EoDirectoryTreeLeafProps {\n depth: number;\n selected?: boolean;\n icon?: GeneralIconProps;\n faded?: boolean;\n}\n\nexport interface EoDirectoryTreeLeafEvents {\n select: CustomEvent<void>;\n}\n\nexport interface EoDirectoryTreeLeafEventsMap {\n onSelect: \"select\";\n}\n\n/**\n * 目录树叶子节点\n */\nexport\n@defineElement(\"eo-directory-tree-leaf\", {\n styleTexts: [styleText],\n})\nclass EoDirectoryTreeLeaf extends ReactNextElement {\n /**\n * 深度\n */\n @property({\n type: Number,\n })\n accessor depth: number = 0;\n\n /**\n * 是否选中\n */\n @property({\n type: Boolean,\n })\n accessor selected: boolean | undefined;\n\n /** 节点图标 */\n @property({ attribute: false })\n accessor icon: GeneralIconProps | undefined;\n\n /** 节点是否淡化显示 */\n @property({ type: Boolean, render: false })\n accessor faded: boolean | undefined;\n\n /**\n * 节点被选中时触发\n */\n @event({ type: \"select\" })\n accessor #selectEvent!: EventEmitter<void>;\n\n #handleSelect = () => {\n this.#selectEvent.emit();\n };\n\n render() {\n return (\n <EoDirectoryTreeLeafComponent\n depth={this.depth}\n icon={this.icon}\n onSelect={this.#handleSelect}\n />\n );\n }\n}\n\nexport interface EoDirectoryTreeLeafComponentProps\n extends EoDirectoryTreeLeafProps {\n onSelect: () => void;\n}\n\nexport function EoDirectoryTreeLeafComponent({\n depth,\n icon,\n onSelect,\n}: EoDirectoryTreeLeafComponentProps) {\n const treeItemRef = useRef<HTMLDivElement>(null);\n const suffixRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const treeItem = treeItemRef.current;\n const handleSelect = () => {\n onSelect();\n };\n\n treeItem?.addEventListener(\"click\", handleSelect);\n\n return () => {\n treeItem?.removeEventListener(\"click\", handleSelect);\n };\n }, [onSelect]);\n\n useEffect(() => {\n const suffix = suffixRef.current;\n const handleSuffixClick = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n suffix?.addEventListener(\"click\", handleSuffixClick);\n\n return () => {\n suffix?.removeEventListener(\"click\", handleSuffixClick);\n };\n }, []);\n\n return (\n <div className=\"tree-item\" ref={treeItemRef}>\n <div\n className=\"tree-item-indentation\"\n style={{\n width: IndentSize * depth,\n }}\n />\n <div className=\"tree-item-content\">\n <div className=\"tree-item-expand-button\"></div>\n {icon && <WrappedEoIcon {...icon} className=\"tree-item-icon\" />}\n <div className=\"tree-item-label\">\n <slot />\n </div>\n </div>\n <div className=\"tree-item-suffix\" ref={suffixRef}>\n <slot name=\"suffix\" />\n </div>\n </div>\n );\n}\n","export const IndentSize = 10;\n","import * as React from \"react\";\nconst SvgArrow = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={14} height={14} viewBox=\"0 0 14 14\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"m11.743 9.42-4.49-5.206a.34.34 0 0 0-.506 0L2.257 9.42c-.167.194-.016.478.253.478h8.98c.27 0 .42-.284.253-.478\" /></svg>;\nexport default SvgArrow;","import React, { useEffect, useRef } from \"react\";\nimport { EventEmitter, createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport Arrow from \"./arrow.svg\";\nimport { IndentSize } from \"../constants\";\n\nconst { defineElement, property, event } = createDecorators();\n\nconst WrappedEoIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface EoDirectoryTreeInternalNodeProps {\n depth: number;\n expanded?: boolean;\n selectable?: boolean;\n selected?: boolean;\n icon?: GeneralIconProps;\n faded?: boolean;\n}\n\nexport interface EoDirectoryTreeInternalNodeEvents {\n expand: CustomEvent<boolean>;\n select: CustomEvent<void>;\n}\n\nexport interface EoDirectoryTreeInternalNodeEventsMap {\n onExpand: \"expand\";\n onSelect: \"select\";\n}\n\n/**\n * 目录树中间节点\n */\nexport\n@defineElement(\"eo-directory-tree-internal-node\", {\n styleTexts: [styleText],\n})\nclass EoDirectoryTreeInternalNode extends ReactNextElement {\n /**\n * 深度\n */\n @property({\n type: Number,\n })\n accessor depth: number = 0;\n\n /**\n * 是否展开\n */\n @property({\n type: Boolean,\n })\n accessor expanded: boolean | undefined;\n\n /**\n * 可选择\n */\n @property({\n type: Boolean,\n })\n accessor selectable: boolean | undefined;\n\n /**\n * 是否选中\n */\n @property({\n type: Boolean,\n })\n accessor selected: boolean | undefined;\n\n /** 节点图标 */\n @property({ attribute: false })\n accessor icon: GeneralIconProps | undefined;\n\n /** 节点是否淡化显示 */\n @property({ type: Boolean, render: false })\n accessor faded: boolean | undefined;\n\n /**\n * 节点展开/收起时触发\n * @detail 展开后的状态(true 表示展开,false 表示收起)\n */\n @event({ type: \"expand\" })\n accessor #expandEvent!: EventEmitter<boolean>;\n #handleExpand = () => {\n this.#expandEvent.emit(!this.expanded);\n };\n\n /**\n * 节点被选中时触发\n */\n @event({ type: \"select\" })\n accessor #selectEvent!: EventEmitter<void>;\n #handleSelect = () => {\n this.#selectEvent.emit();\n };\n\n render() {\n return (\n <EoDirectoryTreeInternalNodeComponent\n depth={this.depth}\n selectable={this.selectable}\n expanded={this.expanded}\n icon={this.icon}\n onExpand={this.#handleExpand}\n onSelect={this.#handleSelect}\n />\n );\n }\n}\n\nexport interface EoDirectoryTreeInternalNodeComponentProps\n extends EoDirectoryTreeInternalNodeProps {\n onExpand: () => void;\n onSelect: () => void;\n}\n\nexport function EoDirectoryTreeInternalNodeComponent({\n depth,\n selectable,\n icon,\n onExpand,\n onSelect,\n}: EoDirectoryTreeInternalNodeComponentProps) {\n const treeItemRef = useRef<HTMLDivElement>(null);\n const expandBottomRef = useRef<HTMLDivElement>(null);\n const suffixRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (selectable) {\n const treeItem = treeItemRef.current;\n const expandBottom = expandBottomRef.current;\n const handleSelect = () => {\n onSelect();\n };\n const handleExpand = (e: MouseEvent) => {\n e.stopPropagation();\n onExpand();\n };\n\n treeItem?.addEventListener(\"click\", handleSelect);\n expandBottom?.addEventListener(\"click\", handleExpand);\n\n return () => {\n treeItem?.removeEventListener(\"click\", handleSelect);\n expandBottom?.removeEventListener(\"click\", handleExpand);\n };\n } else {\n const treeItem = treeItemRef.current;\n const handleExpand = () => {\n onExpand();\n };\n\n treeItem?.addEventListener(\"click\", handleExpand);\n\n return () => {\n treeItem?.removeEventListener(\"click\", handleExpand);\n };\n }\n }, [selectable, onSelect, onExpand]);\n\n useEffect(() => {\n const suffix = suffixRef.current;\n const handleSuffixClick = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n suffix?.addEventListener(\"click\", handleSuffixClick);\n\n return () => {\n suffix?.removeEventListener(\"click\", handleSuffixClick);\n };\n }, []);\n\n return (\n <>\n <div className=\"tree-item\" ref={treeItemRef}>\n <div\n className=\"tree-item-indentation\"\n style={{\n width: IndentSize * depth,\n }}\n />\n <div className=\"tree-item-content\">\n <div className=\"tree-item-expand-button\" ref={expandBottomRef}>\n <Arrow className=\"tree-item-expand-arrow\" />\n </div>\n {icon && <WrappedEoIcon {...icon} className=\"tree-item-icon\" />}\n <div className=\"tree-item-label\">\n <slot name=\"label\" />\n </div>\n </div>\n <div className=\"tree-item-suffix\" ref={suffixRef}>\n <slot name=\"suffix\" />\n </div>\n </div>\n <div className=\"tree-item-children\">\n <div className=\"tree-item-inner\">\n <slot />\n </div>\n </div>\n </>\n );\n}\n","import React, { useMemo } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { wrapBrick, ReactNextElement } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { getRuntime } from \"@next-core/runtime\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\n\nconst { defineElement } = createDecorators();\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\n/**\n * 导航栏图标\n */\nexport\n@defineElement(\"nav.nav-logo\", {\n styleTexts: [styleText],\n})\nclass NavLogo extends ReactNextElement {\n render() {\n return <NavLogoComponent />;\n }\n}\n\nexport function NavLogoComponent() {\n const brand = getRuntime().getBrandSettings();\n\n const logoNode = useMemo(() => {\n return brand.menu_bar_logo_url ? (\n <img src={brand.menu_bar_logo_url} className=\"personalized-logo\" />\n ) : (\n <WrappedIcon\n category=\"blueprint\"\n icon=\"easyops\"\n lib=\"easyops\"\n className=\"easyops-icon\"\n />\n );\n }, [brand.menu_bar_logo_url]);\n\n return (\n <div className=\"logo-container\">\n {brand.menu_bar_logo_no_link === \"true\" ? (\n logoNode\n ) : (\n <WrappedLink type=\"plain\" url=\"/\" className=\"logo-link\">\n {logoNode}\n </WrappedLink>\n )}\n </div>\n );\n}\n","/* istanbul ignore file */\nexport enum K {\n VIEW_DETAILS = \"VIEW_DETAILS\",\n DISMISS = \"DISMISS\",\n}\n\nconst en: Locale = {\n VIEW_DETAILS: \"View details\",\n DISMISS: \"Dismiss\",\n};\n\nconst zh: Locale = {\n VIEW_DETAILS: \"查看详情\",\n DISMISS: \"忽略\",\n};\n\nexport const NS = \"bricks/nav/poll-announce\";\n\nexport const locales = { en, zh };\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\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]!./notification.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\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]!./notification.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","/* istanbul ignore file */\nimport React, { useEffect } from \"react\";\nimport { createDecorators, type EventEmitter } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { httpErrorToString } from \"@next-core/runtime\";\nimport { unwrapProvider } from \"@next-core/utils/general\";\nimport \"@next-core/theme\";\nimport { i18n } from \"@next-core/i18n\";\nimport { initializeReactI18n } from \"@next-core/i18n/react\";\nimport type { showNotification as _showNotification } from \"@next-bricks/basic/data-providers/show-notification/show-notification\";\nimport {\n AnnounceApi_ignoreAnnounce,\n AnnounceApi_listEffectiveAnnounce,\n AnnounceApi_pollAnnounce,\n} from \"@next-api-sdk/sys-setting-sdk\";\nimport { K, NS, locales } from \"./i18n.js\";\nimport styleText from \"./styles.shadow.css\";\nimport styles from \"./notification.module.css\";\n\ninitializeReactI18n(NS, locales);\n\nconst { defineElement, property, event } = createDecorators();\n\nconst showNotification = unwrapProvider<typeof _showNotification>(\n \"basic.show-notification\"\n);\n\nconst ignoredInstanceIds = new Set<string>();\n\nexport interface PollAnnounceProps {\n pollEnabled?: boolean;\n realTimeMessage?: Message;\n}\n\nexport interface Message {\n title: string;\n data: string;\n instanceId: string;\n}\n\nexport interface PollAnnounceEventsMapping {\n onNotificationClose: \"notification.close\";\n onNotificationOpen: \"notification.open\";\n}\n\n/**\n * 轮询获取通知消息并展示。\n *\n * 从 v2 构件 `nav-legacy.poll-announce` 迁移而来\n */\nexport\n@defineElement(\"nav.poll-announce\", {\n styleTexts: [styleText],\n})\nclass PollAnnounce extends ReactNextElement implements PollAnnounceProps {\n /**\n * 是否启用轮询\n *\n * - 启用时,将会不断轮询通知列表接口\n * - 未启用时,通过 `realTimeMessage` 属性传入实时通知消息\n *\n * 注意:v2 构件 `nav-legacy.poll-announce` 该属性名称为 `pollDisabled`,但其实际意义却是 `pollEnabled`,因此在迁移时进行了重命名。\n */\n @property({ type: Boolean })\n accessor pollEnabled: boolean | undefined;\n\n /**\n * 实时通知消息(通常通过 WebSocket 消息得到)\n */\n @property({ attribute: false })\n accessor realTimeMessage: Message | undefined;\n\n /**\n * 通知框关闭后,调用忽略通知接口完成后触发\n */\n @event({ type: \"notification.close\" })\n accessor #closeEvent!: EventEmitter<void>;\n\n #handleClose = () => {\n this.#closeEvent.emit();\n };\n\n /**\n * 轮询得到新的通知时触发。\n */\n @event({ type: \"notification.open\" })\n accessor #openEvent!: EventEmitter<void>;\n\n #handleOpen = () => {\n this.#openEvent.emit();\n };\n\n render() {\n return (\n <PollAnnounceComponent\n pollEnabled={this.pollEnabled}\n realTimeMessage={this.realTimeMessage}\n onOpen={this.#handleOpen}\n onClose={this.#handleClose}\n />\n );\n }\n}\n\nexport interface PollAnnounceComponentProps extends PollAnnounceProps {\n onOpen: () => void;\n onClose: () => void;\n}\n\nasync function openNotification(\n { title, data, instanceId }: Message,\n onClose: () => void\n) {\n const _data = data\n .replace(/<[^>]+>| /gim, \"\\r\\n\")\n .replace(/“/gim, \"“\")\n .replace(/”/gim, \"”\");\n\n const htmlMessage = _data.length > 100 ? _data.slice(0, 100) : _data;\n\n try {\n await showNotification({\n placement: \"topRight\",\n icon: {\n lib: \"antd\",\n theme: \"filled\",\n icon: \"sound\",\n style: {\n color: \"var(--theme-orange-color)\",\n },\n },\n title,\n htmlMessage: `<div class=\"${styles.message}\">${htmlMessage}</div>`,\n closable: true,\n showConfirm: true,\n confirmText: i18n.t(`${NS}:${K.VIEW_DETAILS}`),\n confirmLink: {\n url: `/announcement-management/announcement-front/content?instanceId=${instanceId}`,\n target: \"_blank\",\n },\n showCancel: true,\n cancelText: i18n.t(`${NS}:${K.DISMISS}`),\n });\n } catch {\n // ignore\n } finally {\n if (!ignoredInstanceIds.has(instanceId)) {\n ignoredInstanceIds.add(instanceId);\n try {\n await AnnounceApi_ignoreAnnounce({\n instanceIds: [instanceId],\n });\n onClose();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"ignore announce failed:\", e);\n }\n }\n }\n}\n\nexport function PollAnnounceComponent({\n pollEnabled,\n realTimeMessage,\n onOpen,\n onClose,\n}: PollAnnounceComponentProps) {\n useEffect(\n () => {\n const listEffectiveAnnounce = async (): Promise<void> => {\n const list = (await AnnounceApi_listEffectiveAnnounce({}))\n .list as (Message & { isPopup: boolean })[];\n if (list.length) {\n list\n .filter((item) => item.isPopup)\n .reverse()\n .forEach((item) => {\n openNotification(item, onClose);\n });\n }\n };\n listEffectiveAnnounce();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n useEffect(() => {\n if (!pollEnabled && realTimeMessage) {\n openNotification(realTimeMessage, onClose);\n }\n }, [onClose, pollEnabled, realTimeMessage]);\n\n useEffect(() => {\n if (!pollEnabled) {\n return;\n }\n let ignored = false;\n const pollAnnounce = async (): Promise<void> => {\n if (ignored) {\n return;\n }\n try {\n const result = await AnnounceApi_pollAnnounce({\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n });\n openNotification(result as Message, onClose);\n onOpen();\n pollAnnounce();\n } catch (error) {\n const err = httpErrorToString(error);\n if (err?.toLowerCase()?.includes(\"timeout\")) {\n pollAnnounce();\n }\n }\n };\n pollAnnounce();\n return () => {\n ignored = true;\n };\n }, [onClose, onOpen, pollEnabled]);\n\n return null;\n}\n","import type { MicroApp } from \"@next-core/types\";\nimport { i18n } from \"@next-core/i18n\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport {\n cook,\n isEvaluable,\n preevaluate,\n type PreevaluateResult,\n} from \"@next-core/cook\";\nimport { supply } from \"@next-core/supply\";\nimport {\n beforeVisitGlobalMember,\n type MemberUsageInExpressions,\n} from \"@next-core/utils/storyboard\";\nimport type { MenuRawData } from \"../get-menu-config-tree\";\n\nconst allowedAppProps = new Set([\"name\", \"id\", \"homepage\", \"localeName\"]);\n\n/**\n * 对菜单标题进行表达式解析,支持 I18N 和 APP。\n */\nexport function smartDisplayForMenuTitle(\n title: unknown,\n i18nNamespace: string | undefined,\n overrideApp: MicroApp | undefined\n): string | undefined {\n if (typeof title !== \"string\") {\n return;\n }\n if (isEvaluable(title)) {\n // A `SyntaxError` maybe thrown.\n let precooked: PreevaluateResult | undefined;\n const appUsage: MemberUsageInExpressions = {\n usedProperties: new Set(),\n hasNonStaticUsage: false,\n };\n try {\n precooked = preevaluate(title, {\n withParent: true,\n hooks: {\n beforeVisitGlobal: beforeVisitGlobalMember(appUsage, [\"APP\"]),\n },\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Parse menu title expression \"${title}\" failed:`, error);\n }\n\n if (\n precooked &&\n (!precooked.attemptToVisitGlobals.has(\"APP\") ||\n (overrideApp &&\n !appUsage.hasNonStaticUsage &&\n [...appUsage.usedProperties].every((prop) =>\n allowedAppProps.has(prop)\n )))\n ) {\n const globals: Record<string, unknown> = {};\n for (const key of precooked.attemptToVisitGlobals) {\n switch (key) {\n case \"I18N\":\n globals[key] = i18n.getFixedT(\n null,\n [i18nNamespace].filter(Boolean)\n );\n break;\n case \"APP\":\n globals[key] = {\n ...overrideApp,\n localeName: overrideApp?.name,\n };\n break;\n }\n }\n const suppliedGlobals = supply(precooked.attemptToVisitGlobals, globals);\n\n let computable = true;\n for (const key of precooked.attemptToVisitGlobals) {\n if (!hasOwnProperty(suppliedGlobals, key)) {\n computable = false;\n break;\n }\n }\n\n if (computable) {\n try {\n const result = cook(precooked.expression, precooked.source, {\n globalVariables: suppliedGlobals,\n });\n if (typeof result === \"string\") {\n return result;\n }\n // eslint-disable-next-line no-console\n console.error(\n `The result of menu title expression \"${title}\" is not a string:`,\n result\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\n `Evaluate menu title expression \"${title}\" failed:`,\n error\n );\n }\n }\n }\n } else if (overrideApp) {\n // 处理简单的占位符替换: ${APP.name} 和 ${APP.localeName}\n return title.replace(\n /\\$\\{\\s*APP\\s*\\.\\s*(?:name|localeName)\\s*\\}/g,\n () => overrideApp.name\n );\n }\n return title;\n}\n\nexport function initializeMenuI18n(menuList: MenuRawData[]) {\n const menuWithI18n = new WeakMap<MenuRawData, string>();\n const menuI18nBundles: [lang: string, ns: string][] = [];\n\n for (const menu of menuList) {\n const menuI18nNamespace = `customize-menu/${menu.menuId}~${menu.app[0].appId}+${\n menu.instanceId\n }`;\n // Support any language in `menu.i18n`.\n Object.entries(menu.i18n ?? {}).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, menuI18nNamespace, resources);\n });\n menuWithI18n.set(menu, menuI18nNamespace);\n }\n\n return {\n menuWithI18n,\n dispose: () => {\n for (const [lang, ns] of menuI18nBundles) {\n i18n.removeResourceBundle(lang, ns);\n }\n },\n };\n}\n","import type { MetaI18n, MicroApp } from \"@next-core/types\";\nimport { createProviderClass } from \"@next-core/utils/general\";\nimport { sortBy } from \"lodash\";\nimport {\n initializeMenuI18n,\n smartDisplayForMenuTitle,\n} from \"./shared/smartDisplayForMenuTitle\";\n\nconst symbolMenuI18nNamespace = Symbol(\"menuI18nNamespace\");\nconst symbolOverrideApp = Symbol(\"overrideApp\");\n\n/** 原始菜单数据。 */\nexport interface MenuRawData {\n menuId: string;\n title: string;\n icon?: {\n imgSrc?: string;\n };\n type?: \"main\" | \"inject\";\n injectMenuGroupId?: string;\n dynamicItems?: boolean;\n itemsResolve?: unknown;\n items?: MenuItemRawData[];\n instanceId: string;\n app: [\n {\n appId: string;\n },\n ];\n i18n?: MetaI18n;\n overrideApp?: MicroApp;\n}\n\n/** 原始菜单项数据。 */\nexport type MenuItemRawData = {\n /** 菜单项文本。 */\n text: string;\n icon?: {\n imgSrc?: string;\n };\n sort?: number;\n groupId?: string;\n hidden?: boolean;\n children?: MenuItemRawData[];\n};\n\nexport interface TitleDataSource {\n objectId: string;\n instanceId: string;\n attributeId?: string;\n}\n\ninterface RuntimeMenuItemRawData extends MenuItemRawData {\n children?: RuntimeMenuItemRawData[];\n [symbolMenuI18nNamespace]?: string;\n [symbolOverrideApp]?: MicroApp;\n}\n\nexport interface TreeNode {\n key: string;\n title: string;\n icon?: unknown;\n faded?: unknown;\n children?: TreeNode[];\n data: MenuRawData | MenuItemRawData;\n /** 第一个节点额外返回 __keys,包含所有节点的 key */\n __keys?: string[];\n}\n\nconst DEFAULT_ICON = {\n lib: \"fa\",\n icon: \"bars\",\n};\n\n/**\n * 构造用于菜单自定义的树形结构数据。\n *\n * 将对菜单标题进行表达式解析,支持 I18N 和 APP。\n */\nexport async function getMenuConfigTree(\n menuList: MenuRawData[]\n): Promise<TreeNode[]> {\n const keys: string[] = [];\n\n function getChildren(\n items: RuntimeMenuItemRawData[] | undefined,\n prefixKey: string\n ): TreeNode[] | undefined {\n const children = items?.map<TreeNode>((item, j) => {\n const key = `${prefixKey}-${j}`;\n keys.push(key);\n return {\n key,\n title:\n smartDisplayForMenuTitle(\n item.text,\n item[symbolMenuI18nNamespace],\n item[symbolOverrideApp]\n ) ?? \"\",\n data: item,\n icon: getIcon(item.icon),\n faded: item.hidden,\n children: getChildren(item.children, key),\n };\n });\n return children?.length ? children : undefined;\n }\n\n const mainMenu = menuList.find((menu) => menu.type === \"main\");\n if (!mainMenu) {\n return [];\n }\n\n const validMenuList: MenuRawData[] = [];\n const injectWithMenus = new Map<string, MenuRawData[]>();\n const { menuWithI18n, dispose } = initializeMenuI18n(menuList);\n\n for (const menu of menuList) {\n if (!(menu.dynamicItems && menu.itemsResolve) && menu.items?.length) {\n if (menu.type === \"inject\" && menu.injectMenuGroupId) {\n let injectingMenus = injectWithMenus.get(menu.injectMenuGroupId);\n if (!injectingMenus) {\n injectingMenus = [];\n injectWithMenus.set(menu.injectMenuGroupId, injectingMenus);\n }\n injectingMenus.push(menu);\n } else {\n validMenuList.push(menu);\n }\n }\n }\n\n keys.push(\"0\");\n\n const firstLevelItems = reorderMenuItems(\n validMenuList.flatMap(\n (menu) =>\n // Here always have non-empty items\n processGroupInject(menu.items, menu, injectWithMenus, menuWithI18n)!\n )\n );\n\n const tree: TreeNode[] = [\n {\n key: \"0\",\n __keys: keys,\n title:\n smartDisplayForMenuTitle(\n mainMenu.title,\n menuWithI18n.get(mainMenu),\n mainMenu.overrideApp\n ) ?? mainMenu.menuId,\n data: mainMenu,\n icon: getIcon(mainMenu.icon),\n children: getChildren(firstLevelItems, \"0\"),\n },\n ];\n\n dispose();\n\n return tree;\n}\n\nfunction getIcon(icon: { imgSrc?: string } | undefined): unknown {\n // 使用图片图标时,该图标一般是表达式,是应用的运行时数据,菜单管理无法获取。\n if (icon?.imgSrc) {\n return DEFAULT_ICON;\n }\n return icon ?? DEFAULT_ICON;\n}\n\nfunction processGroupInject(\n items: MenuItemRawData[] | undefined,\n menu: MenuRawData,\n injectWithMenus: Map<string, MenuRawData[]>,\n menuWithI18n: WeakMap<MenuRawData, string>\n): RuntimeMenuItemRawData[] | undefined {\n return items?.map((item) => {\n const foundInjectingMenus =\n item.groupId && injectWithMenus.get(item.groupId);\n if (foundInjectingMenus) {\n // Each menu to be injected with should be injected only once.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n injectWithMenus.delete(item.groupId!);\n }\n return {\n ...item,\n children: (\n processGroupInject(\n item.children,\n menu,\n injectWithMenus,\n menuWithI18n\n ) ?? ([] as RuntimeMenuItemRawData[])\n ).concat(\n foundInjectingMenus\n ? foundInjectingMenus.flatMap(\n (injectingMenu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(\n injectingMenu.items,\n injectingMenu,\n injectWithMenus,\n menuWithI18n\n )!\n )\n : ([] as RuntimeMenuItemRawData[])\n ),\n [symbolOverrideApp]: menu.overrideApp,\n [symbolMenuI18nNamespace]: menuWithI18n.get(menu),\n };\n });\n}\n\nfunction reorderMenuItems(\n list: MenuItemRawData[] | undefined\n): MenuItemRawData[] {\n return sortMenuItems(list).map((item) => ({\n ...item,\n children: reorderMenuItems(item.children),\n }));\n}\n\nfunction sortMenuItems(list: MenuItemRawData[] | undefined): MenuItemRawData[] {\n return sortBy(list, (item) => item.sort ?? -Infinity, \"text\");\n}\n\ncustomElements.define(\n \"nav.get-menu-config-tree\",\n createProviderClass(getMenuConfigTree)\n);\n","import { createProviderClass } from \"@next-core/utils/general\";\nimport type { MenuRawData } from \"./get-menu-config-tree\";\nimport {\n initializeMenuI18n,\n smartDisplayForMenuTitle,\n} from \"./shared/smartDisplayForMenuTitle\";\n\nexport interface MenuOption {\n label: string;\n value: string;\n}\n\n/**\n * 构造用于菜单自定义的下拉选项数据。\n *\n * 将对菜单标题进行表达式解析,支持 I18N 和 APP。\n */\nexport async function getMenuConfigOptions(\n menuList: MenuRawData[]\n): Promise<MenuOption[]> {\n const options: MenuOption[] = [];\n\n const { menuWithI18n, dispose } = initializeMenuI18n(menuList);\n\n for (const menu of menuList) {\n options.push({\n label: `${smartDisplayForMenuTitle(menu.title, menuWithI18n.get(menu), menu.overrideApp) ?? \"\"} (${menu.menuId})`,\n value: menu.menuId,\n });\n }\n\n dispose();\n\n return options;\n}\n\ncustomElements.define(\n \"nav.get-menu-config-options\",\n createProviderClass(getMenuConfigOptions)\n);\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n FULL_TEXT_SEARCH = \"FULL_TEXT_SEARCH\",\n IP_SEARCH = \"IP_SEARCH\",\n TICKET_SEARCH = \"TICKET_SEARCH\",\n TICKET_SEARCH_PLACEHOLDER = \"TICKET_SEARCH_PLACEHOLDER\",\n IP_SEARCH_PLACEHOLDER = \"IP_SEARCH_PLACEHOLDER\",\n FULL_TEXT_SEARCH_PLACEHOLDER = \"FULL_TEXT_SEARCH_PLACEHOLDER\",\n IP_SEARCH_TOOLTIP = \"IP_SEARCH_TOOLTIP\",\n RECENT_SEARCH = \"RECENT_SEARCH\",\n NO_SEARCH_HISTORY = \"NO_SEARCH_HISTORY\",\n QUICK_SEARCH_TIP = \"QUICK_SEARCH_TIP\",\n}\n\nconst en: Locale = {\n FULL_TEXT_SEARCH: \"Full-text search\",\n IP_SEARCH: \"IP search\",\n TICKET_SEARCH: \"Ticket search\",\n TICKET_SEARCH_PLACEHOLDER: \"Enter ticket number/title and other keywords\",\n IP_SEARCH_PLACEHOLDER:\n \"Enter IP to query hosts and related applications, systems and other resources\",\n FULL_TEXT_SEARCH_PLACEHOLDER:\n 'Search applications, hosts and other information, supports \"\" exact search',\n IP_SEARCH_TOOLTIP: \"IP Search\",\n RECENT_SEARCH: \"Recent Search\",\n NO_SEARCH_HISTORY: \"No search history\",\n QUICK_SEARCH_TIP: \"Quick Search (Cmd/Ctrl+K)\",\n};\n\nconst zh: Locale = {\n FULL_TEXT_SEARCH: \"全文搜索\",\n IP_SEARCH: \"ip搜索\",\n TICKET_SEARCH: \"工单搜索\",\n TICKET_SEARCH_PLACEHOLDER: \"输入工单编号/标题等关键字\",\n IP_SEARCH_PLACEHOLDER: \"输入IP查询主机关联的应用、系统等资源\",\n FULL_TEXT_SEARCH_PLACEHOLDER: '搜索应用、主机等信息,支持\"\"精确搜索',\n IP_SEARCH_TOOLTIP: \"IP搜索\",\n RECENT_SEARCH: \"最近搜索\",\n NO_SEARCH_HISTORY: \"暂无搜索记录\",\n QUICK_SEARCH_TIP: \"快捷搜索(Cmd/Ctrl+K)\",\n};\n\nexport const NS = \"bricks/nav/query-search\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","import React, {\n useEffect,\n useState,\n useMemo,\n useRef,\n useCallback,\n} from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport { NS, locales, K, t } from \"./i18n.js\";\nimport styleText from \"./styles.shadow.css\";\n\nimport type { Button, ButtonProps } from \"@next-bricks/basic/button\";\nimport classNames from \"classnames\";\nimport type {\n GeneralSearch,\n SearchProps,\n SearchEvents,\n SearchEventsMap,\n} from \"@next-bricks/form/search\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\n\nimport { getRuntime, getHistory } from \"@next-core/runtime\";\nimport { JsonStorage } from \"@next-shared/general/JsonStorage\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport { uniq } from \"lodash\";\nimport { Select, ConfigProvider, theme } from \"antd\";\nimport { StyleProvider, createCache } from \"@ant-design/cssinjs\";\nimport { InstanceApi_postSearchV3 } from \"@next-api-sdk/cmdb-sdk\";\nimport type { EoTooltip, ToolTipProps } from \"@next-bricks/basic/tooltip\";\nimport { useCurrentTheme } from \"@next-core/react-runtime\";\n\ninitializeI18n(NS, locales);\n\nconst { defineElement } = createDecorators();\n\n// --- 常量定义 ---\nconst STORAGE = new JsonStorage(localStorage);\nconst FULL_TEXT_URL = \"search/result?q=%{q}%\";\nconst IP_SEARCH_URL = \"search/new/ipSearch?q=%{q}%\";\nconst ITSM_SEARCH_URL = \"/itsc-ticket-center/ticket-list?q=%{q}%\";\nconst INSTANCE_SEARCH_URL = \"search/instance-or-relation-path/search/\";\n\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nconst WrappedButton = wrapBrick<Button, ButtonProps>(\"eo-button\");\nexport const WrappedSearch = wrapBrick<\n GeneralSearch,\n SearchProps,\n SearchEvents,\n SearchEventsMap\n>(\"eo-search\", {\n onChange: \"change\",\n onSearch: \"search\",\n});\nconst WrappedToolTip = wrapBrick<EoTooltip, ToolTipProps>(\"eo-tooltip\");\n\n/**\n * 综合搜索入口,支持全文检索、IP 搜索、工单搜索等多种查询模式,带搜索历史记录功能\n */\nexport\n@defineElement(\"nav.query-search\", {\n styleTexts: [styleText],\n})\nclass QuerySearch extends ReactNextElement {\n render() {\n return <QuerySearchComponent shadowRoot={this.shadowRoot} />;\n }\n}\n\nexport interface QuerySearchComponentProps {\n shadowRoot: ShadowRoot | null;\n}\n\nenum QuerierTypes {\n fullText = \"fullText\",\n instanceSearch = \"instanceSearch\",\n relationSearch = \"relationSearch\",\n link = \"link\",\n ipSearch = \"ipSearch\",\n}\n\ninterface QuerierConfig {\n url: string;\n searchPlaceholder: string;\n}\n\ninterface Querier {\n name: string;\n type: QuerierTypes;\n disabled: boolean;\n showInApps: string[];\n instanceId?: string;\n config: QuerierConfig;\n}\n\ninterface QuerierOption extends Querier {\n label: string;\n value: string;\n}\n\n// 获取 Storage Key 的辅助函数\nconst getOrgId = () => (auth.getAuth() as Record<string, string>)?.org || \"\";\nconst getRecentVisitsKey = () => `querier-search-recent-visits:${getOrgId()}`;\nconst getSelectedQuerierKey = () => `querier-search-querier:${getOrgId()}`;\n\nexport function QuerySearchComponent(props: QuerySearchComponentProps) {\n const { shadowRoot } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const appId = getRuntime().getCurrentApp()?.id || \"\";\n const currentTheme = useCurrentTheme();\n\n // State\n /**\n * null: 初始化(无动画)\n * false: 收起(播放收起动画)\n * true: 展开\n */\n const [showInput, setShowInput] = useState<boolean | null>(null);\n const [searchKey, setSearchKey] = useState<string>(\"\");\n const [visits, setVisits] = useState<string[]>([]);\n\n // Data State\n const [querierList, setQuerierList] = useState<Querier[]>([]);\n const [querierOptions, setQuerierOptions] = useState<QuerierOption[]>([]);\n const [selectedQuerier, setSelectedQuerier] = useState<QuerierOption>();\n\n // Style Cache\n const cache = useMemo(() => createCache(), []);\n\n // 检测是否应该直接跳转 (响应式布局逻辑)\n const checkIsDirectJump = useCallback((): boolean => {\n const parentWidth = shadowRoot?.host?.parentElement?.clientWidth || 0;\n return document.documentElement.clientWidth - parentWidth - 500 < 200;\n }, [shadowRoot]);\n\n // 处理跳转逻辑\n const handleHistoryPush = useCallback(\n (q?: string) => {\n // 如果还没加载 querier,默认去 IP 搜索\n const targetUrl =\n showInput && selectedQuerier?.config?.url\n ? selectedQuerier.config.url\n : IP_SEARCH_URL;\n const cleanUrl = targetUrl.startsWith(\"/\") ? targetUrl : \"/\" + targetUrl;\n const queryTerm = q || searchKey || \"\";\n const to = cleanUrl.replaceAll(\"%{q}%\", queryTerm);\n getHistory().push(to);\n },\n [showInput, selectedQuerier, searchKey]\n );\n\n // --- 核心逻辑优化 1: 分离键盘事件监听 ---\n\n // 1.1 全局快捷键监听 (Cmd/Ctrl + K) - 只绑定一次\n // istanbul ignore next\n useEffect(() => {\n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.userAgent);\n const modKey = isMac ? e.metaKey : e.ctrlKey;\n\n if (modKey && e.key === \"k\") {\n e.preventDefault();\n // 使用 functional update 获取最新状态,避免频繁解绑\n setShowInput((prevShow) => {\n if (!prevShow) {\n // 如果当前是关闭状态,检查是否直接跳转\n if (checkIsDirectJump()) {\n // 注意:这里可能取不到最新的 selectedQuerier,如果依赖它,需要调整逻辑\n // 但 checkIsDirectJump 路径下通常走 IP Search 或默认\n // 为简化,此处仅触发打开,或需将 historyPush 移出 effect\n // *修正*: 为了保持原逻辑,这里若 directJump 为 true,我们在 state 变化副作用里处理,或者简单地只设为 true\n // 原逻辑是: 没 showInput -> directJump ? jump : show\n return true;\n }\n return true;\n }\n return prevShow;\n });\n\n // 特殊处理 DirectJump: 如果变为 true 后需要立即跳转,\n // 最好是在点击 button 时判断。快捷键场景下,先打开 Input 也是合理的交互。\n // 如果严格遵循原逻辑,需要在 effect 外部处理 jump。\n if (checkIsDirectJump() && !showInput) {\n // 这里 showInput 是闭包旧值,需小心\n handleHistoryPush();\n setShowInput(false); // 保持关闭\n }\n }\n };\n\n window.addEventListener(\"keydown\", handleGlobalKeyDown);\n return () => window.removeEventListener(\"keydown\", handleGlobalKeyDown);\n }, [checkIsDirectJump, handleHistoryPush]); // 依赖项较少\n\n // 1.2 局部交互监听 (点击外部关闭, ESC) - 仅当 showInput 为 true 时生效\n // istanbul ignore next\n useEffect(() => {\n if (!showInput) return;\n\n // 自动聚焦\n inputRef.current?.focus();\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !e.composedPath().includes(containerRef.current)\n ) {\n setShowInput(false);\n }\n };\n\n const handleEscKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" || e.key === \"Esc\") {\n setShowInput(false);\n }\n };\n\n // 关键修复:添加时使用了 capture: true\n window.addEventListener(\"click\", handleClickOutside, true);\n window.addEventListener(\"keydown\", handleEscKey);\n\n return () => {\n // 关键修复:移除时必须保持 capture: true,否则无法移除\n window.removeEventListener(\"click\", handleClickOutside, true);\n window.removeEventListener(\"keydown\", handleEscKey);\n };\n }, [showInput]);\n\n // --- 核心逻辑优化 2: 数据获取 (Lazy Loading) ---\n\n useEffect(() => {\n // 只有在打开输入框且列表为空时才加载\n if (showInput && querierList.length === 0) {\n const fetchQueriers = async () => {\n const defaultQueriers: Querier[] = [\n {\n type: QuerierTypes.fullText,\n name: t(K.FULL_TEXT_SEARCH),\n disabled: false,\n showInApps: [],\n config: { url: FULL_TEXT_URL, searchPlaceholder: \"\" },\n },\n {\n type: QuerierTypes.ipSearch,\n name: t(K.IP_SEARCH),\n disabled: false,\n showInApps: [],\n config: { url: IP_SEARCH_URL, searchPlaceholder: \"\" },\n },\n {\n type: QuerierTypes.link,\n name: t(K.TICKET_SEARCH),\n disabled: false,\n showInApps: [],\n config: {\n url: ITSM_SEARCH_URL,\n searchPlaceholder: t(K.TICKET_SEARCH_PLACEHOLDER),\n },\n },\n ];\n\n try {\n const res = await InstanceApi_postSearchV3(\"QUERIER_CONFIG@EASYOPS\", {\n page: 1,\n page_size: 100,\n fields: [\"name\", \"type\", \"disabled\", \"config\", \"showInApps\"],\n });\n\n const apiQueriers =\n res.list?.map((item) => {\n const i = item as Querier;\n const config: QuerierConfig = i.config || {\n url: \"\",\n searchPlaceholder: \"\",\n };\n\n if (i.type === QuerierTypes.fullText) config.url = FULL_TEXT_URL;\n else if (i.type === QuerierTypes.ipSearch)\n config.url = IP_SEARCH_URL;\n else if (\n [\n QuerierTypes.instanceSearch,\n QuerierTypes.relationSearch,\n ].includes(i.type)\n ) {\n config.url = `${INSTANCE_SEARCH_URL}${i.name}?q=%{q}%`;\n }\n return { ...i, config };\n }) || [];\n\n setQuerierList(\n apiQueriers.length > 0 ? apiQueriers : defaultQueriers\n );\n } catch {\n setQuerierList(defaultQueriers);\n }\n };\n fetchQueriers();\n }\n }, [showInput, querierList.length]);\n\n // --- 逻辑优化 3: 选项过滤与选中状态 ---\n\n useEffect(() => {\n if (querierList.length === 0) return;\n\n const options = querierList\n .filter(\n (i) =>\n !i.disabled && (!i.showInApps?.length || i.showInApps.includes(appId))\n )\n .map((i) => ({ ...i, label: i.name, value: i.name }));\n\n setQuerierOptions(options);\n\n // 恢复上次选中的 Querier\n const lastSelectedName = STORAGE.getItem(getSelectedQuerierKey());\n const matched = options.find((i) => i.name === lastSelectedName);\n const defaultOption =\n options.find((i) => i.type === QuerierTypes.ipSearch) || options[0];\n\n setSelectedQuerier(matched || defaultOption);\n }, [querierList, appId]);\n\n // 读取历史记录\n useEffect(() => {\n if (selectedQuerier) {\n const historyKey = `${getRecentVisitsKey()}-${selectedQuerier.name}`;\n setVisits(STORAGE.getItem(historyKey) ?? []);\n }\n }, [selectedQuerier]);\n\n // --- 事件处理 ---\n\n const handleQuerierSelect = (val: string) => {\n STORAGE.setItem(getSelectedQuerierKey(), val);\n setSelectedQuerier(querierOptions.find((i) => i.name === val));\n };\n // istanbul ignore next\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && searchKey && selectedQuerier) {\n const historyKey = `${getRecentVisitsKey()}-${selectedQuerier.name}`;\n STORAGE.setItem(historyKey, uniq([searchKey, ...visits].slice(0, 5)));\n handleHistoryPush();\n }\n };\n\n const handleClear = () => setSearchKey(\"\");\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) =>\n setSearchKey(e.target.value);\n\n const handleSearchClick = () => {\n if (checkIsDirectJump()) {\n handleHistoryPush();\n } else {\n setShowInput(true);\n }\n };\n // istanbul ignore next\n const handleHistoryTagClick = (tag: string) => {\n if (selectedQuerier) {\n const historyKey = `${getRecentVisitsKey()}-${selectedQuerier.name}`;\n STORAGE.setItem(historyKey, uniq([tag, ...visits].slice(0, 5)));\n handleHistoryPush(tag);\n }\n };\n\n // 计算 Placeholder\n const getPlaceholder = () => {\n if (selectedQuerier?.config?.searchPlaceholder)\n return selectedQuerier.config.searchPlaceholder;\n if (selectedQuerier?.type === QuerierTypes.ipSearch)\n return t(K.IP_SEARCH_PLACEHOLDER);\n if (selectedQuerier?.type === QuerierTypes.fullText)\n return t(K.FULL_TEXT_SEARCH_PLACEHOLDER);\n return \"\";\n };\n\n return (\n <ConfigProvider\n theme={{\n algorithm:\n currentTheme === \"dark-v2\"\n ? theme.darkAlgorithm\n : theme.defaultAlgorithm,\n }}\n >\n <StyleProvider\n container={shadowRoot as ShadowRoot}\n cache={cache}\n hashPriority=\"high\"\n >\n <div style={{ position: \"relative\" }} ref={containerRef}>\n <div\n className={classNames(\"container\", {\n containerShowInput: showInput,\n inputContentSlideout: showInput === false,\n })}\n onClick={(e) => e.stopPropagation()}\n >\n <div\n className={classNames(\"inputContent\", {\n inputContentSlidein: showInput,\n inputContentSlideout: showInput === false,\n })}\n >\n <div className=\"input-addon-wrapper\">\n <span className=\"input-affix-wrapper\">\n <span className=\"input-before-addon\">\n <Select\n value={selectedQuerier?.value}\n getPopupContainer={(trigger) => trigger.parentElement}\n showSearch\n variant=\"borderless\"\n style={{ width: \"100px\" }}\n options={querierOptions}\n onChange={handleQuerierSelect}\n />\n </span>\n <input\n placeholder={getPlaceholder()}\n ref={inputRef}\n value={searchKey}\n onChange={handleChange}\n onKeyDown={handleInputKeyDown}\n />\n {!!searchKey && (\n <span className=\"input-suffix\">\n <WrappedIcon\n className=\"input-clear-icon\"\n lib=\"antd\"\n icon=\"close-circle\"\n theme=\"filled\"\n onClick={handleClear}\n />\n </span>\n )}\n </span>\n </div>\n </div>\n\n {!showInput && (\n <WrappedToolTip content={t(K.IP_SEARCH_TOOLTIP)} placement=\"left\">\n <WrappedButton\n onClick={handleSearchClick}\n className={classNames(\"button\", {\n buttonSildeint: showInput === false,\n })}\n shape=\"circle\"\n type=\"ghost\"\n buttonStyle={{\n border: \"none\",\n background: \"none\",\n fontSize: \"16px\",\n }}\n icon={{ icon: \"search\", theme: \"outlined\", lib: \"antd\" }}\n />\n </WrappedToolTip>\n )}\n </div>\n\n <div\n className={classNames(\"historySearchContainer\", {\n historySearchContainerSlidein: showInput,\n historySearchContainerSlideout: showInput === false,\n })}\n >\n <div className=\"historySearchContent\">\n <div className=\"latestSearchText\">{t(K.RECENT_SEARCH)}</div>\n <div className=\"latestSearchTagContainer\">\n {visits.map((i) => (\n <span\n key={i}\n className=\"latestSearchTagContent\"\n onClick={() => handleHistoryTagClick(i)}\n >\n <span className=\"latestSearchTagText\" title={i}>\n {i}\n </span>\n </span>\n ))}\n {!visits.length && (\n <div className=\"emptyText\">{t(K.NO_SEARCH_HISTORY)}</div>\n )}\n </div>\n </div>\n <div className=\"quickSearchTip\">{t(K.QUICK_SEARCH_TIP)}</div>\n </div>\n </div>\n </StyleProvider>\n </ConfigProvider>\n );\n}\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, `:host{display:inline-block}:host([hidden]){display:none}.directory-container{background-color:var(--color-fill-global-bg-3)}.directory-container .directory-title-container{margin-bottom:24px;display:flex;align-items:center;justify-content:space-between;gap:8px}.directory-container .directory-title-container .directory-title{font-size:16px;color:var(--text-color-title);line-height:24px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.directory-container .directory-search{display:block;margin-bottom:12px}.directory-container .tree > *:not(:last-child){margin-bottom:8px}.show-suffix-when-hover:not(:hover) .suffix{display:none}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.app-bar-container{height:var(--app-bar-height)}.app-bar{position:relative;z-index:999;box-shadow:var(--top-nav-shadow)}.app-bar.fixed,\n.app-bar.absolute{right:0;left:0;top:0}.app-bar.fixed{position:fixed}.app-bar.absolute{position:absolute}.app-bar-content{display:flex;justify-content:space-between;align-items:center;height:var(--app-bar-height);background-color:var(--top-navigation-bg);padding:0 16px;transition:var(--launchpad-backdrop-transition)}.left{display:flex;flex:1}.right{display:flex;justify-content:end}`, \"\"]);\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, `:host{display:inline-block}:host([hidden]){display:none}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.recent-visits{list-style:none;margin:0;padding:0;display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));max-height:56px;overflow:hidden}.recent-visits span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recent-visits eo-link{display:block;min-width:0}.recent-visits eo-link::part(link){background-color:var(--color-fill-bg-base-1);border-radius:3px;color:var(--color-header-text);display:flex;align-items:center;height:24px;padding:0 8px}.recent-visits eo-link:hover::part(link){color:var(--color-brand-hover)}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.alert{height:32px;padding:0 20px;display:flex;justify-content:center;align-items:center}.text{color:var(--antd-text-color);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon{margin-left:20px;cursor:pointer;color:#8c8c8c}.info{background-color:var(--palette-blue-1)}.warning{background-color:var(--palette-amber-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, `:root{--eo-search-launchpad-menu-icon-color:#8c8c8c}html[data-theme=\"dark\"],\nhtml[data-theme=\"dark-v2\"]{--eo-search-launchpad-menu-icon-color:rgba(255,255,255,0.45)}`, \"\"]);\n// Exports\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, `:host{display:block}:host([hidden]){display:none}.tree-item{min-height:24px;display:flex;align-items:center;-webkit-user-select:none;user-select:none;cursor:pointer;border-radius:3px}.tree-item-indentation{flex-shrink:0}.tree-item-content{min-width:0;flex:1;display:flex;align-items:center}.tree-item-icon,\n.tree-item-expand-button{padding:3px;width:12px;height:12px;font-size:12px;flex-shrink:0}.tree-item-icon,\n.tree-item-label{color:var(--color-header-text)}.tree-item-icon{margin-right:4px}.tree-item-expand-button{margin:0 4px}.tree-item-label{min-width:0;flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.tree-item-suffix{flex-shrink:0}:host([selected]) .tree-item{background-color:var(--palette-blue-1)}:host([faded]) .tree-item-icon,:host([faded]) .tree-item-label{color:var(--color-disabled-text)}:host(:not([selected])) .tree-item:hover .tree-item-icon{color:var(--palette-blue-4)}:host(:not([selected])) .tree-item:hover .tree-item-label{color:var(--palette-blue-4)}`, \"\"]);\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, `:host{display:block;--menu-item-icon-size:20px}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}.menu-group-title{position:relative;display:flex;align-items:center;min-height:36px;padding:8px 12px;line-height:20px;color:var(--left-secondary-text-color);border-radius:var(--larger-border-radius);transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-group-title-icon-container{flex-shrink:0;margin-right:14px;display:flex;align-items:center;justify-content:center;width:var(--menu-item-icon-size);height:var(--menu-item-icon-size);color:var(--left-sidebar-item-collapsed-icon-color);font-size:var(--menu-item-icon-size);transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-group-title-icon{width:1em;height:1em;border-bottom:2px solid var(--left-sidebar-group-border-color)}.menu-group-title-text{flex:1;font-size:12px;overflow:hidden;white-space:nowrap;margin-right:12px}.menu-group-list slot::slotted(*){margin-top:2px}.menu-group-arrow{position:absolute;top:50%;right:12px;width:10px;transform:translateY(-2px);transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1)}.menu-group-arrow::before,\n.menu-group-arrow::after{content:\"\";position:absolute;width:6px;height:1.5px;background-color:currentColor;border-radius:2px;transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1)}.menu-group-arrow::before{transform:rotate(45deg) translateX(2.5px)}.menu-group-arrow::after{transform:rotate(-45deg) translateX(-2.5px)}.menu-group-collapsed .menu-group-arrow{transform:translateY(-50%)}.menu-group-collapsed .menu-group-arrow::before{transform:rotate(-45deg) translateX(2.5px)}.menu-group-collapsed .menu-group-arrow::after{transform:rotate(45deg) translateX(-2.5px)}.menu-group-list{display:grid;grid-template-rows:1fr;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-group-list-inner{overflow:hidden}:host([menu-collapsed]) .menu-group-title{padding:0px calc(50% - var(--menu-item-icon-size) / 2)}:host(:not([menu-collapsed])) .menu-group-title-icon-container{width:0;margin-right:0;opacity:0}:host([menu-collapsed]) .menu-group-title-text{opacity:0}:host([menu-collapsed]) .menu-group-arrow{opacity:0}:host(:not([menu-collapsed])) .menu-group-title-text{white-space:pre-wrap;display:-webkit-inline-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;text-overflow:ellipsis;color:#7f8ba6}:host([collapsable]) .menu-group-collapsed .menu-group-list{grid-template-rows:0fr;opacity:0}`, \"\"]);\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, `:host{display:block;--menu-item-icon-size:20px}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}.menu-submenu-title{position:relative;display:flex;align-items:center;min-height:36px;padding:8px 12px;line-height:20px;color:var(--left-sidebar-item-normal-color);border-radius:var(--larger-border-radius);cursor:pointer;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-submenu-title-icon-container{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:var(--menu-item-icon-size);height:var(--menu-item-icon-size);font-size:var(--menu-item-icon-size);color:var(--left-sidebar-item-collapsed-icon-color)}.menu-submenu-title-text{flex:1;margin-left:14px;margin-right:12px;font-size:14px;overflow:hidden;white-space:nowrap}.menu-submenu-arrow{position:absolute;top:50%;right:12px;width:10px;color:var(--left-sidebar-item-arrow-color);transform:translateY(-2px);transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1)}.menu-submenu-arrow::before,\n.menu-submenu-arrow::after{content:\"\";position:absolute;width:6px;height:1.5px;background-color:currentColor;border-radius:2px;transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1)}.menu-submenu-arrow::before{transform:rotate(45deg) translateX(2.5px)}.menu-submenu-arrow::after{transform:rotate(-45deg) translateX(-2.5px)}.menu-submenu-collapsed .menu-submenu-arrow{transform:translateY(-50%)}.menu-submenu-collapsed .menu-submenu-arrow::before{transform:rotate(-45deg) translateX(2.5px)}.menu-submenu-collapsed .menu-submenu-arrow::after{transform:rotate(45deg) translateX(-2.5px)}.menu-submenu-title:hover{background:var(--left-sidebar-item-hover-bg)}.menu-sub{display:grid;grid-template-rows:1fr;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-submenu-collapsed .menu-sub{grid-template-rows:0fr;opacity:0}.menu-sub-inner{overflow:hidden}.menu-sub-inner slot::slotted(*){margin-top:2px}:host([menu-collapsed]) .menu-submenu-title{padding:0px calc(50% - var(--menu-item-icon-size) / 2)}:host([menu-collapsed]) .menu-submenu-title-text{opacity:0}:host([menu-collapsed]) .menu-submenu-arrow{opacity:0}:host(:not([menu-collapsed])) .menu-submenu-title-text{white-space:pre-wrap;display:-webkit-inline-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;text-overflow:ellipsis}:host([selected]):host([menu-collapsed]) .menu-submenu-title{background:var(--left-sidebar-item-selected-bg);color:var(--left-sidebar-item-selected-color)}:host([selected]):host([collapsed]) .menu-submenu-title{background:var(--left-sidebar-item-selected-bg);color:var(--left-sidebar-item-selected-color)}:host([selected]):host([menu-collapsed]) .menu-submenu-title-icon-container{color:var(--left-sidebar-item-selected-color)}:host([selected]):host([collapsed]) .menu-submenu-title-icon-container{color:var(--left-sidebar-item-selected-color)}:host([selected]):host([menu-collapsed]) .menu-submenu-arrow{color:var(--left-sidebar-item-selected-color)}:host([selected]):host([collapsed]) .menu-submenu-arrow{color:var(--left-sidebar-item-selected-color)}:host([selected]) .menu-submenu-title-text{font-weight:var(--font-weight-500)}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.tree-item{min-height:24px;display:flex;align-items:center;-webkit-user-select:none;user-select:none;cursor:pointer;border-radius:3px}.tree-item-indentation{flex-shrink:0}.tree-item-content{min-width:0;flex:1;display:flex;align-items:center}.tree-item-icon,\n.tree-item-expand-button{padding:3px;position:relative;width:12px;height:12px;font-size:12px;flex-shrink:0}.tree-item-icon,\n.tree-item-label{color:var(--color-header-text)}.tree-item-icon{margin-right:4px}.tree-item-expand-button{margin:0 4px}.tree-item-expand-button .tree-item-expand-arrow{color:var(--color-header-text);width:12px;height:12px;position:absolute;left:50%;top:50%;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.tree-item-label{min-width:0;flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.tree-item-suffix{flex-shrink:0}.tree-item-children{display:grid;grid-template-rows:1fr;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.tree-item-children .tree-item-inner{overflow:hidden}.tree-item-children .tree-item-inner slot::slotted(*){margin-top:8px}:host(:not([expanded])) .tree-item-children{grid-template-rows:0fr;opacity:0}:host([expanded]) .tree-item-expand-arrow{transform:translate(-50%,-50%) rotate(180deg)}:host(:not([expanded])) .tree-item-expand-arrow{transform:translate(-50%,-50%) rotate(90deg)}:host([selectable]) .tree-item-expand-button:hover{background-color:var(--color-fill-bg-base-1)}:host([selectable][selected]) .tree-item{background-color:var(--palette-blue-1)}:host([faded]) .tree-item-icon,:host([faded]) .tree-item-label{color:var(--color-disabled-text)}:host(:not([selected])) .tree-item:hover .tree-item-icon{color:var(--palette-blue-4)}:host(:not([selected])) .tree-item:hover .tree-item-label{color:var(--palette-blue-4)}`, \"\"]);\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, `:host{display:inline-block}:host([hidden]){display:none}.container{position:relative;width:32px;height:32px}.containerShowInput{width:500px}.inputContent{background:rgba(204,209,219,0.3);border-radius:3px;height:30px;position:absolute;right:0;width:0px;overflow:hidden}.inputContentSlidein{overflow:visible;animation:slidein 0.4s ease-in-out forwards}.inputContentSlideout{width:500px;animation:slideout 0.4s 0.2s ease-in-out forwards}input{flex:1;padding:0;margin:0;border:none;outline:none;font-size:14px;line-height:20px;color:inherit;background-color:transparent;cursor:inherit;width:100%}select{border:none;outline:none;width:150px;background:transparent}input:focus{border:none!important}input::placeholder{color:var(--color-disabled-text)}.button{position:absolute;right:0;top:0}.buttonSildeint{opacity:0;animation:btnSlidein 0.1ms 0.6s ease-in-out forwards}@keyframes btnSlidein{from{opacity:0}to{opacity:1}}@keyframes slidein{from{width:0px}to{width:500px}}@keyframes slideout{from{width:500px}to{width:0px}}.input-addon-wrapper{display:table;width:100%;line-height:22px}.input-affix-wrapper{display:inline-flex;position:relative;padding-bottom:4px;width:100%;transition:border-color 0.3s,box-shadow 0.3s;overflow:visible}.input-suffix,\n.input-before-addon{display:flex;flex:none;align-items:center;margin-left:4px;margin-right:4px;width:16px}.input-before-addon{width:100px}.input-clear-icon{margin-left:4px;font-size:12px;color:var(--text-color-disabled);cursor:pointer}.input-clear-icon:hover{color:var(--antd-text-color-secondary)}.historySearchContainer{width:500px;height:160px;box-shadow:0px 2px 6px 0px rgba(0,0,0,0.15);background-color:var(--antd-dropdown-menu-bg);top:35px;position:absolute;height:0px;right:0;overflow:hidden;border-radius:6px;z-index:1000}.historySearchContainerSlidein{top:35px;animation:historySlidein 0.4s 0.2s ease-in-out forwards}.historySearchContainerSlideout{animation:historySlideout 0.4s ease-in-out forwards}@keyframes historySlidein{from{height:0px}to{height:160px}}@keyframes historySlideout{from{height:160px}to{height:0px}}.quickSearchTip{width:140px;height:17px;font-family:PingFangSC,PingFang SC;font-weight:400;font-size:12px;color:var(--color-auxiliary-text);line-height:17px;text-align:left;font-style:normal;padding:8px 16px 8px 16px;width:484px;border-top:1px solid var(--color-border-divider-line)}.historySearchContent{height:103px;padding:16px 16px 8px 16px;overflow:auto}.latestSearchText{width:56px;height:20px;font-family:PingFangSC,PingFang SC;font-weight:400;font-size:14px;color:var(--local-card-description-color);line-height:20px;text-align:left;font-style:normal;margin-bottom:10px}.latestSearchTagText{height:17px;font-family:PingFangSC,PingFang SC;font-weight:400;font-size:14px;color:var(--color-strong-text);line-height:17px;text-align:center;font-style:normal;white-space:nowrap}.latestSearchTagContainer{display:flex;flex-wrap:wrap;row-gap:8px;column-gap:10px}.latestSearchTagContent{height:20px;background:var(--color-fill-bg-base-1);border-radius:3px;padding:1.5px 8px;cursor:pointer;max-width:480px;overflow:hidden;text-overflow:ellipsis}.emptyText{color:var(--text-color-secondary);text-align:center;width:100%}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","toString","locals","defineElement","property","createDecorators","WrappedMenuItem","wrapBrick","WrappedPopover","onVisibleChange","onBeforeVisibleChange","RenderMenuItemCom","props","item","isSubMenu","topData","React","SubMenuItemCom","_extends","isGroup","GroupMenuItemCom","SimpleMenuItemCom","index","hidden","showTooltip","selectedKey","className","key","title","text","active","includes","renderLinkCom","width","mainMenuTitleStyle","scrollWidth","handlePopupVisibleChange","event","paddingRight","window","innerWidth","document","body","clientWidth","style","detail","overflow","touchAction","_ref","_item$items","items","length","classnames","subprime","arrow","trigger","placement","distance","anchorDisplay","strategy","slot","renderSpanCom","map","innerItem","_ref2","_item$items2","childLayout","ThreeLevelMenuCom","SitMapMenCom","_ref3","_item$items3","ThreeLevelMenuPopoverContent","menuItem","_ref4","_item$items4","visible","setVisible","useState","onClick","e","stopPropagation","SiteMapItem","menuGroup","_NavMenu","_A","WeakMap","_B","_C","NavMenu","ReactNextElement","constructor","arguments","_classPrivateFieldInitSpec","_init_menu","_init_extra_menu","_init_mainMenuTitleStyle","_init_extra_mainMenuTitleStyle","_init_showTooltip","_init_extra_showTooltip","menu","_classPrivateFieldGet","v","_classPrivateFieldSet","render","NavMenuComponent","this","history","getHistory","navMenuWrapperRef","useRef","location","setLocation","overflowIndex","setOverflowIndex","Number","MAX_SAFE_INTEGER","pathname","search","menuItems","useMemo","_menu$menuItems","filter","_items","type","selectedKeys","initMenuItemAndMatchCurrentPathKeys","useEffect","unListen","listen","current","resizeObserver","ResizeObserver","_navMenuWrapperRef$cu","getClientRects","childNodes","wrapperWidth","i","childWidth","height","childHeight","observe","disconnect","overflowMenu","slice","ref","_items2","isHidden","name","_NavMenu2","c","_initClass","_applyDecs","styleTexts","SiteMapStyleText","ItemTagStyleText","GroupItemStyleText","styleText","attribute","Boolean","initializeReactI18n","NS","locales","_LaunchpadButton","LaunchpadButton","LaunchpadButtonComponent","_LaunchpadButton2","lockBodyScroll","unwrapProvider","_EoLaunchpadButtonV","EoLaunchpadButtonV2","disconnectedCallback","super","EoLaunchpadButtonV2Component","host","initialized","setInitialized","setActive","toggleLaunchpad","previous","hotkeys","preventDefault","unbind","_getRuntime","deferredLaunchpadInfo","schedulePrefetch","deferredFavorites","getRuntime","getFeatureFlags","deferredPlatformCategories","role","classNames","LaunchpadSvg","Launchpad","_EoLaunchpadButtonV2","platformCategoryStyleText","launchpadStyleText","WrappedIcon","WrappedLink","WrappedDropdownActions","onActionClick","MenuGroup","_data$type","data","actions","variant","urlTemplate","customUrlTemplate","onMenuItemClick","dropdownActive","setDropdownActive","filteredActions","__secret_internals","legacyDoTransform","checkIfByTransform","handleActionClick","useCallback","action","empty","blocked","allBlocked","getLocaleName","lib","icon","MenuItemFolder","instanceId","MenuItem","_data$menuIcon","__pathname","disabled","linkUrl","parseUrlTemplate","urlObject","URL","url","origin","tooltip","menuIcon","pick","expanded","setExpanded","toggle","prefix","fallback","_urlTemplate$replace","replace","_match","encodeURIComponent","String","get","trim","BASE_PATH","_LaunchpadConfig","_D","_E","_F","_G","_LaunchpadConfig_brand","WeakSet","_H","_handleMenuItemClick","_onActionClick","LaunchpadConfig","_classPrivateMethodInitSpec","_init_menuGroups","_init_extra_menuGroups","_init_actions","_init_extra_actions","_init_variant","_init_extra_variant","_init_urlTemplate","_init_extra_urlTemplate","_init_customUrlTemplate","_init_extra_customUrlTemplate","_init_blacklist","_init_extra_blacklist","_init_menuItemClickEvent","_init_extra_menuItemClickEvent","_init_actionClickEvent","_init_extra_actionClickEvent","_classPrivateGetter","_get_menuItemClickEvent","emit","_get_actionClickEvent","menuGroups","blacklist","_this$variant","LaunchpadConfigComponent","processedMenuGroup","group","getMenuItemWithBlockInfo","blockable","some","hasBlocked","hasUnblocked","every","blockableUrls","flatMap","_blockableUrls","blockableUrl","_getMenuGroupsWithout","getMenuItemWithoutBlockedItems","getMenuGroupsWithoutBlockedItems","subItems","subItem","auth","isBlockedPath","isBlockedHref","_blockableUrls2","startsWith","urlObj","substring","undefined","getBlockableUrl","_LaunchpadConfig2","_set_menuItemClickEvent","_set_actionClickEvent","o","_","has","_checkInRHS","_EasyopsNavbarAlerts","EasyopsNavbarAlerts","EasyopsNavbarAlertsComponent","_EasyopsNavbarAlerts2","storage","JsonStorage","localStorage","licenseHide","setLienceseHide","slowRender","setSlowRender","currentApp","useCurrentApp","licenseDismissedKey","getAuth","org","licenseDaysLeft","_authInfo$license","authInfo","validDaysLeft","license","dismissExpireAt","isAdmin","getItem","moment","unix","handelRouteRender","renderTime","loadTime","loadInfoPage","getMiscSettings","isBuildPush","millisecondToSecond","suggestTime","suggestUrl","addEventListener","removeEventListener","handleLicenseAlertDismiss","setItem","Alert","link","label","closable","onClose","href","target","millisecond","Math","floor","_EoLaunchpadQuickAcce","EoLaunchpadQuickAccess","_init_readonly","_init_extra_readonly","_init_target","_init_extra_target","readonly","EoLaunchpadQuickAccessComponent","favorites","loadingFavorites","pushRecentVisit","toggleStar","isStarred","useLaunchpadInfo","LaunchpadsContext","Provider","value","searching","SidebarMenuItem","_EoLaunchpadQuickAccess","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","K","en","SEARCH_PLACEHOLDER","zh","_EoSearchLaunchpad","EoSearchLaunchpad","EoSearchLaunchpadComponent","searchInputRef","handleClickSearchBox","_searchInputRef$curre","focus","loading","q","setQ","t","useTranslation","handleSearch","clearSearch","placeholder","onChange","onFocus","onBlur","theme","onMouseDown","Loading","spinning","_EoSearchLaunchpad2","_EoLaunchpadRecentVis","EoLaunchpadRecentVisits","EoLaunchpadRecentVisitsComponent","recentVisits","_EoLaunchpadRecentVisits","_EoAppBarWrapper","EoAppBarWrapper","_init_isFixed","_init_extra_isFixed","_init_position","_init_extra_position","_init_displayCenter","_init_extra_displayCenter","_init_extraAppBarContentStyle","_init_extra_extraAppBarContentStyle","isFixed","position","displayCenter","extraAppBarContentStyle","EoAppBarWrapperComponent","mainElement","getElementById","iframeMainElement","marginTop","justifyContent","_EoAppBarWrapper2","alias","WrappedBreadcrumb","WrappedBreadcrumbItem","_EoFrameBreadcrumb","EoFrameBreadcrumb","_init_breadcrumb","_init_extra_breadcrumb","_init_noCurrentApp","_init_extra_noCurrentApp","breadcrumb","noCurrentApp","EoFrameBreadcrumbComponent","_curAppBreadcrumb$ite","_props$breadcrumb","_props$noCurrentApp","navConfig","useNavConfig","curAppBreadcrumb","currentAppBreadcrumbItems","getRealValue","breadcrumbItems","useCurrentMenuTitle","to","homepage","internal","localeName","_EoFrameBreadcrumb2","_EoSidebarMenuItem","EoSidebarMenuItem","_init_url","_init_extra_url","_init_href","_init_extra_href","_init_icon","_init_extra_icon","_init_selected","_init_extra_selected","_init_inSubmenu","_init_extra_inSubmenu","_init_menuCollapsed","_init_extra_menuCollapsed","selected","inSubmenu","menuCollapsed","EoSidebarMenuItemComponent","imgStyle","_EoSidebarMenuItem2","sidebarMenuItemTagNameSet","Set","useUpdateMenuCollapsedState","slotRef","updateChildrenMenuCollapsedState","_slotRef$current","assignedElements","forEach","ele","element","tagName","slotElem","handleSlotchange","SIDE_BAR_HAS_BEEN_USED","SIDE_BAR_EXPAND_STATE","SIDE_BAR_RESIZE_WIDTH","ExpandedState","sideBarWidth","parseInt","getCssPropertyValue","sideBarCollapsedWidth","SidebarMenuContext","createContext","openedKeys","matchedKeys","WrappedSidebarMenu","WrappedSidebarMenuItem","WrappedSidebarMenuGroup","WrappedSidebarMenuSubmenu","MenuSimpleItem","useContext","top","isSelected","collapsable","MenuSubmenu","collapsed","SidebarMenu","expandedState","Collapsed","_EoSidebarMenuGroup","_handleCollapseChang","EoSidebarMenuGroup","_init_collapsable","_init_extra_collapsable","_init_collapsed","_init_extra_collapsed","EoSidebarMenuGroupComponent","onCollapseChange","titleRef","handleClick","titleElem","_EoSidebarMenuGroup2","_EoSidebarMenuSubmenu","EoSidebarMenuSubmenu","EoSidebarMenuSubmenuComponent","_EoSidebarMenuSubmenu2","_EoSidebarMenu","EoSidebarMenu","EoSidebarMenuComponent","_EoSidebarMenu2","xmlns","viewBox","fill","fillRule","d","UNPIN_NAVIGATION","FIXED_NAVIGATION","CLICK_TO_FIX_NAVIGATION","WrappedTooltip","_EoSidebar","_EoSidebar_brand","_handleActualWidthChange","_handleExpandedStateChange","EoSidebar","_init_hiddenFixedIcon","_init_extra_hiddenFixedIcon","_init_expandedState","_init_extra_expandedState","_init_actualWidthChangeEvent","_init_extra_actualWidthChangeEvent","actualWidth","_get_actualWidthChangeEvent","_init_expandedStateChangeEvent","_init_extra_expandedStateChangeEvent","state","_get_expandedStateChangeEvent","hiddenFixedIcon","EoSidebarComponent","onActualWidthChange","onExpandedStateChange","showUserDefinedIcon","isFirstUsedTooltip","setIsFirstUsedTooltip","showContentShadow","setShowContentShadow","dragging","setDragging","setExpandedState","titleIcon","contentBottomPlaceholderRef","observer","IntersectionObserver","entries","entry","isIntersecting","threshold","Expanded","expandedWidth","setExpandedWidth","memorizedWidth","isNaN","containerRef","handleMouseEnter","newState","Hovered","handleMouseLeave","sidebarActualWidth","getContainerWidth","inner","container","content","handleFixedIconClick","FixedSvg","display","ToFixedSvg","_containerRef$current","_containerRef$current2","cancelable","offsetX","getBoundingClientRect","left","drag","debounceByAnimationFrame","x","clientX","dragEnd","passive","_EoSidebar2","_set_actualWidthChangeEvent","_set_expandedStateChangeEvent","WrappedMenu","WrappedMenuGroup","WrapperMenuItemSubMenu","WrappedLinkItem","_EoSidebarSubMenu","EoSidebarSubMenu","EoSidebarSubMenuComponent","setSelectedKey","setOpenedKeys","setSelected","getMenuItemIndent","_item$key","split","renderMenuItem","titleStyle","paddingLeft","bodyStyle","renderSubMenuItem","renderGroupMenuItem","renderSimpleMenuItem","mode","_EoSidebarSubMenu2","_EoDirectory","_EoDirectory_brand","_menuItemClick","_suffixIconClick","EoDirectory","_init_directoryTitle","_init_extra_directoryTitle","_init_menuItems","_init_extra_menuItems","_init_hideRightBorder","_init_extra_hideRightBorder","_init_suffixBrick","_init_extra_suffixBrick","_init_defaultSelectedKeys","_init_extra_defaultSelectedKeys","_init_suffixIconClickEvent","_init_extra_suffixIconClickEvent","_get_suffixIconClickEvent","directoryTitle","hideRightBorder","suffixBrick","defaultSelectedKeys","EoDirectoryComponent","suffixIconClick","menuItemClick","_item$children","useBrick","ReactUseMultipleBricks","suffixIcon","suffixIconTooltip","suffixIconDisabled","children","child","groupKey","_EoDirectory2","_set_suffixIconClickEvent","DirectoryTreeContext","expandedKeysSet","selectedKeysSet","onExpand","onSelect","useDirectoryTreeContext","WrappedTreeLeaf","WrappedTreeInternalNode","TreeLeaf","treeData","depth","nodeData","faded","keys","node","when","TreeInternalNode","internalNodeSelectable","selectable","add","delete","TreeNode","Array","isArray","Tree","getAllExpandableKeys","reduce","pre","cur","concat","getExpandableKeysAccordingToSelectedKeys","_cur$children","childrenMatched","childrenExpandableKeys","searchTree","searchFields","expandedKeys","lowerQ","toLowerCase","_expandedKeys","_data","selfMatched","field","getSearchKeywords","matchItem","childrenSearchResult","filteredChildren","result","isNil","Object","prototype","call","k","flat","Infinity","method","WrappedSearch","onSearch","_EoDirectoryTree","_I","_J","_EoDirectoryTree_brand","_handleExpand","_K","_handleSelect","EoDirectoryTree","_initProto","_init_data","_init_extra_data","_init_internalNodeSelectable","_init_extra_internalNodeSelectable","_init_searchable","_init_extra_searchable","_init_placeholder","_init_extra_placeholder","_init_searchFields","_init_extra_searchFields","_init_selectedKeys","_init_extra_selectedKeys","_init_expandedKeys","_init_extra_expandedKeys","_init_expandEvent","_init_extra_expandEvent","_get_expandEvent","_init_selectEvent","_init_extra_selectEvent","_get_selectEvent","searchable","expandAll","collapseAll","expandAccordingToSelectedKeys","EoDirectoryTreeComponent","searchedData","treeItems","flattenList","dig","list","parent","treeItem","pos","flattenData","getFlattenTreeData","_EoDirectoryTree2","_set_expandEvent","_set_selectEvent","WrappedEoIcon","_EoDirectoryTreeLeaf","_EoDirectoryTreeLeaf_brand","EoDirectoryTreeLeaf","_init_depth","_init_extra_depth","_init_faded","_init_extra_faded","EoDirectoryTreeLeafComponent","treeItemRef","suffixRef","handleSelect","suffix","handleSuffixClick","_EoDirectoryTreeLeaf2","_EoDirectoryTreeInter","_EoDirectoryTreeInternalNode_brand","EoDirectoryTreeInternalNode","_init_expanded","_init_extra_expanded","_init_selectable","_init_extra_selectable","EoDirectoryTreeInternalNodeComponent","expandBottomRef","expandBottom","handleExpand","Arrow","_EoDirectoryTreeInternalNode","_NavLogo","NavLogo","NavLogoComponent","brand","getBrandSettings","logoNode","menu_bar_logo_url","src","category","menu_bar_logo_no_link","_NavLogo2","VIEW_DETAILS","DISMISS","showNotification","ignoredInstanceIds","_PollAnnounce","_PollAnnounce_brand","_handleClose","_handleOpen","PollAnnounce","_init_pollEnabled","_init_extra_pollEnabled","_init_realTimeMessage","_init_extra_realTimeMessage","_init_closeEvent","_init_extra_closeEvent","_get_closeEvent","_init_openEvent","_init_extra_openEvent","_get_openEvent","pollEnabled","realTimeMessage","PollAnnounceComponent","onOpen","async","openNotification","htmlMessage","color","styles","message","showConfirm","confirmText","i18n","confirmLink","showCancel","cancelText","AnnounceApi_ignoreAnnounce","instanceIds","console","error","AnnounceApi_listEffectiveAnnounce","isPopup","reverse","listEffectiveAnnounce","ignored","pollAnnounce","AnnounceApi_pollAnnounce","interceptorParams","ignoreLoadingBar","_err$toLowerCase","err","httpErrorToString","_PollAnnounce2","_set_closeEvent","_set_openEvent","allowedAppProps","smartDisplayForMenuTitle","i18nNamespace","overrideApp","isEvaluable","precooked","appUsage","usedProperties","hasNonStaticUsage","preevaluate","withParent","hooks","beforeVisitGlobal","beforeVisitGlobalMember","attemptToVisitGlobals","prop","globals","getFixedT","suppliedGlobals","supply","computable","hasOwnProperty","cook","expression","source","globalVariables","initializeMenuI18n","menuList","menuWithI18n","menuI18nBundles","_menu$i18n","menuI18nNamespace","menuId","app","appId","lang","resources","addResourceBundle","set","dispose","ns","removeResourceBundle","symbolMenuI18nNamespace","Symbol","symbolOverrideApp","DEFAULT_ICON","getIcon","imgSrc","processGroupInject","injectWithMenus","_processGroupInject","foundInjectingMenus","groupId","injectingMenu","reorderMenuItems","sortBy","_item$sort","sort","sortMenuItems","customElements","define","createProviderClass","_smartDisplayForMenuT2","mainMenu","find","validMenuList","Map","_menu$items","dynamicItems","itemsResolve","injectMenuGroupId","injectingMenus","firstLevelItems","tree","__keys","getChildren","prefixKey","j","_smartDisplayForMenuT","initializeI18n","FULL_TEXT_SEARCH","IP_SEARCH","TICKET_SEARCH","TICKET_SEARCH_PLACEHOLDER","IP_SEARCH_PLACEHOLDER","FULL_TEXT_SEARCH_PLACEHOLDER","IP_SEARCH_TOOLTIP","RECENT_SEARCH","NO_SEARCH_HISTORY","QUICK_SEARCH_TIP","STORAGE","FULL_TEXT_URL","IP_SEARCH_URL","WrappedButton","WrappedToolTip","_QuerySearch","QuerySearch","QuerySearchComponent","shadowRoot","_QuerySearch2","QuerierTypes","getOrgId","_auth$getAuth","getRecentVisitsKey","getSelectedQuerierKey","_getRuntime$getCurren","inputRef","getCurrentApp","currentTheme","useCurrentTheme","showInput","setShowInput","searchKey","setSearchKey","visits","setVisits","querierList","setQuerierList","querierOptions","setQuerierOptions","selectedQuerier","setSelectedQuerier","cache","createCache","checkIsDirectJump","_shadowRoot$host","parentWidth","parentElement","documentElement","handleHistoryPush","_selectedQuerier$conf","targetUrl","config","cleanUrl","queryTerm","replaceAll","handleGlobalKeyDown","test","navigator","userAgent","metaKey","ctrlKey","prevShow","_inputRef$current","handleClickOutside","composedPath","handleEscKey","defaultQueriers","fullText","showInApps","searchPlaceholder","ipSearch","_res$list","apiQueriers","InstanceApi_postSearchV3","page","page_size","fields","instanceSearch","relationSearch","fetchQueriers","_i$showInApps","lastSelectedName","matched","defaultOption","_STORAGE$getItem","historyKey","ConfigProvider","algorithm","darkAlgorithm","defaultAlgorithm","StyleProvider","hashPriority","containerShowInput","inputContentSlideout","inputContentSlidein","Select","getPopupContainer","showSearch","val","_selectedQuerier$conf2","onKeyDown","uniq","handleClear","handleSearchClick","buttonSildeint","shape","buttonStyle","border","background","fontSize","historySearchContainerSlidein","historySearchContainerSlideout","tag","handleHistoryTagClick","getPlaceholder"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"chunks/6128.a4b25bfc.js","mappings":"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","sources":["webpack:///./src/launchpad-quick-access/styles.shadow.css","webpack:///./src/sidebar-sub-menu/styles.shadow.css","webpack:///./src/poll-announce/notification.module.css","webpack:///./src/sidebar/sidebar-menu/styles.shadow.css","webpack:///./src/frame-breadcrumb/styles.shadow.css","webpack:///./src/directory/styles.shadow.css","webpack:///./src/sidebar/styles.shadow.css","webpack:///./src/search-launchpad/styles.shadow.css","webpack:///./src/launchpad-config/styles.shadow.css","webpack:///./src/sidebar/sidebar-menu-item/styles.shadow.css","webpack:///./src/nav-logo/styles.shadow.css","webpack:///./src/nav-menu/index.tsx","webpack:///./src/launchpad/index.tsx","webpack:///./src/launchpad-button-v2/index.tsx","webpack:///./src/launchpad-config/wrapped-bricks.ts","webpack:///./src/launchpad-config/MenuGroup.tsx","webpack:///./src/launchpad-config/index.tsx","webpack:///./src/easyops-navbar-alerts/index.tsx","webpack:///./src/launchpad-quick-access/index.tsx","webpack:///./src/search-launchpad/host-context.css?4d0b","webpack:///./src/search-launchpad/i18n.ts","webpack:///./src/search-launchpad/index.tsx","webpack:///./src/launchpad-recent-visits/index.tsx","webpack:///./src/app-bar-wrapper/index.tsx","webpack:///./src/frame-breadcrumb/index.tsx","webpack:///./src/sidebar/sidebar-menu-item/index.tsx","webpack:///./src/sidebar/utils.tsx","webpack:///./src/sidebar/sidebar-menu-group/index.tsx","webpack:///./src/sidebar/sidebar-menu-submenu/index.tsx","webpack:///./src/sidebar/sidebar-menu/index.tsx","webpack:///./src/images/fixed.svg","webpack:///./src/images/toFixed.svg","webpack:///./src/sidebar/i18n.ts","webpack:///./src/sidebar/index.tsx","webpack:///./src/sidebar-sub-menu/index.tsx","webpack:///./src/directory/index.tsx","webpack:///./src/directory-tree/DirectoryTreeContext.ts","webpack:///./src/directory-tree/Tree.tsx","webpack:///./src/directory-tree/utils.ts","webpack:///./src/directory-tree/index.tsx","webpack:///./src/directory-tree/directory-tree-leaf/index.tsx","webpack:///./src/directory-tree/constants.ts","webpack:///./src/directory-tree/directory-tree-internal-node/arrow.svg","webpack:///./src/directory-tree/directory-tree-internal-node/index.tsx","webpack:///./src/nav-logo/index.tsx","webpack:///./src/poll-announce/i18n.ts","webpack:///./src/poll-announce/notification.module.css?4226","webpack:///./src/poll-announce/index.tsx","webpack:///./src/data-providers/shared/smartDisplayForMenuTitle.ts","webpack:///./src/data-providers/get-menu-config-tree.ts","webpack:///./src/data-providers/get-menu-config-options.ts","webpack:///./src/query-search/i18n.ts","webpack:///./src/query-search/index.tsx","webpack:///./src/directory-tree/styles.shadow.css","webpack:///./src/app-bar-wrapper/styles.shadow.css","webpack:///./src/poll-announce/styles.shadow.css","webpack:///./src/launchpad-recent-visits/styles.shadow.css","webpack:///./src/easyops-navbar-alerts/styles.shadow.css","webpack:///./src/search-launchpad/host-context.css","webpack:///./src/directory-tree/directory-tree-leaf/styles.shadow.css","webpack:///./src/sidebar/sidebar-menu-group/styles.shadow.css","webpack:///./src/sidebar/sidebar-menu-submenu/styles.shadow.css","webpack:///./src/directory-tree/directory-tree-internal-node/styles.shadow.css","webpack:///./src/query-search/styles.shadow.css"],"sourcesContent":["// 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, `:host{display:block}:host([hidden]){display:none}.quick-access-list{display:grid;gap:14px;grid-template-columns:repeat(2,1fr);list-style:none;margin:0;padding:0}.sidebar-menu-item{display:flex;align-items:center;justify-content:space-between;overflow:hidden}.sidebar-menu-item > eo-link{display:block;min-width:0}.sidebar-menu-item > eo-link::part(link){display:flex;align-items:center;height:20px;gap:8px;color:var(--color-header-text)}.sidebar-menu-icon{color:var(--left-sidebar-item-collapsed-icon-color)}.menu-item-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-item-remove{color:var(--color-secondary-text);cursor:pointer}.sidebar-menu-item:not(:hover) .menu-item-remove{display:none}.menu-item-remove:hover{color:var(--color-normal-text)}.menu-item-remove:active{color:var(--color-strong-text)}.sidebar-menu-item > eo-link:hover::part(link),\n.sidebar-menu-item > eo-link:hover .sidebar-menu-icon{color:var(--color-brand-hover)}@supports not (inset: 0){.sidebar-menu-item,\n .sidebar-menu-item > eo-link::part(link){gap:0}.sidebar-menu-icon{margin-right:8px}}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.menu-container{box-sizing:border-box;background:var(--third-menu-default-bg);border:1px solid var(--stroke-color-default);border-width:0 1px 0 0;border-radius:0px;padding:20px 0px;height:100%}.menu-container .header{display:flex;gap:10px;align-items:center;font-size:var(--title-font-size);padding:0 20px 16px 20px;line-height:26px;color:var(--color-header-text)}.menu-container .header .title{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;word-wrap:break-word}.menu-container .content{padding:0 12px}.menu-container .menu-item,.menu-container .menu-sub-item::part(sub-menu-item-title){margin:0;padding-right:16px;height:40px;line-height:40px;border-radius:4px;margin-bottom:4px}.menu-container .menu-item::part(menu-item-icon),.menu-container .menu-sub-item::part(menu-item-icon){color:var(--color-secondary-text)}.menu-container .menu-item-link{width:100%;color:var(--color-secondary-text)}.menu-container .menu-item-text,.menu-container .menu-group-text,.menu-container .menu-item-link{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.menu-container .menu-item-text{display:block;box-sizing:border-box;color:var(--antd-text-color)}.menu-container .menu-item:hover{background:var(--third-menu-item-hover-bg);color:var(--color-header-text)}.menu-container .menu-item:hover .menu-item-text{color:var(--color-header-text);font-weight:var(--font-weight-400)}.menu-container .in-submenu .menu-item-text{color:var(--color-normal-text)}.menu-container .menu-sub-item::part(sub-menu-item-title):hover{color:var(--color-header-text)}.menu-container .menu-item-text.item-has-icon{margin-left:6px}.menu-container .menu-item[active]{color:var(--color-brand);background-color:var(--third-menu-item-selected-bg)}.menu-container .menu-item[active] .menu-item-text{color:var(--color-brand);font-weight:var(--font-weight-500)}`, \"\"]);\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, `.message--Fxvh9j9V{color:var(--color-normal-text);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"message\": `message--Fxvh9j9V`\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, `:host{display:block;transition:width var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}.sidebar-menu-item-list slot::slotted(*){margin-top:6px}`, \"\"]);\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, `:host{display:flex;height:22px;align-items:center}:host([hidden]){display:none}.breadcrumb-item-prefix-icon{font-size:14px}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.directory-container{padding:20px 8px 24px 24px;background:var(--color-fill-global-bg-2);border-right:1px solid var(--color-text-divider-line);height:calc(100vh - var(--app-bar-height) - 44px);overflow-y:auto;scrollbar-width:none}.directory-container-not-border{border-right:none}.directory-title{font-size:var(--sub-menu-title-font-size);margin-bottom:24px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.directory-menu-list > .menu-item-group{padding-top:14px}.directory-menu-list > .menu-item-group:first-child{padding-top:0}.directory-menu-list .menu-item-title-group,\n.directory-menu-list .menu-item-title-item{display:flex;align-items:center;justify-content:space-between}.directory-menu-list .menu-item-title-group{color:#8c8c8c;font-size:12px;margin-bottom:2px}.directory-menu-list .menu-item-title-item{font-size:14px;cursor:pointer;line-height:24px;padding:3px 0}.directory-menu-list .menu-item-title-suffix-icon{width:24px;height:24px;display:flex;justify-content:center;align-items:center;font-size:14px;border-radius:var(--small-border-radius);cursor:pointer}.directory-menu-list\n .menu-item-title-suffix-icon:not(\n .menu-item-title-suffix-icon-disabled\n ):hover{background:var(--color-info-icon-bg);color:var(--color-brand-hover)}.directory-menu-list .menu-item-title-item > .menu-title-text:hover{color:var(--color-brand-hover)}.directory-menu-list .menu-item-title-item > .menu-title-text-active{color:var(--color-brand)}.directory-menu-list .menu-item-title-suffix-icon-disabled{color:var(--color-disabled-text);cursor:not-allowed}.directory-menu-list .menu-title-text{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}:host([position=\"static\"]){height:100%}*,\n*::before,\n*::after{box-sizing:border-box}.sidebar-container{position:relative;z-index:998;height:100%}.sidebar-container,\n.inner{transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}:host(:not([position=\"static\"])) .sidebar-container{position:fixed;left:0;top:var(--app-bar-height);height:calc(100vh - var(--app-bar-height))}.inner{position:absolute;left:0;height:100%;display:flex;flex-direction:column;background-color:var(--left-menu-bg);border-right:1px solid var(--left-sidebar-border-right)}.inner:hover{background-color:var(--left-menu-hover-bg)}.inner::before{content:\"\";position:absolute;left:0;right:0;top:0;bottom:0;z-index:-1;background:var(--sidebar-bg)}.header{padding:0 12px;margin-top:14px;height:52px;flex-shrink:0}.menu-title{height:100%;display:flex;align-items:center;color:var(--left-sidebar-large-title-color)}.menu-title-icon-container{flex-shrink:0;display:flex;justify-content:center;align-items:center;width:20px;height:20px;font-size:20px;line-height:0;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-title-icon{color:var(--left-sidebar-item-collapsed-icon-color)}.menu-title-point{width:4px;height:4px;background:var(--antd-text-color);border-radius:50%}.menu-title-text{font-size:16px;font-weight:var(--font-weight-500);color:var(--left-sidebar-large-title-color);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.state-collapsed .menu-title{padding:0 calc(50% - 10px)}.state-hovered .menu-title,\n.state-expanded .menu-title{padding:0 12px}.state-collapsed .menu-title-icon-container{margin-right:12px}.state-hovered .menu-title-icon-container,\n.state-expanded .menu-title-icon-container{margin-right:0;width:0;opacity:0}.content{padding:0 12px;flex:1;overflow-y:auto;scrollbar-width:none}.content::-webkit-scrollbar{width:0;background:transparent}.content.show-shadow{box-shadow:0 -17px 10px -16px rgb(0 0 0/8%) inset}.footer{height:60px;flex-shrink:0;display:flex;align-items:center;justify-content:flex-end}.fixed-icon{display:flex;justify-content:center;align-items:center;width:20px;height:20px;margin-right:8px;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.fixed-icon > svg{width:100%;height:100%}.fixed-icon:hover > svg path[fill]{fill:var(--color-brand)}.state-collapsed .fixed-icon{visibility:hidden;opacity:0}.state-hovered .fixed-icon,\n.state-expanded .fixed-icon{visibility:visible;opacity:1}.state-hovered .inner{box-shadow:var(--left-sidebar-shadow)}.resize-line{position:absolute;right:-2px;height:100%;width:2px;cursor:col-resize}.resize-line:hover,\n.resize-line:active{background-color:rgba(26,122,255,1)}.dragging,\n.dragging .inner{transition:none}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.container{position:relative}.dropdown{margin-top:5px;position:absolute;top:100%;left:0px;width:100%;z-index:1050;padding:20px 24px 24px;overflow:hidden;box-sizing:border-box;background-color:var(--antd-select-dropdown-bg);border-radius:4px;box-shadow:var(--antd-box-shadow-base);display:none}.dropdown-active{display:block}.search-box{border-bottom:1px solid var(--color-text-divider-line);display:flex;gap:8px;align-items:center;padding:10px 0;cursor:text}.search-icon{color:var(--color-auxiliary-text)}.search-input{padding:0;margin:0;border:none;outline:none;color:inherit;background-color:transparent;font-size:14px;line-height:22px;flex:1;min-width:0}.search-input::placeholder{color:var(--color-disabled-text);opacity:1}.search-clear{display:none;color:var(--color-secondary-text);cursor:pointer}.search-clear.searching{display:inline-block}.search-clear:hover{color:var(--color-auxiliary-text)}.dropdown-content{min-width:0;display:flex;flex-direction:column;gap:24px;max-height:260px;overflow-y:auto}.spinner{display:flex;justify-content:center;align-items:center;color:var(--theme-doderblue-color);flex:1;font-size:30px}.loading > :not(.spinner){display:none}.menu-group-label,\n.menu-item-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-groups,\n.menu,\n.sub-menu{list-style:none;margin:0;padding:0}.menu,\n.sub-menu{display:flex;flex-direction:column;gap:14px}.menu-item > eo-link{display:block;min-width:0}.menu-item > eo-link::part(link){height:20px;display:flex;align-items:center;gap:8px;color:var(--color-header-text)}.menu-groups{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}.menu-groups{display:grid;gap:32px 8px}.menu-group{padding-right:12px;color:var(--color-header-text)}.menu-group-label{font-size:var(--card-title-font-size);font-weight:500;color:var(--color-header-text);margin-bottom:14px}.menu-item:not(.folder){display:flex;gap:8px;align-items:center}.menu-icon{color:var(--eo-search-launchpad-menu-icon-color)}.menu-item.active,\n.menu-item.active .menu-icon{color:var(--color-brand-active)}.sub-menu:not(.expanded){display:none}.sub-menu{margin-top:14px;margin-left:8px;border-left:1px solid var(--color-text-divider-line);padding-left:15px}.menu-item-star{cursor:pointer}.menu-item-star,\n.menu-item-toggle{color:var(--color-secondary-text)}.menu-item-star{display:none}.can-star.starred > .menu-item-star,\n.can-star:hover > .menu-item-star{display:inline-block}.can-star:not(.starred) > .menu-item-star{color:var(--color-secondary-text)}.starred > .menu-item-star{color:var(--palette-yellow-6)}.menu-item > eo-link:hover::part(link),\n.menu-item > eo-link:hover .menu-icon,\n.menu-item > eo-link:hover .menu-item-toggle{color:var(--color-brand-hover)}@supports not (inset: 0){.search-box,\n .menu,\n .sub-menu,\n .menu-item:not(.folder),\n .menu-item > eo-link::part(link){gap:0}.dropdown-content{display:grid;grid-auto-flow:row}.dropdown-content:not(.loading){height:min-content}.menu > :not(:first-child),\n .sub-menu > :not(:first-child){margin-top:14px}.search-icon,\n .menu-icon{margin-right:8px}.search-clear,\n .menu-item-star,\n .menu-item-toggle{margin-left:8px}}`, \"\"]);\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, `:host{display:block;--local-menu-icon-color:#8c8c8c}:host([hidden]){display:none;--local-menu-icon-color:rgba(255,255,255,0.45)}ul{list-style:none;margin:0;padding:0}.menu-groups{display:grid;gap:32px 16px;grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}.menu,\n.sub-menu{display:flex;flex-direction:column;gap:14px}.menu-folder-label-wrapper > eo-link,\n.menu-item > eo-link{display:block}.menu-folder-label-wrapper > eo-link::part(link),\n.menu-item > eo-link::part(link){height:20px;display:flex;align-items:center;gap:8px;color:var(--color-header-text)}.menu-group-label-wrapper,\n.menu-folder-label-wrapper,\n.menu-item:not(.folder){display:flex;gap:8px;align-items:center}.menu-group-label-wrapper{gap:3px}.menu-group:not(.empty) .menu-group-label-wrapper{margin-bottom:14px}.menu-group-label,\n.menu-item-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-group-label{font-size:var(--card-title-font-size);font-weight:500;color:var(--color-header-text)}.menu-icon{color:var(--local-menu-icon-color)}.menu-group.blocked .menu-group-label,\n.menu-item.blocked > .menu-folder-label-wrapper .menu-item-label,\n.menu-item.blocked > .menu-folder-label-wrapper .menu-icon,\n.menu-item.blocked > .menu-folder-label-wrapper .menu-item-toggle,\n.menu-item.disabled > eo-link::part(link),\n.menu-item.disabled .menu-icon{color:var(--color-disabled-text)}.menu-folder-label-wrapper > eo-link,\n.menu-item > eo-link{max-width:100%;width:-moz-fit-content;width:fit-content;min-width:0}.sub-menu:not(.expanded){display:none}.sub-menu{margin-left:8px;border-left:1px solid var(--color-text-divider-line);padding-left:15px}.menu-item:not(.empty) .sub-menu{margin-top:14px}.menu-item-toggle{color:var(--color-secondary-text)}.menu-config{visibility:hidden;color:var(--color-brand);cursor:pointer;display:flex;justify-content:center;align-items:center;height:24px;width:0}.menu-config.active,\n.menu-group-label-wrapper:hover .menu-config,\n.menu-item:not(.folder):not(.disabled):hover .menu-config,\n.menu-item:not(.folder):not(.blocked):hover .menu-config,\n.menu-folder-label-wrapper:hover .menu-config{visibility:visible;width:24px}.menu-config:hover,\n.menu-item:not(.disabled) > eo-link:hover::part(link),\n.menu-item:not(.disabled) > eo-link:hover .menu-icon,\n.menu-folder-label-wrapper > eo-link:hover::part(link),\n.menu-folder-label-wrapper > eo-link:hover .menu-icon,\n.menu-folder-label-wrapper > eo-link:hover .menu-item-toggle{color:var(--color-brand-hover)}@supports not (inset: 0){.sub-menu,\n .menu,\n .menu-group-label-wrapper,\n .menu-folder-label-wrapper,\n .menu-item:not(.folder),\n .menu-item > eo-link::part(link){gap:0}.menu > :not(:first-child),\n .sub-menu > :not(:first-child){margin-top:14px}.menu-icon{margin-right:8px}eo-dropdown-actions,\n .menu-item-toggle{margin-left:8px}}`, \"\"]);\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, `:host{display:block;--menu-item-icon-size:20px}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}eo-link{display:block}.menu-item{position:relative;display:flex;align-items:center;min-height:36px;padding:8px 12px;line-height:20px;color:var(--left-sidebar-item-normal-color);border-radius:var(--medius-border-radius);cursor:pointer;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-item-icon-container{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:var(--menu-item-icon-size);height:var(--menu-item-icon-size);font-size:var(--menu-item-icon-size);color:var(--left-sidebar-item-collapsed-icon-color)}:host([in-submenu]):host(:not([selected])) .menu-item{color:var(--left-sidebar-item-collapsed-color)}.menu-item-text{flex:1;margin-left:14px;margin-right:12px;font-size:14px;overflow:hidden;white-space:nowrap;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-item:hover{background:var(--left-sidebar-item-hover-bg)}:host([selected]) .menu-item{color:var(--left-sidebar-item-selected-color);background:var(--left-sidebar-item-selected-bg);box-shadow:0px 2px 12px 0px rgba(26,122,255,0.30196)}:host([selected]) .menu-item-icon-container{color:var(--left-sidebar-item-selected-color)}:host([selected]) .menu-item:hover{background-color:var(--left-sidebar-item-selected-hover-bg)}:host([menu-collapsed]) .menu-item{padding:0px calc(50% - var(--menu-item-icon-size) / 2)}:host([menu-collapsed]) .menu-item-text{opacity:0}:host(:not([menu-collapsed])) .menu-item-text{white-space:pre-wrap;display:-webkit-inline-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;text-overflow:ellipsis}`, \"\"]);\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, `:host{display:inline-block}:host([hidden]){display:none}.logo-container{position:relative;display:flex;justify-content:flex-start;align-items:center}.logo-link{cursor:pointer}.personalized-logo{height:24px;vertical-align:top}.easyops-icon{display:block;font-size:24px;color:var(--color-brand)}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","import React, {\n CSSProperties,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { getHistory } from \"@next-core/runtime\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport styleText from \"./nav-menu.shadow.css\";\nimport { UnregisterCallback } from \"history\";\nimport type { SidebarMenu } from \"@next-bricks/basic/menu\";\nimport type {\n MenuItem as MenuItemComponent,\n MenuComponentProps,\n} from \"@next-bricks/basic/menu-item\";\nimport { isSubMenu, isGroup, renderLinkCom, renderSpanCom } from \"./utils.js\";\nimport { initMenuItemAndMatchCurrentPathKeys } from \"@next-shared/general/menu\";\nimport type {\n SidebarMenuGroup,\n SidebarMenuItem,\n SidebarMenuSimpleItem,\n} from \"@next-shared/general/types\";\nimport type {\n Popover,\n PopoverProps,\n PopoverEvents,\n PopoverEventsMapping,\n Placement,\n} from \"@next-bricks/basic/popover\";\nimport \"@next-core/theme\";\nimport classnames from \"classnames\";\nimport { ThreeLevelMenuPopoverContent } from \"./ThreeLevelMenuPopoverContent.js\";\nimport { SiteMapItem } from \"./site-map/SiteMapItem.js\";\nimport SiteMapStyleText from \"../nav-menu/site-map/SiteMapItem.shadow.css\";\nimport ItemTagStyleText from \"../nav-menu/site-map/ItemTag.shadow.css\";\nimport GroupItemStyleText from \"../nav-menu/site-map/GroupItem.shadow.css\";\nimport \"./host-context.css\";\n\nconst { defineElement, property } = createDecorators();\n\nconst WrappedMenuItem = wrapBrick<MenuItemComponent, MenuComponentProps>(\n \"eo-menu-item\"\n);\nconst WrappedPopover = wrapBrick<\n Popover,\n PopoverProps,\n PopoverEvents,\n PopoverEventsMapping\n>(\"eo-popover\", {\n onVisibleChange: \"visible.change\",\n onBeforeVisibleChange: \"before.visible.change\",\n});\n\nconst GAP_WIDTH = 8;\n\ninterface NavMenuProps {\n menu?: SidebarMenu;\n showTooltip?: boolean;\n mainMenuTitleStyle: CSSProperties | undefined;\n}\n\ninterface MenuItemComProps {\n index?: number;\n hidden?: boolean;\n item: SidebarMenuItem;\n topData?: boolean;\n selectedKey?: string[];\n showTooltip?: boolean;\n overflow?: boolean;\n mainMenuTitleStyle?: CSSProperties;\n}\ninterface SimpleMenuItemComProps extends MenuItemComProps {\n item: SidebarMenuSimpleItem;\n}\ninterface MenuGroupComProps extends MenuItemComProps {\n item: SidebarMenuGroup;\n}\nfunction RenderMenuItemCom(props: MenuItemComProps) {\n const { item } = props;\n return isSubMenu(item as SidebarMenuGroup, props.topData) ? (\n <SubMenuItemCom {...props} item={item as SidebarMenuGroup}></SubMenuItemCom>\n ) : isGroup(item) ? (\n <GroupMenuItemCom {...props} item={item as SidebarMenuGroup} />\n ) : (\n <SimpleMenuItemCom\n {...props}\n item={item as SidebarMenuSimpleItem}\n ></SimpleMenuItemCom>\n );\n}\nfunction SimpleMenuItemCom(props: SimpleMenuItemComProps) {\n const { item, index, hidden, showTooltip, selectedKey = [] } = props;\n return (\n <WrappedMenuItem\n data-index={index}\n className={hidden ? \"overflow-menu-item\" : \"\"}\n key={item.key}\n title={showTooltip ? item.text : \"\"}\n active={item.key ? selectedKey.includes(item.key) : false}\n >\n {renderLinkCom(item, { width: \"100%\" }, props.mainMenuTitleStyle)}\n </WrappedMenuItem>\n );\n}\n\nlet scrollWidth: number;\n// istanbul ignore next;\nconst handlePopupVisibleChange = (event: CustomEvent<boolean>) => {\n // 当用户设置滚动条一直显示时,来回切换 overflow: hidden 会导致滚动条显示或隐藏\n // 造成页面宽度变化而导致的抖动的问题\n const paddingRight =\n scrollWidth ??\n (scrollWidth = window.innerWidth - document.body.clientWidth);\n\n document.body.style.paddingRight = event.detail ? paddingRight + \"px\" : \"\";\n document.body.style.overflow = event.detail ? \"hidden\" : \"\";\n document.body.style.touchAction = event.detail ? \"none\" : \"\";\n};\n\nfunction SubMenuItemCom({\n index,\n hidden,\n item,\n topData,\n showTooltip,\n selectedKey = [],\n overflow,\n mainMenuTitleStyle,\n}: MenuGroupComProps) {\n return item.items?.length > 0 ? (\n <WrappedPopover\n data-index={index}\n className={classnames(\"popover\", {\n subprime: !topData,\n \"overflow-menu-item\": hidden,\n })}\n arrow={false}\n trigger=\"hover\"\n placement={topData ? \"bottom-start\" : \"right-start\"}\n distance={0}\n anchorDisplay=\"block\"\n strategy=\"fixed\"\n >\n <WrappedMenuItem\n className=\"sub-menu-item-label 22\"\n key={item.key}\n slot=\"anchor\"\n title={showTooltip ? item.title : \"\"}\n >\n {renderSpanCom(item, !topData, { ...mainMenuTitleStyle })}\n </WrappedMenuItem>\n <div\n className={classnames(\"sub-menu-wrapper\", {\n \"overflow-menu-wrapper\": overflow,\n })}\n >\n {item.items.map((innerItem) => (\n <React.Fragment key={innerItem.key}>\n <RenderMenuItemCom\n item={innerItem}\n selectedKey={selectedKey}\n showTooltip={showTooltip}\n />\n </React.Fragment>\n ))}\n </div>\n </WrappedPopover>\n ) : null;\n}\n\nfunction GroupMenuItemCom({\n item,\n showTooltip,\n selectedKey = [],\n}: MenuGroupComProps) {\n return item.items?.length > 0 ? (\n item.childLayout === \"category\" ? (\n <ThreeLevelMenuCom\n item={item}\n selectedKey={selectedKey}\n showTooltip={showTooltip}\n placement=\"right-start\"\n anchorDisplay=\"block\"\n />\n ) : (item as SidebarMenuGroup).childLayout === \"siteMap\" ? (\n <SitMapMenCom\n item={item}\n selectedKey={selectedKey}\n showTooltip={showTooltip}\n placement=\"right-start\"\n anchorDisplay=\"block\"\n topData={false}\n />\n ) : (\n <>\n <div className=\"group-label\">{item.title}</div>\n <div className=\"group-wrapper\">\n {item.items.map((innerItem) => {\n return (\n <React.Fragment key={innerItem.key}>\n <RenderMenuItemCom\n item={innerItem}\n showTooltip={showTooltip}\n selectedKey={selectedKey}\n />\n </React.Fragment>\n );\n })}\n </div>\n </>\n )\n ) : null;\n}\n\nfunction ThreeLevelMenuCom({\n index,\n hidden,\n item,\n selectedKey = [],\n showTooltip,\n placement = \"bottom-start\",\n anchorDisplay,\n mainMenuTitleStyle,\n}: {\n index?: number;\n hidden?: boolean;\n item: SidebarMenuGroup;\n selectedKey?: string[];\n showTooltip?: boolean;\n placement?: Placement;\n anchorDisplay?: CSSProperties[\"display\"];\n mainMenuTitleStyle?: CSSProperties;\n}) {\n return item.items?.length > 0 ? (\n <WrappedPopover\n data-index={index}\n className={classnames(\"three-level-menu-popover\", \"popover\", {\n \"overflow-menu-item\": hidden,\n })}\n arrow={false}\n trigger={\"hover\"}\n placement={placement}\n distance={0}\n key={item.key}\n strategy=\"fixed\"\n anchorDisplay={anchorDisplay}\n onBeforeVisibleChange={handlePopupVisibleChange}\n >\n <WrappedMenuItem\n className=\"sub-menu-item-label\"\n key={item.key}\n slot=\"anchor\"\n title={showTooltip ? item.title : \"\"}\n >\n {renderSpanCom(item, false, mainMenuTitleStyle)}\n </WrappedMenuItem>\n <div className=\"sub-menu-wrapper\">\n <ThreeLevelMenuPopoverContent\n menuItem={item}\n selectedKey={selectedKey}\n ></ThreeLevelMenuPopoverContent>\n </div>\n </WrappedPopover>\n ) : null;\n}\n\nfunction SitMapMenCom({\n index,\n hidden,\n item,\n selectedKey = [],\n showTooltip,\n placement = \"bottom-start\",\n anchorDisplay,\n topData,\n mainMenuTitleStyle,\n}: {\n index?: number;\n hidden?: boolean;\n item: SidebarMenuGroup;\n selectedKey?: string[];\n showTooltip?: boolean;\n placement?: Placement;\n anchorDisplay?: CSSProperties[\"display\"];\n topData?: boolean;\n mainMenuTitleStyle?: CSSProperties;\n}) {\n const [visible, setVisible] = useState<boolean>();\n\n const handleVisibleChange = (event: CustomEvent<boolean>): void => {\n setVisible(event.detail);\n handlePopupVisibleChange(event);\n };\n\n return item.items?.length > 0 ? (\n <WrappedPopover\n data-index={index}\n className={classnames(\"popover\", {\n \"overflow-menu-item\": hidden,\n })}\n trigger={\"hover\"}\n placement={placement}\n distance={0}\n key={item.key}\n strategy=\"fixed\"\n arrow={false}\n anchorDisplay={anchorDisplay}\n onBeforeVisibleChange={handleVisibleChange}\n >\n <WrappedMenuItem\n className=\"sub-menu-item-label\"\n key={item.key}\n slot=\"anchor\"\n title={showTooltip ? item.title : \"\"}\n >\n {renderSpanCom(item, false, mainMenuTitleStyle)}\n </WrappedMenuItem>\n <div\n className={classnames(\"sub-menu-sit-map-wrapper\", {\n \"in-group-site-map\": !topData,\n })}\n onClick={(e) => e.stopPropagation()}\n >\n <SiteMapItem\n menuGroup={item}\n selectedKey={selectedKey}\n visible={visible}\n />\n </div>\n </WrappedPopover>\n ) : null;\n}\n\n/**\n * 菜单构件\n * @author sailor\n * @category navigation\n */\n@defineElement(\"eo-nav-menu\", {\n styleTexts: [\n SiteMapStyleText,\n ItemTagStyleText,\n GroupItemStyleText,\n styleText,\n ],\n})\nclass NavMenu extends ReactNextElement {\n /**\n * 菜单项\n */\n @property({\n attribute: false,\n })\n accessor menu: SidebarMenu | undefined;\n\n /**\n * 主菜单标题文字的自定义样式\n */\n @property({\n attribute: false,\n })\n accessor mainMenuTitleStyle: CSSProperties | undefined;\n\n /**\n * 是否显示 tooltip\n */\n @property({\n type: Boolean,\n })\n accessor showTooltip: boolean | undefined;\n\n render() {\n return (\n <NavMenuComponent\n menu={this.menu}\n showTooltip={this.showTooltip}\n mainMenuTitleStyle={this.mainMenuTitleStyle}\n />\n );\n }\n}\n\nfunction NavMenuComponent(props: NavMenuProps) {\n const { menu, showTooltip } = props;\n\n const history = getHistory();\n const navMenuWrapperRef = useRef<HTMLDivElement>(null);\n const [location, setLocation] = useState(history.location);\n const [overflowIndex, setOverflowIndex] = useState<number>(\n Number.MAX_SAFE_INTEGER\n );\n const { pathname, search } = location;\n\n const menuItems = useMemo(() => {\n return (menu?.menuItems ?? []).filter(\n (item) =>\n // 默认\n item.type === \"default\" ||\n // 没有类型\n !item.type ||\n // 分组类型并且没有子项,过滤\n ([\"group\", \"subMenu\"].includes(item.type) &&\n (item as SidebarMenuGroup).items?.length)\n );\n }, [menu?.menuItems]);\n\n const selectedKey = useMemo(() => {\n const { selectedKeys } = initMenuItemAndMatchCurrentPathKeys(\n menuItems ?? [],\n pathname,\n search,\n \"\"\n );\n return selectedKeys;\n }, [menuItems, pathname, search]);\n\n useEffect(() => {\n const unListen: UnregisterCallback = history.listen((location) => {\n setLocation(location);\n });\n return unListen;\n }, []);\n\n useEffect(() => {\n if (navMenuWrapperRef.current) {\n const resizeObserver = new ResizeObserver(() => {\n if (navMenuWrapperRef.current) {\n const { width } = navMenuWrapperRef.current.getClientRects()[0] ?? {};\n const childNodes = navMenuWrapperRef.current.childNodes;\n\n if (childNodes.length && width) {\n let wrapperWidth = width;\n let overflowIndex = childNodes.length;\n\n for (let i = 0; i < childNodes.length; i++) {\n const { width: childWidth, height: childHeight } = (\n childNodes[i] as HTMLElement\n ).getClientRects()[0];\n\n if (!childHeight && wrapperWidth - 40 < 0) {\n overflowIndex = i - 1;\n break;\n }\n\n wrapperWidth =\n wrapperWidth - childWidth - (i > 0 ? GAP_WIDTH : 0);\n if (wrapperWidth < 0) {\n overflowIndex = i;\n break;\n }\n }\n\n setOverflowIndex(overflowIndex < 0 ? 0 : overflowIndex);\n }\n }\n });\n resizeObserver.observe(navMenuWrapperRef.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }\n }, []);\n\n // istanbul ignore next;\n const overflowMenu = useMemo(\n (): SidebarMenuItem => ({\n type: \"subMenu\",\n title: \"···\",\n items: menuItems.slice(overflowIndex, menuItems.length).map((i) => ({\n ...i,\n type: i.type === \"group\" && i.items.length ? \"subMenu\" : i.type,\n })) as SidebarMenuItem[],\n }),\n [menuItems, overflowIndex]\n );\n\n return (\n <div ref={navMenuWrapperRef} className=\"nav-menu-wrapper\">\n {menuItems.map((item, index) => {\n const isHidden = overflowIndex <= index;\n return (\n <React.Fragment key={item.key}>\n {isSubMenu(item as SidebarMenuGroup, true) &&\n (item as SidebarMenuGroup).childLayout === \"category\" &&\n (item as SidebarMenuGroup).items?.length ? (\n <ThreeLevelMenuCom\n index={index}\n hidden={isHidden}\n item={item as SidebarMenuGroup}\n showTooltip={showTooltip}\n selectedKey={selectedKey}\n mainMenuTitleStyle={props.mainMenuTitleStyle}\n />\n ) : (item as SidebarMenuGroup).type === \"group\" &&\n (item as SidebarMenuGroup).childLayout === \"siteMap\" ? (\n <SitMapMenCom\n index={index}\n hidden={isHidden}\n item={item as SidebarMenuGroup}\n showTooltip={showTooltip}\n selectedKey={selectedKey}\n topData={true}\n mainMenuTitleStyle={props.mainMenuTitleStyle}\n />\n ) : (\n <RenderMenuItemCom\n index={index}\n hidden={isHidden}\n item={item}\n showTooltip={showTooltip}\n selectedKey={selectedKey}\n topData={true}\n mainMenuTitleStyle={props.mainMenuTitleStyle}\n />\n )}\n </React.Fragment>\n );\n })}\n <RenderMenuItemCom\n hidden={overflowIndex > menuItems.length}\n item={overflowMenu}\n showTooltip={showTooltip}\n selectedKey={selectedKey}\n overflow={true}\n topData={true}\n mainMenuTitleStyle={props.mainMenuTitleStyle}\n />\n <slot name=\"afterMenu\" />\n </div>\n );\n}\n\nexport { NavMenu };\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { LaunchpadButton as LaunchpadButtonComponent } from \"./LaunchpadButton/LaunchpadButton.js\";\nimport { initializeReactI18n } from \"@next-core/i18n/react\";\nimport \"@next-core/theme\";\nimport { NS, locales } from \"./i18n.js\";\nimport styleText from \"./LaunchpadButton/LaunchpadButton.shadow.css\";\n\ninitializeReactI18n(NS, locales);\n\nconst { defineElement } = createDecorators();\n\n/**\n * Launchpad 按钮构件\n * @author sailor\n * @insider\n */\n@defineElement(\"eo-launchpad-button\", {\n styleTexts: [styleText],\n})\nclass LaunchpadButton extends ReactNextElement {\n render() {\n return <LaunchpadButtonComponent />;\n }\n}\n\nexport { LaunchpadButton };\n","import React, { useEffect, useState } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { unwrapProvider } from \"@next-core/utils/general\";\nimport \"@next-core/theme\";\nimport { getHistory, getRuntime } from \"@next-core/runtime\";\nimport type { lockBodyScroll as _lockBodyScroll } from \"@next-bricks/basic/data-providers/lock-body-scroll/lock-body-scroll\";\n// import { useTranslation, initializeReactI18n } from \"@next-core/i18n/react\";\nimport hotkeys from \"hotkeys-js\";\nimport classNames from \"classnames\";\n// import { K, NS, locales } from \"./i18n.js\";\nimport LaunchpadSvg from \"../images/launchpad.svg\";\nimport styleText from \"./styles.shadow.css\";\nimport platformCategoryStyleText from \"./PlatformCategory.shadow.css\";\nimport { Launchpad } from \"./Launchpad\";\nimport {\n deferredFavorites,\n deferredLaunchpadInfo,\n deferredPlatformCategories,\n} from \"./useLaunchpadInfo\";\nimport launchpadStyleText from \"./Launchpad.shadow.css\";\nimport \"./host-context.css\";\n\n// initializeReactI18n(NS, locales);\n\nconst { defineElement } = createDecorators();\n\nconst lockBodyScroll = unwrapProvider<typeof _lockBodyScroll>(\n \"basic.lock-body-scroll\"\n);\n\n/**\n * Launchpad 启动台按钮(v2),点击后展开 Launchpad 面板,支持快捷键 Alt+L 开关、Esc 关闭。\n * @insider\n */\nexport\n@defineElement(\"eo-launchpad-button-v2\", {\n styleTexts: [styleText, platformCategoryStyleText, launchpadStyleText],\n})\nclass EoLaunchpadButtonV2 extends ReactNextElement {\n disconnectedCallback(): void {\n super.disconnectedCallback();\n lockBodyScroll(this, false);\n }\n\n render() {\n return <EoLaunchpadButtonV2Component host={this} />;\n }\n}\n\nexport function EoLaunchpadButtonV2Component({ host }: { host: HTMLElement }) {\n const [initialized, setInitialized] = useState(false);\n const [active, setActive] = useState(false);\n const toggleLaunchpad = (): void => {\n setActive((previous) => !previous);\n };\n\n useEffect(() => {\n // 当切换页面时,关闭Launchpad。\n const unlisten = getHistory().listen(() => {\n setActive(false);\n });\n return unlisten;\n }, []);\n\n useEffect(() => {\n // 打开一次 launchpad 后,保留 DOM。\n if (active && !initialized) {\n setInitialized(true);\n }\n }, [active, initialized]);\n\n // istanbul ignore next\n useEffect(() => {\n hotkeys.filter = function () {\n return true;\n };\n\n // 快捷打开/关闭 Launchpad\n hotkeys(\"alt+l\", (event) => {\n event.preventDefault();\n setActive((previous) => !previous);\n });\n\n // 按 Esc 关闭 Launchpad\n hotkeys(\"esc\", () => {\n setActive(false);\n });\n\n return () => {\n hotkeys.unbind(\"alt+l\");\n hotkeys.unbind(\"esc\");\n };\n }, []);\n\n useEffect(() => {\n lockBodyScroll(host, active);\n }, [active, host]);\n\n useEffect(() => {\n deferredLaunchpadInfo.schedulePrefetch();\n deferredFavorites.schedulePrefetch();\n getRuntime()?.getFeatureFlags()[\"launchpad-show-platform-category\"] &&\n deferredPlatformCategories.schedulePrefetch();\n }, []);\n\n return (\n <>\n <a\n role=\"button\"\n className={classNames(\"launchpad-button\", { active })}\n onClick={toggleLaunchpad}\n >\n <LaunchpadSvg />\n </a>\n <div\n className={classNames(\"mask\", { active })}\n onClick={toggleLaunchpad}\n ></div>\n {initialized && <Launchpad active={active} />}\n </>\n );\n}\n","import { wrapBrick } from \"@next-core/react-element\";\nimport { unwrapProvider } from \"@next-core/utils/general\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type {\n EoDropdownActions,\n DropdownActionsProps,\n DropdownActionsEvents,\n DropdownActionsEventsMapping,\n} from \"@next-bricks/basic/dropdown-actions\";\nimport type { showDialog as _showDialog } from \"@next-bricks/basic/data-providers/show-dialog/show-dialog\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nexport const WrappedDropdownActions = wrapBrick<\n EoDropdownActions,\n DropdownActionsProps,\n DropdownActionsEvents,\n DropdownActionsEventsMapping\n>(\"eo-dropdown-actions\", {\n onActionClick: \"action.click\",\n onVisibleChange: \"visible.change\",\n});\n\n// Use `unwrapProvider` to get the original function of a provider\nexport const showDialog =\n unwrapProvider<typeof _showDialog>(\"basic.show-dialog\");\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { get, pick } from \"lodash\";\nimport classNames from \"classnames\";\nimport { __secret_internals, checkIfByTransform } from \"@next-core/runtime\";\nimport type { SimpleAction } from \"@next-bricks/basic/actions\";\nimport {\n WrappedDropdownActions,\n WrappedIcon,\n WrappedLink,\n} from \"./wrapped-bricks\";\nimport type {\n ConfigMenuGroup,\n ConfigMenuItemDir,\n ConfigMenuItemNormal,\n ConfigVariant,\n MenuAction,\n MenuActionEventDetail,\n} from \"./interfaces\";\nimport { getLocaleName } from \"../shared/getLocaleName\";\n\nexport type ProcessedConfigMenuItemNormal = ConfigMenuItemNormal & {\n __pathname?: string;\n};\n\nexport interface MenuGroupProps {\n data: ConfigMenuGroup;\n actions?: MenuAction[];\n variant?: ConfigVariant;\n urlTemplate?: string;\n customUrlTemplate?: string;\n onMenuItemClick?(item: ProcessedConfigMenuItemNormal): void;\n onActionClick?: (detail: MenuActionEventDetail) => void;\n}\n\nexport function MenuGroup({\n data,\n actions,\n variant,\n urlTemplate,\n customUrlTemplate,\n onMenuItemClick,\n onActionClick,\n}: MenuGroupProps) {\n // Make it compatible\n data.type ??= \"group\";\n const { name, locales, items } = data;\n const [dropdownActive, setDropdownActive] = useState(false);\n\n const filteredActions = useMemo(() => {\n return __secret_internals.legacyDoTransform(\n data,\n actions?.filter((item) => checkIfByTransform(item, data))\n ) as MenuAction[] | undefined;\n }, [actions, data]);\n\n const handleActionClick = useCallback(\n (event: CustomEvent<SimpleAction>) => {\n onActionClick?.({\n data,\n action: event.detail,\n });\n },\n [data, onActionClick]\n );\n\n return (\n <li\n className={classNames(\"menu-group\", {\n empty: items.length === 0,\n blocked: data.allBlocked,\n })}\n >\n <div className=\"menu-group-label-wrapper\">\n <span className=\"menu-group-label\">{getLocaleName(locales, name)}</span>\n {variant !== \"menu-config\" && !!filteredActions?.length && (\n <WrappedDropdownActions\n actions={filteredActions}\n onVisibleChange={(event) => {\n setDropdownActive(event.detail);\n }}\n onActionClick={handleActionClick}\n >\n <WrappedIcon\n lib=\"fa\"\n icon=\"gear\"\n className={classNames(\"menu-config\", {\n active: dropdownActive,\n })}\n />\n </WrappedDropdownActions>\n )}\n </div>\n <ul className=\"menu\">\n {items.map((item) =>\n item.type === \"dir\" ? (\n <MenuItemFolder\n key={item.instanceId}\n data={item}\n actions={actions}\n variant={variant}\n urlTemplate={urlTemplate}\n customUrlTemplate={customUrlTemplate}\n onMenuItemClick={onMenuItemClick}\n onActionClick={onActionClick}\n />\n ) : (\n <MenuItem\n key={`${item.type}-${item.id}`}\n data={item}\n actions={actions}\n variant={variant}\n urlTemplate={urlTemplate}\n customUrlTemplate={customUrlTemplate}\n onClick={(data) => {\n onMenuItemClick?.({ ...item, ...data });\n }}\n onActionClick={onActionClick}\n />\n )\n )}\n </ul>\n </li>\n );\n}\n\nexport interface MenuItemProps {\n data: ConfigMenuItemNormal;\n actions?: MenuAction[];\n variant?: ConfigVariant;\n urlTemplate?: string;\n customUrlTemplate?: string;\n onClick?(data: { __pathname?: string }): void;\n onActionClick?: (detail: MenuActionEventDetail) => void;\n}\n\nexport function MenuItem({\n data,\n actions,\n variant,\n urlTemplate,\n customUrlTemplate,\n onClick,\n onActionClick,\n}: MenuItemProps) {\n const name = useMemo(() => getLocaleName(data.locales, data.name), [data]);\n\n const [dropdownActive, setDropdownActive] = useState(false);\n\n const filteredActions = useMemo(\n () =>\n __secret_internals.legacyDoTransform(\n data,\n actions?.filter((item) => checkIfByTransform(item, data))\n ) as MenuAction[] | undefined,\n [actions, data]\n );\n\n const handleActionClick = useCallback(\n (event: CustomEvent<SimpleAction>) => {\n onActionClick?.({\n data,\n action: event.detail,\n });\n },\n [data, onActionClick]\n );\n\n let __pathname: string;\n let disabled = false;\n let linkUrl = \"\";\n\n if (variant === \"launchpad-config\" || variant === \"menu-config\") {\n if (data.type === \"app\") {\n linkUrl = parseUrlTemplate(urlTemplate, data, \"\")!;\n } else {\n // 禁用外链菜单项\n const urlObject = new URL(data.url, location.origin);\n __pathname = urlObject.pathname;\n disabled = urlObject.origin !== location.origin;\n linkUrl = disabled\n ? \"\"\n : parseUrlTemplate(\n customUrlTemplate,\n {\n ...data,\n __pathname,\n },\n \"\"\n )!;\n }\n }\n\n return (\n <li\n className={classNames(\"menu-item\", {\n disabled: disabled || data.allBlocked,\n })}\n onClick={() => {\n onClick?.({ __pathname });\n }}\n >\n <WrappedLink\n tooltip={disabled ? \"该菜单项为外链,不支持配置\" : \"\"}\n url={linkUrl}\n >\n <WrappedIcon\n className=\"menu-icon\"\n lib=\"easyops\"\n icon=\"micro-app-center\"\n {...(data.menuIcon?.lib && data.menuIcon.icon\n ? (pick(data.menuIcon, [\n \"lib\",\n \"icon\",\n \"theme\",\n \"category\",\n \"prefix\",\n ]) as any)\n : null)}\n />\n <span className=\"menu-item-label\">{name}</span>\n </WrappedLink>\n {variant !== \"menu-config\" && !!filteredActions?.length && (\n <WrappedDropdownActions\n actions={filteredActions}\n onVisibleChange={(event) => {\n setDropdownActive(event.detail);\n }}\n onClick={(event) => {\n event.stopPropagation();\n }}\n onActionClick={handleActionClick}\n data-testid={`menu-item-actions-${data.id}`}\n >\n <WrappedIcon\n lib=\"fa\"\n icon=\"gear\"\n className={classNames(\"menu-config\", { active: dropdownActive })}\n />\n </WrappedDropdownActions>\n )}\n </li>\n );\n}\n\nexport interface MenuItemFolderProps {\n data: ConfigMenuItemDir;\n actions?: MenuAction[];\n variant?: ConfigVariant;\n urlTemplate?: string;\n customUrlTemplate?: string;\n onMenuItemClick?(item: ProcessedConfigMenuItemNormal): void;\n onActionClick?: (detail: MenuActionEventDetail) => void;\n}\n\nfunction MenuItemFolder({\n data,\n actions,\n variant,\n urlTemplate,\n customUrlTemplate,\n onMenuItemClick,\n onActionClick,\n}: MenuItemFolderProps) {\n const { name, locales, items } = data;\n const [dropdownActive, setDropdownActive] = useState(false);\n const [expanded, setExpanded] = useState(false);\n\n const filteredActions = useMemo(\n () =>\n __secret_internals.legacyDoTransform(\n data,\n actions?.filter((item) => checkIfByTransform(item, data))\n ) as MenuAction[] | undefined,\n [actions, data]\n );\n\n const toggle = useCallback(() => {\n setExpanded((previous) => !previous);\n }, []);\n\n const handleActionClick = useCallback(\n (event: CustomEvent<SimpleAction>) => {\n onActionClick?.({\n data,\n action: event.detail,\n });\n },\n [data, onActionClick]\n );\n\n return (\n <li\n className={classNames(\"menu-item folder\", {\n empty: items.length === 0,\n blocked: data.allBlocked,\n })}\n >\n <div className=\"menu-folder-label-wrapper\">\n <WrappedLink onClick={toggle}>\n <WrappedIcon\n lib=\"fa\"\n prefix=\"far\"\n icon=\"folder-open\"\n className=\"menu-icon\"\n />\n <span className=\"menu-item-label\">\n {getLocaleName(locales, name)}\n </span>\n <WrappedIcon\n lib=\"antd\"\n icon={expanded ? \"up\" : \"down\"}\n className=\"menu-item-toggle\"\n />\n </WrappedLink>\n {variant !== \"menu-config\" && !!filteredActions?.length && (\n <WrappedDropdownActions\n actions={filteredActions}\n onVisibleChange={(event) => {\n setDropdownActive(event.detail);\n }}\n onActionClick={handleActionClick}\n >\n <WrappedIcon\n lib=\"fa\"\n icon=\"gear\"\n className={classNames(\"menu-config\", {\n active: dropdownActive,\n })}\n />\n </WrappedDropdownActions>\n )}\n </div>\n <ul className={classNames(\"sub-menu\", { expanded })}>\n {items.map((item) => (\n <MenuItem\n key={item.instanceId}\n data={item}\n actions={actions}\n variant={variant}\n urlTemplate={urlTemplate}\n customUrlTemplate={customUrlTemplate}\n onClick={(data) => {\n onMenuItemClick?.({ ...item, ...data });\n }}\n onActionClick={onActionClick}\n />\n ))}\n </ul>\n </li>\n );\n}\n\nfunction parseUrlTemplate(\n urlTemplate: string | undefined,\n data: unknown,\n fallback?: string\n) {\n return (\n urlTemplate?.replace(/{{(.*?)}}/g, (_match, key) =>\n encodeURIComponent(String(get(data, key.trim())))\n ) ?? fallback\n );\n}\n","import React, { useMemo } from \"react\";\nimport { EventEmitter, createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport \"@next-core/theme\";\nimport type {\n ConfigMenuGroup,\n ConfigMenuItem,\n ConfigMenuItemApp,\n ConfigMenuItemCustom,\n ConfigMenuItemDir,\n ConfigMenuItemNormal,\n ConfigVariant,\n MenuAction,\n MenuActionEventDetail,\n} from \"./interfaces\";\nimport { MenuGroup, MenuGroupProps } from \"./MenuGroup\";\nimport styleText from \"./styles.shadow.css\";\n\nconst { defineElement, property, event } = createDecorators();\n\nconst BASE_PATH = \"/next/\";\n\n/**\n * 进行 Launchpad 配置。\n *\n * 也可用于菜单自定义显示产品功能清单。\n *\n * @insider\n */\nexport\n@defineElement(\"nav.launchpad-config\", {\n styleTexts: [styleText],\n})\nclass LaunchpadConfig extends ReactNextElement implements LaunchpadConfigProps {\n /** Launchpad 配置菜单分组数据 */\n @property({ attribute: false })\n accessor menuGroups: ConfigMenuGroup[] | undefined;\n\n /** 菜单操作按钮配置列表 */\n @property({ attribute: false })\n accessor actions: MenuAction[] | undefined;\n\n /**\n * @default \"launchpad-config\"\n * @description 显示变体:launchpad-config(Launchpad 配置)、factory-launchpad-config(工厂配置)、menu-config(菜单配置)、blacklist-config(黑名单配置)\n */\n @property()\n accessor variant: ConfigVariant | undefined;\n\n /**\n * 菜单项 APP 类型的链接模板,例如可配置为 `/app/{{ id }}`。\n *\n * 注:仅用于 variant: \"menu-config\"。\n */\n @property()\n accessor urlTemplate: string | undefined;\n\n /**\n * 菜单项自定义类型的链接模板,例如可配置为 `/custom?url={{ __pathname }}`。\n *\n * 注:仅用于 variant: \"menu-config\"。\n * 外链菜单链接会设置为禁用。\n * `__pathname` 是运行时变量,表示 url 解析后的 pathname。\n */\n @property()\n accessor customUrlTemplate: string | undefined;\n\n /**\n * 屏蔽的 URL 列表,例如可配置为 `[\"/app/1\", \"/app/2\"]`。\n *\n * 注:仅用于 variant: \"blacklist-config\"。\n */\n @property({ attribute: false })\n accessor blacklist: string[] | undefined;\n\n /**\n * @description 点击菜单项时触发\n * @detail 被点击的菜单项数据(app 或 custom 类型)\n */\n @event({ type: \"menu-item.click\" })\n accessor #menuItemClickEvent!: EventEmitter<ConfigMenuItemNormal>;\n\n /**\n * @description 点击菜单操作按钮时触发\n * @detail { data: 操作关联的菜单项或分组, action: 被点击的操作按钮配置 }\n */\n @event({ type: \"action.click\" })\n accessor #actionClickEvent!: EventEmitter<MenuActionEventDetail>;\n\n #handleMenuItemClick = (item: ConfigMenuItemNormal) => {\n this.#menuItemClickEvent.emit(item);\n };\n\n #onActionClick = (detail: MenuActionEventDetail) => {\n this.#actionClickEvent.emit(detail);\n };\n\n render() {\n return (\n <LaunchpadConfigComponent\n menuGroups={this.menuGroups}\n actions={this.actions}\n variant={this.variant ?? \"launchpad-config\"}\n urlTemplate={this.urlTemplate}\n customUrlTemplate={this.customUrlTemplate}\n blacklist={this.blacklist}\n onMenuItemClick={this.#handleMenuItemClick}\n onActionClick={this.#onActionClick}\n />\n );\n }\n}\n\nexport interface LaunchpadConfigProps\n extends Pick<\n MenuGroupProps,\n \"actions\" | \"variant\" | \"urlTemplate\" | \"customUrlTemplate\"\n > {\n menuGroups?: ConfigMenuGroup[];\n blacklist?: string[];\n}\n\nexport interface LaunchpadConfigEventsMapping {\n onMenuItemClick: \"menu-item.click\";\n onActionClick: \"action.click\";\n}\n\nexport interface LaunchpadConfigComponentProps\n extends LaunchpadConfigProps,\n Pick<MenuGroupProps, \"onMenuItemClick\" | \"onActionClick\"> {}\n\nexport function LaunchpadConfigComponent({\n menuGroups,\n actions,\n variant,\n urlTemplate,\n customUrlTemplate,\n blacklist,\n onMenuItemClick,\n onActionClick,\n}: LaunchpadConfigComponentProps) {\n const processedMenuGroup = useMemo<ConfigMenuGroup[] | undefined>(() => {\n if (variant === \"blacklist-config\") {\n return menuGroups?.map((group) => {\n const items = group.items.map((item) =>\n getMenuItemWithBlockInfo(item, blacklist)\n );\n const blockable = items.some((item) => item.blockable);\n const hasBlocked = blockable && items.some((item) => item.hasBlocked);\n const hasUnblocked =\n blockable && items.some((item) => item.hasUnblocked);\n const allBlocked =\n items.length > 0 && items.every((item) => item.allBlocked);\n const blockableUrls = items.flatMap((item) =>\n item.blockable\n ? ((item as ConfigMenuItemDir).blockableUrls ??\n (item as ConfigMenuItemCustom).blockableUrl ??\n (item as ConfigMenuItemApp).url)\n : []\n );\n return {\n ...group,\n type: \"group\",\n items,\n blockable,\n hasBlocked,\n hasUnblocked,\n allBlocked,\n blockableUrls,\n };\n });\n } else if (variant === \"launchpad-config\") {\n return getMenuGroupsWithoutBlockedItems(menuGroups)?.filter(Boolean);\n } else {\n return menuGroups;\n }\n }, [variant, menuGroups, blacklist]);\n\n return (\n <ul className=\"menu-groups\">\n {processedMenuGroup?.map((group) => (\n <MenuGroup\n key={group.instanceId}\n data={group}\n actions={actions}\n variant={variant}\n urlTemplate={urlTemplate}\n customUrlTemplate={customUrlTemplate}\n onMenuItemClick={onMenuItemClick}\n onActionClick={onActionClick}\n />\n ))}\n </ul>\n );\n}\n\nfunction getMenuGroupsWithoutBlockedItems<T extends ConfigMenuGroup>(\n menuGroups: T[] | undefined\n): T[] | undefined {\n return menuGroups\n ?.map<T | null>((group) => {\n const items = group.items\n .map((item) => getMenuItemWithoutBlockedItems(item))\n .filter(Boolean) as ConfigMenuItem[];\n return { ...group, items };\n })\n .filter(Boolean) as T[];\n}\n\nfunction getMenuItemWithoutBlockedItems<T extends ConfigMenuItem>(\n item: T\n): T | null {\n if (item.type === \"dir\") {\n const subItems = item.items\n .map((subItem) => getMenuItemWithoutBlockedItems(subItem))\n .filter(Boolean) as T[];\n return { ...item, items: subItems };\n }\n if (item.type === \"app\") {\n return item.url && auth.isBlockedPath(item.url) ? null : item;\n }\n return item.url && auth.isBlockedHref(item.url) ? null : item;\n}\n\nfunction getMenuItemWithBlockInfo<T extends ConfigMenuItem>(\n item: T,\n blacklist: string[] | undefined\n): T {\n if (item.type === \"dir\") {\n const subItems = item.items.map((subItem) =>\n getMenuItemWithBlockInfo(subItem, blacklist)\n );\n const blockable = subItems.some((subItem) => subItem.blockable);\n const hasBlocked = subItems.some((subItem) => subItem.hasBlocked);\n const hasUnblocked =\n blockable && subItems.some((subItem) => subItem.hasUnblocked);\n const allBlocked =\n subItems.length > 0 && subItems.every((subItem) => subItem.allBlocked);\n const blockableUrls = subItems.flatMap((subItem) =>\n subItem.blockable\n ? ((subItem as unknown as ConfigMenuItemDir).blockableUrls ??\n (subItem as ConfigMenuItemCustom).blockableUrl ??\n subItem.url)\n : []\n );\n return {\n ...item,\n items: subItems,\n blockable,\n hasBlocked,\n hasUnblocked,\n allBlocked,\n blockableUrls,\n };\n }\n\n if (item.type === \"app\") {\n const blockable = !!item.url;\n const hasBlocked = blockable && blacklist?.includes(item.url);\n const hasUnblocked = blockable && !hasBlocked;\n return {\n ...item,\n blockable,\n hasBlocked,\n hasUnblocked,\n allBlocked: hasBlocked,\n };\n }\n\n const { blockable, blockableUrl } = getBlockableUrl(item.url);\n const hasBlocked = blockable && blacklist?.includes(blockableUrl!);\n const hasUnblocked = blockable && !hasBlocked;\n return {\n ...item,\n blockable,\n hasBlocked,\n hasUnblocked,\n allBlocked: hasBlocked,\n blockableUrl,\n };\n}\n\nfunction getBlockableUrl(url: string | undefined) {\n let blockable = !!url?.startsWith(BASE_PATH);\n let blockableUrl: string | undefined;\n if (blockable) {\n const urlObj = new URL(url!, location.origin);\n if (\n urlObj.origin === location.origin &&\n urlObj.pathname.startsWith(BASE_PATH)\n ) {\n blockableUrl = urlObj.pathname.substring(BASE_PATH.length - 1);\n } else {\n blockable = false;\n blockableUrl = undefined;\n }\n }\n return { blockable, blockableUrl };\n}\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport { getRuntime } from \"@next-core/runtime\";\nimport { useCurrentApp } from \"@next-core/react-runtime\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport \"@next-core/theme\";\nimport { JsonStorage } from \"@next-shared/general/JsonStorage\";\nimport moment from \"moment\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport styleText from \"./styles.shadow.css\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\nconst { defineElement } = createDecorators();\n\n/**\n * 导航栏告警提示组件,用于显示 License 到期提醒和页面性能问题警告。\n * @insider\n */\nexport\n@defineElement(\"nav.easyops-navbar-alerts\", {\n styleTexts: [styleText],\n})\nclass EasyopsNavbarAlerts extends ReactNextElement {\n render() {\n return <EasyopsNavbarAlertsComponent />;\n }\n}\n\ninterface SlowRenderInfo {\n renderTime: number;\n suggestTime: number;\n suggestUrl?: string;\n}\n\nconst storage = new JsonStorage(localStorage);\n\nexport function EasyopsNavbarAlertsComponent() {\n const [licenseHide, setLienceseHide] = useState<boolean>(false);\n const [slowRender, setSlowRender] = useState<SlowRenderInfo | null>(null);\n const currentApp = useCurrentApp();\n const licenseDismissedKey = useMemo(() => {\n const authInfo = auth.getAuth();\n return `license:${authInfo.org}`;\n }, []);\n\n const licenseDaysLeft = useMemo(() => {\n const authInfo = auth.getAuth();\n const validDaysLeft = authInfo.license?.validDaysLeft;\n let dismissExpireAt: number;\n if (licenseHide) {\n return null;\n }\n if (\n validDaysLeft &&\n validDaysLeft <= 15 &&\n authInfo.isAdmin &&\n ((dismissExpireAt = storage.getItem(licenseDismissedKey)),\n !dismissExpireAt || moment().unix() > dismissExpireAt)\n ) {\n return validDaysLeft;\n }\n return null;\n }, [licenseDismissedKey, licenseHide]);\n\n useEffect(() => {\n const handelRouteRender = (e: Event): void => {\n const renderTime = (e as CustomEvent<{ renderTime: number }>).detail\n .renderTime;\n const { loadTime, loadInfoPage } = getRuntime().getMiscSettings() as {\n loadTime: number;\n loadInfoPage?: string;\n };\n if (currentApp?.isBuildPush && loadTime > 0 && renderTime > loadTime) {\n setSlowRender({\n renderTime: millisecondToSecond(renderTime),\n suggestTime: millisecondToSecond(loadTime),\n suggestUrl: loadInfoPage,\n });\n }\n };\n window.addEventListener(\"route.render\", handelRouteRender);\n return () => {\n window.removeEventListener(\"route.render\", handelRouteRender);\n };\n }, [currentApp]);\n\n const handleLicenseAlertDismiss = useCallback(() => {\n // 一天内不再显示。\n storage.setItem(licenseDismissedKey, moment().unix() + 86400);\n setLienceseHide(true);\n }, [licenseDismissedKey]);\n\n return (\n <>\n {slowRender && (\n <Alert\n text={`您的页面存在性能问题, 当前页面渲染时间 ${slowRender.renderTime} 秒, 规定阈值为: ${slowRender.suggestTime} 秒, 您已超过。请您针对该页面进行性能优化!`}\n type=\"warning\"\n link={\n slowRender.suggestUrl\n ? {\n label: \"建议解决思路\",\n url: slowRender.suggestUrl,\n }\n : undefined\n }\n />\n )}\n {licenseDaysLeft !== null && (\n <Alert\n text={`离 License 过期还有 ${licenseDaysLeft} 天`}\n type=\"info\"\n closable\n onClose={handleLicenseAlertDismiss}\n />\n )}\n </>\n );\n}\n\ninterface AlertProps {\n text: string;\n type: \"info\" | \"warning\";\n closable?: boolean;\n link?: {\n label: string;\n url: string;\n };\n onClose?: () => void;\n}\n\nfunction Alert({ text, type, closable, link, onClose }: AlertProps) {\n return (\n <div className={`alert ${type}`}>\n <span className=\"text\">{text}</span>\n {link && (\n <WrappedLink className=\"link\" href={link.url} target=\"_blank\">\n {link.label}\n </WrappedLink>\n )}\n {closable && (\n <WrappedIcon\n lib=\"antd\"\n icon=\"close\"\n className=\"icon\"\n role=\"button\"\n onClick={onClose}\n />\n )}\n </div>\n );\n}\n\nfunction millisecondToSecond(millisecond: number) {\n return Math.floor(millisecond * 100) / 1e5;\n}\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { useLaunchpadInfo } from \"../launchpad-button-v2/useLaunchpadInfo\";\nimport { LaunchpadsContext } from \"../launchpad-button-v2/LaunchpadContext\";\nimport { SidebarMenuItem } from \"../launchpad-button-v2/MenuGroup\";\nimport { SidebarMenuItemData } from \"../launchpad-button-v2/interfaces\";\nimport { Target } from \"@next-bricks/basic/link\";\n\nconst { defineElement, property } = createDecorators();\n\n/**\n * 快捷访问\n * @insider\n */\nexport\n@defineElement(\"eo-launchpad-quick-access\", {\n styleTexts: [styleText],\n})\nclass EoLaunchpadQuickAccess extends ReactNextElement {\n /**\n * 是否为只读模式(隐藏收藏切换按钮)\n */\n @property({\n type: Boolean,\n })\n accessor readonly: boolean | undefined;\n\n /**\n * 菜单项链接打开的目标\n */\n @property()\n accessor target: Target | undefined;\n\n render() {\n return (\n <EoLaunchpadQuickAccessComponent\n readonly={this.readonly}\n target={this.target}\n />\n );\n }\n}\n\ninterface EoLaunchpadQuickAccessComponentProps {\n readonly?: boolean;\n target?: Target;\n}\n\nexport function EoLaunchpadQuickAccessComponent({\n readonly,\n target,\n}: EoLaunchpadQuickAccessComponentProps) {\n const {\n favorites,\n loadingFavorites,\n pushRecentVisit,\n toggleStar,\n isStarred,\n } = useLaunchpadInfo(true);\n\n return (\n <LaunchpadsContext.Provider\n value={{\n searching: false,\n loadingFavorites,\n readonly,\n pushRecentVisit,\n toggleStar,\n isStarred,\n }}\n >\n <ul className=\"quick-access-list\">\n {favorites.map((item, index) => (\n <SidebarMenuItem\n key={index}\n target={target}\n item={item as SidebarMenuItemData}\n />\n ))}\n </ul>\n </LaunchpadsContext.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[0].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[2]!./host-context.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\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[0].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[2]!./host-context.css\";\n export default content && content.locals ? content.locals : undefined;\n","export enum K {\n SEARCH_PLACEHOLDER = \"SEARCH_PLACEHOLDER\"\n}\n\nconst en: Locale = {\n SEARCH_PLACEHOLDER: \"Search products/micro-applications\"\n};\n\nconst zh: Locale = {\n SEARCH_PLACEHOLDER: \"搜索产品/微应用\"\n};\n\nexport const NS = \"bricks/nav/search-launchpad\";\n\nexport const locales = { en, zh };\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};","import React, { useCallback, useRef, useState } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport classNames from \"classnames\";\nimport { LaunchpadsContext } from \"../launchpad-button-v2/LaunchpadContext\";\nimport { useLaunchpadInfo } from \"../launchpad-button-v2/useLaunchpadInfo\";\nimport { MenuGroup } from \"../launchpad-button-v2/MenuGroup\";\nimport { GeneralIcon, GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport \"./host-context.css\";\nimport { K, NS, locales } from \"./i18n.js\";\nimport { useTranslation, initializeReactI18n } from \"@next-core/i18n/react\";\n\ninitializeReactI18n(NS, locales);\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nconst { defineElement, property } = createDecorators();\n\n/**\n * launchpad 搜索\n * @insider\n */\nexport\n@defineElement(\"eo-search-launchpad\", {\n styleTexts: [styleText],\n})\nclass EoSearchLaunchpad extends ReactNextElement {\n /**\n * 简约模式\n */\n @property({\n type: Boolean,\n })\n accessor readonly: boolean | undefined;\n\n render() {\n return <EoSearchLaunchpadComponent readonly={this.readonly} />;\n }\n}\n\ninterface EoSearchLaunchpadComponentProps {\n readonly?: boolean;\n}\n\nexport function EoSearchLaunchpadComponent({\n readonly,\n}: EoSearchLaunchpadComponentProps) {\n const searchInputRef = useRef<HTMLInputElement>(null);\n const handleClickSearchBox = useCallback(() => {\n searchInputRef.current?.focus();\n }, []);\n\n const [active, setActive] = useState(false);\n\n const {\n loading,\n q,\n setQ,\n menuGroups,\n loadingFavorites,\n pushRecentVisit,\n toggleStar,\n isStarred,\n } = useLaunchpadInfo(active);\n const searching = !!q;\n const { t } = useTranslation(NS);\n\n const handleSearch = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setQ(e.target.value);\n },\n [setQ]\n );\n\n const clearSearch = useCallback(() => {\n setQ(\"\");\n }, [setQ]);\n\n return (\n <LaunchpadsContext.Provider\n value={{\n searching,\n loadingFavorites,\n readonly,\n pushRecentVisit,\n toggleStar,\n isStarred,\n }}\n >\n <div className=\"container\">\n <div className=\"search-box\" onClick={handleClickSearchBox}>\n <WrappedIcon\n lib=\"fa\"\n icon=\"magnifying-glass\"\n className=\"search-icon\"\n />\n <input\n ref={searchInputRef}\n placeholder={t(K.SEARCH_PLACEHOLDER) as string}\n value={q}\n onChange={handleSearch}\n className=\"search-input\"\n onFocus={() => setActive(true)}\n onBlur={() => setActive(false)}\n />\n <WrappedIcon\n lib=\"antd\"\n theme=\"filled\"\n icon=\"close-circle\"\n className={classNames(\"search-clear\", { searching })}\n onClick={clearSearch}\n onMouseDown={(e) => e.preventDefault()}\n />\n </div>\n <div\n className={classNames(\"dropdown\", { \"dropdown-active\": active })}\n onMouseDown={(e) => e.preventDefault()}\n >\n <div className={classNames(\"dropdown-content\", { loading })}>\n <Loading loading={loading} />\n <ul className=\"menu-groups\">\n {menuGroups.map((group) => (\n <MenuGroup\n key={group.name}\n name={group.name}\n items={group.items}\n />\n ))}\n </ul>\n </div>\n </div>\n </div>\n </LaunchpadsContext.Provider>\n );\n}\n\nfunction Loading({ loading }: { loading: boolean }) {\n return (\n loading && (\n <div className=\"spinner\">\n <WrappedIcon lib=\"fa\" icon=\"spinner\" spinning />\n </div>\n )\n );\n}","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { useLaunchpadInfo } from \"../launchpad-button-v2/useLaunchpadInfo\";\nimport type { Link, LinkProps, Target } from \"@next-bricks/basic/link\";\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\nconst { defineElement, property } = createDecorators();\n\n/**\n * launchpad 最近访问\n * @insider\n */\nexport\n@defineElement(\"eo-launchpad-recent-visits\", {\n styleTexts: [styleText],\n})\nclass EoLaunchpadRecentVisits extends ReactNextElement {\n /**\n * 菜单项链接打开的目标(仅对应用类型的访问项生效,自定义链接类型始终在新标签打开)\n */\n @property({\n attribute: false,\n })\n accessor target: Target | undefined;\n\n render() {\n return <EoLaunchpadRecentVisitsComponent target={this.target} />;\n }\n}\n\ninterface EoLaunchpadRecentVisitsComponentProps {\n target?: Target;\n}\nexport function EoLaunchpadRecentVisitsComponent({\n target,\n}: EoLaunchpadRecentVisitsComponentProps) {\n const { recentVisits, pushRecentVisit } = useLaunchpadInfo(true);\n\n return (\n <ul className=\"recent-visits\">\n {recentVisits.map((item, index) => (\n <li key={index}>\n <WrappedLink\n onClick={() => pushRecentVisit(item)}\n {...(item.type === \"app\"\n ? {\n url: item.url,\n target,\n }\n : {\n href: item.url,\n target: \"_blank\",\n })}\n >\n <span>{item.name}</span>\n </WrappedLink>\n </li>\n ))}\n </ul>\n );\n}\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport classNames from \"classnames\";\nimport styleText from \"./styles.shadow.css\";\n\nconst { defineElement, property } = createDecorators();\n\nexport interface AppBarWrapperProps {\n isFixed?: boolean;\n position?: \"static\" | \"fixed\";\n displayCenter?: boolean;\n extraAppBarContentStyle?: React.CSSProperties;\n}\n\n/**\n * 应用顶部容器\n * @slot left - 左侧内容区\n * @slot right - 右侧内容区\n */\nexport\n@defineElement(\"eo-app-bar-wrapper\", {\n styleTexts: [styleText],\n alias: [\"basic.app-bar-wrapper\"],\n})\nclass EoAppBarWrapper extends ReactNextElement implements AppBarWrapperProps {\n /**\n * 是否固定定位。\n *\n * @default true\n * @deprecated 使用 `position` 属性代替\n */\n @property({\n type: Boolean,\n })\n accessor isFixed: boolean | undefined;\n\n /**\n * 设置定位方式:静态定位或固定定位。\n *\n * 设置时优先级高于 `isFixed`。\n *\n * @default \"fixed\"\n */\n @property()\n accessor position: \"static\" | \"fixed\" | undefined;\n\n /**\n * 居中显示\n * @default false\n */\n @property({\n type: Boolean,\n })\n accessor displayCenter: boolean | undefined;\n\n /** 自定义样式 */\n @property({\n attribute: false,\n })\n accessor extraAppBarContentStyle: React.CSSProperties | undefined;\n\n render() {\n return (\n <EoAppBarWrapperComponent\n displayCenter={this.displayCenter}\n isFixed={this.isFixed}\n position={this.position}\n extraAppBarContentStyle={this.extraAppBarContentStyle}\n />\n );\n }\n}\n\nexport function EoAppBarWrapperComponent({\n isFixed = true,\n position,\n displayCenter = false,\n extraAppBarContentStyle = {},\n}: AppBarWrapperProps) {\n React.useEffect(() => {\n const mainElement = document.getElementById(\"main-mount-point\");\n const iframeMainElement = document.getElementById(\n \"legacy-iframe-mount-point\"\n );\n mainElement && (mainElement.style.marginTop = \"\");\n iframeMainElement && (iframeMainElement.style.marginTop = \"\");\n }, []);\n\n return (\n <div className=\"app-bar-container\">\n <div\n className={classNames(\n \"app-bar\",\n position === \"static\"\n ? \"static\"\n : position === \"fixed\" || isFixed\n ? \"fixed\"\n : \"absolute\"\n )}\n >\n {/* TODO: need AppBarTips */}\n <div\n className=\"app-bar-content\"\n style={{\n justifyContent: displayCenter ? \"space-around\" : \"space-between\",\n ...extraAppBarContentStyle,\n }}\n >\n <div className=\"left\">\n <slot name=\"left\" />\n </div>\n <div className=\"right\">\n <slot name=\"right\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { getRealValue } from \"@next-core/runtime\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport { useCurrentApp, useNavConfig } from \"@next-core/react-runtime\";\nimport { BreadcrumbItemConf } from \"@next-core/types\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport type { EoBreadcrumb } from \"@next-bricks/basic/breadcrumb\";\nimport type {\n EoBreadcrumbItem,\n BreadcrumbItemProps,\n} from \"@next-bricks/basic/breadcrumb-item\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { ExtendedLocationDescriptor } from \"@next-bricks/basic/link\";\n\nconst { defineElement, property } = createDecorators();\n\nconst WrappedBreadcrumb = wrapBrick<EoBreadcrumb, unknown>(\"eo-breadcrumb\");\nconst WrappedBreadcrumbItem = wrapBrick<EoBreadcrumbItem, BreadcrumbItemProps>(\n \"eo-breadcrumb-item\"\n);\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface Menu {\n title: string;\n icon?: GeneralIconProps;\n link?: ExtendedLocationDescriptor;\n}\n\nexport interface EoFrameBreadcrumbProps {\n breadcrumb?: BreadcrumbItemConf[];\n noCurrentApp?: boolean;\n menu?: Menu;\n}\n\n/**\n * 面包屑\n */\nexport\n@defineElement(\"eo-frame-breadcrumb\", {\n styleTexts: [styleText],\n})\nclass EoFrameBreadcrumb\n extends ReactNextElement\n implements EoFrameBreadcrumbProps\n{\n /**\n * 面包屑配置\n */\n @property({\n attribute: false,\n })\n accessor breadcrumb: BreadcrumbItemConf[] | undefined;\n\n /**\n * 是否隐藏当前应用名称\n */\n @property({ type: Boolean })\n accessor noCurrentApp: boolean | undefined;\n\n /**\n * 菜单配置\n */\n @property({\n attribute: false,\n })\n accessor menu: Menu | undefined;\n\n render() {\n return (\n <EoFrameBreadcrumbComponent\n breadcrumb={this.breadcrumb}\n noCurrentApp={this.noCurrentApp}\n menu={this.menu}\n />\n );\n }\n}\n\nexport function EoFrameBreadcrumbComponent(props: EoFrameBreadcrumbProps) {\n const { menu } = props;\n\n const navConfig = useNavConfig();\n const currentApp = useCurrentApp();\n const curAppBreadcrumb = currentApp?.breadcrumb;\n // 处理面包屑文本中的动态计算表达式\n const currentAppBreadcrumbItems = curAppBreadcrumb?.items?.map((item) => ({\n ...item,\n text: getRealValue(item.text),\n })) as Array<BreadcrumbItemConf & { icon: GeneralIconProps }>;\n const breadcrumbItems = props.breadcrumb?.length\n ? props.breadcrumb\n : navConfig?.breadcrumb;\n\n const noCurrentApp = props.noCurrentApp ?? curAppBreadcrumb?.noCurrentApp;\n const useCurrentMenuTitle = curAppBreadcrumb?.useCurrentMenuTitle;\n\n return (\n <WrappedBreadcrumb>\n <span slot=\"separator\">/</span>\n {currentAppBreadcrumbItems?.map((item, index) => {\n return (\n <WrappedBreadcrumbItem key={index} url={item.to}>\n {item.icon ? (\n <WrappedIcon\n className=\"breadcrumb-item-prefix-icon\"\n slot=\"prefix\"\n {...item.icon}\n />\n ) : (\n index === 0 && (\n <WrappedIcon\n className=\"breadcrumb-item-prefix-icon\"\n slot=\"prefix\"\n lib=\"antd\"\n icon=\"home\"\n theme=\"outlined\"\n />\n )\n )}\n {item.text}\n </WrappedBreadcrumbItem>\n );\n })}\n {currentApp && !noCurrentApp ? (\n <WrappedBreadcrumbItem\n url={\n breadcrumbItems?.length &&\n currentApp.homepage &&\n !currentApp.internal\n ? currentApp.homepage\n : undefined\n }\n >\n {!currentAppBreadcrumbItems?.length && (\n <WrappedIcon\n {...currentApp.menuIcon}\n slot=\"prefix\"\n className=\"breadcrumb-item-prefix-icon\"\n />\n )}\n {currentApp.localeName}\n </WrappedBreadcrumbItem>\n ) : null}\n {useCurrentMenuTitle && menu ? (\n <WrappedBreadcrumbItem url={menu.link}>\n {menu.icon && (\n <WrappedIcon\n {...menu.icon}\n className=\"breadcrumb-item-prefix-icon\"\n slot=\"prefix\"\n />\n )}\n {menu.title}\n </WrappedBreadcrumbItem>\n ) : null}\n {breadcrumbItems?.map((item, index) => (\n <WrappedBreadcrumbItem key={index} url={item.to}>\n {item.text}\n </WrappedBreadcrumbItem>\n ))}\n </WrappedBreadcrumb>\n );\n}\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\n\nconst { defineElement, property } = createDecorators();\n\nconst WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface EoSidebarMenuItemProps {\n url?: LinkProps[\"url\"];\n href?: LinkProps[\"href\"];\n icon?: GeneralIconProps;\n target?: LinkProps[\"target\"];\n selected?: boolean;\n inSubmenu?: boolean;\n menuCollapsed?: boolean;\n}\n\n/**\n * 侧栏菜单项\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar-menu-item\", {\n styleTexts: [styleText],\n})\nclass EoSidebarMenuItem\n extends ReactNextElement\n implements EoSidebarMenuItemProps\n{\n /**\n * 菜单项对应的系统内地址\n */\n @property({ attribute: false })\n accessor url: LinkProps[\"url\"] | undefined;\n\n /**\n * 菜单项对应的外部链接地址\n */\n @property()\n accessor href: LinkProps[\"href\"] | undefined;\n\n /**\n * 菜单项链接打开的目标\n */\n @property()\n accessor target: LinkProps[\"target\"] | undefined;\n\n /**\n * 菜单项的图标\n */\n @property({ attribute: false })\n accessor icon: GeneralIconProps | undefined;\n\n /**\n * 是否选中\n */\n @property({ type: Boolean })\n accessor selected: boolean | undefined;\n\n /**\n * 是否在二级菜单中\n */\n @property({ type: Boolean })\n accessor inSubmenu: boolean | undefined;\n\n /**\n * 菜单整体是否收起状态\n */\n @property({ type: Boolean })\n accessor menuCollapsed: boolean | undefined;\n\n render() {\n return (\n <EoSidebarMenuItemComponent\n url={this.url}\n href={this.href}\n target={this.target}\n icon={this.icon}\n selected={this.selected}\n />\n );\n }\n}\n\nexport function EoSidebarMenuItemComponent(props: EoSidebarMenuItemProps) {\n const { url, href, target, icon, selected } = props;\n\n return (\n <WrappedLink type=\"plain\" url={url} href={href} target={target}>\n <div className={\"menu-item\"}>\n <span className=\"menu-item-icon-container\">\n <WrappedIcon\n {...icon}\n className=\"menu-item-icon\"\n {...(icon && \"imgSrc\" in icon\n ? { imgStyle: { filter: selected ? \"brightness(7)\" : undefined } }\n : {})}\n />\n </span>\n <span className=\"menu-item-text\">\n <slot />\n </span>\n </div>\n </WrappedLink>\n );\n}\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\nimport { getCssPropertyValue } from \"@next-core/runtime\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport type {\n SidebarMenu as SidebarMenuType,\n SidebarMenuGroup,\n SidebarMenuItem,\n SidebarMenuSimpleItem,\n} from \"@next-shared/general/types\";\nimport type {\n EoSidebarMenu,\n EoSidebarMenuProps,\n} from \"./sidebar-menu/index.js\";\nimport type {\n EoSidebarMenuItem,\n EoSidebarMenuItemProps,\n} from \"./sidebar-menu-item/index.js\";\nimport type {\n EoSidebarMenuGroup,\n EoSidebarMenuGroupProps,\n} from \"./sidebar-menu-group/index.js\";\nimport type {\n EoSidebarMenuSubmenu,\n EoSidebarMenuSubmenuProps,\n} from \"./sidebar-menu-submenu/index.js\";\n\nconst sidebarMenuItemTagNameSet = new Set([\n \"EO-SIDEBAR-MENU-ITEM\",\n \"EO-SIDEBAR-MENU-GROUP\",\n \"EO-SIDEBAR-MENU-SUBMENU\",\n]);\n\nconst isSidebarMenuItem = (element: Element) =>\n sidebarMenuItemTagNameSet.has(element.tagName);\n\nexport function useUpdateMenuCollapsedState(menuCollapsed?: boolean) {\n const slotRef = useRef<HTMLSlotElement>(null);\n\n const updateChildrenMenuCollapsedState = useCallback(() => {\n slotRef.current?.assignedElements().forEach((ele) => {\n if (isSidebarMenuItem(ele)) {\n (ele as any).menuCollapsed = menuCollapsed;\n }\n });\n }, [menuCollapsed]);\n\n useEffect(() => {\n updateChildrenMenuCollapsedState();\n }, [menuCollapsed, updateChildrenMenuCollapsedState]);\n\n useEffect(() => {\n const slotElem = slotRef.current;\n const handleSlotchange = () => {\n updateChildrenMenuCollapsedState();\n };\n slotElem?.addEventListener(\"slotchange\", handleSlotchange);\n\n return () => {\n slotElem?.removeEventListener(\"slotchange\", handleSlotchange);\n };\n }, [updateChildrenMenuCollapsedState]);\n\n return [slotRef];\n}\n\nexport const SIDE_BAR_HAS_BEEN_USED = \"side-bar-has-been-used\";\nexport const SIDE_BAR_EXPAND_STATE = \"side-bar-expand-state\";\nexport const SIDE_BAR_RESIZE_WIDTH = \"side-bar-resize-width\";\n\nexport enum ExpandedState {\n Collapsed = \"collapsed\",\n Hovered = \"hovered\",\n Expanded = \"expanded\",\n}\n\nexport const sideBarWidth =\n parseInt(getCssPropertyValue(\"--side-bar-width\", document.body), 10) || 220;\nexport const sideBarCollapsedWidth =\n parseInt(\n getCssPropertyValue(\"--side-bar-collapsed-width\", document.body),\n 10\n ) || 60;\n\ninterface ContextOfSidebarMenu {\n selectedKeys: string[];\n openedKeys: string[];\n matchedKeys: string[];\n}\n\nconst SidebarMenuContext = createContext<ContextOfSidebarMenu>({\n selectedKeys: [],\n openedKeys: [],\n matchedKeys: [],\n});\n\nconst WrappedSidebarMenu = wrapBrick<EoSidebarMenu, EoSidebarMenuProps>(\n \"eo-sidebar-menu\"\n);\nconst WrappedSidebarMenuItem = wrapBrick<\n EoSidebarMenuItem,\n EoSidebarMenuItemProps\n>(\"eo-sidebar-menu-item\");\nconst WrappedSidebarMenuGroup = wrapBrick<\n EoSidebarMenuGroup,\n EoSidebarMenuGroupProps\n>(\"eo-sidebar-menu-group\");\nconst WrappedSidebarMenuSubmenu = wrapBrick<\n EoSidebarMenuSubmenu,\n EoSidebarMenuSubmenuProps\n>(\"eo-sidebar-menu-submenu\");\n\nfunction MenuSimpleItem(\n props: SidebarMenuSimpleItem & { id?: string; inSubmenu?: boolean }\n) {\n const { to, href, target, icon, text, id, inSubmenu } = props;\n const { selectedKeys } = useContext(SidebarMenuContext);\n\n return (\n <WrappedSidebarMenuItem\n url={to as any}\n href={href}\n target={target as any}\n icon={icon}\n inSubmenu={inSubmenu}\n selected={selectedKeys.includes(id!)}\n >\n {text}\n </WrappedSidebarMenuItem>\n );\n}\n\nfunction MenuGroup(\n props: SidebarMenuGroup & { id?: string; top?: boolean; inSubmenu?: boolean }\n) {\n const { title, items, id, top, inSubmenu } = props;\n const { matchedKeys } = useContext(SidebarMenuContext);\n const isSelected = id && matchedKeys.includes(id);\n\n if (items?.length > 0) {\n return (\n <WrappedSidebarMenuGroup selected={!!isSelected} collapsable={!top}>\n <span slot=\"title\">{title}</span>\n {props.items.map((item) => {\n return (\n <MenuItem\n key={item.key}\n {...item}\n id={item.key}\n top={false}\n inSubmenu={inSubmenu}\n />\n );\n })}\n </WrappedSidebarMenuGroup>\n );\n }\n return null;\n}\n\nfunction MenuSubmenu(props: SidebarMenuGroup & { id?: string }) {\n const { title, icon, items, id } = props;\n const { openedKeys, matchedKeys } = useContext(SidebarMenuContext);\n const isSelected = id && matchedKeys.includes(id);\n\n if (items?.length > 0) {\n return (\n <WrappedSidebarMenuSubmenu\n icon={icon}\n collapsed={!openedKeys.includes(id!)}\n selected={!!isSelected}\n >\n <span slot=\"title\">{title}</span>\n {props.items.map((item) => {\n return (\n <MenuItem\n key={item.key}\n {...item}\n id={item.key}\n top={false}\n inSubmenu={true}\n />\n );\n })}\n </WrappedSidebarMenuSubmenu>\n );\n }\n return null;\n}\n\nfunction MenuItem(\n props: SidebarMenuItem & { id?: string; top?: boolean; inSubmenu?: boolean }\n) {\n if (props.type === \"subMenu\") {\n return <MenuSubmenu {...props} />;\n } else if (props.type === \"group\") {\n return <MenuGroup {...props} />;\n } else {\n return <MenuSimpleItem {...(props as SidebarMenuSimpleItem)} />;\n }\n}\n\nexport function SidebarMenu(props: {\n menu?: SidebarMenuType;\n expandedState: ExpandedState;\n selectedKeys?: string[];\n openedKeys?: string[];\n matchedKeys?: string[];\n}) {\n const { menu, expandedState, selectedKeys, openedKeys, matchedKeys } = props;\n\n return (\n <SidebarMenuContext.Provider\n value={{\n selectedKeys: selectedKeys || [],\n openedKeys: openedKeys || [],\n matchedKeys: matchedKeys || [],\n }}\n >\n <WrappedSidebarMenu\n menuCollapsed={expandedState === ExpandedState.Collapsed}\n >\n {menu?.menuItems?.map((item) => {\n return <MenuItem key={item.key} {...item} id={item.key} top={true} />;\n })}\n </WrappedSidebarMenu>\n </SidebarMenuContext.Provider>\n );\n}\n","import React, { useCallback, useEffect, useRef } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { useUpdateMenuCollapsedState } from \"../utils.js\";\nimport classNames from \"classnames\";\n\nconst { defineElement, property } = createDecorators();\n\nexport interface EoSidebarMenuGroupProps {\n selected?: boolean;\n collapsable?: boolean;\n collapsed?: boolean;\n menuCollapsed?: boolean;\n}\n\n/**\n * 侧栏菜单分组\n * @slot title - 分组标题\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar-menu-group\", {\n styleTexts: [styleText],\n})\nclass EoSidebarMenuGroup\n extends ReactNextElement\n implements EoSidebarMenuGroupProps\n{\n /**\n * 是否允许折叠\n */\n @property({ type: Boolean })\n accessor collapsable: boolean | undefined;\n\n /**\n * 是否折叠\n */\n @property({ type: Boolean })\n accessor collapsed: boolean | undefined;\n\n /**\n * 是否选中\n * */\n @property({ type: Boolean })\n accessor selected: boolean | undefined;\n\n /**\n * 菜单整体是否收起状态\n */\n @property({ type: Boolean })\n accessor menuCollapsed: boolean | undefined;\n\n #handleCollapseChang = (collapsed: boolean) => {\n this.collapsed = collapsed;\n };\n\n render() {\n return (\n <EoSidebarMenuGroupComponent\n collapsable={this.collapsable}\n selected={this.selected}\n collapsed={this.collapsed}\n menuCollapsed={this.menuCollapsed}\n onCollapseChange={this.#handleCollapseChang}\n />\n );\n }\n}\n\ninterface EoSidebarMenuGroupComponentProps extends EoSidebarMenuGroupProps {\n onCollapseChange?: (collapsed: boolean) => void;\n}\n\nexport function EoSidebarMenuGroupComponent(\n props: EoSidebarMenuGroupComponentProps\n) {\n const {\n collapsable = false,\n collapsed,\n menuCollapsed,\n onCollapseChange,\n } = props;\n\n const [slotRef] = useUpdateMenuCollapsedState(menuCollapsed);\n\n const titleRef = useRef<HTMLDivElement>(null);\n\n const handleClick = useCallback(() => {\n !menuCollapsed && onCollapseChange?.(!collapsed);\n }, [menuCollapsed, onCollapseChange, collapsed]);\n\n useEffect(() => {\n const titleElem = titleRef.current;\n titleElem?.addEventListener(\"click\", handleClick);\n\n return () => {\n titleElem?.removeEventListener(\"click\", handleClick);\n };\n }, [handleClick]);\n\n return (\n <div\n className={classNames(\"menu-group\", {\n \"menu-group-collapsed\": menuCollapsed ? true : collapsed,\n })}\n >\n <div className=\"menu-group-title\" ref={titleRef}>\n <span className=\"menu-group-title-icon-container\">\n <span className=\"menu-group-title-icon\"></span>\n </span>\n <div className=\"menu-group-title-text\">\n <slot name=\"title\" />\n </div>\n {collapsable && <span className=\"menu-group-arrow\" />}\n </div>\n <div className=\"menu-group-list\">\n <div className=\"menu-group-list-inner\">\n <slot ref={slotRef} />\n </div>\n </div>\n </div>\n );\n}\n","import React, { useCallback, useEffect, useRef } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport classNames from \"classnames\";\nimport { useUpdateMenuCollapsedState } from \"../utils.js\";\n\nconst { defineElement, property } = createDecorators();\n\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface EoSidebarMenuSubmenuProps {\n icon?: GeneralIconProps;\n selected?: boolean;\n collapsed?: boolean;\n menuCollapsed?: boolean;\n}\n\n/**\n * 侧栏菜单子菜单\n * @slot title - 子菜单标题\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar-menu-submenu\", {\n styleTexts: [styleText],\n})\nclass EoSidebarMenuSubmenu\n extends ReactNextElement\n implements EoSidebarMenuSubmenuProps\n{\n /**\n * 菜单的图标\n */\n @property({ attribute: false })\n accessor icon: GeneralIconProps | undefined;\n\n /**\n * 是否选中\n * */\n @property({ type: Boolean })\n accessor selected: boolean | undefined;\n\n /**\n * 是否折叠\n */\n @property({ type: Boolean })\n accessor collapsed: boolean | undefined;\n\n /**\n * 菜单整体是否收起状态\n */\n @property({ type: Boolean })\n accessor menuCollapsed: boolean | undefined;\n\n #handleCollapseChang = (collapsed: boolean) => {\n this.collapsed = collapsed;\n };\n\n render() {\n return (\n <EoSidebarMenuSubmenuComponent\n icon={this.icon}\n selected={this.selected}\n collapsed={this.collapsed}\n menuCollapsed={this.menuCollapsed}\n onCollapseChange={this.#handleCollapseChang}\n />\n );\n }\n}\n\ninterface EoSidebarMenuSubmenuComponentProps extends EoSidebarMenuSubmenuProps {\n onCollapseChange?: (collapsed: boolean) => void;\n}\n\nexport function EoSidebarMenuSubmenuComponent(\n props: EoSidebarMenuSubmenuComponentProps\n) {\n const { icon, collapsed, menuCollapsed, onCollapseChange } = props;\n\n const [slotRef] = useUpdateMenuCollapsedState(menuCollapsed);\n\n const titleRef = useRef<HTMLDivElement>(null);\n\n const handleClick = useCallback(() => {\n !menuCollapsed && onCollapseChange?.(!collapsed);\n }, [menuCollapsed, onCollapseChange, collapsed]);\n\n useEffect(() => {\n const titleElem = titleRef.current;\n titleElem?.addEventListener(\"click\", handleClick);\n\n return () => {\n titleElem?.removeEventListener(\"click\", handleClick);\n };\n }, [handleClick]);\n\n return (\n <div\n className={classNames(\"menu-submenu\", {\n \"menu-submenu-collapsed\": menuCollapsed ? true : collapsed,\n })}\n >\n <div className=\"menu-submenu-title\" ref={titleRef}>\n <span className=\"menu-submenu-title-icon-container\">\n <WrappedIcon {...icon!} className=\"menu-submenu-title-icon\" />\n </span>\n <span className=\"menu-submenu-title-text\">\n <slot name=\"title\" />\n </span>\n <span className=\"menu-submenu-arrow\" />\n </div>\n <div className=\"menu-sub\">\n <div className=\"menu-sub-inner\">\n <slot ref={slotRef} />\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { useUpdateMenuCollapsedState } from \"../utils.js\";\n\nconst { defineElement, property } = createDecorators();\n\nexport interface EoSidebarMenuProps {\n menuCollapsed?: boolean;\n}\n\n/**\n * 侧栏菜单\n *\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar-menu\", {\n styleTexts: [styleText],\n})\nclass EoSidebarMenu extends ReactNextElement implements EoSidebarMenuProps {\n /**\n * 菜单整体是否收起状态\n */\n @property({ type: Boolean })\n accessor menuCollapsed: boolean | undefined;\n\n render() {\n return <EoSidebarMenuComponent menuCollapsed={this.menuCollapsed} />;\n }\n}\n\nexport function EoSidebarMenuComponent(props: EoSidebarMenuProps) {\n const { menuCollapsed } = props;\n\n const [slotRef] = useUpdateMenuCollapsedState(menuCollapsed);\n\n return (\n <div className=\"sidebar-menu\">\n <div className=\"sidebar-menu-item-list\">\n <slot ref={slotRef} />\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nconst SvgFixed = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" {...props}><g fill=\"none\" fillRule=\"evenodd\"><path d=\"M0 0h20v20H0z\" /><path fill=\"#595959\" fillRule=\"nonzero\" d=\"m14.599 11.59-1.685-1.606-.348-4.876.93-1.044s.617-.93-.62-1.045L7.323 3s-.85.657-.097 1.296l.754.755-.385 4.76-1.49 1.683s-.388.774.328 1.065l2.961-.02.668 3.887H6.388V17h7.832v-.574h-3.743l.6-3.946 3.154.097s.812-.464.368-.986\" /></g></svg>;\nexport default SvgFixed;","import * as React from \"react\";\nconst SvgToFixed = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" {...props}><g fill=\"none\" fillRule=\"evenodd\"><path d=\"M0 0h20v20H0z\" /><path fill=\"#595959\" fillRule=\"nonzero\" d=\"m13.06 3.765 3.22 3.08c.42.28.42.84.14 1.26-.42.42-.98.42-1.26.14l-.14-.14-.28-.28-3.22 4.62.98.98c.28.42.28.98-.14 1.26-.28.28-.7.28-1.12 0l-5.88-6.02q-.42-.63 0-1.26c.28-.28.84-.28 1.12 0l.98.98 4.62-3.22-.14-.14c-.42-.42-.42-.84-.14-1.26.28-.28.84-.42 1.26 0m-4.76 9.1-1.12-1.12c-.98 1.12-2.52 2.8-2.8 3.22-.42.42-.7.98-.98 1.54q1.05-.21 1.68-.84c.42-.28 2.1-1.82 3.22-2.8\" /></g></svg>;\nexport default SvgToFixed;","export enum K {\n CLICK_TO_FIX_NAVIGATION = \"CLICK_TO_FIX_NAVIGATION\",\n UNPIN_NAVIGATION = \"UNPIN_NAVIGATION\",\n FIXED_NAVIGATION = \"FIXED_NAVIGATION\",\n}\n\nconst en: Locale = {\n UNPIN_NAVIGATION: \"Unpin navigation\",\n FIXED_NAVIGATION: \"Fixed navigation\",\n CLICK_TO_FIX_NAVIGATION: \"Click to {{action}}\",\n};\n\nconst zh: Locale = {\n UNPIN_NAVIGATION: \"取消固定\",\n FIXED_NAVIGATION: \"固定导航\",\n CLICK_TO_FIX_NAVIGATION: \"点击{{action}}\",\n};\n\nexport const NS = \"bricks/nav/eo-sidebar\";\n\nexport const locales = { en, zh };\n\ntype Locale = { [key in K]: string };\n","import React, {\n MouseEventHandler,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { EventEmitter, createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport type { EoTooltip, ToolTipProps } from \"@next-bricks/basic/tooltip\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { SidebarMenu as SidebarMenuType } from \"@next-shared/general/types\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport FixedSvg from \"../images/fixed.svg\";\nimport ToFixedSvg from \"../images/toFixed.svg\";\nimport { debounceByAnimationFrame } from \"@next-shared/general/debounceByAnimationFrame\";\nimport { JsonStorage } from \"@next-shared/general/JsonStorage\";\nimport {\n ExpandedState,\n SIDE_BAR_EXPAND_STATE,\n SIDE_BAR_HAS_BEEN_USED,\n SIDE_BAR_RESIZE_WIDTH,\n SidebarMenu,\n sideBarCollapsedWidth,\n sideBarWidth,\n} from \"./utils.js\";\nimport { useTranslation, initializeReactI18n } from \"@next-core/i18n/react\";\nimport { K, NS, locales } from \"./i18n.js\";\nimport classNames from \"classnames\";\nimport { initMenuItemAndMatchCurrentPathKeys } from \"@next-shared/general/menu\";\nimport { UnregisterCallback } from \"history\";\nimport { getHistory, getRuntime } from \"@next-core/runtime\";\nimport { useCurrentApp } from \"@next-core/react-runtime\";\n\ninitializeReactI18n(NS, locales);\n\nconst { defineElement, property, event } = createDecorators();\n\nconst WrappedTooltip = wrapBrick<EoTooltip, ToolTipProps>(\"eo-tooltip\");\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface EoSidebarProps {\n menu: SidebarMenuType;\n expandedState?: ExpandedState;\n hiddenFixedIcon?: boolean;\n position?: \"static\" | \"fixed\";\n}\n\nexport interface EoSidebarEvents {\n \"actual.width.change\": CustomEvent<number>;\n \"expanded.state.change\": CustomEvent<ExpandedState>;\n}\n\nexport interface EoSidebarEventsMapping {\n onActualWidthChange: \"actual.width.change\";\n onExpandedStateChange: \"expanded.state.change\";\n}\n\n/**\n * 侧边栏\n *\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar\", {\n styleTexts: [styleText],\n})\nclass EoSidebar extends ReactNextElement implements EoSidebarProps {\n /**\n * 菜单数据\n */\n @property({ attribute: false })\n accessor menu!: SidebarMenuType;\n\n /**\n * 是否隐藏固定按钮\n */\n @property({ type: Boolean })\n accessor hiddenFixedIcon: boolean | undefined;\n\n /**\n * 侧栏状态\n */\n @property()\n accessor expandedState: ExpandedState | undefined;\n\n /**\n * 设置定位方式:静态定位或固定定位。\n *\n * @default \"fixed\"\n */\n @property()\n accessor position: \"static\" | \"fixed\" | undefined;\n\n /**\n * 宽度变化时触发\n * @detail 当前宽度\n */\n @event({ type: \"actual.width.change\" })\n accessor #actualWidthChangeEvent!: EventEmitter<number>;\n #handleActualWidthChange = (actualWidth: number): void => {\n this.#actualWidthChangeEvent.emit(actualWidth);\n };\n\n /**\n * 侧栏状态变化时触发\n * @detail 侧栏状态\n */\n @event({ type: \"expanded.state.change\" })\n accessor #expandedStateChangeEvent!: EventEmitter<ExpandedState>;\n #handleExpandedStateChange = (state: ExpandedState): void => {\n this.expandedState = state;\n this.#expandedStateChangeEvent.emit(state);\n };\n\n render() {\n return (\n <EoSidebarComponent\n menu={this.menu}\n expandedState={this.expandedState}\n hiddenFixedIcon={this.hiddenFixedIcon}\n position={this.position}\n onActualWidthChange={this.#handleActualWidthChange}\n onExpandedStateChange={this.#handleExpandedStateChange}\n />\n );\n }\n}\n\ninterface EoSidebarComponentProps extends EoSidebarProps {\n onActualWidthChange?: (actualWidth: number) => void;\n onExpandedStateChange?: (state: ExpandedState) => void;\n}\n\nexport function EoSidebarComponent(props: EoSidebarComponentProps) {\n const { t } = useTranslation(NS);\n const {\n menu,\n hiddenFixedIcon,\n position,\n onActualWidthChange,\n onExpandedStateChange,\n } = props;\n\n const showUserDefinedIcon = React.useMemo(\n () => getRuntime()?.getFeatureFlags()[\"sidebar-show-user-defined-icon\"],\n []\n );\n\n const storage = useMemo(() => new JsonStorage(localStorage), []);\n const history = getHistory();\n const currentApp = useCurrentApp();\n const [location, setLocation] = useState(history.location);\n const { pathname, search } = location;\n\n const [isFirstUsedTooltip, setIsFirstUsedTooltip] = useState<boolean>(\n !storage.getItem(SIDE_BAR_HAS_BEEN_USED)\n );\n const [showContentShadow, setShowContentShadow] = useState<boolean>();\n const [dragging, setDragging] = useState<boolean>();\n const [expandedState, setExpandedState] = useState<ExpandedState>(\n props.expandedState ||\n storage.getItem(SIDE_BAR_EXPAND_STATE) ||\n ExpandedState.Collapsed\n );\n\n const titleIcon = showUserDefinedIcon ? menu?.icon : currentApp?.menuIcon;\n\n const { selectedKeys, openedKeys, matchedKeys } = useMemo(() => {\n return initMenuItemAndMatchCurrentPathKeys(\n menu?.menuItems ?? [],\n pathname,\n search,\n \"\"\n );\n }, [menu?.menuItems, pathname, search]);\n\n useEffect(() => {\n const unListen: UnregisterCallback = history.listen((location) => {\n setLocation(location);\n });\n return unListen;\n }, [history]);\n\n const contentBottomPlaceholderRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (contentBottomPlaceholderRef.current) {\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.target === contentBottomPlaceholderRef.current) {\n setShowContentShadow(!entry.isIntersecting);\n }\n });\n },\n { threshold: 1 }\n );\n\n observer.observe(contentBottomPlaceholderRef.current);\n\n return () => {\n observer.disconnect();\n };\n }\n }, []);\n\n useEffect(() => {\n setExpandedState(\n props.expandedState ||\n storage.getItem(SIDE_BAR_EXPAND_STATE) ||\n ExpandedState.Collapsed\n );\n }, [props.expandedState]);\n\n useEffect(() => {\n storage.setItem(\n SIDE_BAR_EXPAND_STATE,\n expandedState === ExpandedState.Expanded\n ? ExpandedState.Expanded\n : ExpandedState.Collapsed\n );\n }, [expandedState]);\n\n const handleFixedIconClick = (): void => {\n setIsFirstUsedTooltip(false);\n storage.setItem(SIDE_BAR_HAS_BEEN_USED, true);\n\n setExpandedState((state) => {\n const newState =\n state === ExpandedState.Expanded\n ? ExpandedState.Collapsed\n : ExpandedState.Expanded;\n\n newState !== state && onExpandedStateChange?.(newState);\n return newState;\n });\n };\n\n const [expandedWidth, setExpandedWidth] = useState<number>(() => {\n // Use parseInt to compatible non-number types\n let memorizedWidth = parseInt(storage.getItem(SIDE_BAR_RESIZE_WIDTH), 10);\n if (memorizedWidth < sideBarWidth || Number.isNaN(memorizedWidth)) {\n memorizedWidth = sideBarWidth;\n }\n return memorizedWidth;\n });\n\n useEffect(() => {\n storage.setItem(SIDE_BAR_RESIZE_WIDTH, expandedWidth);\n }, [expandedWidth]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const handleResizeDown: MouseEventHandler = (e) => {\n setDragging(true);\n\n // Prevent text selection when dragging\n if (e.cancelable) {\n e.preventDefault();\n }\n\n const offsetX = containerRef.current?.getBoundingClientRect().left ?? 0;\n\n const drag = debounceByAnimationFrame((e: MouseEvent) => {\n const x = e.clientX - offsetX;\n const width = x >= sideBarWidth ? x : sideBarWidth;\n\n setExpandedWidth(width);\n });\n const dragEnd = (e: MouseEvent) => {\n setDragging(false);\n e.preventDefault();\n\n window.removeEventListener(\"mousemove\", drag);\n window.removeEventListener(\"mouseup\", dragEnd);\n };\n\n window.addEventListener(\"mousemove\", drag, { passive: true });\n window.addEventListener(\"mouseup\", dragEnd);\n };\n\n const handleMouseEnter = (): void => {\n setExpandedState((state) => {\n const newState =\n state === ExpandedState.Expanded\n ? ExpandedState.Expanded\n : ExpandedState.Hovered;\n\n newState !== state && onExpandedStateChange?.(newState);\n return newState;\n });\n };\n\n const handleMouseLeave = (): void => {\n setExpandedState((state) => {\n const newState =\n state === ExpandedState.Expanded\n ? ExpandedState.Expanded\n : ExpandedState.Collapsed;\n\n newState !== state && onExpandedStateChange?.(newState);\n return newState;\n });\n };\n\n const sidebarActualWidth = useMemo(() => {\n return expandedState === ExpandedState.Expanded\n ? expandedWidth\n : sideBarCollapsedWidth;\n }, [expandedState, expandedWidth]);\n\n useEffect(() => {\n onActualWidthChange?.(sidebarActualWidth);\n }, [onActualWidthChange, sidebarActualWidth]);\n\n const getContainerWidth = (inner?: boolean) => {\n // With static position, when not expanded, the outer container will keep\n // collapsed even if hovered, while only the inner container will expand.\n if (position === \"static\") {\n return expandedState === ExpandedState.Expanded ||\n (inner && expandedState === ExpandedState.Hovered)\n ? expandedWidth\n : sideBarCollapsedWidth;\n }\n return expandedState === ExpandedState.Collapsed\n ? sideBarCollapsedWidth\n : expandedWidth;\n };\n\n useEffect(() => {\n const container = containerRef.current;\n container?.addEventListener(\"mouseenter\", handleMouseEnter);\n container?.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n container?.removeEventListener(\"mouseenter\", handleMouseEnter);\n container?.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, []);\n\n return (\n <div\n className={classNames(\"sidebar-container\", `state-${expandedState}`, {\n dragging,\n })}\n style={{ width: getContainerWidth() }}\n ref={containerRef}\n data-testid=\"side-bar\"\n >\n <div className=\"inner\" style={{ width: getContainerWidth(true) }}>\n <div className=\"header\">\n <div className=\"menu-title\">\n <div className={classNames(\"menu-title-icon-container\")}>\n {titleIcon ? (\n <WrappedIcon\n {...(titleIcon as GeneralIconProps)}\n className=\"menu-title-icon\"\n />\n ) : (\n <span className=\"menu-title-point\" />\n )}\n </div>\n <div className=\"menu-title-text\" title={menu?.title}>\n {menu?.title}\n </div>\n </div>\n </div>\n\n <div\n className={classNames(\"content\", {\n \"show-shadow\": showContentShadow,\n })}\n >\n <SidebarMenu\n selectedKeys={selectedKeys}\n openedKeys={openedKeys}\n matchedKeys={matchedKeys}\n menu={menu}\n expandedState={expandedState}\n />\n <div ref={contentBottomPlaceholderRef} />\n </div>\n\n <div className=\"footer\">\n {!hiddenFixedIcon && (\n <WrappedTooltip\n content={\n (expandedState === ExpandedState.Expanded\n ? isFirstUsedTooltip\n ? t(K.CLICK_TO_FIX_NAVIGATION, {\n action: t(K.UNPIN_NAVIGATION),\n })\n : t(K.UNPIN_NAVIGATION)\n : isFirstUsedTooltip\n ? t(K.CLICK_TO_FIX_NAVIGATION, {\n action: t(K.FIXED_NAVIGATION),\n })\n : t(K.FIXED_NAVIGATION)) as string\n }\n >\n <i className=\"fixed-icon\" onClick={handleFixedIconClick}>\n <FixedSvg\n style={{\n display:\n expandedState === ExpandedState.Expanded\n ? undefined\n : \"none\",\n }}\n />\n <ToFixedSvg\n style={{\n display:\n expandedState === ExpandedState.Expanded\n ? \"none\"\n : undefined,\n }}\n />\n </i>\n </WrappedTooltip>\n )}\n </div>\n {expandedState === ExpandedState.Expanded && (\n <span className=\"resize-line\" onMouseDown={handleResizeDown} />\n )}\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect, useCallback } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport { getHistory } from \"@next-core/runtime\";\nimport { UnregisterCallback } from \"history\";\nimport \"@next-core/theme\";\nimport {\n SidebarMenuSimpleItem,\n SidebarMenuGroup,\n SidebarMenuItem,\n} from \"@next-shared/general/types\";\nimport {\n initMenuItemAndMatchCurrentPathKeys,\n isGroup,\n isSubMenu,\n} from \"@next-shared/general/menu\";\nimport { Menu as MenuComponent, SidebarMenu } from \"@next-bricks/basic/menu\";\nimport { Link, LinkProps, Target } from \"@next-bricks/basic/link\";\nimport {\n EoMenuItemSubMenu,\n EoMenuSubMenuProps,\n} from \"@next-bricks/basic/menu-item-sub-menu\";\nimport { EoMenuGroup } from \"@next-bricks/basic/menu-group\";\nimport { MenuComponentProps, MenuItem } from \"@next-bricks/basic/menu-item\";\nimport styleText from \"./styles.shadow.css\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport classNames from \"classnames\";\n\n// --- NOTE: uncomment these lines below to enable i18n for your brick ---\n// import { useTranslation, initializeReactI18n } from \"@next-core/i18n/react\";\n// import { K, NS, locales } from \"./i18n.js\";\n// initializeReactI18n(NS, locales);\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nconst WrappedMenu = wrapBrick<MenuComponent, any>(\"eo-menu\");\n\nconst WrappedMenuGroup = wrapBrick<EoMenuGroup, any>(\"eo-menu-group\");\n\nconst WrapperMenuItemSubMenu = wrapBrick<EoMenuItemSubMenu, EoMenuSubMenuProps>(\n \"eo-menu-item-sub-menu\"\n);\n\nconst WrappedMenuItem = wrapBrick<MenuItem, MenuComponentProps>(\"eo-menu-item\");\n\nconst WrappedLinkItem = wrapBrick<Link, LinkProps>(\"eo-link\");\n\nexport interface SidebarSubMenuProps {\n menu?: SidebarMenu;\n showTooltip?: boolean;\n}\n\nconst { defineElement, property } = createDecorators();\n\n/**\n * 侧边栏子菜单,支持简单菜单项、分组和子菜单的嵌套渲染\n * @category navigation\n */\nexport\n@defineElement(\"eo-sidebar-sub-menu\", {\n styleTexts: [styleText],\n})\nclass EoSidebarSubMenu extends ReactNextElement {\n /**\n * 菜单项\n */\n @property({\n attribute: false,\n })\n accessor menu: SidebarMenu | undefined;\n\n render() {\n return <EoSidebarSubMenuComponent menu={this.menu} />;\n }\n}\n\nexport function EoSidebarSubMenuComponent(props: SidebarSubMenuProps) {\n // const { t } = useTranslation(NS);\n // const hello = t(K.HELLO);\n const { menu } = props;\n\n const history = getHistory();\n const [location, setLocation] = useState(history.location);\n const { pathname, search } = location;\n\n const [selectedKey, setSelectedKey] = useState<string[]>([]);\n const [openedKeys, setOpenedKeys] = useState<string[]>([]);\n\n const setSelected = useCallback((): void => {\n const { selectedKeys, openedKeys } = initMenuItemAndMatchCurrentPathKeys(\n menu?.menuItems ?? [],\n pathname,\n search,\n \"\"\n );\n setSelectedKey(selectedKeys);\n setOpenedKeys(openedKeys);\n }, [menu?.menuItems, pathname, search]);\n\n useEffect(() => {\n const unListen: UnregisterCallback = history.listen((location) => {\n setLocation(location);\n });\n setSelected();\n return unListen;\n }, [history, setSelected]);\n\n const getMenuItemIndent = useCallback((item: SidebarMenuItem): number => {\n return ((item.key?.split(\".\")?.length as number) - 1) * 16;\n }, []);\n\n const renderSimpleMenuItem = (\n item: SidebarMenuSimpleItem,\n options?: {\n inSubmenu?: boolean;\n }\n ) => {\n return (\n <WrappedMenuItem\n className={classNames(\"menu-item\", {\n \"in-submenu\": options?.inSubmenu,\n })}\n style={{ paddingLeft: getMenuItemIndent(item) || 16 }}\n icon={item.icon}\n active={item.key ? selectedKey.includes(item.key) : false}\n >\n <WrappedLinkItem\n className=\"menu-item-link\"\n type=\"plain\"\n url={item.to as string}\n href={item.href}\n title={item.text}\n target={item.target as Target}\n >\n <span\n className={classNames(\"menu-item-text\", {\n \"item-has-icon\": item.icon,\n })}\n >\n {item.text}\n </span>\n </WrappedLinkItem>\n </WrappedMenuItem>\n );\n };\n\n const renderSubMenuItem = (item: SidebarMenuGroup) => {\n // istanbul ignore else\n if (item.items?.length > 0) {\n return (\n <WrapperMenuItemSubMenu\n className=\"menu-sub-item\"\n icon={item.icon}\n titleStyle={{ paddingLeft: getMenuItemIndent(item) }}\n bodyStyle={{ paddingLeft: getMenuItemIndent(item) / 2 }}\n collapsed={!openedKeys.includes(item.key!)}\n >\n <span slot=\"title\">{item.title}</span>\n {item.items.map((innerItem) => (\n <React.Fragment key={innerItem.key}>\n {renderMenuItem(innerItem, {\n inSubmenu: true,\n })}\n </React.Fragment>\n ))}\n </WrapperMenuItemSubMenu>\n );\n }\n };\n\n const renderGroupMenuItem = (item: SidebarMenuGroup) => {\n // istanbul ignore else\n if (item.items?.length > 0) {\n return (\n <WrappedMenuGroup>\n <span slot=\"title\">{item.title}</span>\n\n {item.items.map((innerItem) => {\n return (\n <React.Fragment key={innerItem.key}>\n {renderMenuItem(innerItem)}\n </React.Fragment>\n );\n })}\n </WrappedMenuGroup>\n );\n }\n };\n\n function renderMenuItem(\n item: SidebarMenuItem,\n options?:\n | {\n inSubmenu?: boolean;\n }\n | undefined\n ) {\n return isSubMenu(item as SidebarMenuGroup)\n ? renderSubMenuItem(item as SidebarMenuGroup)\n : isGroup(item)\n ? renderGroupMenuItem(item)\n : renderSimpleMenuItem(item, options);\n }\n\n return (\n <WrappedMenu className=\"menu-container\" mode=\"vertical\">\n {menu?.title && (\n <div className=\"header\">\n {menu?.icon && <WrappedIcon {...(menu?.icon as GeneralIconProps)} />}\n <span className=\"title\">{menu?.title}</span>\n </div>\n )}\n <div className=\"content\">\n {menu?.menuItems.map((item) => {\n return (\n <React.Fragment key={item.key}>\n {renderMenuItem(item)}\n </React.Fragment>\n );\n })}\n </div>\n </WrappedMenu>\n );\n}\n","import React from \"react\";\nimport { createDecorators, EventEmitter } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport { ReactUseMultipleBricks } from \"@next-core/react-runtime\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport classNames from \"classnames\";\nimport type { EoTooltip, ToolTipProps } from \"@next-bricks/basic/tooltip\";\nimport { UseBrickConf } from \"@next-core/types\";\n\nconst { defineElement, property, event } = createDecorators();\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nconst WrappedTooltip = wrapBrick<EoTooltip, ToolTipProps>(\"eo-tooltip\");\n\n/**\n * 目录\n */\nexport\n@defineElement(\"eo-directory\", {\n styleTexts: [styleText],\n})\nclass EoDirectory extends ReactNextElement implements EoDirectoryProps {\n /**\n * 设置定位方式:静态定位或固定定位。\n *\n * @default \"fixed\"\n */\n @property()\n accessor position: \"static\" | \"fixed\" = \"fixed\";\n\n /**\n * 目录标题\n */\n @property()\n accessor directoryTitle: string | undefined;\n\n /**\n * 菜单数据\n * @default []\n * @required\n */\n @property({ attribute: false })\n accessor menuItems: MenuItem[] = [];\n\n /**\n * 是否隐藏右边线\n */\n @property({ type: Boolean })\n accessor hideRightBorder: boolean = false;\n\n /**\n * 后缀 useBrick\n */\n @property({\n attribute: false,\n })\n accessor suffixBrick: { useBrick: UseBrickConf } | undefined;\n\n /**\n * 默认选中高亮的菜单项\n */\n @property({ attribute: false })\n accessor defaultSelectedKeys: string[] | undefined;\n /**\n * @description 菜单项点击时触发\n * @detail { groupKey: 对应分组的 key(仅分组子项有值), data: 被点击的菜单项 }\n */\n @event({ type: \"menu.item.click\" })\n accessor #menuItemClickEvent!: EventEmitter<MenuItemClickEventDetail>;\n /**\n * @description 点击菜单项后缀图标时触发\n * @detail { key: 对应菜单项或分组的 key }\n */\n @event({ type: \"suffix.icon.click\" })\n accessor #suffixIconClickEvent!: EventEmitter<{ key: string }>;\n\n #menuItemClick = (data: MenuItemClickEventDetail) => {\n this.#menuItemClickEvent.emit(data);\n };\n #suffixIconClick = (key: string) => {\n this.#suffixIconClickEvent.emit({ key });\n };\n\n render() {\n return (\n <EoDirectoryComponent\n menuItems={this.menuItems}\n directoryTitle={this.directoryTitle}\n hideRightBorder={this.hideRightBorder}\n suffixIconClick={this.#suffixIconClick}\n menuItemClick={this.#menuItemClick}\n defaultSelectedKeys={this.defaultSelectedKeys}\n suffixBrick={this.suffixBrick}\n />\n );\n }\n}\nexport interface EoDirectoryProps {\n position?: \"static\" | \"fixed\";\n suffixBrick?: { useBrick: UseBrickConf };\n directoryTitle: string | undefined;\n menuItems: MenuItem[];\n hideRightBorder?: boolean;\n menuItemClick?: (data: MenuItemClickEventDetail) => void;\n suffixIconClick?: (key: string) => void;\n defaultSelectedKeys?: string[] | undefined;\n}\n\nexport interface EoDirectoryEventsMapping {\n onMenuItemClick: \"menu.item.click\";\n onSuffixIconClick: \"suffix.icon.click\";\n}\ninterface MenuChildrenItem {\n title: string;\n key: string;\n [key: string]: any;\n}\ninterface MenuItem {\n title: string;\n key: string;\n type: \"group\" | \"item\";\n children?: MenuChildrenItem[];\n suffixIcon?: GeneralIconProps;\n suffixIconTooltip?: string;\n suffixIconDisabled?: boolean;\n}\ninterface MenuItemClickEventDetail {\n data: MenuChildrenItem;\n groupKey?: string;\n}\n\nexport function EoDirectoryComponent(props: EoDirectoryProps) {\n const {\n menuItems,\n directoryTitle,\n hideRightBorder,\n menuItemClick,\n suffixIconClick,\n defaultSelectedKeys,\n suffixBrick,\n } = props;\n\n return (\n <div\n className={classNames(\"directory-container\", {\n \"directory-container-not-border\": hideRightBorder,\n })}\n >\n {directoryTitle && (\n <div className=\"directory-title\" title={directoryTitle}>\n {directoryTitle}\n </div>\n )}\n <div className=\"directory-menu-list\">\n {menuItems.map((item, index) => {\n return (\n <div\n className={classNames(\"menu-item\", `menu-item-${item.type}`)}\n key={`${item.key}-${index}`}\n >\n <div\n className={classNames(`menu-item-title-${item.type}`)}\n onClick={() =>\n item.type === \"item\" && menuItemClick?.({ data: item })\n }\n >\n <span\n className={classNames(\"menu-title-text\", {\n \"menu-title-text-active\": defaultSelectedKeys?.includes(\n item.key\n ),\n })}\n >\n {item.title}\n </span>\n {suffixBrick?.useBrick ? (\n <ReactUseMultipleBricks\n useBrick={suffixBrick.useBrick}\n data={{ data: item }}\n />\n ) : null}\n {item.suffixIcon && (\n <WrappedTooltip\n content={item.suffixIconTooltip}\n placement=\"top\"\n >\n <WrappedIcon\n {...(item.suffixIcon as GeneralIconProps)}\n className={classNames(\"menu-item-title-suffix-icon\", {\n \"menu-item-title-suffix-icon-disabled\":\n item.suffixIconDisabled,\n })}\n onClick={(e) => {\n e.stopPropagation();\n if (item.suffixIconDisabled) {\n e.preventDefault();\n } else {\n suffixIconClick?.(item.key);\n }\n }}\n />\n </WrappedTooltip>\n )}\n </div>\n {item.type === \"group\" &&\n !!item.children?.length &&\n item.children.map((child, i) => {\n return (\n <div\n className=\"menu-item-title-item\"\n onClick={() =>\n menuItemClick?.({ data: child, groupKey: item.key })\n }\n key={`${child.key}-${i}`}\n >\n <span\n className={classNames(\"menu-title-text\", {\n \"menu-title-text-active\":\n defaultSelectedKeys?.includes(child.key),\n })}\n >\n {child.title}\n </span>\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport type { NodeData, SuffixBrickConf } from \".\";\n\nexport interface ContextOfDirectoryTree {\n expandedKeysSet: Set<string>;\n selectedKeysSet: Set<string>;\n internalNodeSelectable?: boolean;\n onExpand: (data: { keys: string[]; node: NodeData }) => void;\n onSelect: (data: { keys: string[]; node: NodeData }) => void;\n suffixBrick?: SuffixBrickConf;\n}\n\nexport const DirectoryTreeContext = React.createContext<ContextOfDirectoryTree>(\n {\n expandedKeysSet: new Set(),\n selectedKeysSet: new Set(),\n onExpand: () => {},\n onSelect: () => {},\n }\n);\n\nexport const useDirectoryTreeContext = (): ContextOfDirectoryTree =>\n React.useContext(DirectoryTreeContext);\n","import React, { useMemo } from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { ReactUseMultipleBricks } from \"@next-core/react-runtime\";\nimport classNames from \"classnames\";\nimport {\n EoDirectoryTreeLeaf,\n EoDirectoryTreeLeafEvents,\n EoDirectoryTreeLeafEventsMap,\n EoDirectoryTreeLeafProps,\n} from \"./directory-tree-leaf\";\nimport {\n EoDirectoryTreeInternalNode,\n EoDirectoryTreeInternalNodeEvents,\n EoDirectoryTreeInternalNodeEventsMap,\n EoDirectoryTreeInternalNodeProps,\n} from \"./directory-tree-internal-node\";\nimport { useDirectoryTreeContext } from \"./DirectoryTreeContext\";\nimport { TreeData } from \"./\";\n\nconst WrappedTreeLeaf = wrapBrick<\n EoDirectoryTreeLeaf,\n EoDirectoryTreeLeafProps,\n EoDirectoryTreeLeafEvents,\n EoDirectoryTreeLeafEventsMap\n>(\"eo-directory-tree-leaf\", {\n onSelect: \"select\",\n});\nconst WrappedTreeInternalNode = wrapBrick<\n EoDirectoryTreeInternalNode,\n EoDirectoryTreeInternalNodeProps,\n EoDirectoryTreeInternalNodeEvents,\n EoDirectoryTreeInternalNodeEventsMap\n>(\"eo-directory-tree-internal-node\", {\n onExpand: \"expand\",\n onSelect: \"select\",\n});\n\ninterface TreeLeafProps {\n treeData: TreeData;\n}\n\nfunction TreeLeaf(props: TreeLeafProps) {\n const { treeData } = props;\n const { data, index, depth } = treeData;\n const { selectedKeysSet, onSelect, suffixBrick } = useDirectoryTreeContext();\n\n const nodeData = useMemo(\n () => ({ data, index, depth }),\n [data, index, depth]\n );\n\n return (\n <WrappedTreeLeaf\n depth={depth}\n selected={selectedKeysSet.has(data.key)}\n icon={data.icon}\n faded={data.faded}\n onSelect={() => {\n const keys = [data.key];\n onSelect({ keys, node: nodeData });\n }}\n className={classNames({\n \"show-suffix-when-hover\": suffixBrick?.when === \"hover\",\n })}\n >\n <span title={data.title}>{data.title}</span>\n {suffixBrick?.useBrick && (\n <div className=\"suffix\" slot=\"suffix\">\n <ReactUseMultipleBricks\n useBrick={suffixBrick.useBrick}\n data={nodeData}\n />\n </div>\n )}\n </WrappedTreeLeaf>\n );\n}\n\ninterface TreeInternalNodeProps {\n treeData: TreeData;\n}\n\nfunction TreeInternalNode(props: TreeInternalNodeProps) {\n const { treeData } = props;\n const { data, index, depth } = treeData;\n const {\n expandedKeysSet,\n onExpand,\n selectedKeysSet,\n onSelect,\n internalNodeSelectable,\n suffixBrick,\n } = useDirectoryTreeContext();\n\n const nodeData = useMemo(\n () => ({ data, index, depth }),\n [data, index, depth]\n );\n\n return (\n <WrappedTreeInternalNode\n depth={depth}\n selectable={internalNodeSelectable}\n icon={data.icon}\n faded={data.faded}\n expanded={expandedKeysSet.has(data.key)}\n selected={selectedKeysSet.has(data.key)}\n onExpand={(e) => {\n if (e.detail) {\n expandedKeysSet.add(data.key);\n } else {\n expandedKeysSet.delete(data.key);\n }\n const keys = [...expandedKeysSet];\n onExpand({ keys, node: nodeData });\n }}\n onSelect={() => {\n const keys = [data.key];\n onSelect({ keys, node: nodeData });\n }}\n className={classNames({\n \"show-suffix-when-hover\": suffixBrick?.when === \"hover\",\n })}\n >\n <span slot=\"label\" title={data.title}>\n {data.title}\n </span>\n {suffixBrick?.useBrick && (\n <div className=\"suffix\" slot=\"suffix\">\n <ReactUseMultipleBricks\n useBrick={suffixBrick.useBrick}\n data={nodeData}\n />\n </div>\n )}\n </WrappedTreeInternalNode>\n );\n}\n\ninterface TreeNodeProps {\n treeData: TreeData;\n}\n\nfunction TreeNode(props: TreeNodeProps) {\n const { treeData } = props;\n const isLeaf = !Array.isArray(treeData.children);\n\n return isLeaf ? (\n <TreeLeaf treeData={treeData} />\n ) : (\n <TreeInternalNode treeData={treeData} />\n );\n}\n\ninterface TreeProps {\n treeData: TreeData[];\n}\n\nexport function Tree(props: TreeProps) {\n const { treeData } = props;\n\n return treeData.map((v) => {\n return <TreeNode key={v.key} treeData={v} />;\n });\n}\n","import { get, isNil } from \"lodash\";\nimport { TreeData, TreeItem } from \"./index\";\n\nexport function getAllExpandableKeys(data: TreeItem[]): string[] {\n return data.reduce((pre, cur) => {\n const isLeaf = !Array.isArray(cur.children);\n\n if (!isLeaf) {\n const keys = [cur.key].concat(\n getAllExpandableKeys(cur.children as TreeItem[])\n );\n return pre.concat(keys);\n } else {\n return pre;\n }\n }, [] as string[]);\n}\n\nexport function getExpandableKeysAccordingToSelectedKeys(\n data: TreeItem[],\n selectedKeysSet: Set<string>\n): string[] {\n return data.reduce((pre, cur) => {\n const isLeaf = !Array.isArray(cur.children);\n\n if (!isLeaf) {\n const childrenMatched = cur.children?.some((child) =>\n selectedKeysSet.has(child.key)\n );\n const childrenExpandableKeys = getExpandableKeysAccordingToSelectedKeys(\n cur.children as TreeItem[],\n selectedKeysSet\n );\n\n const keys = childrenExpandableKeys.concat(\n childrenMatched || childrenExpandableKeys.length ? [cur.key] : []\n );\n return pre.concat(keys);\n } else {\n return pre;\n }\n }, [] as string[]);\n}\n\nexport function searchTree(\n data: TreeItem[],\n q: string,\n searchFields: (string | string[])[]\n): { data: TreeItem[]; expandedKeys: string[] } {\n if (!q) {\n return { data, expandedKeys: [] };\n }\n\n const lowerQ = q.toLowerCase();\n const _expandedKeys: string[] = [];\n const _data = data\n .map((item) => {\n const selfMatched = matchItem(item, lowerQ, searchFields);\n\n if (Array.isArray(item.children)) {\n const childrenSearchResult = searchTree(\n item.children,\n lowerQ,\n searchFields\n );\n const filteredChildren = childrenSearchResult.data;\n const childrenMatched = !!filteredChildren?.length;\n\n if (childrenMatched) {\n _expandedKeys.push(item.key, ...childrenSearchResult.expandedKeys);\n\n return {\n ...item,\n children: filteredChildren,\n };\n }\n }\n\n if (selfMatched) {\n return item;\n }\n\n return undefined;\n })\n .filter(Boolean) as TreeItem[];\n return { data: _data, expandedKeys: _expandedKeys };\n}\n\nfunction matchItem(\n item: TreeItem,\n lowerQ: string,\n searchFields: (string | string[])[]\n): TreeItem | undefined {\n const keywords = searchFields.flatMap((field) =>\n getSearchKeywords(get(item, field))\n );\n const matched = keywords.some((v) => v.toLowerCase().includes(lowerQ));\n\n if (matched) {\n return item;\n }\n return undefined;\n}\n\nfunction getSearchKeywords(value: unknown): string[] {\n const result = [];\n if (isNil(value)) {\n // do nothing\n } else if (Array.isArray(value)) {\n value.map((v) => result.push(getSearchKeywords(v)));\n } else if (Object.prototype.toString.call(value) === \"[object Object]\") {\n for (const k in value as Record<string, any>) {\n result.push(\n String(k),\n getSearchKeywords((value as Record<string, any>)[k])\n );\n }\n } else {\n // string, number, bigint, boolean...\n result.push(String(value));\n }\n\n return result.flat(Infinity).filter(Boolean) as string[];\n}\n\nexport function getFlattenTreeData(\n treeItems: TreeItem[],\n expandedKeysSet: Set<string>\n) {\n const flattenList: TreeData[] = [];\n\n function dig(list: TreeItem[], parent?: TreeData): TreeData[] {\n return list.map((treeItem, index) => {\n const pos = parent ? `${parent.pos}-${index}` : String(index);\n\n const flattenData: TreeData = {\n title: treeItem.title,\n key: treeItem.key,\n pos,\n depth: pos.split(\"-\").length - 1,\n index,\n data: treeItem,\n parent,\n };\n\n flattenList.push(flattenData);\n\n if (Array.isArray(treeItem.children)) {\n flattenData.children = expandedKeysSet.has(treeItem.key)\n ? dig(treeItem.children, flattenData)\n : [];\n } else {\n flattenData.children = undefined;\n }\n\n return flattenData;\n });\n }\n\n dig(treeItems);\n\n return flattenList;\n}\n","import React, { useMemo, useState } from \"react\";\nimport { EventEmitter, createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport {\n GeneralSearch,\n SearchProps,\n SearchEvents,\n SearchEventsMap,\n} from \"@next-bricks/form/search\";\nimport { Tree } from \"./Tree\";\nimport {\n getFlattenTreeData,\n getAllExpandableKeys,\n getExpandableKeysAccordingToSelectedKeys,\n searchTree,\n} from \"./utils\";\nimport { DirectoryTreeContext } from \"./DirectoryTreeContext\";\nimport { UseBrickConf } from \"@next-core/types\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\n\nconst { defineElement, property, method, event } = createDecorators();\n\nconst WrappedSearch = wrapBrick<\n GeneralSearch,\n SearchProps,\n SearchEvents,\n SearchEventsMap\n>(\"eo-search\", {\n onChange: \"change\",\n onSearch: \"search\",\n});\n\n/**\n * 传入的 data 类型\n */\nexport interface TreeItem {\n key: string;\n title: string;\n icon?: GeneralIconProps;\n faded?: boolean;\n children?: TreeItem[];\n [key: string]: any;\n}\n\n/**\n * 内部格式化后的类型\n */\nexport interface TreeData {\n title: string;\n key: string;\n pos: string;\n depth: number;\n index: number;\n data: TreeItem;\n parent?: TreeData;\n children?: TreeData[];\n}\n\n/**\n * useBrick、事件使用的类型\n */\nexport interface NodeData {\n depth: number;\n index: number;\n data: TreeItem;\n}\n\nexport interface EoDirectoryTreeProps {\n data: TreeItem[];\n directoryTitle?: string;\n internalNodeSelectable?: boolean;\n searchable?: boolean;\n placeholder?: string;\n selectedKeys?: string[];\n expandedKeys?: string[];\n searchFields?: (string | string[])[];\n suffixBrick?: { useBrick: UseBrickConf };\n}\n\nexport interface EoDirectoryTreeEventsMapping {\n onExpand: \"expand\";\n onSelect: \"select\";\n}\n\nexport interface SuffixBrickConf {\n /**\n * @default \"always\"\n */\n when?: \"always\" | \"hover\";\n useBrick: UseBrickConf;\n}\n\n/**\n * 目录树\n */\nexport\n@defineElement(\"eo-directory-tree\", {\n styleTexts: [styleText],\n})\nclass EoDirectoryTree extends ReactNextElement {\n /**\n * 数据源\n */\n @property({\n attribute: false,\n })\n accessor data: TreeItem[] = [];\n\n /**\n * 目录标题\n */\n @property()\n accessor directoryTitle: string | undefined;\n\n /**\n * 设置中间节点是否可选,默认只有叶子节点可选\n */\n @property({ type: Boolean })\n accessor internalNodeSelectable: boolean | undefined;\n\n /**\n * 可搜索\n */\n @property({\n type: Boolean,\n })\n accessor searchable: boolean | undefined;\n\n /**\n * 搜索占位说明\n */\n @property()\n accessor placeholder: string | undefined;\n\n /**\n * 除了 title 以外,额外的搜索字段\n */\n @property({\n attribute: false,\n })\n accessor searchFields: (string | string[])[] | undefined;\n\n /**\n * 后缀 useBrick\n */\n @property({\n attribute: false,\n })\n accessor suffixBrick: SuffixBrickConf | undefined;\n\n /**\n * 选中的 keys\n */\n @property({\n attribute: false,\n })\n accessor selectedKeys: string[] | undefined;\n\n /**\n * 展开的 keys\n */\n @property({\n attribute: false,\n })\n accessor expandedKeys: string[] | undefined;\n\n /**\n * 展开全部\n */\n @method()\n expandAll() {\n this.expandedKeys = getAllExpandableKeys(this.data);\n }\n\n /**\n * 收起全部\n */\n @method()\n collapseAll() {\n this.expandedKeys = [];\n }\n\n /**\n * 根据选择项展开\n */\n @method()\n expandAccordingToSelectedKeys() {\n this.expandedKeys = getExpandableKeysAccordingToSelectedKeys(\n this.data,\n new Set(this.selectedKeys)\n );\n }\n\n /**\n * 展开事件\n * @detail { keys: 展开的 keys 列表, node: 触发展开的节点数据 }\n */\n @event({ type: \"expand\" })\n accessor #expandEvent!: EventEmitter<{ keys: string[]; node: NodeData }>;\n #handleExpand = (data: { keys: string[]; node: NodeData }) => {\n this.expandedKeys = data.keys;\n this.#expandEvent.emit(data);\n };\n\n /**\n * 选择事件\n * @detail { keys: 选中的 keys 列表, node: 触发选择的节点数据 }\n */\n @event({ type: \"select\" })\n accessor #selectEvent!: EventEmitter<{ keys: string[]; node: NodeData }>;\n #handleSelect = (data: { keys: string[]; node: NodeData }) => {\n this.selectedKeys = data.keys;\n this.#selectEvent.emit(data);\n };\n\n render() {\n return (\n <EoDirectoryTreeComponent\n element={this}\n data={this.data}\n directoryTitle={this.directoryTitle}\n internalNodeSelectable={this.internalNodeSelectable}\n placeholder={this.placeholder}\n searchable={this.searchable}\n searchFields={this.searchFields}\n suffixBrick={this.suffixBrick}\n selectedKeys={this.selectedKeys}\n expandedKeys={this.expandedKeys}\n onExpand={this.#handleExpand}\n onSelect={this.#handleSelect}\n />\n );\n }\n}\n\ninterface EoDirectoryTreeComponentProps extends EoDirectoryTreeProps {\n element: EoDirectoryTree;\n onExpand: (data: { keys: string[]; node: NodeData }) => void;\n onSelect: (data: { keys: string[]; node: NodeData }) => void;\n}\n\nexport function EoDirectoryTreeComponent(props: EoDirectoryTreeComponentProps) {\n const {\n element,\n data,\n directoryTitle,\n internalNodeSelectable,\n searchable,\n searchFields,\n placeholder,\n suffixBrick,\n onSelect,\n onExpand,\n } = props;\n\n const expandedKeysSet = useMemo(\n () => new Set(props.expandedKeys),\n [props.expandedKeys]\n );\n const selectedKeysSet = useMemo(\n () => new Set(props.selectedKeys),\n [props.selectedKeys]\n );\n\n const [q, setQ] = useState(\"\");\n\n const handleSearch = (e: CustomEvent<string>) => {\n setQ(e.detail);\n };\n\n const searchedData = useMemo(() => {\n const result = searchTree(data, q, (searchFields || []).concat(\"title\"));\n if (q) {\n element.expandedKeys = result.expandedKeys;\n }\n return result.data;\n }, [data, q, searchFields]);\n\n const treeData = useMemo(() => {\n return getFlattenTreeData(searchedData, expandedKeysSet);\n }, [searchedData, expandedKeysSet]);\n\n return (\n <DirectoryTreeContext.Provider\n value={{\n expandedKeysSet,\n selectedKeysSet,\n internalNodeSelectable,\n onSelect,\n onExpand,\n suffixBrick,\n }}\n >\n <div className=\"directory-container\">\n {directoryTitle && (\n <div className=\"directory-title-container\">\n <div className=\"directory-title\" title={directoryTitle}>\n {directoryTitle}\n </div>\n <div className=\"directory-title-toolbar\">\n <slot name=\"toolbar\" />\n </div>\n </div>\n )}\n {searchable && (\n <WrappedSearch\n className=\"directory-search\"\n trim\n placeholder={placeholder}\n onSearch={handleSearch}\n />\n )}\n <div className=\"tree\">\n <Tree treeData={treeData} />\n </div>\n </div>\n </DirectoryTreeContext.Provider>\n );\n}\n","import React, { useEffect, useRef } from \"react\";\nimport { EventEmitter, createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { IndentSize } from \"../constants\";\n\nconst { defineElement, property, event } = createDecorators();\n\nconst WrappedEoIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface EoDirectoryTreeLeafProps {\n depth: number;\n selected?: boolean;\n icon?: GeneralIconProps;\n faded?: boolean;\n}\n\nexport interface EoDirectoryTreeLeafEvents {\n select: CustomEvent<void>;\n}\n\nexport interface EoDirectoryTreeLeafEventsMap {\n onSelect: \"select\";\n}\n\n/**\n * 目录树叶子节点\n */\nexport\n@defineElement(\"eo-directory-tree-leaf\", {\n styleTexts: [styleText],\n})\nclass EoDirectoryTreeLeaf extends ReactNextElement {\n /**\n * 深度\n */\n @property({\n type: Number,\n })\n accessor depth: number = 0;\n\n /**\n * 是否选中\n */\n @property({\n type: Boolean,\n })\n accessor selected: boolean | undefined;\n\n /** 节点图标 */\n @property({ attribute: false })\n accessor icon: GeneralIconProps | undefined;\n\n /** 节点是否淡化显示 */\n @property({ type: Boolean, render: false })\n accessor faded: boolean | undefined;\n\n /**\n * 节点被选中时触发\n */\n @event({ type: \"select\" })\n accessor #selectEvent!: EventEmitter<void>;\n\n #handleSelect = () => {\n this.#selectEvent.emit();\n };\n\n render() {\n return (\n <EoDirectoryTreeLeafComponent\n depth={this.depth}\n icon={this.icon}\n onSelect={this.#handleSelect}\n />\n );\n }\n}\n\nexport interface EoDirectoryTreeLeafComponentProps\n extends EoDirectoryTreeLeafProps {\n onSelect: () => void;\n}\n\nexport function EoDirectoryTreeLeafComponent({\n depth,\n icon,\n onSelect,\n}: EoDirectoryTreeLeafComponentProps) {\n const treeItemRef = useRef<HTMLDivElement>(null);\n const suffixRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const treeItem = treeItemRef.current;\n const handleSelect = () => {\n onSelect();\n };\n\n treeItem?.addEventListener(\"click\", handleSelect);\n\n return () => {\n treeItem?.removeEventListener(\"click\", handleSelect);\n };\n }, [onSelect]);\n\n useEffect(() => {\n const suffix = suffixRef.current;\n const handleSuffixClick = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n suffix?.addEventListener(\"click\", handleSuffixClick);\n\n return () => {\n suffix?.removeEventListener(\"click\", handleSuffixClick);\n };\n }, []);\n\n return (\n <div className=\"tree-item\" ref={treeItemRef}>\n <div\n className=\"tree-item-indentation\"\n style={{\n width: IndentSize * depth,\n }}\n />\n <div className=\"tree-item-content\">\n <div className=\"tree-item-expand-button\"></div>\n {icon && <WrappedEoIcon {...icon} className=\"tree-item-icon\" />}\n <div className=\"tree-item-label\">\n <slot />\n </div>\n </div>\n <div className=\"tree-item-suffix\" ref={suffixRef}>\n <slot name=\"suffix\" />\n </div>\n </div>\n );\n}\n","export const IndentSize = 10;\n","import * as React from \"react\";\nconst SvgArrow = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={14} height={14} viewBox=\"0 0 14 14\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"m11.743 9.42-4.49-5.206a.34.34 0 0 0-.506 0L2.257 9.42c-.167.194-.016.478.253.478h8.98c.27 0 .42-.284.253-.478\" /></svg>;\nexport default SvgArrow;","import React, { useEffect, useRef } from \"react\";\nimport { EventEmitter, createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport Arrow from \"./arrow.svg\";\nimport { IndentSize } from \"../constants\";\n\nconst { defineElement, property, event } = createDecorators();\n\nconst WrappedEoIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport interface EoDirectoryTreeInternalNodeProps {\n depth: number;\n expanded?: boolean;\n selectable?: boolean;\n selected?: boolean;\n icon?: GeneralIconProps;\n faded?: boolean;\n}\n\nexport interface EoDirectoryTreeInternalNodeEvents {\n expand: CustomEvent<boolean>;\n select: CustomEvent<void>;\n}\n\nexport interface EoDirectoryTreeInternalNodeEventsMap {\n onExpand: \"expand\";\n onSelect: \"select\";\n}\n\n/**\n * 目录树中间节点\n */\nexport\n@defineElement(\"eo-directory-tree-internal-node\", {\n styleTexts: [styleText],\n})\nclass EoDirectoryTreeInternalNode extends ReactNextElement {\n /**\n * 深度\n */\n @property({\n type: Number,\n })\n accessor depth: number = 0;\n\n /**\n * 是否展开\n */\n @property({\n type: Boolean,\n })\n accessor expanded: boolean | undefined;\n\n /**\n * 可选择\n */\n @property({\n type: Boolean,\n })\n accessor selectable: boolean | undefined;\n\n /**\n * 是否选中\n */\n @property({\n type: Boolean,\n })\n accessor selected: boolean | undefined;\n\n /** 节点图标 */\n @property({ attribute: false })\n accessor icon: GeneralIconProps | undefined;\n\n /** 节点是否淡化显示 */\n @property({ type: Boolean, render: false })\n accessor faded: boolean | undefined;\n\n /**\n * 节点展开/收起时触发\n * @detail 展开后的状态(true 表示展开,false 表示收起)\n */\n @event({ type: \"expand\" })\n accessor #expandEvent!: EventEmitter<boolean>;\n #handleExpand = () => {\n this.#expandEvent.emit(!this.expanded);\n };\n\n /**\n * 节点被选中时触发\n */\n @event({ type: \"select\" })\n accessor #selectEvent!: EventEmitter<void>;\n #handleSelect = () => {\n this.#selectEvent.emit();\n };\n\n render() {\n return (\n <EoDirectoryTreeInternalNodeComponent\n depth={this.depth}\n selectable={this.selectable}\n expanded={this.expanded}\n icon={this.icon}\n onExpand={this.#handleExpand}\n onSelect={this.#handleSelect}\n />\n );\n }\n}\n\nexport interface EoDirectoryTreeInternalNodeComponentProps\n extends EoDirectoryTreeInternalNodeProps {\n onExpand: () => void;\n onSelect: () => void;\n}\n\nexport function EoDirectoryTreeInternalNodeComponent({\n depth,\n selectable,\n icon,\n onExpand,\n onSelect,\n}: EoDirectoryTreeInternalNodeComponentProps) {\n const treeItemRef = useRef<HTMLDivElement>(null);\n const expandBottomRef = useRef<HTMLDivElement>(null);\n const suffixRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (selectable) {\n const treeItem = treeItemRef.current;\n const expandBottom = expandBottomRef.current;\n const handleSelect = () => {\n onSelect();\n };\n const handleExpand = (e: MouseEvent) => {\n e.stopPropagation();\n onExpand();\n };\n\n treeItem?.addEventListener(\"click\", handleSelect);\n expandBottom?.addEventListener(\"click\", handleExpand);\n\n return () => {\n treeItem?.removeEventListener(\"click\", handleSelect);\n expandBottom?.removeEventListener(\"click\", handleExpand);\n };\n } else {\n const treeItem = treeItemRef.current;\n const handleExpand = () => {\n onExpand();\n };\n\n treeItem?.addEventListener(\"click\", handleExpand);\n\n return () => {\n treeItem?.removeEventListener(\"click\", handleExpand);\n };\n }\n }, [selectable, onSelect, onExpand]);\n\n useEffect(() => {\n const suffix = suffixRef.current;\n const handleSuffixClick = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n suffix?.addEventListener(\"click\", handleSuffixClick);\n\n return () => {\n suffix?.removeEventListener(\"click\", handleSuffixClick);\n };\n }, []);\n\n return (\n <>\n <div className=\"tree-item\" ref={treeItemRef}>\n <div\n className=\"tree-item-indentation\"\n style={{\n width: IndentSize * depth,\n }}\n />\n <div className=\"tree-item-content\">\n <div className=\"tree-item-expand-button\" ref={expandBottomRef}>\n <Arrow className=\"tree-item-expand-arrow\" />\n </div>\n {icon && <WrappedEoIcon {...icon} className=\"tree-item-icon\" />}\n <div className=\"tree-item-label\">\n <slot name=\"label\" />\n </div>\n </div>\n <div className=\"tree-item-suffix\" ref={suffixRef}>\n <slot name=\"suffix\" />\n </div>\n </div>\n <div className=\"tree-item-children\">\n <div className=\"tree-item-inner\">\n <slot />\n </div>\n </div>\n </>\n );\n}\n","import React, { useMemo } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { wrapBrick, ReactNextElement } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\nimport { getRuntime } from \"@next-core/runtime\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\n\nconst { defineElement } = createDecorators();\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\n/**\n * 导航栏图标\n */\nexport\n@defineElement(\"nav.nav-logo\", {\n styleTexts: [styleText],\n})\nclass NavLogo extends ReactNextElement {\n render() {\n return <NavLogoComponent />;\n }\n}\n\nexport function NavLogoComponent() {\n const brand = getRuntime().getBrandSettings();\n\n const logoNode = useMemo(() => {\n return brand.menu_bar_logo_url ? (\n <img src={brand.menu_bar_logo_url} className=\"personalized-logo\" />\n ) : (\n <WrappedIcon\n category=\"blueprint\"\n icon=\"easyops\"\n lib=\"easyops\"\n className=\"easyops-icon\"\n />\n );\n }, [brand.menu_bar_logo_url]);\n\n return (\n <div className=\"logo-container\">\n {brand.menu_bar_logo_no_link === \"true\" ? (\n logoNode\n ) : (\n <WrappedLink type=\"plain\" url=\"/\" className=\"logo-link\">\n {logoNode}\n </WrappedLink>\n )}\n </div>\n );\n}\n","/* istanbul ignore file */\nexport enum K {\n VIEW_DETAILS = \"VIEW_DETAILS\",\n DISMISS = \"DISMISS\",\n}\n\nconst en: Locale = {\n VIEW_DETAILS: \"View details\",\n DISMISS: \"Dismiss\",\n};\n\nconst zh: Locale = {\n VIEW_DETAILS: \"查看详情\",\n DISMISS: \"忽略\",\n};\n\nexport const NS = \"bricks/nav/poll-announce\";\n\nexport const locales = { en, zh };\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\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]!./notification.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\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]!./notification.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","/* istanbul ignore file */\nimport React, { useEffect } from \"react\";\nimport { createDecorators, type EventEmitter } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { httpErrorToString } from \"@next-core/runtime\";\nimport { unwrapProvider } from \"@next-core/utils/general\";\nimport \"@next-core/theme\";\nimport { i18n } from \"@next-core/i18n\";\nimport { initializeReactI18n } from \"@next-core/i18n/react\";\nimport type { showNotification as _showNotification } from \"@next-bricks/basic/data-providers/show-notification/show-notification\";\nimport {\n AnnounceApi_ignoreAnnounce,\n AnnounceApi_listEffectiveAnnounce,\n AnnounceApi_pollAnnounce,\n} from \"@next-api-sdk/sys-setting-sdk\";\nimport { K, NS, locales } from \"./i18n.js\";\nimport styleText from \"./styles.shadow.css\";\nimport styles from \"./notification.module.css\";\n\ninitializeReactI18n(NS, locales);\n\nconst { defineElement, property, event } = createDecorators();\n\nconst showNotification = unwrapProvider<typeof _showNotification>(\n \"basic.show-notification\"\n);\n\nconst ignoredInstanceIds = new Set<string>();\n\nexport interface PollAnnounceProps {\n pollEnabled?: boolean;\n realTimeMessage?: Message;\n}\n\nexport interface Message {\n title: string;\n data: string;\n instanceId: string;\n}\n\nexport interface PollAnnounceEventsMapping {\n onNotificationClose: \"notification.close\";\n onNotificationOpen: \"notification.open\";\n}\n\n/**\n * 轮询获取通知消息并展示。\n *\n * 从 v2 构件 `nav-legacy.poll-announce` 迁移而来\n */\nexport\n@defineElement(\"nav.poll-announce\", {\n styleTexts: [styleText],\n})\nclass PollAnnounce extends ReactNextElement implements PollAnnounceProps {\n /**\n * 是否启用轮询\n *\n * - 启用时,将会不断轮询通知列表接口\n * - 未启用时,通过 `realTimeMessage` 属性传入实时通知消息\n *\n * 注意:v2 构件 `nav-legacy.poll-announce` 该属性名称为 `pollDisabled`,但其实际意义却是 `pollEnabled`,因此在迁移时进行了重命名。\n */\n @property({ type: Boolean })\n accessor pollEnabled: boolean | undefined;\n\n /**\n * 实时通知消息(通常通过 WebSocket 消息得到)\n */\n @property({ attribute: false })\n accessor realTimeMessage: Message | undefined;\n\n /**\n * 通知框关闭后,调用忽略通知接口完成后触发\n */\n @event({ type: \"notification.close\" })\n accessor #closeEvent!: EventEmitter<void>;\n\n #handleClose = () => {\n this.#closeEvent.emit();\n };\n\n /**\n * 轮询得到新的通知时触发。\n */\n @event({ type: \"notification.open\" })\n accessor #openEvent!: EventEmitter<void>;\n\n #handleOpen = () => {\n this.#openEvent.emit();\n };\n\n render() {\n return (\n <PollAnnounceComponent\n pollEnabled={this.pollEnabled}\n realTimeMessage={this.realTimeMessage}\n onOpen={this.#handleOpen}\n onClose={this.#handleClose}\n />\n );\n }\n}\n\nexport interface PollAnnounceComponentProps extends PollAnnounceProps {\n onOpen: () => void;\n onClose: () => void;\n}\n\nasync function openNotification(\n { title, data, instanceId }: Message,\n onClose: () => void\n) {\n const _data = data\n .replace(/<[^>]+>| /gim, \"\\r\\n\")\n .replace(/“/gim, \"“\")\n .replace(/”/gim, \"”\");\n\n const htmlMessage = _data.length > 100 ? _data.slice(0, 100) : _data;\n\n try {\n await showNotification({\n placement: \"topRight\",\n icon: {\n lib: \"antd\",\n theme: \"filled\",\n icon: \"sound\",\n style: {\n color: \"var(--theme-orange-color)\",\n },\n },\n title,\n htmlMessage: `<div class=\"${styles.message}\">${htmlMessage}</div>`,\n closable: true,\n showConfirm: true,\n confirmText: i18n.t(`${NS}:${K.VIEW_DETAILS}`),\n confirmLink: {\n url: `/announcement-management/announcement-front/content?instanceId=${instanceId}`,\n target: \"_blank\",\n },\n showCancel: true,\n cancelText: i18n.t(`${NS}:${K.DISMISS}`),\n });\n } catch {\n // ignore\n } finally {\n if (!ignoredInstanceIds.has(instanceId)) {\n ignoredInstanceIds.add(instanceId);\n try {\n await AnnounceApi_ignoreAnnounce({\n instanceIds: [instanceId],\n });\n onClose();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"ignore announce failed:\", e);\n }\n }\n }\n}\n\nexport function PollAnnounceComponent({\n pollEnabled,\n realTimeMessage,\n onOpen,\n onClose,\n}: PollAnnounceComponentProps) {\n useEffect(\n () => {\n const listEffectiveAnnounce = async (): Promise<void> => {\n const list = (await AnnounceApi_listEffectiveAnnounce({}))\n .list as (Message & { isPopup: boolean })[];\n if (list.length) {\n list\n .filter((item) => item.isPopup)\n .reverse()\n .forEach((item) => {\n openNotification(item, onClose);\n });\n }\n };\n listEffectiveAnnounce();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n useEffect(() => {\n if (!pollEnabled && realTimeMessage) {\n openNotification(realTimeMessage, onClose);\n }\n }, [onClose, pollEnabled, realTimeMessage]);\n\n useEffect(() => {\n if (!pollEnabled) {\n return;\n }\n let ignored = false;\n const pollAnnounce = async (): Promise<void> => {\n if (ignored) {\n return;\n }\n try {\n const result = await AnnounceApi_pollAnnounce({\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n });\n openNotification(result as Message, onClose);\n onOpen();\n pollAnnounce();\n } catch (error) {\n const err = httpErrorToString(error);\n if (err?.toLowerCase()?.includes(\"timeout\")) {\n pollAnnounce();\n }\n }\n };\n pollAnnounce();\n return () => {\n ignored = true;\n };\n }, [onClose, onOpen, pollEnabled]);\n\n return null;\n}\n","import type { MicroApp } from \"@next-core/types\";\nimport { i18n } from \"@next-core/i18n\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport {\n cook,\n isEvaluable,\n preevaluate,\n type PreevaluateResult,\n} from \"@next-core/cook\";\nimport { supply } from \"@next-core/supply\";\nimport {\n beforeVisitGlobalMember,\n type MemberUsageInExpressions,\n} from \"@next-core/utils/storyboard\";\nimport type { MenuRawData } from \"../get-menu-config-tree\";\n\nconst allowedAppProps = new Set([\"name\", \"id\", \"homepage\", \"localeName\"]);\n\n/**\n * 对菜单标题进行表达式解析,支持 I18N 和 APP。\n */\nexport function smartDisplayForMenuTitle(\n title: unknown,\n i18nNamespace: string | undefined,\n overrideApp: MicroApp | undefined\n): string | undefined {\n if (typeof title !== \"string\") {\n return;\n }\n if (isEvaluable(title)) {\n // A `SyntaxError` maybe thrown.\n let precooked: PreevaluateResult | undefined;\n const appUsage: MemberUsageInExpressions = {\n usedProperties: new Set(),\n hasNonStaticUsage: false,\n };\n try {\n precooked = preevaluate(title, {\n withParent: true,\n hooks: {\n beforeVisitGlobal: beforeVisitGlobalMember(appUsage, [\"APP\"]),\n },\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Parse menu title expression \"${title}\" failed:`, error);\n }\n\n if (\n precooked &&\n (!precooked.attemptToVisitGlobals.has(\"APP\") ||\n (overrideApp &&\n !appUsage.hasNonStaticUsage &&\n [...appUsage.usedProperties].every((prop) =>\n allowedAppProps.has(prop)\n )))\n ) {\n const globals: Record<string, unknown> = {};\n for (const key of precooked.attemptToVisitGlobals) {\n switch (key) {\n case \"I18N\":\n globals[key] = i18n.getFixedT(\n null,\n [i18nNamespace].filter(Boolean)\n );\n break;\n case \"APP\":\n globals[key] = {\n ...overrideApp,\n localeName: overrideApp?.name,\n };\n break;\n }\n }\n const suppliedGlobals = supply(precooked.attemptToVisitGlobals, globals);\n\n let computable = true;\n for (const key of precooked.attemptToVisitGlobals) {\n if (!hasOwnProperty(suppliedGlobals, key)) {\n computable = false;\n break;\n }\n }\n\n if (computable) {\n try {\n const result = cook(precooked.expression, precooked.source, {\n globalVariables: suppliedGlobals,\n });\n if (typeof result === \"string\") {\n return result;\n }\n // eslint-disable-next-line no-console\n console.error(\n `The result of menu title expression \"${title}\" is not a string:`,\n result\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\n `Evaluate menu title expression \"${title}\" failed:`,\n error\n );\n }\n }\n }\n } else if (overrideApp) {\n // 处理简单的占位符替换: ${APP.name} 和 ${APP.localeName}\n return title.replace(\n /\\$\\{\\s*APP\\s*\\.\\s*(?:name|localeName)\\s*\\}/g,\n () => overrideApp.name\n );\n }\n return title;\n}\n\nexport function initializeMenuI18n(menuList: MenuRawData[]) {\n const menuWithI18n = new WeakMap<MenuRawData, string>();\n const menuI18nBundles: [lang: string, ns: string][] = [];\n\n for (const menu of menuList) {\n const menuI18nNamespace = `customize-menu/${menu.menuId}~${menu.app[0].appId}+${\n menu.instanceId\n }`;\n // Support any language in `menu.i18n`.\n Object.entries(menu.i18n ?? {}).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, menuI18nNamespace, resources);\n });\n menuWithI18n.set(menu, menuI18nNamespace);\n }\n\n return {\n menuWithI18n,\n dispose: () => {\n for (const [lang, ns] of menuI18nBundles) {\n i18n.removeResourceBundle(lang, ns);\n }\n },\n };\n}\n","import type { MetaI18n, MicroApp } from \"@next-core/types\";\nimport { createProviderClass } from \"@next-core/utils/general\";\nimport { sortBy } from \"lodash\";\nimport {\n initializeMenuI18n,\n smartDisplayForMenuTitle,\n} from \"./shared/smartDisplayForMenuTitle\";\n\nconst symbolMenuI18nNamespace = Symbol(\"menuI18nNamespace\");\nconst symbolOverrideApp = Symbol(\"overrideApp\");\n\n/** 原始菜单数据。 */\nexport interface MenuRawData {\n menuId: string;\n title: string;\n icon?: {\n imgSrc?: string;\n };\n type?: \"main\" | \"inject\";\n injectMenuGroupId?: string;\n dynamicItems?: boolean;\n itemsResolve?: unknown;\n items?: MenuItemRawData[];\n instanceId: string;\n app: [\n {\n appId: string;\n },\n ];\n i18n?: MetaI18n;\n overrideApp?: MicroApp;\n}\n\n/** 原始菜单项数据。 */\nexport type MenuItemRawData = {\n /** 菜单项文本。 */\n text: string;\n icon?: {\n imgSrc?: string;\n };\n sort?: number;\n groupId?: string;\n hidden?: boolean;\n children?: MenuItemRawData[];\n};\n\nexport interface TitleDataSource {\n objectId: string;\n instanceId: string;\n attributeId?: string;\n}\n\ninterface RuntimeMenuItemRawData extends MenuItemRawData {\n children?: RuntimeMenuItemRawData[];\n [symbolMenuI18nNamespace]?: string;\n [symbolOverrideApp]?: MicroApp;\n}\n\nexport interface TreeNode {\n key: string;\n title: string;\n icon?: unknown;\n faded?: unknown;\n children?: TreeNode[];\n data: MenuRawData | MenuItemRawData;\n /** 第一个节点额外返回 __keys,包含所有节点的 key */\n __keys?: string[];\n}\n\nconst DEFAULT_ICON = {\n lib: \"fa\",\n icon: \"bars\",\n};\n\n/**\n * 构造用于菜单自定义的树形结构数据。\n *\n * 将对菜单标题进行表达式解析,支持 I18N 和 APP。\n */\nexport async function getMenuConfigTree(\n menuList: MenuRawData[]\n): Promise<TreeNode[]> {\n const keys: string[] = [];\n\n function getChildren(\n items: RuntimeMenuItemRawData[] | undefined,\n prefixKey: string\n ): TreeNode[] | undefined {\n const children = items?.map<TreeNode>((item, j) => {\n const key = `${prefixKey}-${j}`;\n keys.push(key);\n return {\n key,\n title:\n smartDisplayForMenuTitle(\n item.text,\n item[symbolMenuI18nNamespace],\n item[symbolOverrideApp]\n ) ?? \"\",\n data: item,\n icon: getIcon(item.icon),\n faded: item.hidden,\n children: getChildren(item.children, key),\n };\n });\n return children?.length ? children : undefined;\n }\n\n const mainMenu = menuList.find((menu) => menu.type === \"main\");\n if (!mainMenu) {\n return [];\n }\n\n const validMenuList: MenuRawData[] = [];\n const injectWithMenus = new Map<string, MenuRawData[]>();\n const { menuWithI18n, dispose } = initializeMenuI18n(menuList);\n\n for (const menu of menuList) {\n if (!(menu.dynamicItems && menu.itemsResolve) && menu.items?.length) {\n if (menu.type === \"inject\" && menu.injectMenuGroupId) {\n let injectingMenus = injectWithMenus.get(menu.injectMenuGroupId);\n if (!injectingMenus) {\n injectingMenus = [];\n injectWithMenus.set(menu.injectMenuGroupId, injectingMenus);\n }\n injectingMenus.push(menu);\n } else {\n validMenuList.push(menu);\n }\n }\n }\n\n keys.push(\"0\");\n\n const firstLevelItems = reorderMenuItems(\n validMenuList.flatMap(\n (menu) =>\n // Here always have non-empty items\n processGroupInject(menu.items, menu, injectWithMenus, menuWithI18n)!\n )\n );\n\n const tree: TreeNode[] = [\n {\n key: \"0\",\n __keys: keys,\n title:\n smartDisplayForMenuTitle(\n mainMenu.title,\n menuWithI18n.get(mainMenu),\n mainMenu.overrideApp\n ) ?? mainMenu.menuId,\n data: mainMenu,\n icon: getIcon(mainMenu.icon),\n children: getChildren(firstLevelItems, \"0\"),\n },\n ];\n\n dispose();\n\n return tree;\n}\n\nfunction getIcon(icon: { imgSrc?: string } | undefined): unknown {\n // 使用图片图标时,该图标一般是表达式,是应用的运行时数据,菜单管理无法获取。\n if (icon?.imgSrc) {\n return DEFAULT_ICON;\n }\n return icon ?? DEFAULT_ICON;\n}\n\nfunction processGroupInject(\n items: MenuItemRawData[] | undefined,\n menu: MenuRawData,\n injectWithMenus: Map<string, MenuRawData[]>,\n menuWithI18n: WeakMap<MenuRawData, string>\n): RuntimeMenuItemRawData[] | undefined {\n return items?.map((item) => {\n const foundInjectingMenus =\n item.groupId && injectWithMenus.get(item.groupId);\n if (foundInjectingMenus) {\n // Each menu to be injected with should be injected only once.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n injectWithMenus.delete(item.groupId!);\n }\n return {\n ...item,\n children: (\n processGroupInject(\n item.children,\n menu,\n injectWithMenus,\n menuWithI18n\n ) ?? ([] as RuntimeMenuItemRawData[])\n ).concat(\n foundInjectingMenus\n ? foundInjectingMenus.flatMap(\n (injectingMenu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(\n injectingMenu.items,\n injectingMenu,\n injectWithMenus,\n menuWithI18n\n )!\n )\n : ([] as RuntimeMenuItemRawData[])\n ),\n [symbolOverrideApp]: menu.overrideApp,\n [symbolMenuI18nNamespace]: menuWithI18n.get(menu),\n };\n });\n}\n\nfunction reorderMenuItems(\n list: MenuItemRawData[] | undefined\n): MenuItemRawData[] {\n return sortMenuItems(list).map((item) => ({\n ...item,\n children: reorderMenuItems(item.children),\n }));\n}\n\nfunction sortMenuItems(list: MenuItemRawData[] | undefined): MenuItemRawData[] {\n return sortBy(list, (item) => item.sort ?? -Infinity, \"text\");\n}\n\ncustomElements.define(\n \"nav.get-menu-config-tree\",\n createProviderClass(getMenuConfigTree)\n);\n","import { createProviderClass } from \"@next-core/utils/general\";\nimport type { MenuRawData } from \"./get-menu-config-tree\";\nimport {\n initializeMenuI18n,\n smartDisplayForMenuTitle,\n} from \"./shared/smartDisplayForMenuTitle\";\n\nexport interface MenuOption {\n label: string;\n value: string;\n}\n\n/**\n * 构造用于菜单自定义的下拉选项数据。\n *\n * 将对菜单标题进行表达式解析,支持 I18N 和 APP。\n */\nexport async function getMenuConfigOptions(\n menuList: MenuRawData[]\n): Promise<MenuOption[]> {\n const options: MenuOption[] = [];\n\n const { menuWithI18n, dispose } = initializeMenuI18n(menuList);\n\n for (const menu of menuList) {\n options.push({\n label: `${smartDisplayForMenuTitle(menu.title, menuWithI18n.get(menu), menu.overrideApp) ?? \"\"} (${menu.menuId})`,\n value: menu.menuId,\n });\n }\n\n dispose();\n\n return options;\n}\n\ncustomElements.define(\n \"nav.get-menu-config-options\",\n createProviderClass(getMenuConfigOptions)\n);\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n FULL_TEXT_SEARCH = \"FULL_TEXT_SEARCH\",\n IP_SEARCH = \"IP_SEARCH\",\n TICKET_SEARCH = \"TICKET_SEARCH\",\n TICKET_SEARCH_PLACEHOLDER = \"TICKET_SEARCH_PLACEHOLDER\",\n IP_SEARCH_PLACEHOLDER = \"IP_SEARCH_PLACEHOLDER\",\n FULL_TEXT_SEARCH_PLACEHOLDER = \"FULL_TEXT_SEARCH_PLACEHOLDER\",\n IP_SEARCH_TOOLTIP = \"IP_SEARCH_TOOLTIP\",\n RECENT_SEARCH = \"RECENT_SEARCH\",\n NO_SEARCH_HISTORY = \"NO_SEARCH_HISTORY\",\n QUICK_SEARCH_TIP = \"QUICK_SEARCH_TIP\",\n}\n\nconst en: Locale = {\n FULL_TEXT_SEARCH: \"Full-text search\",\n IP_SEARCH: \"IP search\",\n TICKET_SEARCH: \"Ticket search\",\n TICKET_SEARCH_PLACEHOLDER: \"Enter ticket number/title and other keywords\",\n IP_SEARCH_PLACEHOLDER:\n \"Enter IP to query hosts and related applications, systems and other resources\",\n FULL_TEXT_SEARCH_PLACEHOLDER:\n 'Search applications, hosts and other information, supports \"\" exact search',\n IP_SEARCH_TOOLTIP: \"IP Search\",\n RECENT_SEARCH: \"Recent Search\",\n NO_SEARCH_HISTORY: \"No search history\",\n QUICK_SEARCH_TIP: \"Quick Search (Cmd/Ctrl+K)\",\n};\n\nconst zh: Locale = {\n FULL_TEXT_SEARCH: \"全文搜索\",\n IP_SEARCH: \"ip搜索\",\n TICKET_SEARCH: \"工单搜索\",\n TICKET_SEARCH_PLACEHOLDER: \"输入工单编号/标题等关键字\",\n IP_SEARCH_PLACEHOLDER: \"输入IP查询主机关联的应用、系统等资源\",\n FULL_TEXT_SEARCH_PLACEHOLDER: '搜索应用、主机等信息,支持\"\"精确搜索',\n IP_SEARCH_TOOLTIP: \"IP搜索\",\n RECENT_SEARCH: \"最近搜索\",\n NO_SEARCH_HISTORY: \"暂无搜索记录\",\n QUICK_SEARCH_TIP: \"快捷搜索(Cmd/Ctrl+K)\",\n};\n\nexport const NS = \"bricks/nav/query-search\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","import React, {\n useEffect,\n useState,\n useMemo,\n useRef,\n useCallback,\n} from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport { NS, locales, K, t } from \"./i18n.js\";\nimport styleText from \"./styles.shadow.css\";\n\nimport type { Button, ButtonProps } from \"@next-bricks/basic/button\";\nimport classNames from \"classnames\";\nimport type {\n GeneralSearch,\n SearchProps,\n SearchEvents,\n SearchEventsMap,\n} from \"@next-bricks/form/search\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\n\nimport { getRuntime, getHistory } from \"@next-core/runtime\";\nimport { JsonStorage } from \"@next-shared/general/JsonStorage\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport { uniq } from \"lodash\";\nimport { Select, ConfigProvider, theme } from \"antd\";\nimport { StyleProvider, createCache } from \"@ant-design/cssinjs\";\nimport { InstanceApi_postSearchV3 } from \"@next-api-sdk/cmdb-sdk\";\nimport type { EoTooltip, ToolTipProps } from \"@next-bricks/basic/tooltip\";\nimport { useCurrentTheme } from \"@next-core/react-runtime\";\n\ninitializeI18n(NS, locales);\n\nconst { defineElement } = createDecorators();\n\n// --- 常量定义 ---\nconst STORAGE = new JsonStorage(localStorage);\nconst FULL_TEXT_URL = \"search/result?q=%{q}%\";\nconst IP_SEARCH_URL = \"search/new/ipSearch?q=%{q}%\";\nconst ITSM_SEARCH_URL = \"/itsc-ticket-center/ticket-list?q=%{q}%\";\nconst INSTANCE_SEARCH_URL = \"search/instance-or-relation-path/search/\";\n\nconst WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nconst WrappedButton = wrapBrick<Button, ButtonProps>(\"eo-button\");\nexport const WrappedSearch = wrapBrick<\n GeneralSearch,\n SearchProps,\n SearchEvents,\n SearchEventsMap\n>(\"eo-search\", {\n onChange: \"change\",\n onSearch: \"search\",\n});\nconst WrappedToolTip = wrapBrick<EoTooltip, ToolTipProps>(\"eo-tooltip\");\n\n/**\n * 综合搜索入口,支持全文检索、IP 搜索、工单搜索等多种查询模式,带搜索历史记录功能\n */\nexport\n@defineElement(\"nav.query-search\", {\n styleTexts: [styleText],\n})\nclass QuerySearch extends ReactNextElement {\n render() {\n return <QuerySearchComponent shadowRoot={this.shadowRoot} />;\n }\n}\n\nexport interface QuerySearchComponentProps {\n shadowRoot: ShadowRoot | null;\n}\n\nenum QuerierTypes {\n fullText = \"fullText\",\n instanceSearch = \"instanceSearch\",\n relationSearch = \"relationSearch\",\n link = \"link\",\n ipSearch = \"ipSearch\",\n}\n\ninterface QuerierConfig {\n url: string;\n searchPlaceholder: string;\n}\n\ninterface Querier {\n name: string;\n type: QuerierTypes;\n disabled: boolean;\n showInApps: string[];\n instanceId?: string;\n config: QuerierConfig;\n}\n\ninterface QuerierOption extends Querier {\n label: string;\n value: string;\n}\n\n// 获取 Storage Key 的辅助函数\nconst getOrgId = () => (auth.getAuth() as Record<string, string>)?.org || \"\";\nconst getRecentVisitsKey = () => `querier-search-recent-visits:${getOrgId()}`;\nconst getSelectedQuerierKey = () => `querier-search-querier:${getOrgId()}`;\n\nexport function QuerySearchComponent(props: QuerySearchComponentProps) {\n const { shadowRoot } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const appId = getRuntime().getCurrentApp()?.id || \"\";\n const currentTheme = useCurrentTheme();\n\n // State\n /**\n * null: 初始化(无动画)\n * false: 收起(播放收起动画)\n * true: 展开\n */\n const [showInput, setShowInput] = useState<boolean | null>(null);\n const [searchKey, setSearchKey] = useState<string>(\"\");\n const [visits, setVisits] = useState<string[]>([]);\n\n // Data State\n const [querierList, setQuerierList] = useState<Querier[]>([]);\n const [querierOptions, setQuerierOptions] = useState<QuerierOption[]>([]);\n const [selectedQuerier, setSelectedQuerier] = useState<QuerierOption>();\n\n // Style Cache\n const cache = useMemo(() => createCache(), []);\n\n // 检测是否应该直接跳转 (响应式布局逻辑)\n const checkIsDirectJump = useCallback((): boolean => {\n const parentWidth = shadowRoot?.host?.parentElement?.clientWidth || 0;\n return document.documentElement.clientWidth - parentWidth - 500 < 200;\n }, [shadowRoot]);\n\n // 处理跳转逻辑\n const handleHistoryPush = useCallback(\n (q?: string) => {\n // 如果还没加载 querier,默认去 IP 搜索\n const targetUrl =\n showInput && selectedQuerier?.config?.url\n ? selectedQuerier.config.url\n : IP_SEARCH_URL;\n const cleanUrl = targetUrl.startsWith(\"/\") ? targetUrl : \"/\" + targetUrl;\n const queryTerm = q || searchKey || \"\";\n const to = cleanUrl.replaceAll(\"%{q}%\", queryTerm);\n getHistory().push(to);\n },\n [showInput, selectedQuerier, searchKey]\n );\n\n // --- 核心逻辑优化 1: 分离键盘事件监听 ---\n\n // 1.1 全局快捷键监听 (Cmd/Ctrl + K) - 只绑定一次\n // istanbul ignore next\n useEffect(() => {\n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.userAgent);\n const modKey = isMac ? e.metaKey : e.ctrlKey;\n\n if (modKey && e.key === \"k\") {\n e.preventDefault();\n // 使用 functional update 获取最新状态,避免频繁解绑\n setShowInput((prevShow) => {\n if (!prevShow) {\n // 如果当前是关闭状态,检查是否直接跳转\n if (checkIsDirectJump()) {\n // 注意:这里可能取不到最新的 selectedQuerier,如果依赖它,需要调整逻辑\n // 但 checkIsDirectJump 路径下通常走 IP Search 或默认\n // 为简化,此处仅触发打开,或需将 historyPush 移出 effect\n // *修正*: 为了保持原逻辑,这里若 directJump 为 true,我们在 state 变化副作用里处理,或者简单地只设为 true\n // 原逻辑是: 没 showInput -> directJump ? jump : show\n return true;\n }\n return true;\n }\n return prevShow;\n });\n\n // 特殊处理 DirectJump: 如果变为 true 后需要立即跳转,\n // 最好是在点击 button 时判断。快捷键场景下,先打开 Input 也是合理的交互。\n // 如果严格遵循原逻辑,需要在 effect 外部处理 jump。\n if (checkIsDirectJump() && !showInput) {\n // 这里 showInput 是闭包旧值,需小心\n handleHistoryPush();\n setShowInput(false); // 保持关闭\n }\n }\n };\n\n window.addEventListener(\"keydown\", handleGlobalKeyDown);\n return () => window.removeEventListener(\"keydown\", handleGlobalKeyDown);\n }, [checkIsDirectJump, handleHistoryPush]); // 依赖项较少\n\n // 1.2 局部交互监听 (点击外部关闭, ESC) - 仅当 showInput 为 true 时生效\n // istanbul ignore next\n useEffect(() => {\n if (!showInput) return;\n\n // 自动聚焦\n inputRef.current?.focus();\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !e.composedPath().includes(containerRef.current)\n ) {\n setShowInput(false);\n }\n };\n\n const handleEscKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" || e.key === \"Esc\") {\n setShowInput(false);\n }\n };\n\n // 关键修复:添加时使用了 capture: true\n window.addEventListener(\"click\", handleClickOutside, true);\n window.addEventListener(\"keydown\", handleEscKey);\n\n return () => {\n // 关键修复:移除时必须保持 capture: true,否则无法移除\n window.removeEventListener(\"click\", handleClickOutside, true);\n window.removeEventListener(\"keydown\", handleEscKey);\n };\n }, [showInput]);\n\n // --- 核心逻辑优化 2: 数据获取 (Lazy Loading) ---\n\n useEffect(() => {\n // 只有在打开输入框且列表为空时才加载\n if (showInput && querierList.length === 0) {\n const fetchQueriers = async () => {\n const defaultQueriers: Querier[] = [\n {\n type: QuerierTypes.fullText,\n name: t(K.FULL_TEXT_SEARCH),\n disabled: false,\n showInApps: [],\n config: { url: FULL_TEXT_URL, searchPlaceholder: \"\" },\n },\n {\n type: QuerierTypes.ipSearch,\n name: t(K.IP_SEARCH),\n disabled: false,\n showInApps: [],\n config: { url: IP_SEARCH_URL, searchPlaceholder: \"\" },\n },\n {\n type: QuerierTypes.link,\n name: t(K.TICKET_SEARCH),\n disabled: false,\n showInApps: [],\n config: {\n url: ITSM_SEARCH_URL,\n searchPlaceholder: t(K.TICKET_SEARCH_PLACEHOLDER),\n },\n },\n ];\n\n try {\n const res = await InstanceApi_postSearchV3(\"QUERIER_CONFIG@EASYOPS\", {\n page: 1,\n page_size: 100,\n fields: [\"name\", \"type\", \"disabled\", \"config\", \"showInApps\"],\n });\n\n const apiQueriers =\n res.list?.map((item) => {\n const i = item as Querier;\n const config: QuerierConfig = i.config || {\n url: \"\",\n searchPlaceholder: \"\",\n };\n\n if (i.type === QuerierTypes.fullText) config.url = FULL_TEXT_URL;\n else if (i.type === QuerierTypes.ipSearch)\n config.url = IP_SEARCH_URL;\n else if (\n [\n QuerierTypes.instanceSearch,\n QuerierTypes.relationSearch,\n ].includes(i.type)\n ) {\n config.url = `${INSTANCE_SEARCH_URL}${i.name}?q=%{q}%`;\n }\n return { ...i, config };\n }) || [];\n\n setQuerierList(\n apiQueriers.length > 0 ? apiQueriers : defaultQueriers\n );\n } catch {\n setQuerierList(defaultQueriers);\n }\n };\n fetchQueriers();\n }\n }, [showInput, querierList.length]);\n\n // --- 逻辑优化 3: 选项过滤与选中状态 ---\n\n useEffect(() => {\n if (querierList.length === 0) return;\n\n const options = querierList\n .filter(\n (i) =>\n !i.disabled && (!i.showInApps?.length || i.showInApps.includes(appId))\n )\n .map((i) => ({ ...i, label: i.name, value: i.name }));\n\n setQuerierOptions(options);\n\n // 恢复上次选中的 Querier\n const lastSelectedName = STORAGE.getItem(getSelectedQuerierKey());\n const matched = options.find((i) => i.name === lastSelectedName);\n const defaultOption =\n options.find((i) => i.type === QuerierTypes.ipSearch) || options[0];\n\n setSelectedQuerier(matched || defaultOption);\n }, [querierList, appId]);\n\n // 读取历史记录\n useEffect(() => {\n if (selectedQuerier) {\n const historyKey = `${getRecentVisitsKey()}-${selectedQuerier.name}`;\n setVisits(STORAGE.getItem(historyKey) ?? []);\n }\n }, [selectedQuerier]);\n\n // --- 事件处理 ---\n\n const handleQuerierSelect = (val: string) => {\n STORAGE.setItem(getSelectedQuerierKey(), val);\n setSelectedQuerier(querierOptions.find((i) => i.name === val));\n };\n // istanbul ignore next\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && searchKey && selectedQuerier) {\n const historyKey = `${getRecentVisitsKey()}-${selectedQuerier.name}`;\n STORAGE.setItem(historyKey, uniq([searchKey, ...visits].slice(0, 5)));\n handleHistoryPush();\n }\n };\n\n const handleClear = () => setSearchKey(\"\");\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) =>\n setSearchKey(e.target.value);\n\n const handleSearchClick = () => {\n if (checkIsDirectJump()) {\n handleHistoryPush();\n } else {\n setShowInput(true);\n }\n };\n // istanbul ignore next\n const handleHistoryTagClick = (tag: string) => {\n if (selectedQuerier) {\n const historyKey = `${getRecentVisitsKey()}-${selectedQuerier.name}`;\n STORAGE.setItem(historyKey, uniq([tag, ...visits].slice(0, 5)));\n handleHistoryPush(tag);\n }\n };\n\n // 计算 Placeholder\n const getPlaceholder = () => {\n if (selectedQuerier?.config?.searchPlaceholder)\n return selectedQuerier.config.searchPlaceholder;\n if (selectedQuerier?.type === QuerierTypes.ipSearch)\n return t(K.IP_SEARCH_PLACEHOLDER);\n if (selectedQuerier?.type === QuerierTypes.fullText)\n return t(K.FULL_TEXT_SEARCH_PLACEHOLDER);\n return \"\";\n };\n\n return (\n <ConfigProvider\n theme={{\n algorithm:\n currentTheme === \"dark-v2\"\n ? theme.darkAlgorithm\n : theme.defaultAlgorithm,\n }}\n >\n <StyleProvider\n container={shadowRoot as ShadowRoot}\n cache={cache}\n hashPriority=\"high\"\n >\n <div style={{ position: \"relative\" }} ref={containerRef}>\n <div\n className={classNames(\"container\", {\n containerShowInput: showInput,\n inputContentSlideout: showInput === false,\n })}\n onClick={(e) => e.stopPropagation()}\n >\n <div\n className={classNames(\"inputContent\", {\n inputContentSlidein: showInput,\n inputContentSlideout: showInput === false,\n })}\n >\n <div className=\"input-addon-wrapper\">\n <span className=\"input-affix-wrapper\">\n <span className=\"input-before-addon\">\n <Select\n value={selectedQuerier?.value}\n getPopupContainer={(trigger) => trigger.parentElement}\n showSearch\n variant=\"borderless\"\n style={{ width: \"100px\" }}\n options={querierOptions}\n onChange={handleQuerierSelect}\n />\n </span>\n <input\n placeholder={getPlaceholder()}\n ref={inputRef}\n value={searchKey}\n onChange={handleChange}\n onKeyDown={handleInputKeyDown}\n />\n {!!searchKey && (\n <span className=\"input-suffix\">\n <WrappedIcon\n className=\"input-clear-icon\"\n lib=\"antd\"\n icon=\"close-circle\"\n theme=\"filled\"\n onClick={handleClear}\n />\n </span>\n )}\n </span>\n </div>\n </div>\n\n {!showInput && (\n <WrappedToolTip content={t(K.IP_SEARCH_TOOLTIP)} placement=\"left\">\n <WrappedButton\n onClick={handleSearchClick}\n className={classNames(\"button\", {\n buttonSildeint: showInput === false,\n })}\n shape=\"circle\"\n type=\"ghost\"\n buttonStyle={{\n border: \"none\",\n background: \"none\",\n fontSize: \"16px\",\n }}\n icon={{ icon: \"search\", theme: \"outlined\", lib: \"antd\" }}\n />\n </WrappedToolTip>\n )}\n </div>\n\n <div\n className={classNames(\"historySearchContainer\", {\n historySearchContainerSlidein: showInput,\n historySearchContainerSlideout: showInput === false,\n })}\n >\n <div className=\"historySearchContent\">\n <div className=\"latestSearchText\">{t(K.RECENT_SEARCH)}</div>\n <div className=\"latestSearchTagContainer\">\n {visits.map((i) => (\n <span\n key={i}\n className=\"latestSearchTagContent\"\n onClick={() => handleHistoryTagClick(i)}\n >\n <span className=\"latestSearchTagText\" title={i}>\n {i}\n </span>\n </span>\n ))}\n {!visits.length && (\n <div className=\"emptyText\">{t(K.NO_SEARCH_HISTORY)}</div>\n )}\n </div>\n </div>\n <div className=\"quickSearchTip\">{t(K.QUICK_SEARCH_TIP)}</div>\n </div>\n </div>\n </StyleProvider>\n </ConfigProvider>\n );\n}\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, `:host{display:inline-block}:host([hidden]){display:none}.directory-container{background-color:var(--color-fill-global-bg-3)}.directory-container .directory-title-container{margin-bottom:24px;display:flex;align-items:center;justify-content:space-between;gap:8px}.directory-container .directory-title-container .directory-title{font-size:16px;color:var(--text-color-title);line-height:24px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.directory-container .directory-search{display:block;margin-bottom:12px}.directory-container .tree > *:not(:last-child){margin-bottom:8px}.show-suffix-when-hover:not(:hover) .suffix{display:none}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.app-bar-container{height:var(--app-bar-height)}.app-bar{position:relative;z-index:999;box-shadow:var(--top-nav-shadow)}.app-bar.fixed,\n.app-bar.absolute{right:0;left:0;top:0}.app-bar.fixed{position:fixed}.app-bar.absolute{position:absolute}.app-bar-content{display:flex;justify-content:space-between;align-items:center;height:var(--app-bar-height);background-color:var(--top-navigation-bg);padding:0 16px;transition:var(--launchpad-backdrop-transition)}.left{display:flex;flex:1}.right{display:flex;justify-content:end}`, \"\"]);\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, `:host{display:inline-block}:host([hidden]){display:none}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.recent-visits{list-style:none;margin:0;padding:0;display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));max-height:56px;overflow:hidden}.recent-visits span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recent-visits eo-link{display:block;min-width:0}.recent-visits eo-link::part(link){background-color:var(--color-fill-bg-base-1);border-radius:3px;color:var(--color-header-text);display:flex;align-items:center;height:24px;padding:0 8px}.recent-visits eo-link:hover::part(link){color:var(--color-brand-hover)}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.alert{height:32px;padding:0 20px;display:flex;justify-content:center;align-items:center}.text{color:var(--antd-text-color);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon{margin-left:20px;cursor:pointer;color:#8c8c8c}.info{background-color:var(--palette-blue-1)}.warning{background-color:var(--palette-amber-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, `:root{--eo-search-launchpad-menu-icon-color:#8c8c8c}html[data-theme=\"dark\"],\nhtml[data-theme=\"dark-v2\"]{--eo-search-launchpad-menu-icon-color:rgba(255,255,255,0.45)}`, \"\"]);\n// Exports\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, `:host{display:block}:host([hidden]){display:none}.tree-item{min-height:24px;display:flex;align-items:center;-webkit-user-select:none;user-select:none;cursor:pointer;border-radius:3px}.tree-item-indentation{flex-shrink:0}.tree-item-content{min-width:0;flex:1;display:flex;align-items:center}.tree-item-icon,\n.tree-item-expand-button{padding:3px;width:12px;height:12px;font-size:12px;flex-shrink:0}.tree-item-icon,\n.tree-item-label{color:var(--color-header-text)}.tree-item-icon{margin-right:4px}.tree-item-expand-button{margin:0 4px}.tree-item-label{min-width:0;flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.tree-item-suffix{flex-shrink:0}:host([selected]) .tree-item{background-color:var(--palette-blue-1)}:host([faded]) .tree-item-icon,:host([faded]) .tree-item-label{color:var(--color-disabled-text)}:host(:not([selected])) .tree-item:hover .tree-item-icon{color:var(--palette-blue-4)}:host(:not([selected])) .tree-item:hover .tree-item-label{color:var(--palette-blue-4)}`, \"\"]);\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, `:host{display:block;--menu-item-icon-size:20px}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}.menu-group-title{position:relative;display:flex;align-items:center;min-height:36px;padding:8px 12px;line-height:20px;color:var(--left-secondary-text-color);border-radius:var(--larger-border-radius);transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-group-title-icon-container{flex-shrink:0;margin-right:14px;display:flex;align-items:center;justify-content:center;width:var(--menu-item-icon-size);height:var(--menu-item-icon-size);color:var(--left-sidebar-item-collapsed-icon-color);font-size:var(--menu-item-icon-size);transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-group-title-icon{width:1em;height:1em;border-bottom:2px solid var(--left-sidebar-group-border-color)}.menu-group-title-text{flex:1;font-size:12px;overflow:hidden;white-space:nowrap;margin-right:12px}.menu-group-list slot::slotted(*){margin-top:2px}.menu-group-arrow{position:absolute;top:50%;right:12px;width:10px;transform:translateY(-2px);transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1)}.menu-group-arrow::before,\n.menu-group-arrow::after{content:\"\";position:absolute;width:6px;height:1.5px;background-color:currentColor;border-radius:2px;transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1)}.menu-group-arrow::before{transform:rotate(45deg) translateX(2.5px)}.menu-group-arrow::after{transform:rotate(-45deg) translateX(-2.5px)}.menu-group-collapsed .menu-group-arrow{transform:translateY(-50%)}.menu-group-collapsed .menu-group-arrow::before{transform:rotate(-45deg) translateX(2.5px)}.menu-group-collapsed .menu-group-arrow::after{transform:rotate(45deg) translateX(-2.5px)}.menu-group-list{display:grid;grid-template-rows:1fr;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-group-list-inner{overflow:hidden}:host([menu-collapsed]) .menu-group-title{padding:0px calc(50% - var(--menu-item-icon-size) / 2)}:host(:not([menu-collapsed])) .menu-group-title-icon-container{width:0;margin-right:0;opacity:0}:host([menu-collapsed]) .menu-group-title-text{opacity:0}:host([menu-collapsed]) .menu-group-arrow{opacity:0}:host(:not([menu-collapsed])) .menu-group-title-text{white-space:pre-wrap;display:-webkit-inline-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;text-overflow:ellipsis;color:#7f8ba6}:host([collapsable]) .menu-group-collapsed .menu-group-list{grid-template-rows:0fr;opacity:0}`, \"\"]);\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, `:host{display:block;--menu-item-icon-size:20px}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}.menu-submenu-title{position:relative;display:flex;align-items:center;min-height:36px;padding:8px 12px;line-height:20px;color:var(--left-sidebar-item-normal-color);border-radius:var(--larger-border-radius);cursor:pointer;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-submenu-title-icon-container{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:var(--menu-item-icon-size);height:var(--menu-item-icon-size);font-size:var(--menu-item-icon-size);color:var(--left-sidebar-item-collapsed-icon-color)}.menu-submenu-title-text{flex:1;margin-left:14px;margin-right:12px;font-size:14px;overflow:hidden;white-space:nowrap}.menu-submenu-arrow{position:absolute;top:50%;right:12px;width:10px;color:var(--left-sidebar-item-arrow-color);transform:translateY(-2px);transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1)}.menu-submenu-arrow::before,\n.menu-submenu-arrow::after{content:\"\";position:absolute;width:6px;height:1.5px;background-color:currentColor;border-radius:2px;transition:all 0.3s cubic-bezier(0.645,0.045,0.355,1)}.menu-submenu-arrow::before{transform:rotate(45deg) translateX(2.5px)}.menu-submenu-arrow::after{transform:rotate(-45deg) translateX(-2.5px)}.menu-submenu-collapsed .menu-submenu-arrow{transform:translateY(-50%)}.menu-submenu-collapsed .menu-submenu-arrow::before{transform:rotate(-45deg) translateX(2.5px)}.menu-submenu-collapsed .menu-submenu-arrow::after{transform:rotate(45deg) translateX(-2.5px)}.menu-submenu-title:hover{background:var(--left-sidebar-item-hover-bg)}.menu-sub{display:grid;grid-template-rows:1fr;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.menu-submenu-collapsed .menu-sub{grid-template-rows:0fr;opacity:0}.menu-sub-inner{overflow:hidden}.menu-sub-inner slot::slotted(*){margin-top:2px}:host([menu-collapsed]) .menu-submenu-title{padding:0px calc(50% - var(--menu-item-icon-size) / 2)}:host([menu-collapsed]) .menu-submenu-title-text{opacity:0}:host([menu-collapsed]) .menu-submenu-arrow{opacity:0}:host(:not([menu-collapsed])) .menu-submenu-title-text{white-space:pre-wrap;display:-webkit-inline-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;text-overflow:ellipsis}:host([selected]):host([menu-collapsed]) .menu-submenu-title{background:var(--left-sidebar-item-selected-bg);color:var(--left-sidebar-item-selected-color)}:host([selected]):host([collapsed]) .menu-submenu-title{background:var(--left-sidebar-item-selected-bg);color:var(--left-sidebar-item-selected-color)}:host([selected]):host([menu-collapsed]) .menu-submenu-title-icon-container{color:var(--left-sidebar-item-selected-color)}:host([selected]):host([collapsed]) .menu-submenu-title-icon-container{color:var(--left-sidebar-item-selected-color)}:host([selected]):host([menu-collapsed]) .menu-submenu-arrow{color:var(--left-sidebar-item-selected-color)}:host([selected]):host([collapsed]) .menu-submenu-arrow{color:var(--left-sidebar-item-selected-color)}:host([selected]) .menu-submenu-title-text{font-weight:var(--font-weight-500)}`, \"\"]);\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, `:host{display:block}:host([hidden]){display:none}.tree-item{min-height:24px;display:flex;align-items:center;-webkit-user-select:none;user-select:none;cursor:pointer;border-radius:3px}.tree-item-indentation{flex-shrink:0}.tree-item-content{min-width:0;flex:1;display:flex;align-items:center}.tree-item-icon,\n.tree-item-expand-button{padding:3px;position:relative;width:12px;height:12px;font-size:12px;flex-shrink:0}.tree-item-icon,\n.tree-item-label{color:var(--color-header-text)}.tree-item-icon{margin-right:4px}.tree-item-expand-button{margin:0 4px}.tree-item-expand-button .tree-item-expand-arrow{color:var(--color-header-text);width:12px;height:12px;position:absolute;left:50%;top:50%;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.tree-item-label{min-width:0;flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.tree-item-suffix{flex-shrink:0}.tree-item-children{display:grid;grid-template-rows:1fr;transition:all var(--side-bar-collapse-transition-duration) var(--side-bar-collapse-transition-timing-function)}.tree-item-children .tree-item-inner{overflow:hidden}.tree-item-children .tree-item-inner slot::slotted(*){margin-top:8px}:host(:not([expanded])) .tree-item-children{grid-template-rows:0fr;opacity:0}:host([expanded]) .tree-item-expand-arrow{transform:translate(-50%,-50%) rotate(180deg)}:host(:not([expanded])) .tree-item-expand-arrow{transform:translate(-50%,-50%) rotate(90deg)}:host([selectable]) .tree-item-expand-button:hover{background-color:var(--color-fill-bg-base-1)}:host([selectable][selected]) .tree-item{background-color:var(--palette-blue-1)}:host([faded]) .tree-item-icon,:host([faded]) .tree-item-label{color:var(--color-disabled-text)}:host(:not([selected])) .tree-item:hover .tree-item-icon{color:var(--palette-blue-4)}:host(:not([selected])) .tree-item:hover .tree-item-label{color:var(--palette-blue-4)}`, \"\"]);\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, `:host{display:inline-block}:host([hidden]){display:none}.container{position:relative;width:32px;height:32px}.containerShowInput{width:500px}.inputContent{background:rgba(204,209,219,0.3);border-radius:3px;height:30px;position:absolute;right:0;width:0px;overflow:hidden}.inputContentSlidein{overflow:visible;animation:slidein 0.4s ease-in-out forwards}.inputContentSlideout{width:500px;animation:slideout 0.4s 0.2s ease-in-out forwards}input{flex:1;padding:0;margin:0;border:none;outline:none;font-size:14px;line-height:20px;color:inherit;background-color:transparent;cursor:inherit;width:100%}select{border:none;outline:none;width:150px;background:transparent}input:focus{border:none!important}input::placeholder{color:var(--color-disabled-text)}.button{position:absolute;right:0;top:0}.buttonSildeint{opacity:0;animation:btnSlidein 0.1ms 0.6s ease-in-out forwards}@keyframes btnSlidein{from{opacity:0}to{opacity:1}}@keyframes slidein{from{width:0px}to{width:500px}}@keyframes slideout{from{width:500px}to{width:0px}}.input-addon-wrapper{display:table;width:100%;line-height:22px}.input-affix-wrapper{display:inline-flex;position:relative;padding-bottom:4px;width:100%;transition:border-color 0.3s,box-shadow 0.3s;overflow:visible}.input-suffix,\n.input-before-addon{display:flex;flex:none;align-items:center;margin-left:4px;margin-right:4px;width:16px}.input-before-addon{width:100px}.input-clear-icon{margin-left:4px;font-size:12px;color:var(--text-color-disabled);cursor:pointer}.input-clear-icon:hover{color:var(--antd-text-color-secondary)}.historySearchContainer{width:500px;height:160px;box-shadow:0px 2px 6px 0px rgba(0,0,0,0.15);background-color:var(--antd-dropdown-menu-bg);top:35px;position:absolute;height:0px;right:0;overflow:hidden;border-radius:6px;z-index:1000}.historySearchContainerSlidein{top:35px;animation:historySlidein 0.4s 0.2s ease-in-out forwards}.historySearchContainerSlideout{animation:historySlideout 0.4s ease-in-out forwards}@keyframes historySlidein{from{height:0px}to{height:160px}}@keyframes historySlideout{from{height:160px}to{height:0px}}.quickSearchTip{width:140px;height:17px;font-family:PingFangSC,PingFang SC;font-weight:400;font-size:12px;color:var(--color-auxiliary-text);line-height:17px;text-align:left;font-style:normal;padding:8px 16px 8px 16px;width:484px;border-top:1px solid var(--color-border-divider-line)}.historySearchContent{height:103px;padding:16px 16px 8px 16px;overflow:auto}.latestSearchText{width:56px;height:20px;font-family:PingFangSC,PingFang SC;font-weight:400;font-size:14px;color:var(--local-card-description-color);line-height:20px;text-align:left;font-style:normal;margin-bottom:10px}.latestSearchTagText{height:17px;font-family:PingFangSC,PingFang SC;font-weight:400;font-size:14px;color:var(--color-strong-text);line-height:17px;text-align:center;font-style:normal;white-space:nowrap}.latestSearchTagContainer{display:flex;flex-wrap:wrap;row-gap:8px;column-gap:10px}.latestSearchTagContent{height:20px;background:var(--color-fill-bg-base-1);border-radius:3px;padding:1.5px 8px;cursor:pointer;max-width:480px;overflow:hidden;text-overflow:ellipsis}.emptyText{color:var(--text-color-secondary);text-align:center;width:100%}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","toString","locals","defineElement","property","createDecorators","WrappedMenuItem","wrapBrick","WrappedPopover","onVisibleChange","onBeforeVisibleChange","RenderMenuItemCom","props","item","isSubMenu","topData","React","SubMenuItemCom","_extends","isGroup","GroupMenuItemCom","SimpleMenuItemCom","index","hidden","showTooltip","selectedKey","className","key","title","text","active","includes","renderLinkCom","width","mainMenuTitleStyle","scrollWidth","handlePopupVisibleChange","event","paddingRight","window","innerWidth","document","body","clientWidth","style","detail","overflow","touchAction","_ref","_item$items","items","length","classnames","subprime","arrow","trigger","placement","distance","anchorDisplay","strategy","slot","renderSpanCom","map","innerItem","_ref2","_item$items2","childLayout","ThreeLevelMenuCom","SitMapMenCom","_ref3","_item$items3","ThreeLevelMenuPopoverContent","menuItem","_ref4","_item$items4","visible","setVisible","useState","onClick","e","stopPropagation","SiteMapItem","menuGroup","_NavMenu","_A","WeakMap","_B","_C","NavMenu","ReactNextElement","constructor","arguments","_classPrivateFieldInitSpec","_init_menu","_init_extra_menu","_init_mainMenuTitleStyle","_init_extra_mainMenuTitleStyle","_init_showTooltip","_init_extra_showTooltip","menu","_classPrivateFieldGet","v","_classPrivateFieldSet","render","NavMenuComponent","this","history","getHistory","navMenuWrapperRef","useRef","location","setLocation","overflowIndex","setOverflowIndex","Number","MAX_SAFE_INTEGER","pathname","search","menuItems","useMemo","_menu$menuItems","filter","_items","type","selectedKeys","initMenuItemAndMatchCurrentPathKeys","useEffect","unListen","listen","current","resizeObserver","ResizeObserver","_navMenuWrapperRef$cu","getClientRects","childNodes","wrapperWidth","i","childWidth","height","childHeight","observe","disconnect","overflowMenu","slice","ref","_items2","isHidden","name","_NavMenu2","c","_initClass","_applyDecs","styleTexts","SiteMapStyleText","ItemTagStyleText","GroupItemStyleText","styleText","attribute","Boolean","initializeReactI18n","NS","locales","_LaunchpadButton","LaunchpadButton","LaunchpadButtonComponent","_LaunchpadButton2","lockBodyScroll","unwrapProvider","_EoLaunchpadButtonV","EoLaunchpadButtonV2","disconnectedCallback","super","EoLaunchpadButtonV2Component","host","initialized","setInitialized","setActive","toggleLaunchpad","previous","hotkeys","preventDefault","unbind","_getRuntime","deferredLaunchpadInfo","schedulePrefetch","deferredFavorites","getRuntime","getFeatureFlags","deferredPlatformCategories","role","classNames","LaunchpadSvg","Launchpad","_EoLaunchpadButtonV2","platformCategoryStyleText","launchpadStyleText","WrappedIcon","WrappedLink","WrappedDropdownActions","onActionClick","MenuGroup","_data$type","data","actions","variant","urlTemplate","customUrlTemplate","onMenuItemClick","dropdownActive","setDropdownActive","filteredActions","__secret_internals","legacyDoTransform","checkIfByTransform","handleActionClick","useCallback","action","empty","blocked","allBlocked","getLocaleName","lib","icon","MenuItemFolder","instanceId","MenuItem","_data$menuIcon","__pathname","disabled","linkUrl","parseUrlTemplate","urlObject","URL","url","origin","tooltip","menuIcon","pick","expanded","setExpanded","toggle","prefix","fallback","_urlTemplate$replace","replace","_match","encodeURIComponent","String","get","trim","BASE_PATH","_LaunchpadConfig","_D","_E","_F","_G","_LaunchpadConfig_brand","WeakSet","_H","_handleMenuItemClick","_onActionClick","LaunchpadConfig","_classPrivateMethodInitSpec","_init_menuGroups","_init_extra_menuGroups","_init_actions","_init_extra_actions","_init_variant","_init_extra_variant","_init_urlTemplate","_init_extra_urlTemplate","_init_customUrlTemplate","_init_extra_customUrlTemplate","_init_blacklist","_init_extra_blacklist","_init_menuItemClickEvent","_init_extra_menuItemClickEvent","_init_actionClickEvent","_init_extra_actionClickEvent","_classPrivateGetter","_get_menuItemClickEvent","emit","_get_actionClickEvent","menuGroups","blacklist","_this$variant","LaunchpadConfigComponent","processedMenuGroup","group","getMenuItemWithBlockInfo","blockable","some","hasBlocked","hasUnblocked","every","blockableUrls","flatMap","_blockableUrls","blockableUrl","_getMenuGroupsWithout","getMenuItemWithoutBlockedItems","getMenuGroupsWithoutBlockedItems","subItems","subItem","auth","isBlockedPath","isBlockedHref","_blockableUrls2","startsWith","urlObj","substring","undefined","getBlockableUrl","_LaunchpadConfig2","_set_menuItemClickEvent","_set_actionClickEvent","o","_","has","_checkInRHS","_EasyopsNavbarAlerts","EasyopsNavbarAlerts","EasyopsNavbarAlertsComponent","_EasyopsNavbarAlerts2","storage","JsonStorage","localStorage","licenseHide","setLienceseHide","slowRender","setSlowRender","currentApp","useCurrentApp","licenseDismissedKey","getAuth","org","licenseDaysLeft","_authInfo$license","authInfo","validDaysLeft","license","dismissExpireAt","isAdmin","getItem","moment","unix","handelRouteRender","renderTime","loadTime","loadInfoPage","getMiscSettings","isBuildPush","millisecondToSecond","suggestTime","suggestUrl","addEventListener","removeEventListener","handleLicenseAlertDismiss","setItem","Alert","link","label","closable","onClose","href","target","millisecond","Math","floor","_EoLaunchpadQuickAcce","EoLaunchpadQuickAccess","_init_readonly","_init_extra_readonly","_init_target","_init_extra_target","readonly","EoLaunchpadQuickAccessComponent","favorites","loadingFavorites","pushRecentVisit","toggleStar","isStarred","useLaunchpadInfo","LaunchpadsContext","Provider","value","searching","SidebarMenuItem","_EoLaunchpadQuickAccess","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","K","en","SEARCH_PLACEHOLDER","zh","_EoSearchLaunchpad","EoSearchLaunchpad","EoSearchLaunchpadComponent","searchInputRef","handleClickSearchBox","_searchInputRef$curre","focus","loading","q","setQ","t","useTranslation","handleSearch","clearSearch","placeholder","onChange","onFocus","onBlur","theme","onMouseDown","Loading","spinning","_EoSearchLaunchpad2","_EoLaunchpadRecentVis","EoLaunchpadRecentVisits","EoLaunchpadRecentVisitsComponent","recentVisits","_EoLaunchpadRecentVisits","_EoAppBarWrapper","EoAppBarWrapper","_init_isFixed","_init_extra_isFixed","_init_position","_init_extra_position","_init_displayCenter","_init_extra_displayCenter","_init_extraAppBarContentStyle","_init_extra_extraAppBarContentStyle","isFixed","position","displayCenter","extraAppBarContentStyle","EoAppBarWrapperComponent","mainElement","getElementById","iframeMainElement","marginTop","justifyContent","_EoAppBarWrapper2","alias","WrappedBreadcrumb","WrappedBreadcrumbItem","_EoFrameBreadcrumb","EoFrameBreadcrumb","_init_breadcrumb","_init_extra_breadcrumb","_init_noCurrentApp","_init_extra_noCurrentApp","breadcrumb","noCurrentApp","EoFrameBreadcrumbComponent","_curAppBreadcrumb$ite","_props$breadcrumb","_props$noCurrentApp","navConfig","useNavConfig","curAppBreadcrumb","currentAppBreadcrumbItems","getRealValue","breadcrumbItems","useCurrentMenuTitle","to","homepage","internal","localeName","_EoFrameBreadcrumb2","_EoSidebarMenuItem","EoSidebarMenuItem","_init_url","_init_extra_url","_init_href","_init_extra_href","_init_icon","_init_extra_icon","_init_selected","_init_extra_selected","_init_inSubmenu","_init_extra_inSubmenu","_init_menuCollapsed","_init_extra_menuCollapsed","selected","inSubmenu","menuCollapsed","EoSidebarMenuItemComponent","imgStyle","_EoSidebarMenuItem2","sidebarMenuItemTagNameSet","Set","useUpdateMenuCollapsedState","slotRef","updateChildrenMenuCollapsedState","_slotRef$current","assignedElements","forEach","ele","element","tagName","slotElem","handleSlotchange","SIDE_BAR_HAS_BEEN_USED","SIDE_BAR_EXPAND_STATE","SIDE_BAR_RESIZE_WIDTH","ExpandedState","sideBarWidth","parseInt","getCssPropertyValue","sideBarCollapsedWidth","SidebarMenuContext","createContext","openedKeys","matchedKeys","WrappedSidebarMenu","WrappedSidebarMenuItem","WrappedSidebarMenuGroup","WrappedSidebarMenuSubmenu","MenuSimpleItem","useContext","top","isSelected","collapsable","MenuSubmenu","collapsed","SidebarMenu","expandedState","Collapsed","_EoSidebarMenuGroup","_handleCollapseChang","EoSidebarMenuGroup","_init_collapsable","_init_extra_collapsable","_init_collapsed","_init_extra_collapsed","EoSidebarMenuGroupComponent","onCollapseChange","titleRef","handleClick","titleElem","_EoSidebarMenuGroup2","_EoSidebarMenuSubmenu","EoSidebarMenuSubmenu","EoSidebarMenuSubmenuComponent","_EoSidebarMenuSubmenu2","_EoSidebarMenu","EoSidebarMenu","EoSidebarMenuComponent","_EoSidebarMenu2","xmlns","viewBox","fill","fillRule","d","UNPIN_NAVIGATION","FIXED_NAVIGATION","CLICK_TO_FIX_NAVIGATION","WrappedTooltip","_EoSidebar","_EoSidebar_brand","_handleActualWidthChange","_handleExpandedStateChange","EoSidebar","_init_hiddenFixedIcon","_init_extra_hiddenFixedIcon","_init_expandedState","_init_extra_expandedState","_init_actualWidthChangeEvent","_init_extra_actualWidthChangeEvent","actualWidth","_get_actualWidthChangeEvent","_init_expandedStateChangeEvent","_init_extra_expandedStateChangeEvent","state","_get_expandedStateChangeEvent","hiddenFixedIcon","EoSidebarComponent","onActualWidthChange","onExpandedStateChange","showUserDefinedIcon","isFirstUsedTooltip","setIsFirstUsedTooltip","showContentShadow","setShowContentShadow","dragging","setDragging","setExpandedState","titleIcon","contentBottomPlaceholderRef","observer","IntersectionObserver","entries","entry","isIntersecting","threshold","Expanded","expandedWidth","setExpandedWidth","memorizedWidth","isNaN","containerRef","handleMouseEnter","newState","Hovered","handleMouseLeave","sidebarActualWidth","getContainerWidth","inner","container","content","handleFixedIconClick","FixedSvg","display","ToFixedSvg","_containerRef$current","_containerRef$current2","cancelable","offsetX","getBoundingClientRect","left","drag","debounceByAnimationFrame","x","clientX","dragEnd","passive","_EoSidebar2","_set_actualWidthChangeEvent","_set_expandedStateChangeEvent","WrappedMenu","WrappedMenuGroup","WrapperMenuItemSubMenu","WrappedLinkItem","_EoSidebarSubMenu","EoSidebarSubMenu","EoSidebarSubMenuComponent","setSelectedKey","setOpenedKeys","setSelected","getMenuItemIndent","_item$key","split","renderMenuItem","titleStyle","paddingLeft","bodyStyle","renderSubMenuItem","renderGroupMenuItem","renderSimpleMenuItem","mode","_EoSidebarSubMenu2","_EoDirectory","_EoDirectory_brand","_menuItemClick","_suffixIconClick","EoDirectory","_init_directoryTitle","_init_extra_directoryTitle","_init_menuItems","_init_extra_menuItems","_init_hideRightBorder","_init_extra_hideRightBorder","_init_suffixBrick","_init_extra_suffixBrick","_init_defaultSelectedKeys","_init_extra_defaultSelectedKeys","_init_suffixIconClickEvent","_init_extra_suffixIconClickEvent","_get_suffixIconClickEvent","directoryTitle","hideRightBorder","suffixBrick","defaultSelectedKeys","EoDirectoryComponent","suffixIconClick","menuItemClick","_item$children","useBrick","ReactUseMultipleBricks","suffixIcon","suffixIconTooltip","suffixIconDisabled","children","child","groupKey","_EoDirectory2","_set_suffixIconClickEvent","DirectoryTreeContext","expandedKeysSet","selectedKeysSet","onExpand","onSelect","useDirectoryTreeContext","WrappedTreeLeaf","WrappedTreeInternalNode","TreeLeaf","treeData","depth","nodeData","faded","keys","node","when","TreeInternalNode","internalNodeSelectable","selectable","add","delete","TreeNode","Array","isArray","Tree","getAllExpandableKeys","reduce","pre","cur","concat","getExpandableKeysAccordingToSelectedKeys","_cur$children","childrenMatched","childrenExpandableKeys","searchTree","searchFields","expandedKeys","lowerQ","toLowerCase","_expandedKeys","_data","selfMatched","field","getSearchKeywords","matchItem","childrenSearchResult","filteredChildren","result","isNil","Object","prototype","call","k","flat","Infinity","method","WrappedSearch","onSearch","_EoDirectoryTree","_I","_J","_EoDirectoryTree_brand","_handleExpand","_K","_handleSelect","EoDirectoryTree","_initProto","_init_data","_init_extra_data","_init_internalNodeSelectable","_init_extra_internalNodeSelectable","_init_searchable","_init_extra_searchable","_init_placeholder","_init_extra_placeholder","_init_searchFields","_init_extra_searchFields","_init_selectedKeys","_init_extra_selectedKeys","_init_expandedKeys","_init_extra_expandedKeys","_init_expandEvent","_init_extra_expandEvent","_get_expandEvent","_init_selectEvent","_init_extra_selectEvent","_get_selectEvent","searchable","expandAll","collapseAll","expandAccordingToSelectedKeys","EoDirectoryTreeComponent","searchedData","treeItems","flattenList","dig","list","parent","treeItem","pos","flattenData","getFlattenTreeData","_EoDirectoryTree2","_set_expandEvent","_set_selectEvent","WrappedEoIcon","_EoDirectoryTreeLeaf","_EoDirectoryTreeLeaf_brand","EoDirectoryTreeLeaf","_init_depth","_init_extra_depth","_init_faded","_init_extra_faded","EoDirectoryTreeLeafComponent","treeItemRef","suffixRef","handleSelect","suffix","handleSuffixClick","_EoDirectoryTreeLeaf2","_EoDirectoryTreeInter","_EoDirectoryTreeInternalNode_brand","EoDirectoryTreeInternalNode","_init_expanded","_init_extra_expanded","_init_selectable","_init_extra_selectable","EoDirectoryTreeInternalNodeComponent","expandBottomRef","expandBottom","handleExpand","Arrow","_EoDirectoryTreeInternalNode","_NavLogo","NavLogo","NavLogoComponent","brand","getBrandSettings","logoNode","menu_bar_logo_url","src","category","menu_bar_logo_no_link","_NavLogo2","VIEW_DETAILS","DISMISS","showNotification","ignoredInstanceIds","_PollAnnounce","_PollAnnounce_brand","_handleClose","_handleOpen","PollAnnounce","_init_pollEnabled","_init_extra_pollEnabled","_init_realTimeMessage","_init_extra_realTimeMessage","_init_closeEvent","_init_extra_closeEvent","_get_closeEvent","_init_openEvent","_init_extra_openEvent","_get_openEvent","pollEnabled","realTimeMessage","PollAnnounceComponent","onOpen","async","openNotification","htmlMessage","color","styles","message","showConfirm","confirmText","i18n","confirmLink","showCancel","cancelText","AnnounceApi_ignoreAnnounce","instanceIds","console","error","AnnounceApi_listEffectiveAnnounce","isPopup","reverse","listEffectiveAnnounce","ignored","pollAnnounce","AnnounceApi_pollAnnounce","interceptorParams","ignoreLoadingBar","_err$toLowerCase","err","httpErrorToString","_PollAnnounce2","_set_closeEvent","_set_openEvent","allowedAppProps","smartDisplayForMenuTitle","i18nNamespace","overrideApp","isEvaluable","precooked","appUsage","usedProperties","hasNonStaticUsage","preevaluate","withParent","hooks","beforeVisitGlobal","beforeVisitGlobalMember","attemptToVisitGlobals","prop","globals","getFixedT","suppliedGlobals","supply","computable","hasOwnProperty","cook","expression","source","globalVariables","initializeMenuI18n","menuList","menuWithI18n","menuI18nBundles","_menu$i18n","menuI18nNamespace","menuId","app","appId","lang","resources","addResourceBundle","set","dispose","ns","removeResourceBundle","symbolMenuI18nNamespace","Symbol","symbolOverrideApp","DEFAULT_ICON","getIcon","imgSrc","processGroupInject","injectWithMenus","_processGroupInject","foundInjectingMenus","groupId","injectingMenu","reorderMenuItems","sortBy","_item$sort","sort","sortMenuItems","customElements","define","createProviderClass","_smartDisplayForMenuT2","mainMenu","find","validMenuList","Map","_menu$items","dynamicItems","itemsResolve","injectMenuGroupId","injectingMenus","firstLevelItems","tree","__keys","getChildren","prefixKey","j","_smartDisplayForMenuT","initializeI18n","FULL_TEXT_SEARCH","IP_SEARCH","TICKET_SEARCH","TICKET_SEARCH_PLACEHOLDER","IP_SEARCH_PLACEHOLDER","FULL_TEXT_SEARCH_PLACEHOLDER","IP_SEARCH_TOOLTIP","RECENT_SEARCH","NO_SEARCH_HISTORY","QUICK_SEARCH_TIP","STORAGE","FULL_TEXT_URL","IP_SEARCH_URL","WrappedButton","WrappedToolTip","_QuerySearch","QuerySearch","QuerySearchComponent","shadowRoot","_QuerySearch2","QuerierTypes","getOrgId","_auth$getAuth","getRecentVisitsKey","getSelectedQuerierKey","_getRuntime$getCurren","inputRef","getCurrentApp","currentTheme","useCurrentTheme","showInput","setShowInput","searchKey","setSearchKey","visits","setVisits","querierList","setQuerierList","querierOptions","setQuerierOptions","selectedQuerier","setSelectedQuerier","cache","createCache","checkIsDirectJump","_shadowRoot$host","parentWidth","parentElement","documentElement","handleHistoryPush","_selectedQuerier$conf","targetUrl","config","cleanUrl","queryTerm","replaceAll","handleGlobalKeyDown","test","navigator","userAgent","metaKey","ctrlKey","prevShow","_inputRef$current","handleClickOutside","composedPath","handleEscKey","defaultQueriers","fullText","showInApps","searchPlaceholder","ipSearch","_res$list","apiQueriers","InstanceApi_postSearchV3","page","page_size","fields","instanceSearch","relationSearch","fetchQueriers","_i$showInApps","lastSelectedName","matched","defaultOption","_STORAGE$getItem","historyKey","ConfigProvider","algorithm","darkAlgorithm","defaultAlgorithm","StyleProvider","hashPriority","containerShowInput","inputContentSlideout","inputContentSlidein","Select","getPopupContainer","showSearch","val","_selectedQuerier$conf2","onKeyDown","uniq","handleClear","handleSearchClick","buttonSildeint","shape","buttonStyle","border","background","fontSize","historySearchContainerSlidein","historySearchContainerSlideout","tag","handleHistoryTagClick","getPlaceholder"],"sourceRoot":""}
|