mobx-view-model-devtools 0.0.42 → 0.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- !function(){"use strict";try{if("undefined"!=typeof document){var t=document.createElement("style");t.appendChild(document.createTextNode('.vmPopup_0hkGL{position:fixed!important;z-index:999999;width:520px;border-radius:8px;height:calc(100vh - 24px);width:calc(100vw - 34px);max-width:520px;box-shadow:0 5px 20px #0006}.vmPopup_0hkGL.dragging_bOvPC{transition:none;cursor:grabbing;opacity:.8;z-index:1000}.vmPopup_0hkGL[data-position=top-right]{top:12px;right:12px}.vmPopup_0hkGL[data-position=top-left]{top:12px;left:12px}.vmPopup_0hkGL[data-position=bottom-left]{bottom:12px;left:12px}.vmPopup_0hkGL[data-position=bottom-right]{bottom:12px;right:12px}.closePopupButton_igv9j{width:28px;height:28px;padding:6px;border:0;background:transparent;color:var(--vmd-base-color);display:flex;align-items:center;justify-content:center}html:has(.dragging_bOvPC) *{-webkit-user-select:none!important;user-select:none!important}.vmButton_esipO{position:fixed;z-index:999999;width:36px;height:36px;border-radius:8px;transition:all .15s ease-in-out;cursor:pointer;-webkit-user-select:none;user-select:none}.vmButton_esipO.dragging_kUMCE{transition:none;cursor:grabbing;opacity:.8;z-index:1000}.vmButton_esipO.opened_NYAFW{opacity:0!important;pointer-events:none}.vmButton_esipO[data-position=top-right]{top:12px;right:12px}.vmButton_esipO[data-position=top-left]{top:12px;left:12px}.vmButton_esipO[data-position=bottom-left]{bottom:12px;left:12px}.vmButton_esipO[data-position=bottom-right]{bottom:12px;right:12px}.vmButton_esipO>img{pointer-events:none;position:absolute;inset:0;border-radius:8px}.vmButton_esipO>div{transition:all .15s ease-in-out;position:absolute;inset:0;border-radius:8px;border:2px solid #00000057}.vmButton_esipO:not(.isConnected_eObxX){filter:grayscale(1)}.vmButton_esipO>.vmsCount_HhX1W{left:-4px;top:-4px;pointer-events:none;position:absolute;display:flex;border-radius:8px;background:#005c26cf;padding:2px;font-weight:600;font-size:12px;line-height:12px;color:#2aff0a}.vmButton_esipO>.keyboardHint_v8eo0{position:absolute;bottom:-3px;left:-2px;z-index:99999;font-family:monospace;font-weight:700!important;font-size:10px;line-height:10px;background:#1b3b00bf;color:#73ff00d4;letter-spacing:-1px;border-radius:2px}html:has(.dragging_kUMCE) *{-webkit-user-select:none!important;user-select:none!important}.iconToggleButton_R48wm{display:flex;align-items:center;gap:2px;position:relative;height:20px;outline:none;border-radius:4px;-webkit-backdrop-filter:blur(var(--vmd-control-blur));backdrop-filter:blur(var(--vmd-control-blur))}.activePosition_IXsRn{position:absolute;height:16px;width:16px;padding:1px;box-sizing:content-box!important;background:var(--vmd-control-active-bg);-webkit-backdrop-filter:blur(var(--vmd-base-blur));backdrop-filter:blur(var(--vmd-base-blur));border-radius:4px;transition:all 149ms ease;transform:translate(calc(20px * var(--index)))}.option_a5IcR{padding:1px;z-index:1;width:18px;height:18px;display:flex;align-items:center;justify-content:center;transition:all 149ms ease;color:var(--vmd-control-inactive-color)}.option_a5IcR.active_6QS-2{color:var(--vmd-control-active-color)}.option_a5IcR>svg{width:14px;height:14px}:root{--vmd-base-blur: 4px;--vmd-bg: #0c0a19e6;--vmd-overlay-bg: #0e1227bd;--vmd-base-color: #ccc;--vmd-control-active-bg: #e6e6e682;--vmd-control-active-color: #181818;--vmd-control-active-text-input-color: var(--vmd-base-color);--vmd-control-active-text-input-placeholder-color: #a3a3a3;--vmd-control-inactive-color: #8b8b8b;--vmd-control-border: #5b5468a6;--vmd-control-bg: transparent;--vmd-control-blur: 2px;--vmd-bg-transparent: #1f1c2600;--vmd-content-bg: transparent;--vmd-content-highlight-bg: #ffffff0a;--vmd-scrollbar-track-size: 8px;--vmd-scrollbar-bg-base: #81818170;--vmd-scrollbar-bg-active: #818181;--vmd-property-meta-color: #616161;--vmd-primary-bg: #0f6013;--vmd-primary-color: #5ab65e;--vmd-secondary-bg: #6b6902;--vmd-edit-content-color: #97503c;--vmd-header-height: 60px}.root_Xsw1F{display:contents;box-sizing:border-box}.root_Xsw1F *{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:14px;box-sizing:border-box}.root_Xsw1F button{outline:none;background:transparent;border:0;cursor:pointer;margin:0;padding-block:0;padding-inline:0;color:var(--vmd-base-color)}.hierarchyButton_h3FD7{width:18px;height:18px;padding:2px;border-radius:6px}.hierarchyButton_h3FD7.active_4JTx5{background:#f0f0f01f}.treeItemHeader_9gR6Q{display:flex;align-items:center;gap:4px;margin:auto 0;cursor:pointer;z-index:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.treeItemLabel_eiMgP{padding:0 4px;border-radius:4px}.treeItemMetaText_cmfX0{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.treeItem_sRXPA{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:pre;height:22px;display:flex;flex-direction:row;align-items:center;padding-left:calc(8px + (var(--level) * 20px));position:sticky;top:calc(var(--vmd-header-height) + var(--vmd-control-panel-height));z-index:1}.treeItem_sRXPA:hover{background:var(--vmd-content-highlight-bg)}.treeItem_sRXPA:not([data-fitted=true])>header{opacity:.6}.vmTreeItem_t-7jc .treeItemLabel_eiMgP{background:var(--vmd-primary-bg)}.vmTreeItem_t-7jc .treeItemMetaText_cmfX0{color:var(--vmd-primary-color)}.extraTreeItem_z3KA1 .treeItemLabel_eiMgP{background:var(--vmd-secondary-bg)}.expandButton_B24E3{color:#a0a0a0;opacity:1!important;width:16px;height:16px;font-weight:700;cursor:pointer}.expandButton_B24E3.expanded_8-pD6{color:#b8b8b8;transform:rotate(90deg)}.expandButton_B24E3.disabled_MBq1Q{opacity:.35!important}.vmContentVirtualizedContent_LtS91{overflow:hidden}.vmContent_TIK57[data-simplebar]{position:relative;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start;color:var(--vmd-base-color);background:var(--vmd-bg);-webkit-backdrop-filter:blur(var(--vmd-base-blur));backdrop-filter:blur(var(--vmd-base-blur));display:flex;flex-direction:column;overflow:auto;overflow-y:auto;scrollbar-width:thin;overflow-anchor:none}.vmContent_TIK57[data-simplebar] .simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.vmContent_TIK57[data-simplebar] .simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;inset:0;width:auto!important;height:auto!important;z-index:0}.vmContent_TIK57[data-simplebar] .simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;inset:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.vmContent_TIK57[data-simplebar] .simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;max-width:100%;max-height:100%;overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.vmContent_TIK57[data-simplebar] .simplebar-content-wrapper::-webkit-scrollbar,.vmContent_TIK57[data-simplebar] .simplebar-hide-scrollbar::-webkit-scrollbar{display:none;width:0;height:0}.vmContent_TIK57[data-simplebar] .simplebar-content:after,.vmContent_TIK57[data-simplebar] .simplebar-content:before{content:" ";display:table}.vmContent_TIK57[data-simplebar] .simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.vmContent_TIK57[data-simplebar] .simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0}.vmContent_TIK57[data-simplebar] .simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.vmContent_TIK57[data-simplebar] .simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}.vmContent_TIK57[data-simplebar].simplebar-dragging,.vmContent_TIK57[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vmContent_TIK57[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.vmContent_TIK57[data-simplebar] .simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.vmContent_TIK57[data-simplebar] .simplebar-scrollbar:before{position:absolute;content:"";background:var(--vmd-scrollbar-bg-base);border-radius:7px;left:2px;right:2px;opacity:0;transition:opacity .2s .5s linear}.vmContent_TIK57[data-simplebar] .simplebar-scrollbar.simplebar-visible:before{opacity:.5;transition-delay:0s;transition-duration:0s}.vmContent_TIK57[data-simplebar] .simplebar-track.simplebar-vertical{top:0;width:var(--vmd-scrollbar-track-size)}.vmContent_TIK57[data-simplebar] .simplebar-scrollbar:before{inset:2px}.vmContent_TIK57[data-simplebar] .simplebar-track.simplebar-horizontal{left:0;height:var(--vmd-scrollbar-track-size)}.vmContent_TIK57[data-simplebar] .simplebar-track.simplebar-horizontal .simplebar-scrollbar{inset:0 auto 0 0;min-height:0;min-width:10px;width:auto}.vmContent_TIK57[data-simplebar] .simplebar-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:scrollbar!important}.vmContent_TIK57[data-simplebar] .simplebar-dummy-scrollbar-size>div{width:200%;height:200%;margin:10px 0}.vmContent_TIK57[data-simplebar] .simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}.vmContentHeader_M1JNM{display:flex;flex-direction:column;height:var(--vmd-header-height);flex:none;padding:0 8px;position:sticky;top:0;z-index:2}.vmContentHeaderLogo_FRJDO{width:16px;margin-right:6px}.vmContentHeaderTitle_lYmde{display:flex;justify-content:space-between;align-items:center;flex:none;font-weight:600;z-index:1}.vmContentHeaderTitleText_RlIFH{font-size:16px;margin-right:auto}.vmContentControlPanel_CgUN9{width:100%;height:var(--vmd-control-panel-height);padding-bottom:4px;flex:none;display:flex;flex-direction:row;z-index:1;gap:4px;overflow:hidden;padding-right:6px}.vmContentControlPanel_CgUN9.searchIsActive_cJutI>.vmContentControlPanelActions_lONbA{margin-left:-106px}.vmContentControlPanelActions_lONbA{display:flex;flex-direction:row;align-items:center;gap:6px;transition:all .15s ease}.hiearchyToggleButton_0FTG-{display:flex}.vmContentInput_29GM1{display:flex;position:relative;flex:1;-webkit-backdrop-filter:blur(var(--vmd-control-blur));backdrop-filter:blur(var(--vmd-control-blur))}.vmContentInput_29GM1>svg{position:absolute;width:16px;inset:50% 0;transform:translate(6px,-50%);pointer-events:none;opacity:.7}.vmContentInput_29GM1>input{background:var(--vmd-control-bg);border:1px solid var(--vmd-control-border);color:var(--vmd-control-active-text-input-color);border-radius:4px;outline:0;width:100%;padding:3px 26px;font-size:14px;text-overflow:ellipsis}.vmContentInput_29GM1>input::placeholder{color:var(--vmd-control-active-text-input-placeholder-color)}.inputGhost_J-ksi{position:absolute;inset:0;display:flex;align-items:center;padding:3px 26px;font-size:14px;pointer-events:none;white-space:pre;overflow:hidden;z-index:0}.inputGhostTyped_UxVAJ{color:transparent;white-space:pre}.inputGhostSuggestion_Ys7F3{color:var(--vmd-control-active-text-input-placeholder-color);white-space:pre;opacity:.7}.vmContentInput_29GM1>input.inputWithSuggestion_C9PIe{background:transparent}.vmContentInput_29GM1>button{position:absolute;right:6px;width:16px;transform:translate(4px,-50%);top:50%;opacity:.6;display:none}.vmContentInput_29GM1.filled_6JZa0>svg{opacity:.9}.vmContentInput_29GM1.filled_6JZa0>button{display:block}.gradientBlur_-y-re{position:absolute;top:0;left:0;width:100%;height:calc(100% + 6px);pointer-events:none;background:linear-gradient(to bottom,var(--vmd-overlay-bg) 0%,rgba(0,0,0,0) 100%)}.gradientBlur_-y-re:before{content:"";position:absolute;inset:0;background:transparent;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);-webkit-mask:linear-gradient(to bottom,var(--vmd-overlay-bg) 50%,rgba(0,0,0,0) 100%);mask:linear-gradient(to bottom,var(--vmd-overlay-bg) 50%,rgba(0,0,0,0) 100%)}[data-list-item-operations]{position:relative;right:12px;display:flex;align-items:center;margin-left:auto;gap:4px;width:0;transition:all .15s ease;overflow:hidden}*:has(>[data-list-item-operations]):hover>[data-list-item-operations]{width:auto}[data-list-item-operation]:active{transform:scale(.9)}.property_sD8FG{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:pre;background:var(--vmd-content-bg);height:22px;display:flex;flex-direction:row;align-items:center;position:relative;color:var(--vmd-property-meta-color);padding-left:calc(0px + 28px + (var(--level) * 15px))}.property_sD8FG:hover,.property_sD8FG.isEditMode_S3NAq{background:var(--vmd-content-highlight-bg)}.property_sD8FG.expandable_np03F{cursor:pointer}.property_sD8FG>span{flex:1;overflow:hidden;text-overflow:ellipsis;padding-right:12px;display:flex;flex-direction:row}.property_sD8FG[data-fitted=false]{opacity:.5}.property_sD8FG.instance_jv3IW{--value-color: rgb(190 113 195)}.property_sD8FG.primitive_v6LAV.boolean_Z6znK,.property_sD8FG.primitive_v6LAV.number_U9H45,.property_sD8FG.primitive_v6LAV.object_bHf4I,.property_sD8FG.primitive_v6LAV.bigint_HkgX8,.property_sD8FG.primitive_v6LAV.symbol_oKSwT{--value-color: rgb(89, 153, 205)}.property_sD8FG.primitive_v6LAV.undefined_6CapW,.property_sD8FG.primitive_v6LAV.null_lugoL{--value-color: #499098}.primitive_v6LAV.string_87vm1{--value-color: #af7249}.propertyName_KicXG{color:#ccc}.propertyMeta_Ia9ce{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.propertyValue_fYO2g{color:var(--value-color, var(--vmd-property-meta-color));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.propertyValue_fYO2g:has(+.propertyName_KicXG){margin-right:4px}.property_sD8FG.isEditMode_S3NAq>[data-list-item-operations]{width:auto}.editContent_WSktI{min-width:180px;flex:none;text-overflow:ellipsis;background:transparent;color:var(--vmd-edit-content-color);outline:0;border:1px solid var(--vmd-control-active-text-input-color);border-radius:4px;padding:0 4px}.notifications_50ZEK{position:absolute;z-index:1000;padding:4px;border-radius:4px;background:var(--vmd-control-border);-webkit-backdrop-filter:blur(var(--vmd-base-blur));backdrop-filter:blur(var(--vmd-base-blur));right:8px;left:4px;top:4px;display:flex;flex-direction:column;gap:4px}@keyframes notification-fade-out_1FHX2{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}.notification_Yxzo-{animation:notification-fade-out_1FHX2 .25s ease forwards}')),document.head.appendChild(t)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}}();
1
+ !function(){"use strict";try{if("undefined"!=typeof document){var t=document.createElement("style");t.appendChild(document.createTextNode('.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL{position:fixed!important;z-index:999999;width:520px;border-radius:8px;height:calc(100vh - 24px);width:calc(100vw - 34px);max-width:520px;box-shadow:0 5px 20px #0006}.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.dragging_bOvPC.dragging_bOvPC.dragging_bOvPC.dragging_bOvPC.dragging_bOvPC{transition:none;cursor:grabbing;opacity:.8;z-index:1000}.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL[data-position=top-right]{top:12px;right:12px}.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL[data-position=top-left]{top:12px;left:12px}.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL[data-position=bottom-left]{bottom:12px;left:12px}.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL.vmPopup_0hkGL[data-position=bottom-right]{bottom:12px;right:12px}.closePopupButton_igv9j.closePopupButton_igv9j.closePopupButton_igv9j.closePopupButton_igv9j.closePopupButton_igv9j{width:28px;height:28px;padding:6px;border:0;background:transparent;color:var(--vmd-base-color);display:flex;align-items:center;justify-content:center}html:has(.dragging_bOvPC.dragging_bOvPC.dragging_bOvPC.dragging_bOvPC.dragging_bOvPC) *{-webkit-user-select:none!important;user-select:none!important}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO{position:fixed;z-index:999999;width:36px;height:36px;border-radius:8px;transition:all .15s ease-in-out;cursor:pointer;-webkit-user-select:none;user-select:none}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.dragging_kUMCE.dragging_kUMCE.dragging_kUMCE.dragging_kUMCE.dragging_kUMCE{transition:none;cursor:grabbing;opacity:.8;z-index:1000}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.opened_NYAFW.opened_NYAFW.opened_NYAFW.opened_NYAFW.opened_NYAFW{opacity:0!important;pointer-events:none}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO[data-position=top-right]{top:12px;right:12px}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO[data-position=top-left]{top:12px;left:12px}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO[data-position=bottom-left]{bottom:12px;left:12px}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO[data-position=bottom-right]{bottom:12px;right:12px}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO>img{pointer-events:none;position:absolute;inset:0;border-radius:8px}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO>div{transition:all .15s ease-in-out;position:absolute;inset:0;border-radius:8px;border:2px solid #00000057}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO:not(.isConnected_eObxX.isConnected_eObxX.isConnected_eObxX.isConnected_eObxX.isConnected_eObxX){filter:grayscale(1)}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO>.vmsCount_HhX1W.vmsCount_HhX1W.vmsCount_HhX1W.vmsCount_HhX1W.vmsCount_HhX1W{left:-4px;top:-4px;pointer-events:none;position:absolute;display:flex;border-radius:8px;background:#005c26cf;padding:2px;font-weight:600;font-size:12px;line-height:12px;color:#2aff0a}.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO.vmButton_esipO>.keyboardHint_v8eo0.keyboardHint_v8eo0.keyboardHint_v8eo0.keyboardHint_v8eo0.keyboardHint_v8eo0{position:absolute;bottom:-3px;left:-2px;z-index:99999;font-family:monospace;font-weight:700!important;font-size:10px;line-height:10px;background:#1b3b00bf;color:#73ff00d4;letter-spacing:-1px;border-radius:2px}html:has(.dragging_kUMCE.dragging_kUMCE.dragging_kUMCE.dragging_kUMCE.dragging_kUMCE) *{-webkit-user-select:none!important;user-select:none!important}.iconToggleButton_R48wm.iconToggleButton_R48wm.iconToggleButton_R48wm.iconToggleButton_R48wm.iconToggleButton_R48wm{display:flex;align-items:center;gap:2px;position:relative;height:20px;outline:none;border-radius:4px;-webkit-backdrop-filter:blur(var(--vmd-control-blur));backdrop-filter:blur(var(--vmd-control-blur))}.activePosition_IXsRn.activePosition_IXsRn.activePosition_IXsRn.activePosition_IXsRn.activePosition_IXsRn{position:absolute;height:16px;width:16px;padding:1px;box-sizing:content-box!important;background:var(--vmd-control-active-bg);-webkit-backdrop-filter:blur(var(--vmd-base-blur));backdrop-filter:blur(var(--vmd-base-blur));border-radius:4px;transition:all 149ms ease;transform:translate(calc(20px * var(--index)))}.option_a5IcR.option_a5IcR.option_a5IcR.option_a5IcR.option_a5IcR{padding:1px;z-index:1;width:18px;height:18px;display:flex;align-items:center;justify-content:center;transition:all 149ms ease;color:var(--vmd-control-inactive-color)}.option_a5IcR.option_a5IcR.option_a5IcR.option_a5IcR.option_a5IcR.active_6QS-2.active_6QS-2.active_6QS-2.active_6QS-2.active_6QS-2{color:var(--vmd-control-active-color)}.option_a5IcR.option_a5IcR.option_a5IcR.option_a5IcR.option_a5IcR>svg{width:14px;height:14px}:root{--vmd-base-blur: 4px;--vmd-bg: #0c0a19e6;--vmd-overlay-bg: #0e1227bd;--vmd-base-color: #ccc;--vmd-control-active-bg: #e6e6e682;--vmd-control-active-color: #181818;--vmd-control-active-text-input-color: var(--vmd-base-color);--vmd-control-active-text-input-placeholder-color: #a3a3a3;--vmd-control-inactive-color: #8b8b8b;--vmd-control-border: #5b5468a6;--vmd-control-bg: transparent;--vmd-control-blur: 2px;--vmd-bg-transparent: #1f1c2600;--vmd-content-bg: transparent;--vmd-content-highlight-bg: #ffffff1c;--vmd-scrollbar-track-size: 8px;--vmd-scrollbar-bg-base: #81818170;--vmd-scrollbar-bg-active: #818181;--vmd-property-meta-color: #616161;--vmd-primary-bg: #0f6013;--vmd-primary-color: #5ab65e;--vmd-secondary-bg: #6b6902;--vmd-edit-content-color: #97503c;--vmd-header-height: 60px}.root_Xsw1F.root_Xsw1F.root_Xsw1F.root_Xsw1F.root_Xsw1F{display:contents;box-sizing:border-box}.root_Xsw1F.root_Xsw1F.root_Xsw1F.root_Xsw1F.root_Xsw1F *{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:14px;box-sizing:border-box}.root_Xsw1F.root_Xsw1F.root_Xsw1F.root_Xsw1F.root_Xsw1F button{outline:none;background:transparent;border:0;cursor:pointer;margin:0;padding-block:0;padding-inline:0;color:var(--vmd-base-color)}.hierarchyButton_h3FD7.hierarchyButton_h3FD7.hierarchyButton_h3FD7.hierarchyButton_h3FD7.hierarchyButton_h3FD7{width:18px;height:18px;padding:2px;border-radius:6px}.hierarchyButton_h3FD7.hierarchyButton_h3FD7.hierarchyButton_h3FD7.hierarchyButton_h3FD7.hierarchyButton_h3FD7.active_4JTx5.active_4JTx5.active_4JTx5.active_4JTx5.active_4JTx5{background:#f0f0f01f}.treeItemHeader_9gR6Q.treeItemHeader_9gR6Q.treeItemHeader_9gR6Q.treeItemHeader_9gR6Q.treeItemHeader_9gR6Q{display:flex;align-items:center;gap:4px;margin:auto 0;cursor:pointer;z-index:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.treeItemLabel_eiMgP.treeItemLabel_eiMgP.treeItemLabel_eiMgP.treeItemLabel_eiMgP.treeItemLabel_eiMgP{padding:0 4px;border-radius:4px}.treeItemMetaText_cmfX0.treeItemMetaText_cmfX0.treeItemMetaText_cmfX0.treeItemMetaText_cmfX0.treeItemMetaText_cmfX0{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.treeItem_sRXPA.treeItem_sRXPA.treeItem_sRXPA.treeItem_sRXPA.treeItem_sRXPA{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:pre;height:22px;display:flex;flex-direction:row;align-items:center;padding-left:calc(8px + (var(--level) * 20px));position:sticky;top:calc(var(--vmd-header-height) + var(--vmd-control-panel-height));z-index:1}.treeItem_sRXPA.treeItem_sRXPA.treeItem_sRXPA.treeItem_sRXPA.treeItem_sRXPA:hover{background:var(--vmd-content-highlight-bg)}.treeItem_sRXPA.treeItem_sRXPA.treeItem_sRXPA.treeItem_sRXPA.treeItem_sRXPA:not([data-fitted=true])>header{opacity:.6}.vmTreeItem_t-7jc.vmTreeItem_t-7jc.vmTreeItem_t-7jc.vmTreeItem_t-7jc.vmTreeItem_t-7jc .treeItemLabel_eiMgP.treeItemLabel_eiMgP.treeItemLabel_eiMgP.treeItemLabel_eiMgP.treeItemLabel_eiMgP{background:var(--vmd-primary-bg)}.vmTreeItem_t-7jc.vmTreeItem_t-7jc.vmTreeItem_t-7jc.vmTreeItem_t-7jc.vmTreeItem_t-7jc .treeItemMetaText_cmfX0.treeItemMetaText_cmfX0.treeItemMetaText_cmfX0.treeItemMetaText_cmfX0.treeItemMetaText_cmfX0{color:var(--vmd-primary-color)}.extraTreeItem_z3KA1.extraTreeItem_z3KA1.extraTreeItem_z3KA1.extraTreeItem_z3KA1.extraTreeItem_z3KA1 .treeItemLabel_eiMgP.treeItemLabel_eiMgP.treeItemLabel_eiMgP.treeItemLabel_eiMgP.treeItemLabel_eiMgP{background:var(--vmd-secondary-bg)}.expandButton_B24E3.expandButton_B24E3.expandButton_B24E3.expandButton_B24E3.expandButton_B24E3{color:#a0a0a0;opacity:1!important;width:16px;height:16px;font-weight:700;cursor:pointer}.expandButton_B24E3.expandButton_B24E3.expandButton_B24E3.expandButton_B24E3.expandButton_B24E3.expanded_8-pD6.expanded_8-pD6.expanded_8-pD6.expanded_8-pD6.expanded_8-pD6{color:#b8b8b8;transform:rotate(90deg)}.expandButton_B24E3.expandButton_B24E3.expandButton_B24E3.expandButton_B24E3.expandButton_B24E3.disabled_MBq1Q.disabled_MBq1Q.disabled_MBq1Q.disabled_MBq1Q.disabled_MBq1Q{opacity:.35!important}.vmContentVirtualizedContent_LtS91.vmContentVirtualizedContent_LtS91.vmContentVirtualizedContent_LtS91.vmContentVirtualizedContent_LtS91.vmContentVirtualizedContent_LtS91{overflow:hidden}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar]{position:relative;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start;color:var(--vmd-base-color);background:var(--vmd-bg);-webkit-backdrop-filter:blur(var(--vmd-base-blur));backdrop-filter:blur(var(--vmd-base-blur));display:flex;flex-direction:column;overflow:auto;overflow-y:auto;scrollbar-width:thin;overflow-anchor:none}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;inset:0;width:auto!important;height:auto!important;z-index:0}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;inset:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;max-width:100%;max-height:100%;overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-content-wrapper::-webkit-scrollbar,.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-hide-scrollbar::-webkit-scrollbar{display:none;width:0;height:0}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-content:after,.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-content:before{content:" ";display:table}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar].simplebar-dragging,.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-scrollbar:before{position:absolute;content:"";background:var(--vmd-scrollbar-bg-base);border-radius:7px;left:2px;right:2px;opacity:0;transition:opacity .2s .5s linear}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-scrollbar.simplebar-visible:before{opacity:.5;transition-delay:0s;transition-duration:0s}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-track.simplebar-vertical{top:0;width:var(--vmd-scrollbar-track-size)}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-scrollbar:before{inset:2px}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-track.simplebar-horizontal{left:0;height:var(--vmd-scrollbar-track-size)}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-track.simplebar-horizontal .simplebar-scrollbar{inset:0 auto 0 0;min-height:0;min-width:10px;width:auto}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:scrollbar!important}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-dummy-scrollbar-size>div{width:200%;height:200%;margin:10px 0}.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57.vmContent_TIK57[data-simplebar] .simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}.vmContentHeader_M1JNM.vmContentHeader_M1JNM.vmContentHeader_M1JNM.vmContentHeader_M1JNM.vmContentHeader_M1JNM{display:flex;flex-direction:column;height:var(--vmd-header-height);flex:none;padding:0 8px;position:sticky;top:0;z-index:2}.vmContentHeaderLogo_FRJDO.vmContentHeaderLogo_FRJDO.vmContentHeaderLogo_FRJDO.vmContentHeaderLogo_FRJDO.vmContentHeaderLogo_FRJDO{width:16px;margin-right:6px}.vmContentHeaderTitle_lYmde.vmContentHeaderTitle_lYmde.vmContentHeaderTitle_lYmde.vmContentHeaderTitle_lYmde.vmContentHeaderTitle_lYmde{display:flex;justify-content:space-between;align-items:center;flex:none;font-weight:600;z-index:1}.vmContentHeaderTitleText_RlIFH.vmContentHeaderTitleText_RlIFH.vmContentHeaderTitleText_RlIFH.vmContentHeaderTitleText_RlIFH.vmContentHeaderTitleText_RlIFH{font-size:16px;margin-right:auto}.vmContentControlPanel_CgUN9.vmContentControlPanel_CgUN9.vmContentControlPanel_CgUN9.vmContentControlPanel_CgUN9.vmContentControlPanel_CgUN9{width:100%;height:var(--vmd-control-panel-height);padding-bottom:4px;flex:none;display:flex;flex-direction:row;z-index:1;gap:4px;overflow:hidden;padding-right:6px}.vmContentControlPanel_CgUN9.vmContentControlPanel_CgUN9.vmContentControlPanel_CgUN9.vmContentControlPanel_CgUN9.vmContentControlPanel_CgUN9.searchIsActive_cJutI.searchIsActive_cJutI.searchIsActive_cJutI.searchIsActive_cJutI.searchIsActive_cJutI>.vmContentControlPanelActions_lONbA.vmContentControlPanelActions_lONbA.vmContentControlPanelActions_lONbA.vmContentControlPanelActions_lONbA.vmContentControlPanelActions_lONbA{margin-left:-106px}.vmContentControlPanelActions_lONbA.vmContentControlPanelActions_lONbA.vmContentControlPanelActions_lONbA.vmContentControlPanelActions_lONbA.vmContentControlPanelActions_lONbA{display:flex;flex-direction:row;align-items:center;gap:6px;transition:all .15s ease}.hiearchyToggleButton_0FTG-.hiearchyToggleButton_0FTG-.hiearchyToggleButton_0FTG-.hiearchyToggleButton_0FTG-.hiearchyToggleButton_0FTG-{display:flex}.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1{display:flex;position:relative;flex:1;-webkit-backdrop-filter:blur(var(--vmd-control-blur));backdrop-filter:blur(var(--vmd-control-blur))}.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1>svg{position:absolute;width:16px;inset:50% 0;transform:translate(6px,-50%);pointer-events:none;opacity:.7}.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1>input{background:var(--vmd-control-bg);border:1px solid var(--vmd-control-border);color:var(--vmd-control-active-text-input-color);border-radius:4px;outline:0;width:100%;padding:3px 26px;font-size:14px;text-overflow:ellipsis}.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1>input::placeholder{color:var(--vmd-control-active-text-input-placeholder-color)}.inputGhost_J-ksi.inputGhost_J-ksi.inputGhost_J-ksi.inputGhost_J-ksi.inputGhost_J-ksi{position:absolute;inset:0;display:flex;align-items:center;padding:3px 26px;font-size:14px;pointer-events:none;white-space:pre;overflow:hidden;z-index:0}.inputGhostTyped_UxVAJ.inputGhostTyped_UxVAJ.inputGhostTyped_UxVAJ.inputGhostTyped_UxVAJ.inputGhostTyped_UxVAJ{color:transparent;white-space:pre}.inputGhostSuggestion_Ys7F3.inputGhostSuggestion_Ys7F3.inputGhostSuggestion_Ys7F3.inputGhostSuggestion_Ys7F3.inputGhostSuggestion_Ys7F3{color:var(--vmd-control-active-text-input-placeholder-color);white-space:pre;opacity:.7}.inputSuggestions_5btGB.inputSuggestions_5btGB.inputSuggestions_5btGB.inputSuggestions_5btGB.inputSuggestions_5btGB{position:absolute;left:35px;top:calc(100% - 10px);display:flex;align-items:flex-start;font-size:14px;white-space:pre;z-index:3}.inputSuggestionsList_3Gl-h.inputSuggestionsList_3Gl-h.inputSuggestionsList_3Gl-h.inputSuggestionsList_3Gl-h.inputSuggestionsList_3Gl-h{min-width:120px;max-width:320px;padding:3px;border:1px solid var(--vmd-control-border);border-radius:5px;background:var(--vmd-control-bg);box-shadow:0 6px 18px #00000059;overflow:hidden;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.inputSuggestionItem_GcQXp.inputSuggestionItem_GcQXp.inputSuggestionItem_GcQXp.inputSuggestionItem_GcQXp.inputSuggestionItem_GcQXp{display:flex;align-items:baseline;cursor:pointer;gap:6px;padding:1px 2px;border-radius:3px;color:var(--vmd-control-active-text-input-placeholder-color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inputSuggestionOwner_cMrNk.inputSuggestionOwner_cMrNk.inputSuggestionOwner_cMrNk.inputSuggestionOwner_cMrNk.inputSuggestionOwner_cMrNk{flex:none;max-width:90px;font-size:10px;line-height:1;overflow:hidden;text-overflow:ellipsis;background:var(--vmd-primary-bg);color:#fff;padding:2px;direction:rtl;border-radius:3px;opacity:.85}.inputSuggestionValue_6fYPI.inputSuggestionValue_6fYPI.inputSuggestionValue_6fYPI.inputSuggestionValue_6fYPI.inputSuggestionValue_6fYPI{overflow:hidden;text-overflow:ellipsis}.inputSuggestionItem_GcQXp.inputSuggestionItem_GcQXp.inputSuggestionItem_GcQXp.inputSuggestionItem_GcQXp.inputSuggestionItem_GcQXp.selected_OPRUb.selected_OPRUb.selected_OPRUb.selected_OPRUb.selected_OPRUb{color:var(--vmd-control-active-text-input-color);background:var(--vmd-content-highlight-bg)}.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1>input.inputWithSuggestion_C9PIe.inputWithSuggestion_C9PIe.inputWithSuggestion_C9PIe.inputWithSuggestion_C9PIe.inputWithSuggestion_C9PIe{background:transparent}.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1>button{position:absolute;right:6px;width:16px;transform:translate(4px,-50%);top:50%;opacity:.6;display:none}.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.filled_6JZa0.filled_6JZa0.filled_6JZa0.filled_6JZa0.filled_6JZa0>svg{opacity:.9}.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.vmContentInput_29GM1.filled_6JZa0.filled_6JZa0.filled_6JZa0.filled_6JZa0.filled_6JZa0>button{display:block}.gradientBlur_-y-re.gradientBlur_-y-re.gradientBlur_-y-re.gradientBlur_-y-re.gradientBlur_-y-re{position:absolute;top:0;left:0;width:100%;height:calc(100% + 6px);pointer-events:none;background:linear-gradient(to bottom,var(--vmd-overlay-bg) 0%,rgba(0,0,0,0) 100%)}.gradientBlur_-y-re.gradientBlur_-y-re.gradientBlur_-y-re.gradientBlur_-y-re.gradientBlur_-y-re:before{content:"";position:absolute;inset:0;background:transparent;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);-webkit-mask:linear-gradient(to bottom,var(--vmd-overlay-bg) 50%,rgba(0,0,0,0) 100%);mask:linear-gradient(to bottom,var(--vmd-overlay-bg) 50%,rgba(0,0,0,0) 100%)}[data-list-item-operations]{position:relative;right:12px;display:flex;align-items:center;margin-left:auto;gap:4px;width:0;transition:all .15s ease;overflow:hidden}*:has(>[data-list-item-operations]):hover>[data-list-item-operations]{width:auto}[data-list-item-operation]:active{transform:scale(.9)}.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:pre;background:var(--vmd-content-bg);height:22px;display:flex;flex-direction:row;align-items:center;position:relative;color:var(--vmd-property-meta-color);padding-left:calc(0px + 28px + (var(--level) * 15px))}.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG:hover,.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.isEditMode_S3NAq.isEditMode_S3NAq.isEditMode_S3NAq.isEditMode_S3NAq.isEditMode_S3NAq{background:var(--vmd-content-highlight-bg)}.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.expandable_np03F.expandable_np03F.expandable_np03F.expandable_np03F.expandable_np03F{cursor:pointer}.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG>span{flex:1;overflow:hidden;text-overflow:ellipsis;padding-right:12px;display:flex;flex-direction:row}.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG[data-fitted=false]{opacity:.5}.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.instance_jv3IW.instance_jv3IW.instance_jv3IW.instance_jv3IW.instance_jv3IW{--value-color: rgb(190 113 195)}.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.boolean_Z6znK.boolean_Z6znK.boolean_Z6znK.boolean_Z6znK.boolean_Z6znK,.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.number_U9H45.number_U9H45.number_U9H45.number_U9H45.number_U9H45,.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.object_bHf4I.object_bHf4I.object_bHf4I.object_bHf4I.object_bHf4I,.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.bigint_HkgX8.bigint_HkgX8.bigint_HkgX8.bigint_HkgX8.bigint_HkgX8,.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.symbol_oKSwT.symbol_oKSwT.symbol_oKSwT.symbol_oKSwT.symbol_oKSwT{--value-color: rgb(89, 153, 205)}.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.undefined_6CapW.undefined_6CapW.undefined_6CapW.undefined_6CapW.undefined_6CapW,.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.null_lugoL.null_lugoL.null_lugoL.null_lugoL.null_lugoL{--value-color: #499098}.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.primitive_v6LAV.string_87vm1.string_87vm1.string_87vm1.string_87vm1.string_87vm1{--value-color: #af7249}.propertyName_KicXG.propertyName_KicXG.propertyName_KicXG.propertyName_KicXG.propertyName_KicXG{color:#ccc}.propertyMeta_Ia9ce.propertyMeta_Ia9ce.propertyMeta_Ia9ce.propertyMeta_Ia9ce.propertyMeta_Ia9ce{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.propertyValue_fYO2g.propertyValue_fYO2g.propertyValue_fYO2g.propertyValue_fYO2g.propertyValue_fYO2g{color:var(--value-color, var(--vmd-property-meta-color));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.propertyValue_fYO2g.propertyValue_fYO2g.propertyValue_fYO2g.propertyValue_fYO2g.propertyValue_fYO2g:has(+.propertyName_KicXG.propertyName_KicXG.propertyName_KicXG.propertyName_KicXG.propertyName_KicXG){margin-right:4px}.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.property_sD8FG.isEditMode_S3NAq.isEditMode_S3NAq.isEditMode_S3NAq.isEditMode_S3NAq.isEditMode_S3NAq>[data-list-item-operations]{width:auto}.editContent_WSktI.editContent_WSktI.editContent_WSktI.editContent_WSktI.editContent_WSktI{min-width:180px;flex:none;text-overflow:ellipsis;background:transparent;color:var(--vmd-edit-content-color);outline:0;border:1px solid var(--vmd-control-active-text-input-color);border-radius:4px;padding:0 4px}.notifications_50ZEK.notifications_50ZEK.notifications_50ZEK.notifications_50ZEK.notifications_50ZEK{position:absolute;z-index:1000;padding:4px;border-radius:4px;background:var(--vmd-control-border);-webkit-backdrop-filter:blur(var(--vmd-base-blur));backdrop-filter:blur(var(--vmd-base-blur));right:8px;left:4px;top:4px;display:flex;flex-direction:column;gap:4px}@keyframes notification-fade-out_1FHX2{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}.notification_Yxzo-.notification_Yxzo-.notification_Yxzo-.notification_Yxzo-.notification_Yxzo-{animation:notification-fade-out_1FHX2 .25s ease forwards}')),document.head.appendChild(t)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}}();
2
2
  var __create = Object.create;
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -10892,11 +10892,11 @@ function requireReactDom_development() {
10892
10892
  selectedValue["$" + selectedValues[i]] = true;
10893
10893
  }
10894
10894
  for (var _i = 0; _i < options2.length; _i++) {
10895
- var selected = selectedValue.hasOwnProperty("$" + options2[_i].value);
10896
- if (options2[_i].selected !== selected) {
10897
- options2[_i].selected = selected;
10895
+ var selected2 = selectedValue.hasOwnProperty("$" + options2[_i].value);
10896
+ if (options2[_i].selected !== selected2) {
10897
+ options2[_i].selected = selected2;
10898
10898
  }
10899
- if (selected && setDefaultSelected) {
10899
+ if (selected2 && setDefaultSelected) {
10900
10900
  options2[_i].defaultSelected = true;
10901
10901
  }
10902
10902
  }
@@ -38024,7 +38024,7 @@ function getAllKeys(instance2) {
38024
38024
  }
38025
38025
  currentPrototype = nextPrototype;
38026
38026
  }
38027
- return Array.from(keysSet);
38027
+ return [...keysSet];
38028
38028
  }
38029
38029
  class MetaListItem extends ListItem {
38030
38030
  constructor(devtools, key, content, _depth) {
@@ -38480,9 +38480,14 @@ const vmContentInput = "vmContentInput_29GM1";
38480
38480
  const inputGhost = "inputGhost_J-ksi";
38481
38481
  const inputGhostTyped = "inputGhostTyped_UxVAJ";
38482
38482
  const inputGhostSuggestion = "inputGhostSuggestion_Ys7F3";
38483
+ const inputSuggestions = "inputSuggestions_5btGB";
38484
+ const inputSuggestionsList = "inputSuggestionsList_3Gl-h";
38485
+ const inputSuggestionItem = "inputSuggestionItem_GcQXp";
38486
+ const inputSuggestionOwner = "inputSuggestionOwner_cMrNk";
38487
+ const inputSuggestionValue = "inputSuggestionValue_6fYPI";
38488
+ const selected = "selected_OPRUb";
38483
38489
  const inputWithSuggestion = "inputWithSuggestion_C9PIe";
38484
38490
  const filled = "filled_6JZa0";
38485
- const vmContentVirtualScroll = "vmContentVirtualScroll_TVyLu";
38486
38491
  const gradientBlur = "gradientBlur_-y-re";
38487
38492
  const css$2 = {
38488
38493
  expandButton,
@@ -38501,9 +38506,14 @@ const css$2 = {
38501
38506
  inputGhost,
38502
38507
  inputGhostTyped,
38503
38508
  inputGhostSuggestion,
38509
+ inputSuggestions,
38510
+ inputSuggestionsList,
38511
+ inputSuggestionItem,
38512
+ inputSuggestionOwner,
38513
+ inputSuggestionValue,
38514
+ selected,
38504
38515
  inputWithSuggestion,
38505
38516
  filled,
38506
- vmContentVirtualScroll,
38507
38517
  gradientBlur
38508
38518
  };
38509
38519
  const ExpandButton = ({
@@ -38639,7 +38649,6 @@ const MetaListItemRender = observer(
38639
38649
  className: cx(css$1.property, css$1.primitive),
38640
38650
  style: { "--level": item.depth },
38641
38651
  "data-fitted": item.devtools.searchEngine.isItemFitted(item),
38642
- title: item.stringifiedData,
38643
38652
  "data-depth": item.depthLine,
38644
38653
  children: item.content
38645
38654
  },
@@ -39738,14 +39747,13 @@ const skipEvent = (e) => {
39738
39747
  };
39739
39748
  const FunctionPropertyContent = observer(
39740
39749
  ({ item }) => {
39741
- const argLabels = Array.from(
39742
- { length: item.data.length },
39750
+ const argLabels = [...Array(item.data.length)].map(
39743
39751
  (_14, i) => `arg${i + 1}`
39744
39752
  );
39745
39753
  return /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV(jsxDevRuntimeExports.Fragment, { children: [
39746
39754
  /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV("span", { className: css$1.propertyName, children: item.property }, void 0, false, {
39747
39755
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/list-items/property-list-item-render/function.tsx",
39748
- lineNumber: 15,
39756
+ lineNumber: 14,
39749
39757
  columnNumber: 9
39750
39758
  }, void 0),
39751
39759
  item.isEditMode ? /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV(jsxDevRuntimeExports.Fragment, { children: [
@@ -39763,7 +39771,7 @@ const FunctionPropertyContent = observer(
39763
39771
  false,
39764
39772
  {
39765
39773
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/list-items/property-list-item-render/function.tsx",
39766
- lineNumber: 19,
39774
+ lineNumber: 18,
39767
39775
  columnNumber: 13
39768
39776
  },
39769
39777
  void 0
@@ -39771,12 +39779,12 @@ const FunctionPropertyContent = observer(
39771
39779
  `)`
39772
39780
  ] }, void 0, true, {
39773
39781
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/list-items/property-list-item-render/function.tsx",
39774
- lineNumber: 17,
39782
+ lineNumber: 16,
39775
39783
  columnNumber: 11
39776
39784
  }, void 0) : `(${argLabels.join(", ")})`
39777
39785
  ] }, void 0, true, {
39778
39786
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/list-items/property-list-item-render/function.tsx",
39779
- lineNumber: 14,
39787
+ lineNumber: 13,
39780
39788
  columnNumber: 7
39781
39789
  }, void 0);
39782
39790
  }
@@ -39929,7 +39937,6 @@ const PropertyListItemRender = observer(
39929
39937
  }),
39930
39938
  style: { "--level": item.depth, "--order": item.order },
39931
39939
  "data-fitted": item.devtools.searchEngine.isItemFitted(item),
39932
- title: item.stringifiedData,
39933
39940
  onClick: (e) => item.devtools.handlePropertyClick(item, e),
39934
39941
  "data-depth": item.depthLine,
39935
39942
  children: [
@@ -39938,12 +39945,12 @@ const PropertyListItemRender = observer(
39938
39945
  item.extraContent
39939
39946
  ] }, void 0, true, {
39940
39947
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/list-items/property-list-item-render/index.tsx",
39941
- lineNumber: 62,
39948
+ lineNumber: 61,
39942
39949
  columnNumber: 9
39943
39950
  }, void 0),
39944
39951
  /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV(ListItemOperations, { item }, void 0, false, {
39945
39952
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/list-items/property-list-item-render/index.tsx",
39946
- lineNumber: 66,
39953
+ lineNumber: 65,
39947
39954
  columnNumber: 9
39948
39955
  }, void 0)
39949
39956
  ]
@@ -40185,7 +40192,7 @@ const Notifications = withViewModel(NotificationsVM, ({ model }) => {
40185
40192
  if (!model.items.size) {
40186
40193
  return null;
40187
40194
  }
40188
- return /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV("div", { className: css.notifications, children: Array.from(model.items.values()).map((item) => /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV("div", { className: css.notification, children: item.title }, item.id, false, {
40195
+ return /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV("div", { className: css.notifications, children: [...model.items.values()].map((item) => /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV("div", { className: css.notification, children: item.title }, item.id, false, {
40189
40196
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/notifications/index.tsx",
40190
40197
  lineNumber: 13,
40191
40198
  columnNumber: 9
@@ -40336,6 +40343,8 @@ const VmDevtoolsContent = withViewModel(
40336
40343
  value: devtools.searchEngine.searchText,
40337
40344
  onChange: devtools.searchEngine.handleSearchInput,
40338
40345
  onKeyDown: devtools.searchEngine.handleKeyDown,
40346
+ onFocus: devtools.searchEngine.handleSearchInputFocus,
40347
+ onBlur: devtools.searchEngine.handleSearchInputBlur,
40339
40348
  placeholder: devtools.searchEngine.suggestionSuffix ? "" : "search by property path or ViewModel name",
40340
40349
  className: devtools.searchEngine.suggestionSuffix ? css$2.inputWithSuggestion : void 0
40341
40350
  },
@@ -40350,11 +40359,11 @@ const VmDevtoolsContent = withViewModel(
40350
40359
  ),
40351
40360
  /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV("button", { onClick: devtools.searchEngine.resetSearch, children: /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV(Xmark, {}, void 0, false, {
40352
40361
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/index.tsx",
40353
- lineNumber: 108,
40362
+ lineNumber: 110,
40354
40363
  columnNumber: 17
40355
40364
  }, void 0) }, void 0, false, {
40356
40365
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/index.tsx",
40357
- lineNumber: 107,
40366
+ lineNumber: 109,
40358
40367
  columnNumber: 15
40359
40368
  }, void 0)
40360
40369
  ]
@@ -40367,7 +40376,61 @@ const VmDevtoolsContent = withViewModel(
40367
40376
  columnNumber: 13
40368
40377
  },
40369
40378
  void 0
40370
- )
40379
+ ),
40380
+ devtools.searchEngine.shouldShowSuggestions && /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV("div", { className: css$2.inputSuggestions, "aria-hidden": "true", children: [
40381
+ /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV("span", { className: css$2.inputGhostTyped, children: devtools.searchEngine.searchText }, void 0, false, {
40382
+ fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/index.tsx",
40383
+ lineNumber: 115,
40384
+ columnNumber: 19
40385
+ }, void 0),
40386
+ /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV("div", { className: css$2.inputSuggestionsList, children: devtools.searchEngine.suggestionItems.map((suggestion, index) => /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV(
40387
+ "div",
40388
+ {
40389
+ onMouseEnter: () => {
40390
+ devtools.searchEngine.selectSuggestionAtIndex(index);
40391
+ },
40392
+ onMouseDown: (e) => {
40393
+ e.preventDefault();
40394
+ devtools.searchEngine.applySuggestionFromClick(
40395
+ suggestion,
40396
+ index
40397
+ );
40398
+ },
40399
+ className: cx(
40400
+ css$2.inputSuggestionItem,
40401
+ index === devtools.searchEngine.selectedSuggestionIndex && css$2.selected
40402
+ ),
40403
+ children: [
40404
+ !devtools.searchEngine.isNestedSearch && /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV("span", { className: css$2.inputSuggestionOwner, children: suggestion.vmName }, void 0, false, {
40405
+ fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/index.tsx",
40406
+ lineNumber: 138,
40407
+ columnNumber: 27
40408
+ }, void 0),
40409
+ /* @__PURE__ */ jsxDevRuntimeExports.jsxDEV("span", { className: css$2.inputSuggestionValue, children: suggestion.value }, void 0, false, {
40410
+ fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/index.tsx",
40411
+ lineNumber: 142,
40412
+ columnNumber: 25
40413
+ }, void 0)
40414
+ ]
40415
+ },
40416
+ `${suggestion.ownerKey}/${suggestion.value}`,
40417
+ true,
40418
+ {
40419
+ fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/index.tsx",
40420
+ lineNumber: 120,
40421
+ columnNumber: 23
40422
+ },
40423
+ void 0
40424
+ )) }, void 0, false, {
40425
+ fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/index.tsx",
40426
+ lineNumber: 118,
40427
+ columnNumber: 19
40428
+ }, void 0)
40429
+ ] }, void 0, true, {
40430
+ fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/index.tsx",
40431
+ lineNumber: 114,
40432
+ columnNumber: 17
40433
+ }, void 0)
40371
40434
  ] }, void 0, true, {
40372
40435
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/index.tsx",
40373
40436
  lineNumber: 47,
@@ -40393,7 +40456,7 @@ const VmDevtoolsContent = withViewModel(
40393
40456
  false,
40394
40457
  {
40395
40458
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/index.tsx",
40396
- lineNumber: 117,
40459
+ lineNumber: 156,
40397
40460
  columnNumber: 11
40398
40461
  },
40399
40462
  void 0
@@ -40403,7 +40466,7 @@ const VmDevtoolsContent = withViewModel(
40403
40466
  false,
40404
40467
  {
40405
40468
  fileName: "/home/js2me/projects/open-source/mobx-view-model-devtools/src/ui/devtools-content/index.tsx",
40406
- lineNumber: 113,
40469
+ lineNumber: 152,
40407
40470
  columnNumber: 9
40408
40471
  },
40409
40472
  void 0
@@ -40623,24 +40686,48 @@ class SearchEngine {
40623
40686
  this.searchInputRef = createFocusableRef();
40624
40687
  makeObservable(this, {
40625
40688
  searchText: observable.ref,
40689
+ searchTextToSearch: observable.ref,
40690
+ selectedSuggestionIndex: observable.ref,
40691
+ isSearchInputFocused: observable.ref,
40692
+ isSuggestionsDismissed: observable.ref,
40693
+ selectedPathOwnerKey: observable.ref,
40694
+ selectedPathSegment: observable.ref,
40626
40695
  formattedSearchText: computed,
40627
40696
  segments: computed.struct,
40628
40697
  endsWithDot: computed,
40698
+ isNestedSearch: computed,
40629
40699
  isActive: computed,
40700
+ isSearchTextDebouncing: computed,
40701
+ shouldShowSuggestions: computed,
40702
+ suggestionItems: computed.struct,
40703
+ selectedSuggestion: computed,
40630
40704
  suggestionSuffix: computed,
40705
+ selectSuggestionAtIndex: action,
40706
+ applySuggestion: action,
40707
+ applySuggestionFromClick: action,
40631
40708
  handleSearchInput: action,
40709
+ handleSearchInputFocus: action,
40710
+ handleSearchInputBlur: action,
40632
40711
  handleKeyDown: action,
40633
40712
  resetSearch: action
40634
40713
  });
40635
40714
  }
40636
40715
  searchInputRef;
40637
40716
  searchText = "";
40717
+ searchTextToSearch = "";
40718
+ selectedSuggestionIndex = 0;
40719
+ isSearchInputFocused = false;
40720
+ isSuggestionsDismissed = false;
40721
+ selectedPathOwnerKey = null;
40722
+ selectedPathSegment = null;
40638
40723
  searchCacheKey = "";
40639
40724
  isSearching = false;
40725
+ searchTextToSearchTimeout = null;
40640
40726
  scrollToSearchMatchTimeout = null;
40727
+ static searchDebounceMs = 150;
40641
40728
  static itemHeight = 22;
40642
40729
  get formattedSearchText() {
40643
- return this.searchText.toLowerCase().trim();
40730
+ return this.searchTextToSearch.toLowerCase().trim();
40644
40731
  }
40645
40732
  /**
40646
40733
  * Сегменты поиска, разбитые по точке.
@@ -40652,45 +40739,243 @@ class SearchEngine {
40652
40739
  return all[all.length - 1] === "" ? all.slice(0, -1) : all;
40653
40740
  }
40654
40741
  get endsWithDot() {
40655
- return this.searchText.trim().endsWith(".");
40742
+ return this.searchTextToSearch.trim().endsWith(".");
40743
+ }
40744
+ get isNestedSearch() {
40745
+ return this.endsWithDot || this.segments.length > 1;
40656
40746
  }
40657
40747
  get isActive() {
40658
40748
  return this.formattedSearchText.length > 0;
40659
40749
  }
40660
- /**
40661
- * Суффикс первого найденного свойства, которое начинается с последнего сегмента.
40662
- * Отображается как серая подсказка в инпуте.
40663
- * Например: ввод "_pay" → suggestionSuffix = "load" (от "_payload")
40664
- */
40665
- get suggestionSuffix() {
40666
- if (!this.isActive) return "";
40667
- const { segments } = this;
40668
- if (segments.length === 0) return "";
40669
- const completingSegment = this.endsWithDot ? "" : segments[segments.length - 1];
40670
- if (!this.endsWithDot && !completingSegment) return "";
40750
+ get isSearchTextDebouncing() {
40751
+ return this.searchText !== this.searchTextToSearch;
40752
+ }
40753
+ get shouldShowSuggestions() {
40754
+ return this.isSearchInputFocused && !this.isSuggestionsDismissed && this.suggestionItems.length > 0;
40755
+ }
40756
+ get suggestionItems() {
40757
+ if (this.isSearchTextDebouncing && !this.searchText.includes(".")) return [];
40758
+ return this.buildSuggestionItemsForText(this.getActiveSearchText());
40759
+ }
40760
+ getActiveSearchText() {
40761
+ if (this.searchText.includes(".")) {
40762
+ return this.searchText;
40763
+ }
40764
+ return this.searchTextToSearch;
40765
+ }
40766
+ buildSuggestionItemsForText(text2) {
40767
+ const formatted = text2.toLowerCase().trim();
40768
+ if (!formatted) return [];
40769
+ const all = formatted.split(".");
40770
+ const segments = all[all.length - 1] === "" ? all.slice(0, -1) : all;
40771
+ if (segments.length === 0) return [];
40772
+ const endsWithDot = text2.trim().endsWith(".");
40773
+ const completingSegment = endsWithDot ? "" : segments[segments.length - 1];
40774
+ if (!endsWithDot && !completingSegment) return [];
40671
40775
  const rootItems = this.config.getRootItems();
40672
- const pathSegments = this.endsWithDot ? segments : segments.slice(0, -1);
40776
+ const pathSegments = endsWithDot ? segments : segments.slice(0, -1);
40673
40777
  const candidates = this.getCandidatePropsAtDepth(rootItems, pathSegments);
40778
+ const suggestionsByVM = /* @__PURE__ */ new Map();
40779
+ const seen = /* @__PURE__ */ new Set();
40674
40780
  for (const prop of candidates) {
40675
40781
  const nameLower = prop.searchData.property;
40676
40782
  const nameOriginal = prop.property ?? "";
40677
- if (nameLower.startsWith(completingSegment) && nameLower.length > completingSegment.length) {
40678
- return nameOriginal.slice(completingSegment.length);
40783
+ const vmName = this.getOwnerVMName(prop);
40784
+ const ownerKey = this.getOwnerKey(prop);
40785
+ const uniqueKey = `${ownerKey}/${nameLower}`;
40786
+ if (nameLower.startsWith(completingSegment) && nameLower.length >= completingSegment.length) {
40787
+ if (seen.has(uniqueKey)) continue;
40788
+ seen.add(uniqueKey);
40789
+ const suggestions = suggestionsByVM.get(vmName) ?? [];
40790
+ suggestions.push({
40791
+ value: nameOriginal,
40792
+ suffix: nameOriginal.slice(completingSegment.length),
40793
+ vmName,
40794
+ ownerKey
40795
+ });
40796
+ suggestionsByVM.set(vmName, suggestions);
40679
40797
  }
40680
40798
  }
40681
- return "";
40799
+ const result = [];
40800
+ const groups = [...suggestionsByVM.values()];
40801
+ let offset = 0;
40802
+ while (result.length < 10) {
40803
+ let hasSuggestion = false;
40804
+ for (const group of groups) {
40805
+ const suggestion = group[offset];
40806
+ if (!suggestion) continue;
40807
+ result.push(suggestion);
40808
+ hasSuggestion = true;
40809
+ if (result.length >= 10) {
40810
+ return result;
40811
+ }
40812
+ }
40813
+ if (!hasSuggestion) break;
40814
+ offset++;
40815
+ }
40816
+ return result;
40817
+ }
40818
+ get selectedSuggestion() {
40819
+ if (this.suggestionItems.length === 0) return null;
40820
+ const index = Math.min(
40821
+ this.selectedSuggestionIndex,
40822
+ this.suggestionItems.length - 1
40823
+ );
40824
+ return this.suggestionItems[index] ?? null;
40825
+ }
40826
+ /**
40827
+ * Суффикс выбранного свойства, которое начинается с последнего сегмента.
40828
+ * Отображается как серая подсказка в инпуте.
40829
+ * Например: ввод "_pay" → suggestionSuffix = "load" (от "_payload")
40830
+ */
40831
+ get suggestionSuffix() {
40832
+ return this.selectedSuggestion?.suffix ?? "";
40682
40833
  }
40834
+ selectSuggestionAtIndex = (index) => {
40835
+ if (index < 0 || index >= this.suggestionItems.length) return;
40836
+ this.selectedSuggestionIndex = index;
40837
+ this.isSuggestionsDismissed = false;
40838
+ };
40839
+ applySuggestion = (suggestion, options) => {
40840
+ this.clearSearchDebounce();
40841
+ const hadPathSyntax = this.searchText.includes(".");
40842
+ const nextSearchText = this.searchText + suggestion.suffix;
40843
+ this.searchText = nextSearchText;
40844
+ this.searchTextToSearch = nextSearchText;
40845
+ this.selectedSuggestionIndex = 0;
40846
+ this.isSuggestionsDismissed = options?.dismissSuggestions ?? false;
40847
+ const lockedSegment = hadPathSyntax ? this.getFirstPathSegment(nextSearchText) : void 0;
40848
+ if (options?.commitOwner) {
40849
+ this.commitSuggestionOwner(suggestion, lockedSegment);
40850
+ } else if (!hadPathSyntax) {
40851
+ this.commitSuggestionOwner(suggestion);
40852
+ } else if (!this.selectedPathOwnerKey) {
40853
+ this.commitSuggestionOwner(suggestion, lockedSegment);
40854
+ }
40855
+ this.searchInputRef.current?.focus();
40856
+ this.scheduleScrollToFirstSearchMatch();
40857
+ };
40858
+ applySuggestionFromClick = (suggestion, index) => {
40859
+ this.selectSuggestionAtIndex(index);
40860
+ this.applySuggestion(suggestion, { commitOwner: true });
40861
+ };
40683
40862
  handleSearchInput = (e) => {
40863
+ const previousSearchText = this.searchText;
40864
+ const previousSelectedSuggestion = this.selectedSuggestion;
40684
40865
  this.searchText = e.target.value;
40685
- this.scheduleScrollToFirstSearchMatch();
40866
+ this.isSuggestionsDismissed = false;
40867
+ this.handlePathOwnerSelectionFromInput(
40868
+ previousSearchText,
40869
+ this.searchText,
40870
+ previousSelectedSuggestion
40871
+ );
40872
+ this.selectedSuggestionIndex = 0;
40873
+ this.scheduleSearchTextDebounce();
40874
+ };
40875
+ handleSearchInputFocus = (_e) => {
40876
+ this.isSearchInputFocused = true;
40877
+ this.isSuggestionsDismissed = false;
40878
+ };
40879
+ handleSearchInputBlur = (_e) => {
40880
+ this.isSearchInputFocused = false;
40686
40881
  };
40687
40882
  handleKeyDown = (e) => {
40688
- if (e.key === "Tab" && this.suggestionSuffix) {
40883
+ if (e.key === "Escape") {
40884
+ e.preventDefault();
40885
+ e.stopPropagation();
40886
+ this.isSuggestionsDismissed = true;
40887
+ return;
40888
+ }
40889
+ if (e.key === "ArrowDown" && this.suggestionItems.length > 0) {
40890
+ e.preventDefault();
40891
+ this.selectedSuggestionIndex = (this.selectedSuggestionIndex + 1) % this.suggestionItems.length;
40892
+ return;
40893
+ }
40894
+ if (e.key === "ArrowUp" && this.suggestionItems.length > 0) {
40689
40895
  e.preventDefault();
40690
- this.searchText += this.suggestionSuffix;
40691
- this.scheduleScrollToFirstSearchMatch();
40896
+ this.selectedSuggestionIndex = (this.selectedSuggestionIndex - 1 + this.suggestionItems.length) % this.suggestionItems.length;
40897
+ return;
40898
+ }
40899
+ if ((e.key === "Tab" || e.key === "Enter") && this.selectedSuggestion) {
40900
+ e.preventDefault();
40901
+ this.applySuggestion(this.selectedSuggestion, {
40902
+ dismissSuggestions: e.key === "Enter"
40903
+ });
40692
40904
  }
40693
40905
  };
40906
+ commitSuggestionOwner(suggestion, lockedSegment) {
40907
+ this.selectedPathOwnerKey = suggestion.ownerKey;
40908
+ this.selectedPathSegment = lockedSegment ?? suggestion.value.toLowerCase().trim();
40909
+ }
40910
+ handlePathOwnerSelectionFromInput(previousSearchText, nextSearchText, previousSelectedSuggestion) {
40911
+ const addedDot = nextSearchText.endsWith(".") && nextSearchText === `${previousSearchText}.`;
40912
+ const enteredPathSyntax = nextSearchText.includes(".") && !previousSearchText.includes(".");
40913
+ if (addedDot || enteredPathSyntax) {
40914
+ const pathSegment = this.getFirstPathSegment(
40915
+ addedDot ? previousSearchText : nextSearchText
40916
+ );
40917
+ if (this.selectedPathOwnerKey && this.selectedPathSegment === pathSegment) {
40918
+ this.searchTextToSearch = nextSearchText;
40919
+ this.clearSearchDebounce();
40920
+ return;
40921
+ }
40922
+ const suggestion = addedDot && previousSelectedSuggestion && previousSelectedSuggestion.value.toLowerCase() === pathSegment ? previousSelectedSuggestion : this.resolvePathOwnerSuggestion(
40923
+ pathSegment,
40924
+ this.selectedSuggestionIndex
40925
+ );
40926
+ if (suggestion) {
40927
+ this.commitSuggestionOwner(suggestion, pathSegment);
40928
+ }
40929
+ this.searchTextToSearch = nextSearchText;
40930
+ this.clearSearchDebounce();
40931
+ return;
40932
+ }
40933
+ const firstSegment = nextSearchText.toLowerCase().trim().split(".")[0] ?? "";
40934
+ if (!nextSearchText.includes(".") || !firstSegment || firstSegment !== this.selectedPathSegment) {
40935
+ this.selectedPathOwnerKey = null;
40936
+ this.selectedPathSegment = null;
40937
+ }
40938
+ }
40939
+ /**
40940
+ * При вводе точки debounce ещё не применил searchTextToSearch,
40941
+ * поэтому owner берём из подсказок предыдущего сегмента.
40942
+ * Если пользователь явно не выбирал — берём exact-match `service`, иначе первый в списке.
40943
+ */
40944
+ getFirstPathSegment(text2) {
40945
+ return text2.toLowerCase().trim().split(".")[0] ?? "";
40946
+ }
40947
+ resolvePathOwnerSuggestion(pathSegment, selectedIndex) {
40948
+ if (!pathSegment) return null;
40949
+ const items = this.buildSuggestionItemsForText(pathSegment);
40950
+ if (items.length === 0) return null;
40951
+ const exactMatches = items.filter(
40952
+ (item) => item.value.toLowerCase() === pathSegment
40953
+ );
40954
+ if (exactMatches.length > 0) {
40955
+ return exactMatches[Math.min(selectedIndex, exactMatches.length - 1)] ?? exactMatches[0];
40956
+ }
40957
+ return items[Math.min(selectedIndex, items.length - 1)] ?? items[0];
40958
+ }
40959
+ clearSearchDebounce() {
40960
+ if (this.searchTextToSearchTimeout) {
40961
+ clearTimeout(this.searchTextToSearchTimeout);
40962
+ this.searchTextToSearchTimeout = null;
40963
+ }
40964
+ }
40965
+ scheduleSearchTextDebounce() {
40966
+ this.clearSearchDebounce();
40967
+ if (!this.searchText.trim()) {
40968
+ this.searchTextToSearch = "";
40969
+ return;
40970
+ }
40971
+ this.searchTextToSearchTimeout = setTimeout(() => {
40972
+ runInAction(() => {
40973
+ this.searchTextToSearchTimeout = null;
40974
+ this.searchTextToSearch = this.searchText;
40975
+ this.scheduleScrollToFirstSearchMatch();
40976
+ });
40977
+ }, SearchEngine.searchDebounceMs);
40978
+ }
40694
40979
  scheduleScrollToFirstSearchMatch() {
40695
40980
  if (this.scrollToSearchMatchTimeout) {
40696
40981
  clearTimeout(this.scrollToSearchMatchTimeout);
@@ -40742,52 +41027,70 @@ class SearchEngine {
40742
41027
  */
40743
41028
  getCandidatePropsAtDepth(rootItems, pathSegments) {
40744
41029
  const allVMs = this.collectAllVMs(rootItems);
41030
+ const extras = rootItems.filter(
41031
+ (item) => item instanceof ExtraListItem
41032
+ );
40745
41033
  if (pathSegments.length === 0) {
40746
- const props = [];
40747
- for (const vm of allVMs) {
40748
- props.push(
40749
- ...vm.children.filter(
40750
- (c) => c instanceof PropertyListItem
40751
- )
40752
- );
40753
- }
40754
- return props;
41034
+ return [...allVMs, ...extras].flatMap(
41035
+ (item) => this.getDirectPropertyChildren(item)
41036
+ );
40755
41037
  }
40756
41038
  const firstSeg = pathSegments[0];
40757
41039
  const result = [];
40758
41040
  for (const vm of allVMs) {
40759
- const directProps = vm.children.filter(
40760
- (c) => c instanceof PropertyListItem
40761
- );
41041
+ if (!this.isOwnerAllowedForFirstPathSegment(vm, firstSeg)) continue;
41042
+ const directProps = this.getDirectPropertyChildren(vm);
40762
41043
  const firstSegmentIsExactProperty = directProps.some(
40763
41044
  (prop) => prop.searchData.property === firstSeg
40764
41045
  );
40765
41046
  const vmNameMatch = !firstSegmentIsExactProperty && (vm.searchData.name.includes(firstSeg) || vm.searchData.id.includes(firstSeg));
40766
41047
  if (vmNameMatch) {
40767
- if (pathSegments.length === 1) {
40768
- result.push(...directProps);
40769
- } else {
40770
- result.push(
40771
- ...this.navigatePropertyPath(directProps, pathSegments.slice(1))
40772
- );
40773
- }
41048
+ result.push(...this.getOwnerMatchedPathCandidates(directProps, pathSegments));
40774
41049
  } else if (firstSegmentIsExactProperty) {
40775
- const matchingProps = this.getPathMatchingProps(directProps, firstSeg);
40776
- if (pathSegments.length === 1) {
40777
- for (const prop of matchingProps) {
40778
- result.push(...prop.children);
40779
- }
40780
- } else {
40781
- for (const prop of matchingProps) {
40782
- result.push(
40783
- ...this.navigatePropertyPath(prop.children, pathSegments.slice(1))
40784
- );
40785
- }
40786
- }
41050
+ result.push(...this.getPropertyPathCandidates(directProps, pathSegments));
40787
41051
  }
40788
41052
  }
41053
+ for (const extra of extras) {
41054
+ if (!this.isOwnerAllowedForFirstPathSegment(extra, firstSeg)) continue;
41055
+ const directProps = this.getDirectPropertyChildren(extra);
41056
+ const firstSegmentIsExactProperty = directProps.some(
41057
+ (prop) => prop.searchData.property === firstSeg
41058
+ );
41059
+ if (!firstSegmentIsExactProperty) continue;
41060
+ result.push(...this.getPropertyPathCandidates(directProps, pathSegments));
41061
+ }
40789
41062
  return result;
40790
41063
  }
41064
+ getOwnerMatchedPathCandidates(directProps, pathSegments) {
41065
+ if (pathSegments.length === 1) {
41066
+ return directProps;
41067
+ }
41068
+ return this.navigatePropertyPath(directProps, pathSegments.slice(1));
41069
+ }
41070
+ getPropertyPathCandidates(directProps, pathSegments) {
41071
+ const [firstSeg, ...restSegments] = pathSegments;
41072
+ const matchingProps = this.getPathMatchingProps(directProps, firstSeg);
41073
+ if (restSegments.length === 0) {
41074
+ return matchingProps.flatMap((prop) => prop.children);
41075
+ }
41076
+ return matchingProps.flatMap(
41077
+ (prop) => this.navigatePropertyPath(prop.children, restSegments)
41078
+ );
41079
+ }
41080
+ getDirectPropertyChildren(item) {
41081
+ return item.children.filter(
41082
+ (child) => child instanceof PropertyListItem
41083
+ );
41084
+ }
41085
+ isOwnerAllowedForFirstPathSegment(owner, firstSegment) {
41086
+ if (!this.selectedPathOwnerKey || this.selectedPathSegment !== firstSegment) {
41087
+ return true;
41088
+ }
41089
+ return owner.key === this.selectedPathOwnerKey;
41090
+ }
41091
+ isPathOwnerLockedToAnotherOwner(owner, firstSegment) {
41092
+ return !this.isOwnerAllowedForFirstPathSegment(owner, firstSegment);
41093
+ }
40791
41094
  /**
40792
41095
  * Уже введённый path-сегмент должен совпадать строго:
40793
41096
  * `product.` заходит только в `product`, а не в `productAsyncTasks`
@@ -40796,6 +41099,26 @@ class SearchEngine {
40796
41099
  getPathMatchingProps(props, segment) {
40797
41100
  return props.filter((p) => p.searchData.property === segment);
40798
41101
  }
41102
+ getOwnerVMName(item) {
41103
+ let parent = item.parentListItem;
41104
+ while (parent instanceof PropertyListItem) {
41105
+ parent = parent.parentListItem;
41106
+ }
41107
+ if (parent instanceof VMListItem) {
41108
+ return parent.displayName;
41109
+ }
41110
+ if (parent instanceof ExtraListItem) {
41111
+ return parent.displayName;
41112
+ }
41113
+ return "";
41114
+ }
41115
+ getOwnerKey(item) {
41116
+ let parent = item.parentListItem;
41117
+ while (parent instanceof PropertyListItem) {
41118
+ parent = parent.parentListItem;
41119
+ }
41120
+ return parent.key;
41121
+ }
40799
41122
  /**
40800
41123
  * Навигация вглубь по цепочке свойств.
40801
41124
  * Возвращает свойства на нужной глубине.
@@ -40864,12 +41187,32 @@ class SearchEngine {
40864
41187
  return this.getVMSearchItems(item);
40865
41188
  }
40866
41189
  if (item instanceof ExtraListItem) {
40867
- return item.isExpanded ? [item, ...item.children] : [item];
41190
+ return this.getExtraSearchItems(item);
40868
41191
  }
40869
41192
  return [item];
40870
41193
  }
41194
+ getExtraSearchItems(item) {
41195
+ if (this.isPathOwnerLockedToAnotherOwner(item, this.segments[0] ?? "")) {
41196
+ return [];
41197
+ }
41198
+ const directProps = this.getDirectPropertyChildren(item);
41199
+ const matchesByProperty = directProps.some(
41200
+ (prop) => prop.searchData.property.includes(this.segments[0] ?? "")
41201
+ );
41202
+ if (!matchesByProperty) return [];
41203
+ return [item, ...this.getPropertySearchItems(directProps, this.segments)];
41204
+ }
40871
41205
  getVMSearchItems(vmItem) {
40872
41206
  const result = [];
41207
+ const firstSeg = this.segments[0] ?? "";
41208
+ if (this.isPathOwnerLockedToAnotherOwner(vmItem, firstSeg)) {
41209
+ for (const child of vmItem.children) {
41210
+ if (child instanceof VMListItem) {
41211
+ result.push(...this.getVMSearchItems(child));
41212
+ }
41213
+ }
41214
+ return result;
41215
+ }
40873
41216
  if (!this.vmMatchesSearch(vmItem)) {
40874
41217
  for (const child of vmItem.children) {
40875
41218
  if (child instanceof VMListItem) {
@@ -40880,7 +41223,6 @@ class SearchEngine {
40880
41223
  }
40881
41224
  result.push(vmItem);
40882
41225
  const { segments } = this;
40883
- const firstSeg = segments[0] ?? "";
40884
41226
  const directProps = vmItem.children.filter(
40885
41227
  (c) => c instanceof PropertyListItem
40886
41228
  );
@@ -40936,6 +41278,9 @@ class SearchEngine {
40936
41278
  const { segments } = this;
40937
41279
  if (segments.length === 0) return true;
40938
41280
  const firstSegment = segments[0];
41281
+ if (this.isPathOwnerLockedToAnotherOwner(item, firstSegment)) {
41282
+ return false;
41283
+ }
40939
41284
  if (item.searchData.name.includes(firstSegment) || item.searchData.id.includes(firstSegment)) {
40940
41285
  return true;
40941
41286
  }
@@ -40966,6 +41311,7 @@ class SearchEngine {
40966
41311
  const { segments } = this;
40967
41312
  if (segments.length === 0) return false;
40968
41313
  const firstSeg = segments[0];
41314
+ if (this.isPathOwnerLockedToAnotherOwner(item, firstSeg)) return false;
40969
41315
  const hasPathSyntax = this.endsWithDot || segments.length > 1;
40970
41316
  const firstSegmentIsExactProperty = hasPathSyntax && item.children.some(
40971
41317
  (child) => child instanceof PropertyListItem && child.searchData.property === firstSeg
@@ -40983,14 +41329,15 @@ class SearchEngine {
40983
41329
  propLevel++;
40984
41330
  parent = parent.parentListItem;
40985
41331
  }
40986
- if (!(parent instanceof VMListItem)) return false;
41332
+ if (!(parent instanceof VMListItem) && !(parent instanceof ExtraListItem)) {
41333
+ return false;
41334
+ }
40987
41335
  const firstSeg = segments[0];
41336
+ if (this.isPathOwnerLockedToAnotherOwner(parent, firstSeg)) return false;
40988
41337
  const hasPathSyntax = this.endsWithDot || segments.length > 1;
40989
- const parentDirectProps = parent.children.filter(
40990
- (child) => child instanceof PropertyListItem
40991
- );
41338
+ const parentDirectProps = this.getDirectPropertyChildren(parent);
40992
41339
  const firstSegmentIsExactProperty = hasPathSyntax && parentDirectProps.some((prop) => prop.searchData.property === firstSeg);
40993
- const vmMatchesByName = !firstSegmentIsExactProperty && (parent.searchData.name.includes(firstSeg) || parent.searchData.id.includes(firstSeg));
41340
+ const vmMatchesByName = parent instanceof VMListItem && !firstSegmentIsExactProperty && (parent.searchData.name.includes(firstSeg) || parent.searchData.id.includes(firstSeg));
40994
41341
  const propSegments = vmMatchesByName ? segments.slice(1) : segments;
40995
41342
  if (propSegments.length === 0) return false;
40996
41343
  const targetLevel = propSegments.length - 1;
@@ -41032,14 +41379,15 @@ class SearchEngine {
41032
41379
  propLevel++;
41033
41380
  parent = parent.parentListItem;
41034
41381
  }
41035
- if (!(parent instanceof VMListItem)) return true;
41382
+ if (!(parent instanceof VMListItem) && !(parent instanceof ExtraListItem)) {
41383
+ return true;
41384
+ }
41036
41385
  const firstSeg = segments[0];
41386
+ if (this.isPathOwnerLockedToAnotherOwner(parent, firstSeg)) return false;
41037
41387
  const hasPathSyntax = this.endsWithDot || segments.length > 1;
41038
- const parentDirectProps = parent.children.filter(
41039
- (child) => child instanceof PropertyListItem
41040
- );
41388
+ const parentDirectProps = this.getDirectPropertyChildren(parent);
41041
41389
  const firstSegmentIsExactProperty = hasPathSyntax && parentDirectProps.some((prop) => prop.searchData.property === firstSeg);
41042
- const vmMatchesByName = !firstSegmentIsExactProperty && (parent.searchData.name.includes(firstSeg) || parent.searchData.id.includes(firstSeg));
41390
+ const vmMatchesByName = parent instanceof VMListItem && !firstSegmentIsExactProperty && (parent.searchData.name.includes(firstSeg) || parent.searchData.id.includes(firstSeg));
41043
41391
  const propSegments = vmMatchesByName ? segments.slice(1) : segments;
41044
41392
  const depthToCheck = Math.min(propLevel, propSegments.length);
41045
41393
  for (let i = 0; i < depthToCheck; i++) {
@@ -41069,11 +41417,17 @@ class SearchEngine {
41069
41417
  return item.searchData.property === segment;
41070
41418
  }
41071
41419
  resetSearch = () => {
41420
+ this.clearSearchDebounce();
41072
41421
  if (this.scrollToSearchMatchTimeout) {
41073
41422
  clearTimeout(this.scrollToSearchMatchTimeout);
41074
41423
  this.scrollToSearchMatchTimeout = null;
41075
41424
  }
41076
41425
  this.searchText = "";
41426
+ this.searchTextToSearch = "";
41427
+ this.selectedSuggestionIndex = 0;
41428
+ this.isSuggestionsDismissed = false;
41429
+ this.selectedPathOwnerKey = null;
41430
+ this.selectedPathSegment = null;
41077
41431
  this.focusInput();
41078
41432
  };
41079
41433
  focusInput = () => {