@cjy0812/inspect-plus 0.0.1772240426360

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.
Files changed (51) hide show
  1. package/README.md +148 -0
  2. package/dist/.nojekyll +1 -0
  3. package/dist/404.html +38 -0
  4. package/dist/_redirects +1 -0
  5. package/dist/assets/ActionCard.vue_vue_type_script_setup_true_lang-CzzwrEAn.js +17 -0
  6. package/dist/assets/ActionCard.vue_vue_type_script_setup_true_lang-CzzwrEAn.js.map +1 -0
  7. package/dist/assets/DevicePage-ClkEpwEg.js +2 -0
  8. package/dist/assets/DevicePage-ClkEpwEg.js.map +1 -0
  9. package/dist/assets/HomePage-DWBCu_RV.js +55 -0
  10. package/dist/assets/HomePage-DWBCu_RV.js.map +1 -0
  11. package/dist/assets/ImportPage-DNhXkQRM.js +2 -0
  12. package/dist/assets/ImportPage-DNhXkQRM.js.map +1 -0
  13. package/dist/assets/SelectorPage-BPf1NT6K.js +2 -0
  14. package/dist/assets/SelectorPage-BPf1NT6K.js.map +1 -0
  15. package/dist/assets/SettingsModal.vue_vue_type_script_setup_true_lang-Dzypo389.js +977 -0
  16. package/dist/assets/SettingsModal.vue_vue_type_script_setup_true_lang-Dzypo389.js.map +1 -0
  17. package/dist/assets/SnapshotPage-B6Jpif--.js +250 -0
  18. package/dist/assets/SnapshotPage-B6Jpif--.js.map +1 -0
  19. package/dist/assets/SnapshotPage-B_oz4RvQ.css +1 -0
  20. package/dist/assets/SvgPage-BgerzYLu.js +2 -0
  21. package/dist/assets/SvgPage-BgerzYLu.js.map +1 -0
  22. package/dist/assets/TrackGraph-BqCqbx5h.css +1 -0
  23. package/dist/assets/TrackGraph-CSZuKoTS.js +134 -0
  24. package/dist/assets/TrackGraph-CSZuKoTS.js.map +1 -0
  25. package/dist/assets/_404Page-Beb778B7.js +2 -0
  26. package/dist/assets/_404Page-Beb778B7.js.map +1 -0
  27. package/dist/assets/import-ohlNKANL.js +2 -0
  28. package/dist/assets/import-ohlNKANL.js.map +1 -0
  29. package/dist/assets/index-BlWrRSuL.js +18 -0
  30. package/dist/assets/index-BlWrRSuL.js.map +1 -0
  31. package/dist/assets/index-CFzr9cs0.css +1 -0
  32. package/dist/assets/index-DfAptoUr.js +1172 -0
  33. package/dist/assets/index-DfAptoUr.js.map +1 -0
  34. package/dist/assets/index-OOkxa8o-.css +1 -0
  35. package/dist/assets/jszip.min-DUXE_wq7.js +3 -0
  36. package/dist/assets/jszip.min-DUXE_wq7.js.map +1 -0
  37. package/dist/assets/mod-BHC4TAjm.wasm +0 -0
  38. package/dist/assets/node-TLy2IyRG.js +118 -0
  39. package/dist/assets/node-TLy2IyRG.js.map +1 -0
  40. package/dist/assets/polyfills-t8dO9Hxd.js +2 -0
  41. package/dist/assets/polyfills-t8dO9Hxd.js.map +1 -0
  42. package/dist/assets/snapshot-D02dgTNQ.js +4 -0
  43. package/dist/assets/snapshot-D02dgTNQ.js.map +1 -0
  44. package/dist/assets/snapshotGroup-DhERMZkD.js +2 -0
  45. package/dist/assets/snapshotGroup-DhERMZkD.js.map +1 -0
  46. package/dist/assets/svg-D9PkDGa0.js +2 -0
  47. package/dist/assets/svg-D9PkDGa0.js.map +1 -0
  48. package/dist/assets/worker-NxeETyFs.js +10 -0
  49. package/dist/assets/worker-NxeETyFs.js.map +1 -0
  50. package/dist/index.html +38 -0
  51. package/package.json +102 -0
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"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","names":["createDataKey","key","SwitcherIcon","defineComponent","h","zero","n1","createLeftBorderStyle","type","cM","c","cB","cE","createTopBorderStyle","style$3","cNotM","buttonGroupProps","__unplugin_components_6$1","props","mergedClsPrefixRef","mergedRtlRef","useConfig","useStyle","style","provide","buttonGroupInjectionKey","useRtl","mergedClsPrefix","ellipsisLight","createTheme","commonLight","tooltipLight","style$2","createLineClampClass","clsPrefix","createCursorClass","cursor","ellipsisProps","useTheme","__unplugin_components_0","slots","attrs","useMergedClsPrefix","mergedTheme","triggerRef","ref","triggerInnerRef","tooltipRef","expandedRef","ellipsisStyleRef","computed","lineClamp","expanded","getTooltipDisabled","tooltipDisabled","trigger","syncEllipsisStyle","triggerInner","syncCursorStyle","handleClickRef","_a","onDeactivated","renderTrigger","mergeProps","latestStyle","lineClampClass","syncTriggerClass","cursorClass","styleClass","action","tooltip","$slots","NTooltip","scrollbarProps","Scrollbar","scrollbarInstRef","args","NScrollbar","style$1","insideModal","insidePopover","tableProps","__unplugin_components_6","inlineThemeDisabled","themeRef","tableLight","rtlEnabledRef","cssVarsRef","size","borderColor","tdColor","tdColorModal","tdColorPopover","thColor","thColorModal","thColorPopover","thTextColor","tdTextColor","borderRadius","thFontWeight","lineHeight","borderColorModal","borderColorPopover","tdColorStriped","tdColorStripedModal","tdColorStripedPopover","createKey","fontSize","tdPadding","thPadding","cubicBezierEaseInOut","themeClassHandle","useThemeClass","__unplugin_components_5","__unplugin_components_1$1","__unplugin_components_2","treeSelectInjectionKey","createInjectionKey","renderDropMark","position","offsetLevel","indent","el","cssPosition","defaultAllowDrop","dropPosition","node","treeInjectionKey","useKeyboard","fNodesRef","mergedExpandedKeysRef","mergedSelectedKeysRef","mergedCheckedKeysRef","handleCheck","handleSelect","handleSwitcherClick","mergedSelectedKeys","treeSelectInjection","inject","pendingNodeKeyRef","handleKeydown","e","pendingNodeKey","enterBehavior","fNodes","fIndex","tmNode","pendingNode","parentTmNode","NTreeNodeCheckbox","NTree","doCheck","value","onCheck","handleUpdateValue","checked","indeterminate","disabled","focusable","NCheckbox","NTreeNodeContent","renderLabelRef","renderPrefixRef","renderSuffixRef","labelFieldRef","selfRef","doClick","onClick","handleClick","labelField","nodeProps","selected","renderLabel","renderPrefix","renderSuffix","onDragstart","rawNode","prefix","suffix","label","render","NTreeNodeSwitcher","renderSwitcherIconRef","hide","NIconSwitchTransition","NBaseLoading","renderSwitcherIcon","NBaseIcon","useMergedCheckStrategy","isNodeDisabled","disabledField","traverse","nodes","childrenField","callback","callbackAfter","keysWithFilter","pattern","keyField","filter","keys","highlightKeySet","path","i","isBrowser","emptyImage","filterTree","tree","visitedTailKeys","visitedNonTailKeys","expandedKeys","filteredTree","visit","t","n","children","build","sibs","isVisitedTail","isVisitedNonTail","clonedNode","TreeNode","droppingNodeParentRef","droppingMouseNodeRef","draggingNodeRef","droppingPositionRef","droppingOffsetLevelRef","nodePropsRef","indentRef","blockLineRef","checkboxPlacementRef","checkOnClickRef","disabledFieldRef","showLineRef","overrideDefaultNodeClickBehaviorRef","checkboxDisabledRef","useMemo","nodeIsDisabledRef","disabledRef","resolvedNodePropsRef","contentInstRef","contentElRef","onMounted","onLoad","selectableRef","checkableRef","checkedRef","mergedCheckOnClickRef","checkable","checkOnClick","_handleClick","expandOnClick","selectable","mergedCheckOnClick","happensIn","handleNodeClick","_b","overrideDefaultNodeClickBehavior","shouldOverride","handleContentClick","handleLineClick","handleDragStart","handleDragEnter","handleDragOver","handleDragEnd","handleDragLeave","handleDrop","indentNodes","repeat","draggingNode","droppingPosition","droppingMouseNode","droppingNodeParent","highlight","draggable","blockLine","pending","internalScrollable","checkboxPlacement","dragEventHandlers","dataKey","checkboxOnRight","checkboxNode","MotionWrapper","FadeInExpandTransition","pxfy","iconSwitchTransitionNode","iconSwitchTransition","fadeInHeightExpandTransition","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","reject","fulfilled","step","rejected","result","createTreeMateOptions","getChildren","treeSharedProps","treeProps","__unplugin_components_1","treeLight","selfElRef","virtualListInstRef","getScrollContainer","getScrollContent","mergedFilterRef","filteredTreeInfoRef","displayTreeMateRef","createTreeMate","dataTreeMateRef","watchProps","uncontrolledCheckedKeysRef","watchEffect","controlledCheckedKeysRef","toRef","useMergedState","checkedStatusRef","mergedCheckStrategyRef","displayedCheckedKeysRef","displayedIndeterminateKeysRef","indeterminateKeys","uncontrolledSelectedKeysRef","controlledSelectedKeysRef","uncontrolledExpandedKeysRef","initUncontrolledExpandedKeys","controlledExpandedKeysRef","expandTimerId","nodeKeyToBeExpanded","uncontrolledHighlightKeySetRef","controlledHighlightKeySetRef","mergedHighlightKeySetRef","loadingKeysRef","expandedNonLoadingKeysRef","dragStartX","droppingNodeRef","droppingNode","isDataReset","watch","nextTick","resetDndState","expandAnimationDisabled","disableExpandAnimationForOneTick","memoizedExpandedKeys","oldValue","expandedKeysAfterChange","doUpdateExpandedKeys","getOptionsByKeys","triggerLoading","loadingKeys","resetDragExpandState","loadError","displayTreeMate","getNode","aipRef","afNodesRef","prevValue","syncScrollbar","nodeHeight","depx","prevVSet","addedKey","removedKey","expandedKey","currentVSet","virtualScroll","viewportHeight","viewportItemCount","baseExpandedKeys","expandedNodeIndex","expandedChildren","flatten","collapsedNodeIndex","collapsedNodeChildren","collapsedChildren","getFIndexRef","createIndexGetter","mergedFNodesRef","scrollbarInst","handleAfterEnter","option","meta","_onUpdateExpandedKeys","onUpdateExpandedKeys","call","doUpdateCheckedKeys","_onUpdateCheckedKeys","onUpdateCheckedKeys","doUpdateIndeterminateKeys","_onUpdateIndeterminateKeys","onUpdateIndeterminateKeys","doUpdateSelectedKeys","_onUpdateSelectedKeys","onUpdateSelectedKeys","doDragEnter","info","onDragenter","doDragLeave","onDragleave","doDragEnd","onDragend","doDragStart","doDragOver","onDragover","doDrop","onDrop","resetDragState","resetDropState","checkedAction","checkedKeys","toggleExpand","mergedExpandedKeys","index","expandNodeId","nodeToBeExpanded","nextKeys","siblingKeySet","selectedKeys","expandDragEnterNode","expand","event","handleDragLeaveTree","emit","allowDrop","elOffsetHeight","elClientTop","eventOffsetY","mousePosition","getFindex","finalDropNode","finalDropPosition","hoverNodeFIndex","mouseAtExpandedNonLeafNode","offset","nextNode","prevNode","handleScroll","handleResize","handleFocusout","selfEl","targetEl","scrollTo","options","exposedMethods","nodeBorderRadius","nodeColorHover","nodeColorPressed","nodeColorActive","arrowColor","loadingColor","nodeTextColor","nodeTextColorDisabled","dropMarkColor","nodeWrapperPadding","lineColor","lineOffsetTop","getPadding","lineOffsetBottom","nodeContentHeight","internalRenderEmpty","blockNode","ellipsis","internalFocusable","rtlEnabled","mergedFocusable","tabindex","treeClass","createNode","NTreeNode","internalScrollablePadding","padding","NxScrollbar","VVirtualList","item","resolveSlot","NEmpty","stackIds","shallowRef","useDialogStack","getVisible","clear","v","onScopeDispose","watchImmediate","zIndex","isTop","show","_useModel","__props","__emit","actualShow","state","duration","taskId","clearTask","useEventListener","_unref","_createBlock","_Teleport","_createElementVNode","_mergeProps","$attrs","_renderSlot","_ctx","TrackGraphLoader","__vitePreload","TrackGraph","defineAsyncComponent","allUnitResults","singleUnitResults","showUnitResults","filterUnitResults","switchUnitResult","unitResult","getNodeStyle","UnitSelectorExpression","u","themeTokens","palette","themeColors","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_hoisted_3","_createVNode","SvgIcon","_normalizeStyle","NButton","_hoisted_4","_hoisted_5","_hoisted_6","SelectorText","_hoisted_7","_hoisted_8","_Fragment","_renderList","$event","getRemoteImportId","id","r","useSnapshotStore","createSharedComposable","route","useRoute","router","useRouter","snapshotViewedTime","snapshotImportId","snapshotImageId","importSnapshotId","settingsStore","useStorageStore","randomizeFocusColor","hue","saturation","lightness","x","m","g","b","to255","snapshotId","toInteger","importId","imageId","snapshot","getAppInfo","screenshot","screenshotUrl","redirected","update","useTask","snapshotStorage","screenshotStorage","remoteImportId","loading","autoUpload","gmOk","exportSnapshotAsImageId","exportSnapshotAsImportId","detectSnapshot","rootNode","listToTree","missNodeSize","focusNode","focusTime","focusPosition","overlapNodes","updateFocusNode","updatePosition","resultNodes","findNodesByXy","trackShow","trackData","selector","useSharedSnapshotHoverImg","imgRef","imgBounding","useElementBounding","imgLoadTime","clickImg","ev","img","imgRect","innerHeight","offsetTop","y","percent","imgSize","useElementSize","positionStyle","attr","imgWidth","imgHeight","imgHover","hoverPosition","boxHoverPosition","ox","oy","boxHoverPerPosition","bottom","left","right","top","toFixedNumber","hoverBgImgWidth","hoverPositionStyle","_component_NTooltip","_component_NIcon","_toDisplayString","displayDesc","_component_NEllipsis","attrTip","lenAttrNames","name","selectText","getNodeSelectorText","attrExplainMap","getAttrExplain","getClassNameShort","fullClassName","parts","handleAttrClick","shortClassName","copy","DraggableCard","_withCtx","onRef","_component_NButton","_cache","_component_SvgIcon","_component_NTable","_component_NTbody","attrx","_component_NTr","_component_NTd","AttrNameCell","AttrValueCell","_component_NCard","_createTextVNode","_component_NSpace","resultNode","getNodeLabel","windowSize","useWindowSize","vw","gkdWidth","PRE_CHARS_BEFORE","PRE_CHARS_AFTER","snapshotStore","text","lazyText","refDebounced","tryParseJSON5Tolerant","rawText","JSON5","firstBrace","firstBracket","starts","a","s","open","close","depth","inStr","strChar","escaped","inLineComment","inBlockComment","startIndex","endIndex","ch","nextCh","candidate","toArray","isObj","indexToLineCol","lines","line","column","findFirstOccurrence","needle","idx","withDouble","withSingle","esc","expandActivityIds","arr","appId","validateAndNormalizeRuleCandidate","obj","normalizeStringOrArrayField","fieldName","act","urlFields","f","selectorFields","hasMatches","hasAnyMatches","parseSelector","message","checkRule","root","currentActivityId","simulatedPreKeys","normalizedActivityIds","aid","k","resolveSelectorsToNodes","selectors","excludeArr","excludeAllArr","excludeAllResults","matchesArr","matchesResults","notIndex","sel","anyArr","anyResults","parsedRuleResult","rawNormalized","parsedAttempt","msg","posMatch","lcMatch","acc","L","start","end","parsed","validated","errorObj","fieldValue","selectorString","pos","lc","diagnostics","errorText","targetNode","errorPreview","d","raw","preStart","postEnd","head","err","tail","_component_NInput","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","imgMove","dayjs","MiniHoverImg","searchText","searchTextLazy","useDebounce","selectorResults","shallowReactive","searchSelector","errorWrap","GkdException","results","resultsArray","searchString","stack","refreshExpandedKeys","newResult","newNode","allKeys","newKeys","searchBySelector","errorTry","enableSearchBySelector","handleTextareaKeyDown","wasmLoadTask","count","base64url.decode","generateRules","snapshotUrls","getOfficialImportUrl","getImportUrl","exampleUrls","getImagUrl","fastQuery","FastQuery","rule","selectorSyntaxText","selectorSyntaxResult","Selector","selectorSyntaxAst","AstNode","selectorSyntaxError","SyntaxException","hasErrorChar","hasZipId","shareResult","importUrl","base64url.encode","_component_NRadioGroup","_component_NRadio","_component_NInputGroup","_normalizeClass","_component_NCollapse","_component_NCollapseItem","_component_NButtonGroup","_withModifiers","_component_NScrollbar","_hoisted_14","emptyArray","GapList","ctx","defaultNodes","gapNodes","_d","_c","lastClickId","treeContainer","useTemplateRef","treeRef","quickFindMeta","metaMap","computeMeta","self","getNodeQf","has","child","findQuickTarget","target","delay","nodeRef","parent","treeData","treeFilter","_pattern","treeNodeProps","deviceName","getDevice","isSystem","activityId","gkdVersionName","getGkdAppInfo","onDelete","ActionCard","_component_NTree","loadingBar","searchShow","useStorage","ruleShow","attrShow","settingsDlgShow","_component_RouterLink","DeviceControlTools","ScreenshotCard","WindowCard","SearchCard","RuleCard","AttrCard","OverlapCard","FullScreenDialog","TrackCard","SettingsModal"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],"sources":["../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/_utils/vue/create-data-key.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/_internal/icons/Switcher.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/button-group/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/button-group/src/ButtonGroup.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/ellipsis/styles/light.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/ellipsis/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/ellipsis/src/Ellipsis.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/scrollbar/src/Scrollbar.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/table/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/table/src/Table.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/table/src/Tbody.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/table/src/Td.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/table/src/Tr.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree-select/src/interface.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree/src/dnd.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree/src/interface.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree/src/keyboard.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree/src/TreeNodeCheckbox.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree/src/TreeNodeContent.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree/src/TreeNodeSwitcher.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree/src/utils.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree/src/TreeNode.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree/src/MotionWrapper.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/tree/src/Tree.mjs","../../src/components/FullScreenDialog.vue","../../src/components/TrackCard.vue","../../src/views/snapshot/snapshot.ts","../../src/views/snapshot/AttrNameCell.vue","../../src/views/snapshot/AttrValueCell.vue","../../src/views/snapshot/AttrCard.vue","../../src/views/snapshot/OverlapCard.vue","../../src/utils/size.ts","../../src/views/snapshot/RuleCard.vue","../../src/views/snapshot/MiniHoverImg.vue","../../src/views/snapshot/ScreenshotCard.vue","../../src/views/snapshot/SearchCard.vue","../../src/components/GapList.ts","../../src/views/snapshot/WindowCard.vue","../../src/views/snapshot/SnapshotPage.vue"],"sourcesContent":["export function createDataKey(key) {\n return typeof key === 'string' ? `s-${key}` : `n-${key}`;\n}","import { defineComponent, h } from 'vue';\nexport default defineComponent({\n name: 'Switcher',\n render() {\n return h(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 32 32\"\n }, h(\"path\", {\n d: \"M12 8l10 8l-10 8z\"\n }));\n }\n});","import { c, cB, cE, cM, cNotM } from \"../../../_utils/cssr/index.mjs\";\nexport const zero = '0!important';\nexport const n1 = '-1px!important';\nfunction createLeftBorderStyle(type) {\n return cM(`${type}-type`, [c('& +', [cB('button', {}, [cM(`${type}-type`, [cE('border', {\n borderLeftWidth: zero\n }), cE('state-border', {\n left: n1\n })])])])]);\n}\nfunction createTopBorderStyle(type) {\n return cM(`${type}-type`, [c('& +', [cB('button', [cM(`${type}-type`, [cE('border', {\n borderTopWidth: zero\n }), cE('state-border', {\n top: n1\n })])])])]);\n}\nexport default cB('button-group', `\n flex-wrap: nowrap;\n display: inline-flex;\n position: relative;\n`, [cNotM('vertical', {\n flexDirection: 'row'\n}, [cNotM('rtl', [cB('button', [c('&:first-child:not(:last-child)', `\n margin-right: ${zero};\n border-top-right-radius: ${zero};\n border-bottom-right-radius: ${zero};\n `), c('&:last-child:not(:first-child)', `\n margin-left: ${zero};\n border-top-left-radius: ${zero};\n border-bottom-left-radius: ${zero};\n `), c('&:not(:first-child):not(:last-child)', `\n margin-left: ${zero};\n margin-right: ${zero};\n border-radius: ${zero};\n `), createLeftBorderStyle('default'), cM('ghost', [createLeftBorderStyle('primary'), createLeftBorderStyle('info'), createLeftBorderStyle('success'), createLeftBorderStyle('warning'), createLeftBorderStyle('error')])])])]), cM('vertical', {\n flexDirection: 'column'\n}, [cB('button', [c('&:first-child:not(:last-child)', `\n margin-bottom: ${zero};\n margin-left: ${zero};\n margin-right: ${zero};\n border-bottom-left-radius: ${zero};\n border-bottom-right-radius: ${zero};\n `), c('&:last-child:not(:first-child)', `\n margin-top: ${zero};\n margin-left: ${zero};\n margin-right: ${zero};\n border-top-left-radius: ${zero};\n border-top-right-radius: ${zero};\n `), c('&:not(:first-child):not(:last-child)', `\n margin: ${zero};\n border-radius: ${zero};\n `), createTopBorderStyle('default'), cM('ghost', [createTopBorderStyle('primary'), createTopBorderStyle('info'), createTopBorderStyle('success'), createTopBorderStyle('warning'), createTopBorderStyle('error')])])])]);","import { defineComponent, h, provide } from 'vue';\nimport { useConfig, useStyle } from \"../../_mixins/index.mjs\";\nimport { useRtl } from \"../../_mixins/use-rtl.mjs\";\nimport { buttonGroupInjectionKey } from \"./context.mjs\";\nimport style from \"./styles/index.cssr.mjs\";\nexport const buttonGroupProps = {\n size: {\n type: String,\n default: undefined\n },\n vertical: Boolean\n};\nexport default defineComponent({\n name: 'ButtonGroup',\n props: buttonGroupProps,\n setup(props) {\n const {\n mergedClsPrefixRef,\n mergedRtlRef\n } = useConfig(props);\n useStyle('-button-group', style, mergedClsPrefixRef);\n provide(buttonGroupInjectionKey, props);\n const rtlEnabledRef = useRtl('ButtonGroup', mergedRtlRef, mergedClsPrefixRef);\n return {\n rtlEnabled: rtlEnabledRef,\n mergedClsPrefix: mergedClsPrefixRef\n };\n },\n render() {\n const {\n mergedClsPrefix\n } = this;\n return h(\"div\", {\n class: [`${mergedClsPrefix}-button-group`, this.rtlEnabled && `${mergedClsPrefix}-button-group--rtl`, this.vertical && `${mergedClsPrefix}-button-group--vertical`],\n role: \"group\"\n }, this.$slots);\n }\n});","import { createTheme } from \"../../_mixins/index.mjs\";\nimport { commonLight } from \"../../_styles/common/index.mjs\";\nimport { tooltipLight } from \"../../tooltip/styles/index.mjs\";\nconst ellipsisLight = createTheme({\n name: 'Ellipsis',\n common: commonLight,\n peers: {\n Tooltip: tooltipLight\n }\n});\nexport default ellipsisLight;","import { cB, cM, cNotM } from \"../../../_utils/cssr/index.mjs\";\nexport default cB('ellipsis', {\n overflow: 'hidden'\n}, [cNotM('line-clamp', `\n white-space: nowrap;\n display: inline-block;\n vertical-align: bottom;\n max-width: 100%;\n `), cM('line-clamp', `\n display: -webkit-inline-box;\n -webkit-box-orient: vertical;\n `), cM('cursor-pointer', `\n cursor: pointer;\n `)]);","import { computed, defineComponent, h, mergeProps, onDeactivated, ref } from 'vue';\nimport { useTheme } from \"../../_mixins/index.mjs\";\nimport { useMergedClsPrefix } from \"../../_mixins/use-config.mjs\";\nimport { NTooltip } from \"../../tooltip/index.mjs\";\nimport { ellipsisLight } from \"../styles/index.mjs\";\nimport style from \"./styles/index.cssr.mjs\";\nexport function createLineClampClass(clsPrefix) {\n return `${clsPrefix}-ellipsis--line-clamp`;\n}\nexport function createCursorClass(clsPrefix, cursor) {\n return `${clsPrefix}-ellipsis--cursor-${cursor}`;\n}\nexport const ellipsisProps = Object.assign(Object.assign({}, useTheme.props), {\n expandTrigger: String,\n lineClamp: [Number, String],\n tooltip: {\n type: [Boolean, Object],\n default: true\n }\n});\nexport default defineComponent({\n name: 'Ellipsis',\n inheritAttrs: false,\n props: ellipsisProps,\n slots: Object,\n setup(props, {\n slots,\n attrs\n }) {\n const mergedClsPrefixRef = useMergedClsPrefix();\n const mergedTheme = useTheme('Ellipsis', '-ellipsis', style, ellipsisLight, props, mergedClsPrefixRef);\n const triggerRef = ref(null);\n const triggerInnerRef = ref(null);\n const tooltipRef = ref(null);\n const expandedRef = ref(false);\n const ellipsisStyleRef = computed(() => {\n const {\n lineClamp\n } = props;\n const {\n value: expanded\n } = expandedRef;\n if (lineClamp !== undefined) {\n return {\n textOverflow: '',\n '-webkit-line-clamp': expanded ? '' : lineClamp\n };\n } else {\n return {\n textOverflow: expanded ? '' : 'ellipsis',\n '-webkit-line-clamp': ''\n };\n }\n });\n function getTooltipDisabled() {\n let tooltipDisabled = false;\n const {\n value: expanded\n } = expandedRef;\n if (expanded) return true;\n const {\n value: trigger\n } = triggerRef;\n if (trigger) {\n const {\n lineClamp\n } = props;\n // we need to apply style here, since the dom may be updated in\n // nextTick, measure dom size will derive wrong result\n syncEllipsisStyle(trigger);\n if (lineClamp !== undefined) {\n tooltipDisabled = trigger.scrollHeight <= trigger.offsetHeight;\n } else {\n const {\n value: triggerInner\n } = triggerInnerRef;\n if (triggerInner) {\n tooltipDisabled = triggerInner.getBoundingClientRect().width <= trigger.getBoundingClientRect().width;\n }\n }\n syncCursorStyle(trigger, tooltipDisabled);\n }\n return tooltipDisabled;\n }\n const handleClickRef = computed(() => {\n return props.expandTrigger === 'click' ? () => {\n var _a;\n const {\n value: expanded\n } = expandedRef;\n if (expanded) {\n (_a = tooltipRef.value) === null || _a === void 0 ? void 0 : _a.setShow(false);\n }\n expandedRef.value = !expanded;\n } : undefined;\n });\n onDeactivated(() => {\n var _a;\n if (props.tooltip) {\n (_a = tooltipRef.value) === null || _a === void 0 ? void 0 : _a.setShow(false);\n }\n });\n const renderTrigger = () => h(\"span\", Object.assign({}, mergeProps(attrs, {\n class: [`${mergedClsPrefixRef.value}-ellipsis`, props.lineClamp !== undefined ? createLineClampClass(mergedClsPrefixRef.value) : undefined, props.expandTrigger === 'click' ? createCursorClass(mergedClsPrefixRef.value, 'pointer') : undefined],\n style: ellipsisStyleRef.value\n }), {\n ref: \"triggerRef\",\n onClick: handleClickRef.value,\n onMouseenter:\n // get tooltip disabled will derive cursor style\n props.expandTrigger === 'click' ? getTooltipDisabled : undefined\n }), props.lineClamp ? slots : h(\"span\", {\n ref: \"triggerInnerRef\"\n }, slots));\n function syncEllipsisStyle(trigger) {\n if (!trigger) return;\n const latestStyle = ellipsisStyleRef.value;\n const lineClampClass = createLineClampClass(mergedClsPrefixRef.value);\n if (props.lineClamp !== undefined) {\n syncTriggerClass(trigger, lineClampClass, 'add');\n } else {\n syncTriggerClass(trigger, lineClampClass, 'remove');\n }\n for (const key in latestStyle) {\n // guard can make it a little faster\n if (trigger.style[key] !== latestStyle[key]) {\n ;\n trigger.style[key] = latestStyle[key];\n }\n }\n }\n function syncCursorStyle(trigger, tooltipDisabled) {\n const cursorClass = createCursorClass(mergedClsPrefixRef.value, 'pointer');\n if (props.expandTrigger === 'click' && !tooltipDisabled) {\n syncTriggerClass(trigger, cursorClass, 'add');\n } else {\n syncTriggerClass(trigger, cursorClass, 'remove');\n }\n }\n function syncTriggerClass(trigger, styleClass, action) {\n if (action === 'add') {\n if (!trigger.classList.contains(styleClass)) {\n trigger.classList.add(styleClass);\n }\n } else {\n if (trigger.classList.contains(styleClass)) {\n trigger.classList.remove(styleClass);\n }\n }\n }\n return {\n mergedTheme,\n triggerRef,\n triggerInnerRef,\n tooltipRef,\n handleClick: handleClickRef,\n renderTrigger,\n getTooltipDisabled\n };\n },\n render() {\n var _a;\n const {\n tooltip,\n renderTrigger,\n $slots\n } = this;\n if (tooltip) {\n const {\n mergedTheme\n } = this;\n return h(NTooltip, Object.assign({\n ref: \"tooltipRef\",\n placement: \"top\"\n }, tooltip, {\n getDisabled: this.getTooltipDisabled,\n theme: mergedTheme.peers.Tooltip,\n themeOverrides: mergedTheme.peerOverrides.Tooltip\n }), {\n trigger: renderTrigger,\n default: (_a = $slots.tooltip) !== null && _a !== void 0 ? _a : $slots.default\n });\n } else {\n return renderTrigger();\n }\n }\n});","import { defineComponent, h, ref } from 'vue';\nimport { NScrollbar } from \"../../_internal/index.mjs\";\nimport { useTheme } from \"../../_mixins/index.mjs\";\nexport const scrollbarProps = Object.assign(Object.assign({}, useTheme.props), {\n trigger: String,\n xScrollable: Boolean,\n onScroll: Function,\n contentClass: String,\n contentStyle: [Object, String],\n size: Number,\n yPlacement: {\n type: String,\n default: 'right'\n },\n xPlacement: {\n type: String,\n default: 'bottom'\n }\n});\nconst Scrollbar = defineComponent({\n name: 'Scrollbar',\n props: scrollbarProps,\n setup() {\n const scrollbarInstRef = ref(null);\n const exposedMethods = {\n scrollTo: (...args) => {\n var _a;\n (_a = scrollbarInstRef.value) === null || _a === void 0 ? void 0 : _a.scrollTo(args[0], args[1]);\n },\n scrollBy: (...args) => {\n var _a;\n (_a = scrollbarInstRef.value) === null || _a === void 0 ? void 0 : _a.scrollBy(args[0], args[1]);\n }\n };\n return Object.assign(Object.assign({}, exposedMethods), {\n scrollbarInstRef\n });\n },\n render() {\n return h(NScrollbar, Object.assign({\n ref: \"scrollbarInstRef\"\n }, this.$props), this.$slots);\n }\n});\nexport default Scrollbar;","import { c, cB, cM, cNotM, insideModal, insidePopover } from \"../../../_utils/cssr/index.mjs\";\n// vars:\n// --n-bezier\n// --n-td-color\n// --n-td-color-modal\n// --n-td-color-popover\n// --n-td-text-color\n// --n-border-color\n// --n-border-color-modal\n// --n-border-color-popover\n// --n-border-radius\n// --n-font-size\n// --n-th-color\n// --n-th-color-modal\n// --n-th-color-popover\n// --n-th-font-weight\n// --n-th-text-color\n// --n-line-height\n// --n-td-padding\n// --n-th-padding\nexport default c([cB('table', `\n font-size: var(--n-font-size);\n font-variant-numeric: tabular-nums;\n line-height: var(--n-line-height);\n width: 100%;\n border-radius: var(--n-border-radius) var(--n-border-radius) 0 0;\n text-align: left;\n border-collapse: separate;\n border-spacing: 0;\n overflow: hidden;\n background-color: var(--n-td-color);\n border-color: var(--n-merged-border-color);\n transition:\n background-color .3s var(--n-bezier),\n border-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n --n-merged-border-color: var(--n-border-color);\n `, [c('th', `\n white-space: nowrap;\n transition:\n background-color .3s var(--n-bezier),\n border-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n text-align: inherit;\n padding: var(--n-th-padding);\n vertical-align: inherit;\n text-transform: none;\n border: 0px solid var(--n-merged-border-color);\n font-weight: var(--n-th-font-weight);\n color: var(--n-th-text-color);\n background-color: var(--n-th-color);\n border-bottom: 1px solid var(--n-merged-border-color);\n border-right: 1px solid var(--n-merged-border-color);\n `, [c('&:last-child', `\n border-right: 0px solid var(--n-merged-border-color);\n `)]), c('td', `\n transition:\n background-color .3s var(--n-bezier),\n border-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n padding: var(--n-td-padding);\n color: var(--n-td-text-color);\n background-color: var(--n-td-color);\n border: 0px solid var(--n-merged-border-color);\n border-right: 1px solid var(--n-merged-border-color);\n border-bottom: 1px solid var(--n-merged-border-color);\n `, [c('&:last-child', `\n border-right: 0px solid var(--n-merged-border-color);\n `)]), cM('bordered', `\n border: 1px solid var(--n-merged-border-color);\n border-radius: var(--n-border-radius);\n `, [c('tr', [c('&:last-child', [c('td', `\n border-bottom: 0 solid var(--n-merged-border-color);\n `)])])]), cM('single-line', [c('th', `\n border-right: 0px solid var(--n-merged-border-color);\n `), c('td', `\n border-right: 0px solid var(--n-merged-border-color);\n `)]), cM('single-column', [c('tr', [c('&:not(:last-child)', [c('td', `\n border-bottom: 0px solid var(--n-merged-border-color);\n `)])])]), cM('striped', [c('tr:nth-of-type(even)', [c('td', 'background-color: var(--n-td-color-striped)')])]), cNotM('bottom-bordered', [c('tr', [c('&:last-child', [c('td', `\n border-bottom: 0px solid var(--n-merged-border-color);\n `)])])])]), insideModal(cB('table', `\n background-color: var(--n-td-color-modal);\n --n-merged-border-color: var(--n-border-color-modal);\n `, [c('th', `\n background-color: var(--n-th-color-modal);\n `), c('td', `\n background-color: var(--n-td-color-modal);\n `)])), insidePopover(cB('table', `\n background-color: var(--n-td-color-popover);\n --n-merged-border-color: var(--n-border-color-popover);\n `, [c('th', `\n background-color: var(--n-th-color-popover);\n `), c('td', `\n background-color: var(--n-td-color-popover);\n `)]))]);","import { computed, defineComponent, h } from 'vue';\nimport { useConfig, useTheme, useThemeClass } from \"../../_mixins/index.mjs\";\nimport { useRtl } from \"../../_mixins/use-rtl.mjs\";\nimport { createKey } from \"../../_utils/index.mjs\";\nimport { tableLight } from \"../styles/index.mjs\";\nimport style from \"./styles/index.cssr.mjs\";\nexport const tableProps = Object.assign(Object.assign({}, useTheme.props), {\n bordered: {\n type: Boolean,\n default: true\n },\n bottomBordered: {\n type: Boolean,\n default: true\n },\n singleLine: {\n type: Boolean,\n default: true\n },\n striped: Boolean,\n singleColumn: Boolean,\n size: {\n type: String,\n default: 'medium'\n }\n});\nexport default defineComponent({\n name: 'Table',\n props: tableProps,\n setup(props) {\n const {\n mergedClsPrefixRef,\n inlineThemeDisabled,\n mergedRtlRef\n } = useConfig(props);\n const themeRef = useTheme('Table', '-table', style, tableLight, props, mergedClsPrefixRef);\n const rtlEnabledRef = useRtl('Table', mergedRtlRef, mergedClsPrefixRef);\n const cssVarsRef = computed(() => {\n const {\n size\n } = props;\n const {\n self: {\n borderColor,\n tdColor,\n tdColorModal,\n tdColorPopover,\n thColor,\n thColorModal,\n thColorPopover,\n thTextColor,\n tdTextColor,\n borderRadius,\n thFontWeight,\n lineHeight,\n borderColorModal,\n borderColorPopover,\n tdColorStriped,\n tdColorStripedModal,\n tdColorStripedPopover,\n [createKey('fontSize', size)]: fontSize,\n [createKey('tdPadding', size)]: tdPadding,\n [createKey('thPadding', size)]: thPadding\n },\n common: {\n cubicBezierEaseInOut\n }\n } = themeRef.value;\n return {\n '--n-bezier': cubicBezierEaseInOut,\n '--n-td-color': tdColor,\n '--n-td-color-modal': tdColorModal,\n '--n-td-color-popover': tdColorPopover,\n '--n-td-text-color': tdTextColor,\n '--n-border-color': borderColor,\n '--n-border-color-modal': borderColorModal,\n '--n-border-color-popover': borderColorPopover,\n '--n-border-radius': borderRadius,\n '--n-font-size': fontSize,\n '--n-th-color': thColor,\n '--n-th-color-modal': thColorModal,\n '--n-th-color-popover': thColorPopover,\n '--n-th-font-weight': thFontWeight,\n '--n-th-text-color': thTextColor,\n '--n-line-height': lineHeight,\n '--n-td-padding': tdPadding,\n '--n-th-padding': thPadding,\n '--n-td-color-striped': tdColorStriped,\n '--n-td-color-striped-modal': tdColorStripedModal,\n '--n-td-color-striped-popover': tdColorStripedPopover\n };\n });\n const themeClassHandle = inlineThemeDisabled ? useThemeClass('table', computed(() => {\n return props.size[0];\n }), cssVarsRef, props) : undefined;\n return {\n rtlEnabled: rtlEnabledRef,\n mergedClsPrefix: mergedClsPrefixRef,\n cssVars: inlineThemeDisabled ? undefined : cssVarsRef,\n themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass,\n onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender\n };\n },\n render() {\n var _a;\n const {\n mergedClsPrefix\n } = this;\n (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this);\n return h(\"table\", {\n class: [`${mergedClsPrefix}-table`, this.themeClass, {\n [`${mergedClsPrefix}-table--rtl`]: this.rtlEnabled,\n [`${mergedClsPrefix}-table--bottom-bordered`]: this.bottomBordered,\n [`${mergedClsPrefix}-table--bordered`]: this.bordered,\n [`${mergedClsPrefix}-table--single-line`]: this.singleLine,\n [`${mergedClsPrefix}-table--single-column`]: this.singleColumn,\n [`${mergedClsPrefix}-table--striped`]: this.striped\n }],\n style: this.cssVars\n }, this.$slots);\n }\n});","import { defineComponent, h } from 'vue';\nexport default defineComponent({\n name: 'Tbody',\n render() {\n return h(\"tbody\", null, this.$slots);\n }\n});","import { defineComponent, h } from 'vue';\nexport default defineComponent({\n name: 'Td',\n render() {\n return h(\"td\", null, this.$slots);\n }\n});","import { defineComponent, h } from 'vue';\nexport default defineComponent({\n name: 'Tr',\n render() {\n return h(\"tr\", null, this.$slots);\n }\n});","import { createInjectionKey } from \"../../_utils/index.mjs\";\nexport const treeSelectInjectionKey = createInjectionKey('n-tree-select');","import { h } from 'vue';\nexport function renderDropMark({\n position,\n offsetLevel,\n indent,\n el\n}) {\n const style = {\n position: 'absolute',\n boxSizing: 'border-box',\n right: 0\n };\n if (position === 'inside') {\n style.left = 0;\n style.top = 0;\n style.bottom = 0;\n style.borderRadius = 'inherit';\n style.boxShadow = 'inset 0 0 0 2px var(--n-drop-mark-color)';\n } else {\n const cssPosition = position === 'before' ? 'top' : 'bottom';\n style[cssPosition] = 0;\n // The left prop should be modified when tree's style is changed\n // Maybe it is possible to use content left\n style.left = `${el.offsetLeft + 6 - offsetLevel * indent}px`;\n style.height = '2px';\n style.backgroundColor = 'var(--n-drop-mark-color)';\n style.transformOrigin = cssPosition;\n style.borderRadius = '1px';\n style.transform = position === 'before' ? 'translateY(-4px)' : 'translateY(4px)';\n }\n return h(\"div\", {\n style: style\n });\n}\nexport function defaultAllowDrop({\n dropPosition,\n node\n}) {\n if (node.isLeaf === false) return true;\n if (node.children) {\n return true;\n }\n return dropPosition !== 'inside';\n}","import { createInjectionKey } from \"../../_utils/index.mjs\";\nexport const treeInjectionKey = createInjectionKey('n-tree');","import { inject, ref } from 'vue';\nimport { treeSelectInjectionKey } from \"../../tree-select/src/interface.mjs\";\nexport function useKeyboard({\n props,\n fNodesRef,\n mergedExpandedKeysRef,\n mergedSelectedKeysRef,\n mergedCheckedKeysRef,\n handleCheck,\n handleSelect,\n handleSwitcherClick\n}) {\n const {\n value: mergedSelectedKeys\n } = mergedSelectedKeysRef;\n // If it's used in tree-select, make it take over pending state\n const treeSelectInjection = inject(treeSelectInjectionKey, null);\n const pendingNodeKeyRef = treeSelectInjection ? treeSelectInjection.pendingNodeKeyRef : ref(mergedSelectedKeys.length ? mergedSelectedKeys[mergedSelectedKeys.length - 1] : null);\n function handleKeydown(e) {\n var _a;\n if (!props.keyboard) return {\n enterBehavior: null\n };\n const {\n value: pendingNodeKey\n } = pendingNodeKeyRef;\n let enterBehavior = null;\n if (pendingNodeKey === null) {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n }\n if (['ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n if (pendingNodeKey === null) {\n const {\n value: fNodes\n } = fNodesRef;\n let fIndex = 0;\n while (fIndex < fNodes.length) {\n if (!fNodes[fIndex].disabled) {\n pendingNodeKeyRef.value = fNodes[fIndex].key;\n break;\n }\n fIndex += 1;\n }\n }\n }\n } else {\n const {\n value: fNodes\n } = fNodesRef;\n let fIndex = fNodes.findIndex(tmNode => tmNode.key === pendingNodeKey);\n if (!~fIndex) return {\n enterBehavior: null\n };\n if (e.key === 'Enter') {\n const tmNode = fNodes[fIndex];\n enterBehavior = ((_a = props.overrideDefaultNodeClickBehavior) === null || _a === void 0 ? void 0 : _a.call(props, {\n option: tmNode.rawNode\n })) || null;\n switch (enterBehavior) {\n case 'toggleCheck':\n handleCheck(tmNode, !mergedCheckedKeysRef.value.includes(tmNode.key));\n break;\n case 'toggleSelect':\n handleSelect(tmNode);\n break;\n case 'toggleExpand':\n handleSwitcherClick(tmNode);\n break;\n case 'none':\n break;\n case 'default':\n default:\n enterBehavior = 'default';\n handleSelect(tmNode);\n }\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n fIndex += 1;\n while (fIndex < fNodes.length) {\n if (!fNodes[fIndex].disabled) {\n pendingNodeKeyRef.value = fNodes[fIndex].key;\n break;\n }\n fIndex += 1;\n }\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n fIndex -= 1;\n while (fIndex >= 0) {\n if (!fNodes[fIndex].disabled) {\n pendingNodeKeyRef.value = fNodes[fIndex].key;\n break;\n }\n fIndex -= 1;\n }\n } else if (e.key === 'ArrowLeft') {\n const pendingNode = fNodes[fIndex];\n if (pendingNode.isLeaf || !mergedExpandedKeysRef.value.includes(pendingNodeKey)) {\n const parentTmNode = pendingNode.getParent();\n if (parentTmNode) {\n pendingNodeKeyRef.value = parentTmNode.key;\n }\n } else {\n handleSwitcherClick(pendingNode);\n }\n } else if (e.key === 'ArrowRight') {\n const pendingNode = fNodes[fIndex];\n if (pendingNode.isLeaf) return {\n enterBehavior: null\n };\n if (!mergedExpandedKeysRef.value.includes(pendingNodeKey)) {\n handleSwitcherClick(pendingNode);\n } else {\n // Tha same as ArrowDown\n fIndex += 1;\n while (fIndex < fNodes.length) {\n if (!fNodes[fIndex].disabled) {\n pendingNodeKeyRef.value = fNodes[fIndex].key;\n break;\n }\n fIndex += 1;\n }\n }\n }\n }\n return {\n enterBehavior\n };\n }\n return {\n pendingNodeKeyRef,\n handleKeydown\n };\n}","import { defineComponent, h, inject } from 'vue';\nimport { NCheckbox } from \"../../checkbox/index.mjs\";\nimport { treeInjectionKey } from \"./interface.mjs\";\nexport default defineComponent({\n name: 'NTreeNodeCheckbox',\n props: {\n clsPrefix: {\n type: String,\n required: true\n },\n indent: {\n type: Number,\n required: true\n },\n right: Boolean,\n focusable: Boolean,\n disabled: Boolean,\n checked: Boolean,\n indeterminate: Boolean,\n onCheck: Function\n },\n setup(props) {\n const NTree = inject(treeInjectionKey);\n function doCheck(value) {\n const {\n onCheck\n } = props;\n if (onCheck) {\n onCheck(value);\n }\n }\n function handleUpdateValue(value) {\n doCheck(value);\n }\n return {\n handleUpdateValue,\n mergedTheme: NTree.mergedThemeRef\n };\n },\n render() {\n const {\n clsPrefix,\n mergedTheme,\n checked,\n indeterminate,\n disabled,\n focusable,\n indent,\n handleUpdateValue\n } = this;\n return h(\"span\", {\n class: [`${clsPrefix}-tree-node-checkbox`, this.right && `${clsPrefix}-tree-node-checkbox--right`],\n style: {\n width: `${indent}px`\n },\n \"data-checkbox\": true\n }, h(NCheckbox, {\n focusable: focusable,\n disabled: disabled,\n theme: mergedTheme.peers.Checkbox,\n themeOverrides: mergedTheme.peerOverrides.Checkbox,\n checked: checked,\n indeterminate: indeterminate,\n onUpdateChecked: handleUpdateValue\n }));\n }\n});","import { defineComponent, h, inject, ref } from 'vue';\nimport { render } from \"../../_utils/index.mjs\";\nimport { treeInjectionKey } from \"./interface.mjs\";\nexport default defineComponent({\n name: 'TreeNodeContent',\n props: {\n clsPrefix: {\n type: String,\n required: true\n },\n disabled: Boolean,\n checked: Boolean,\n selected: Boolean,\n onClick: Function,\n onDragstart: Function,\n tmNode: {\n type: Object,\n required: true\n },\n nodeProps: Object\n },\n setup(props) {\n const {\n renderLabelRef,\n renderPrefixRef,\n renderSuffixRef,\n labelFieldRef\n } = inject(treeInjectionKey);\n const selfRef = ref(null);\n function doClick(e) {\n const {\n onClick\n } = props;\n if (onClick) onClick(e);\n }\n function handleClick(e) {\n doClick(e);\n }\n return {\n selfRef,\n renderLabel: renderLabelRef,\n renderPrefix: renderPrefixRef,\n renderSuffix: renderSuffixRef,\n labelField: labelFieldRef,\n handleClick\n };\n },\n render() {\n const {\n clsPrefix,\n labelField,\n nodeProps,\n checked = false,\n selected = false,\n renderLabel,\n renderPrefix,\n renderSuffix,\n handleClick,\n onDragstart,\n tmNode: {\n rawNode,\n rawNode: {\n prefix,\n suffix,\n [labelField]: label\n }\n }\n } = this;\n return h(\"span\", Object.assign({}, nodeProps, {\n ref: \"selfRef\",\n class: [`${clsPrefix}-tree-node-content`, nodeProps === null || nodeProps === void 0 ? void 0 : nodeProps.class],\n onClick: handleClick,\n draggable: onDragstart === undefined ? undefined : true,\n onDragstart: onDragstart\n }), renderPrefix || prefix ? h(\"div\", {\n class: `${clsPrefix}-tree-node-content__prefix`\n }, renderPrefix ? renderPrefix({\n option: rawNode,\n selected,\n checked\n }) : render(prefix)) : null, h(\"div\", {\n class: `${clsPrefix}-tree-node-content__text`\n }, renderLabel ? renderLabel({\n option: rawNode,\n selected,\n checked\n }) : render(label)), renderSuffix || suffix ? h(\"div\", {\n class: `${clsPrefix}-tree-node-content__suffix`\n }, renderSuffix ? renderSuffix({\n option: rawNode,\n selected,\n checked\n }) : render(suffix)) : null);\n }\n});","import { defineComponent, h, inject } from 'vue';\nimport { NBaseIcon, NBaseLoading, NIconSwitchTransition } from \"../../_internal/index.mjs\";\nimport { SwitcherIcon } from \"../../_internal/icons/index.mjs\";\nimport { treeInjectionKey } from \"./interface.mjs\";\nexport default defineComponent({\n name: 'NTreeSwitcher',\n props: {\n clsPrefix: {\n type: String,\n required: true\n },\n indent: {\n type: Number,\n required: true\n },\n expanded: Boolean,\n selected: Boolean,\n hide: Boolean,\n loading: Boolean,\n onClick: Function,\n tmNode: {\n type: Object,\n required: true\n }\n },\n setup(props) {\n const {\n renderSwitcherIconRef\n } = inject(treeInjectionKey, null);\n return () => {\n const {\n clsPrefix,\n expanded,\n hide,\n indent,\n onClick\n } = props;\n return h(\"span\", {\n \"data-switcher\": true,\n class: [`${clsPrefix}-tree-node-switcher`, expanded && `${clsPrefix}-tree-node-switcher--expanded`, hide && `${clsPrefix}-tree-node-switcher--hide`],\n style: {\n width: `${indent}px`\n },\n onClick: onClick\n }, h(\"div\", {\n class: `${clsPrefix}-tree-node-switcher__icon`\n }, h(NIconSwitchTransition, null, {\n default: () => {\n if (props.loading) {\n return h(NBaseLoading, {\n clsPrefix: clsPrefix,\n key: \"loading\",\n radius: 85,\n strokeWidth: 20\n });\n }\n const {\n value: renderSwitcherIcon\n } = renderSwitcherIconRef;\n return renderSwitcherIcon ? renderSwitcherIcon({\n expanded: props.expanded,\n selected: props.selected,\n option: props.tmNode.rawNode\n }) : h(NBaseIcon, {\n clsPrefix: clsPrefix,\n key: \"switcher\"\n }, {\n default: () => h(SwitcherIcon, null)\n });\n }\n })));\n };\n }\n});","import { happensIn } from 'seemly';\nimport { computed } from 'vue';\nimport { isBrowser } from \"../../_utils/index.mjs\";\nexport function useMergedCheckStrategy(props) {\n return computed(() => props.leafOnly ? 'child' : props.checkStrategy);\n}\nexport function isNodeDisabled(node, disabledField) {\n return !!node.rawNode[disabledField];\n}\nfunction traverse(nodes, childrenField, callback, callbackAfter) {\n nodes === null || nodes === void 0 ? void 0 : nodes.forEach(node => {\n callback(node);\n traverse(node[childrenField], childrenField, callback, callbackAfter);\n callbackAfter(node);\n });\n}\nexport function keysWithFilter(nodes, pattern, keyField, childrenField, filter) {\n const keys = new Set();\n const highlightKeySet = new Set();\n const path = [];\n traverse(nodes, childrenField, node => {\n path.push(node);\n if (filter(pattern, node)) {\n highlightKeySet.add(node[keyField]);\n for (let i = path.length - 2; i >= 0; --i) {\n if (!keys.has(path[i][keyField])) {\n keys.add(path[i][keyField]);\n } else {\n return;\n }\n }\n }\n }, () => {\n path.pop();\n });\n return {\n expandedKeys: Array.from(keys),\n highlightKeySet\n };\n}\nconst emptyImage = null;\nif (isBrowser && Image) {\n const emptyImage = new Image();\n emptyImage.src = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n}\nexport { emptyImage };\nexport function filterTree(tree, filter, pattern, keyField, childrenField) {\n const visitedTailKeys = new Set();\n const visitedNonTailKeys = new Set();\n const highlightKeySet = new Set();\n const expandedKeys = [];\n const filteredTree = [];\n const path = [];\n function visit(t) {\n t.forEach(n => {\n path.push(n);\n if (filter(pattern, n)) {\n visitedTailKeys.add(n[keyField]);\n highlightKeySet.add(n[keyField]);\n for (let i = path.length - 2; i >= 0; --i) {\n const key = path[i][keyField];\n if (!visitedNonTailKeys.has(key)) {\n visitedNonTailKeys.add(key);\n if (visitedTailKeys.has(key)) {\n visitedTailKeys.delete(key);\n }\n } else {\n break;\n }\n }\n }\n const children = n[childrenField];\n if (children) {\n visit(children);\n }\n path.pop();\n });\n }\n visit(tree);\n function build(t, sibs) {\n t.forEach(n => {\n const key = n[keyField];\n const isVisitedTail = visitedTailKeys.has(key);\n const isVisitedNonTail = visitedNonTailKeys.has(key);\n if (!isVisitedTail && !isVisitedNonTail) return;\n const children = n[childrenField];\n if (children) {\n if (isVisitedTail) {\n // If it is visited path tail, use origin node\n sibs.push(n);\n } else {\n // It it is not visited path tail, use cloned node\n expandedKeys.push(key);\n const clonedNode = Object.assign(Object.assign({}, n), {\n [childrenField]: []\n });\n sibs.push(clonedNode);\n build(children, clonedNode[childrenField]);\n }\n } else {\n sibs.push(n);\n }\n });\n }\n build(tree, filteredTree);\n return {\n filteredTree,\n highlightKeySet,\n expandedKeys\n };\n}\nexport function treeGetClickTarget(e) {\n if (happensIn(e, 'checkbox')) {\n return 'checkbox';\n } else if (happensIn(e, 'switcher')) {\n return 'switcher';\n } else {\n return 'node';\n }\n}","import { happensIn, repeat } from 'seemly';\nimport { useMemo } from 'vooks';\nimport { computed, defineComponent, h, inject, onMounted, ref } from 'vue';\nimport { createDataKey } from \"../../_utils/index.mjs\";\nimport { renderDropMark } from \"./dnd.mjs\";\nimport { treeInjectionKey } from \"./interface.mjs\";\nimport NTreeNodeCheckbox from \"./TreeNodeCheckbox.mjs\";\nimport NTreeNodeContent from \"./TreeNodeContent.mjs\";\nimport NTreeNodeSwitcher from \"./TreeNodeSwitcher.mjs\";\nimport { isNodeDisabled } from \"./utils.mjs\";\nconst TreeNode = defineComponent({\n name: 'TreeNode',\n props: {\n clsPrefix: {\n type: String,\n required: true\n },\n tmNode: {\n type: Object,\n required: true\n }\n },\n setup(props) {\n const NTree = inject(treeInjectionKey);\n const {\n droppingNodeParentRef,\n droppingMouseNodeRef,\n draggingNodeRef,\n droppingPositionRef,\n droppingOffsetLevelRef,\n nodePropsRef,\n indentRef,\n blockLineRef,\n checkboxPlacementRef,\n checkOnClickRef,\n disabledFieldRef,\n showLineRef,\n renderSwitcherIconRef,\n overrideDefaultNodeClickBehaviorRef\n } = NTree;\n const checkboxDisabledRef = useMemo(() => !!props.tmNode.rawNode.checkboxDisabled);\n const nodeIsDisabledRef = useMemo(() => {\n return isNodeDisabled(props.tmNode, disabledFieldRef.value);\n });\n const disabledRef = useMemo(() => NTree.disabledRef.value || nodeIsDisabledRef.value);\n const resolvedNodePropsRef = computed(() => {\n const {\n value: nodeProps\n } = nodePropsRef;\n if (!nodeProps) return undefined;\n return nodeProps({\n option: props.tmNode.rawNode\n });\n });\n // used for drag and drop\n const contentInstRef = ref(null);\n // must be non-reactive\n const contentElRef = {\n value: null\n };\n onMounted(() => {\n contentElRef.value = contentInstRef.value.$el;\n });\n function handleSwitcherClick() {\n const callback = () => {\n const {\n tmNode\n } = props;\n if (!tmNode.isLeaf && !tmNode.shallowLoaded) {\n if (!NTree.loadingKeysRef.value.has(tmNode.key)) {\n NTree.loadingKeysRef.value.add(tmNode.key);\n } else {\n return;\n }\n const {\n onLoadRef: {\n value: onLoad\n }\n } = NTree;\n if (onLoad) {\n void onLoad(tmNode.rawNode).then(value => {\n if (value !== false) {\n NTree.handleSwitcherClick(tmNode);\n }\n }).finally(() => {\n NTree.loadingKeysRef.value.delete(tmNode.key);\n });\n }\n } else {\n NTree.handleSwitcherClick(tmNode);\n }\n };\n if (renderSwitcherIconRef.value) {\n // if renderSwitcherIcon is set, icon dom may be altered before event\n // bubbles to parent dom, so that target check fails. Call it in next\n // event loop so that event bubble phase is finishes.\n setTimeout(callback, 0);\n } else {\n callback();\n }\n }\n const selectableRef = useMemo(() => !nodeIsDisabledRef.value && NTree.selectableRef.value && (NTree.internalTreeSelect ? NTree.mergedCheckStrategyRef.value !== 'child' || NTree.multipleRef.value && NTree.cascadeRef.value || props.tmNode.isLeaf : true));\n const checkableRef = useMemo(() => NTree.checkableRef.value && (NTree.cascadeRef.value || NTree.mergedCheckStrategyRef.value !== 'child' || props.tmNode.isLeaf));\n const checkedRef = useMemo(() => NTree.displayedCheckedKeysRef.value.includes(props.tmNode.key));\n const mergedCheckOnClickRef = useMemo(() => {\n const {\n value: checkable\n } = checkableRef;\n if (!checkable) return false;\n const {\n value: checkOnClick\n } = checkOnClickRef;\n const {\n tmNode\n } = props;\n if (typeof checkOnClick === 'boolean') {\n return !tmNode.disabled && checkOnClick;\n }\n return checkOnClick(props.tmNode.rawNode);\n });\n function _handleClick(e) {\n const {\n value: expandOnClick\n } = NTree.expandOnClickRef;\n const {\n value: selectable\n } = selectableRef;\n const {\n value: mergedCheckOnClick\n } = mergedCheckOnClickRef;\n if (!selectable && !expandOnClick && !mergedCheckOnClick) return;\n if (happensIn(e, 'checkbox') || happensIn(e, 'switcher')) return;\n const {\n tmNode\n } = props;\n if (selectable) {\n NTree.handleSelect(tmNode);\n }\n if (expandOnClick && !tmNode.isLeaf) {\n handleSwitcherClick();\n }\n if (mergedCheckOnClick) {\n handleCheck(!checkedRef.value);\n }\n }\n function handleNodeClick(e) {\n var _a, _b;\n if (happensIn(e, 'checkbox') || happensIn(e, 'switcher')) return;\n if (!disabledRef.value) {\n const overrideDefaultNodeClickBehavior = overrideDefaultNodeClickBehaviorRef.value;\n let shouldOverride = false;\n if (overrideDefaultNodeClickBehavior) {\n switch (overrideDefaultNodeClickBehavior({\n option: props.tmNode.rawNode\n })) {\n case 'toggleCheck':\n shouldOverride = true;\n handleCheck(!checkedRef.value);\n break;\n case 'toggleSelect':\n shouldOverride = true;\n NTree.handleSelect(props.tmNode);\n break;\n case 'toggleExpand':\n shouldOverride = true;\n handleSwitcherClick();\n shouldOverride = true;\n break;\n case 'none':\n shouldOverride = true;\n shouldOverride = true;\n return;\n case 'default':\n default:\n break;\n }\n }\n if (!shouldOverride) {\n _handleClick(e);\n }\n }\n (_b = (_a = resolvedNodePropsRef.value) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n }\n function handleContentClick(e) {\n if (blockLineRef.value) return;\n handleNodeClick(e);\n }\n function handleLineClick(e) {\n if (!blockLineRef.value) return;\n handleNodeClick(e);\n }\n function handleCheck(checked) {\n NTree.handleCheck(props.tmNode, checked);\n }\n // Dnd\n function handleDragStart(e) {\n NTree.handleDragStart({\n event: e,\n node: props.tmNode\n });\n }\n function handleDragEnter(e) {\n if (e.currentTarget !== e.target) {\n return;\n }\n NTree.handleDragEnter({\n event: e,\n node: props.tmNode\n });\n }\n function handleDragOver(e) {\n e.preventDefault(); // if not prevent, drop event won't be fired...\n NTree.handleDragOver({\n event: e,\n node: props.tmNode\n });\n }\n function handleDragEnd(e) {\n NTree.handleDragEnd({\n event: e,\n node: props.tmNode\n });\n }\n function handleDragLeave(e) {\n if (e.currentTarget !== e.target) {\n return;\n }\n NTree.handleDragLeave({\n event: e,\n node: props.tmNode\n });\n }\n function handleDrop(e) {\n e.preventDefault();\n if (droppingPositionRef.value !== null) {\n NTree.handleDrop({\n event: e,\n node: props.tmNode,\n dropPosition: droppingPositionRef.value\n });\n }\n }\n const indentNodes = computed(() => {\n const {\n clsPrefix\n } = props;\n const {\n value: indent\n } = indentRef;\n if (showLineRef.value) {\n const indentNodes = [];\n let cursor = props.tmNode.parent;\n while (cursor) {\n if (cursor.isLastChild) {\n indentNodes.push(h(\"div\", {\n class: `${clsPrefix}-tree-node-indent`\n }, h(\"div\", {\n style: {\n width: `${indent}px`\n }\n })));\n } else {\n indentNodes.push(h(\"div\", {\n class: [`${clsPrefix}-tree-node-indent`, `${clsPrefix}-tree-node-indent--show-line`]\n }, h(\"div\", {\n style: {\n width: `${indent}px`\n }\n })));\n }\n cursor = cursor.parent;\n }\n return indentNodes.reverse();\n } else {\n return repeat(props.tmNode.level, h(\"div\", {\n class: `${props.clsPrefix}-tree-node-indent`\n }, h(\"div\", {\n style: {\n width: `${indent}px`\n }\n })));\n }\n });\n return {\n showDropMark: useMemo(() => {\n const {\n value: draggingNode\n } = draggingNodeRef;\n if (!draggingNode) return;\n const {\n value: droppingPosition\n } = droppingPositionRef;\n if (!droppingPosition) return;\n const {\n value: droppingMouseNode\n } = droppingMouseNodeRef;\n if (!droppingMouseNode) {\n return;\n }\n const {\n tmNode\n } = props;\n if (tmNode.key === droppingMouseNode.key) return true;\n return false;\n }),\n showDropMarkAsParent: useMemo(() => {\n const {\n value: droppingNodeParent\n } = droppingNodeParentRef;\n if (!droppingNodeParent) return false;\n const {\n tmNode\n } = props;\n const {\n value: droppingPosition\n } = droppingPositionRef;\n if (droppingPosition === 'before' || droppingPosition === 'after') {\n return droppingNodeParent.key === tmNode.key;\n }\n return false;\n }),\n pending: useMemo(() => NTree.pendingNodeKeyRef.value === props.tmNode.key),\n loading: useMemo(() => NTree.loadingKeysRef.value.has(props.tmNode.key)),\n highlight: useMemo(() => {\n var _a;\n return (_a = NTree.highlightKeySetRef.value) === null || _a === void 0 ? void 0 : _a.has(props.tmNode.key);\n }),\n checked: checkedRef,\n indeterminate: useMemo(() => NTree.displayedIndeterminateKeysRef.value.includes(props.tmNode.key)),\n selected: useMemo(() => NTree.mergedSelectedKeysRef.value.includes(props.tmNode.key)),\n expanded: useMemo(() => NTree.mergedExpandedKeysRef.value.includes(props.tmNode.key)),\n disabled: disabledRef,\n checkable: checkableRef,\n mergedCheckOnClick: mergedCheckOnClickRef,\n checkboxDisabled: checkboxDisabledRef,\n selectable: selectableRef,\n expandOnClick: NTree.expandOnClickRef,\n internalScrollable: NTree.internalScrollableRef,\n draggable: NTree.draggableRef,\n blockLine: blockLineRef,\n nodeProps: resolvedNodePropsRef,\n checkboxFocusable: NTree.internalCheckboxFocusableRef,\n droppingPosition: droppingPositionRef,\n droppingOffsetLevel: droppingOffsetLevelRef,\n indent: indentRef,\n checkboxPlacement: checkboxPlacementRef,\n showLine: showLineRef,\n contentInstRef,\n contentElRef,\n indentNodes,\n handleCheck,\n handleDrop,\n handleDragStart,\n handleDragEnter,\n handleDragOver,\n handleDragEnd,\n handleDragLeave,\n handleLineClick,\n handleContentClick,\n handleSwitcherClick\n };\n },\n render() {\n const {\n tmNode,\n clsPrefix,\n checkable,\n expandOnClick,\n selectable,\n selected,\n checked,\n highlight,\n draggable,\n blockLine,\n indent,\n indentNodes,\n disabled,\n pending,\n internalScrollable,\n nodeProps,\n checkboxPlacement\n } = this;\n // drag start not inside\n // it need to be append to node itself, not wrapper\n const dragEventHandlers = draggable && !disabled ? {\n onDragenter: this.handleDragEnter,\n onDragleave: this.handleDragLeave,\n onDragend: this.handleDragEnd,\n onDrop: this.handleDrop,\n onDragover: this.handleDragOver\n } : undefined;\n // In non virtual mode, there's no evidence that which element should be\n // scrolled to, so we need data-key to query the target element.\n const dataKey = internalScrollable ? createDataKey(tmNode.key) : undefined;\n const checkboxOnRight = checkboxPlacement === 'right';\n const checkboxNode = checkable ? h(NTreeNodeCheckbox, {\n indent: indent,\n right: checkboxOnRight,\n focusable: this.checkboxFocusable,\n disabled: disabled || this.checkboxDisabled,\n clsPrefix: clsPrefix,\n checked: this.checked,\n indeterminate: this.indeterminate,\n onCheck: this.handleCheck\n }) : null;\n return h(\"div\", Object.assign({\n class: `${clsPrefix}-tree-node-wrapper`\n }, dragEventHandlers), h(\"div\", Object.assign({}, blockLine ? nodeProps : undefined, {\n class: [`${clsPrefix}-tree-node`, {\n [`${clsPrefix}-tree-node--selected`]: selected,\n [`${clsPrefix}-tree-node--checkable`]: checkable,\n [`${clsPrefix}-tree-node--highlight`]: highlight,\n [`${clsPrefix}-tree-node--pending`]: pending,\n [`${clsPrefix}-tree-node--disabled`]: disabled,\n [`${clsPrefix}-tree-node--selectable`]: selectable,\n [`${clsPrefix}-tree-node--clickable`]: selectable || expandOnClick || this.mergedCheckOnClick\n }, nodeProps === null || nodeProps === void 0 ? void 0 : nodeProps.class],\n \"data-key\": dataKey,\n draggable: draggable && blockLine,\n onClick: this.handleLineClick,\n onDragstart: draggable && blockLine && !disabled ? this.handleDragStart : undefined\n }), indentNodes, tmNode.isLeaf && this.showLine ? h(\"div\", {\n class: [`${clsPrefix}-tree-node-indent`, `${clsPrefix}-tree-node-indent--show-line`, tmNode.isLeaf && `${clsPrefix}-tree-node-indent--is-leaf`, tmNode.isLastChild && `${clsPrefix}-tree-node-indent--last-child`]\n }, h(\"div\", {\n style: {\n width: `${indent}px`\n }\n })) : h(NTreeNodeSwitcher, {\n clsPrefix: clsPrefix,\n expanded: this.expanded,\n selected: selected,\n loading: this.loading,\n hide: tmNode.isLeaf,\n tmNode: this.tmNode,\n indent: indent,\n onClick: this.handleSwitcherClick\n }), !checkboxOnRight ? checkboxNode : null, h(NTreeNodeContent, {\n ref: \"contentInstRef\",\n clsPrefix: clsPrefix,\n checked: checked,\n selected: selected,\n onClick: this.handleContentClick,\n nodeProps: blockLine ? undefined : nodeProps,\n onDragstart: draggable && !blockLine && !disabled ? this.handleDragStart : undefined,\n tmNode: tmNode\n }), draggable ? this.showDropMark ? renderDropMark({\n el: this.contentElRef.value,\n position: this.droppingPosition,\n offsetLevel: this.droppingOffsetLevel,\n indent\n }) : this.showDropMarkAsParent ? renderDropMark({\n el: this.contentElRef.value,\n position: 'inside',\n offsetLevel: this.droppingOffsetLevel,\n indent\n }) : null : null, checkboxOnRight ? checkboxNode : null));\n }\n});\nexport default TreeNode;","import { pxfy } from 'seemly';\nimport { defineComponent, h } from 'vue';\nimport FadeInExpandTransition from \"../../_internal/fade-in-expand-transition/index.mjs\";\nimport TreeNode from \"./TreeNode.mjs\";\nexport default defineComponent({\n name: 'TreeMotionWrapper',\n props: {\n clsPrefix: {\n type: String,\n required: true\n },\n height: Number,\n nodes: {\n type: Array,\n required: true\n },\n mode: {\n type: String,\n required: true\n },\n onAfterEnter: {\n type: Function,\n required: true\n }\n },\n render() {\n const {\n clsPrefix\n } = this;\n return h(FadeInExpandTransition, {\n onAfterEnter: this.onAfterEnter,\n appear: true,\n reverse: this.mode === 'collapse'\n }, {\n default: () => h(\"div\", {\n class: [`${clsPrefix}-tree-motion-wrapper`, `${clsPrefix}-tree-motion-wrapper--${this.mode}`],\n style: {\n height: pxfy(this.height)\n }\n }, this.nodes.map(node => h(TreeNode, {\n clsPrefix: clsPrefix,\n tmNode: node\n })))\n });\n }\n});","import { fadeInHeightExpandTransition } from \"../../../_styles/transitions/fade-in-height-expand.cssr.mjs\";\nimport { iconSwitchTransition } from \"../../../_styles/transitions/icon-switch.cssr.mjs\";\nimport { c, cB, cE, cM, cNotM } from \"../../../_utils/cssr/index.mjs\";\nconst iconSwitchTransitionNode = iconSwitchTransition();\n// vars:\n// --n-arrow-color\n// --n-bezier\n// --n-font-size\n// --n-node-border-radius\n// --n-node-color-active\n// --n-node-color-hover\n// --n-node-color-pressed\n// --n-node-text-color\n// --n-node-text-color-disabled\n// --n-node-wrapper-padding\n// --n-line-offset-top\n// --n-line-offset-bottom\n// --n-node-content-height\n// --n-line-height\n// --n-line-color\nexport default cB('tree', `\n font-size: var(--n-font-size);\n outline: none;\n`, [c('ul, li', `\n margin: 0;\n padding: 0;\n list-style: none;\n `), c('>', [cB('tree-node', [c('&:first-child', 'margin-top: 0;')])]), cB('tree-motion-wrapper', [cM('expand', [fadeInHeightExpandTransition({\n duration: '0.2s'\n})]), cM('collapse', [fadeInHeightExpandTransition({\n duration: '0.2s',\n reverse: true\n})])]), cB('tree-node-wrapper', `\n box-sizing: border-box;\n padding: var(--n-node-wrapper-padding);\n `), cB('tree-node', `\n position: relative;\n display: flex;\n border-radius: var(--n-node-border-radius);\n transition: background-color .3s var(--n-bezier);\n `, [cM('highlight', [cB('tree-node-content', [cE('text', 'border-bottom-color: var(--n-node-text-color-disabled);')])]), cM('disabled', [cB('tree-node-content', `\n color: var(--n-node-text-color-disabled);\n cursor: not-allowed;\n `)]), cNotM('disabled', [cM('clickable', [cB('tree-node-content', `\n cursor: pointer;\n `)])])]), cM('block-node', [cB('tree-node-content', `\n flex: 1;\n min-width: 0;\n `)]), cNotM('block-line', [cB('tree-node', [cNotM('disabled', [cB('tree-node-content', [c('&:hover', 'background: var(--n-node-color-hover);')]), cM('selectable', [cB('tree-node-content', [c('&:active', 'background: var(--n-node-color-pressed);')])]), cM('pending', [cB('tree-node-content', `\n background: var(--n-node-color-hover);\n `)]), cM('selected', [cB('tree-node-content', 'background: var(--n-node-color-active);')])]), cM('selected', [cB('tree-node-content', 'background: var(--n-node-color-active);')])])]), cM('block-line', [cB('tree-node', [cNotM('disabled', [c('&:hover', 'background: var(--n-node-color-hover);'), cM('pending', `\n background: var(--n-node-color-hover);\n `), cM('selectable', [cNotM('selected', [c('&:active', 'background: var(--n-node-color-pressed);')])]), cM('selected', 'background: var(--n-node-color-active);')]), cM('selected', 'background: var(--n-node-color-active);'), cM('disabled', `\n cursor: not-allowed;\n `)])]), cM('ellipsis', [cB('tree-node', [cB('tree-node-content', `\n overflow: hidden;\n `, [cE('text', `\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n `)])])]), cB('tree-node-indent', `\n flex-grow: 0;\n flex-shrink: 0;\n `, [cM('show-line', 'position: relative', [c('&::before', `\n position: absolute;\n left: 50%;\n border-left: 1px solid var(--n-line-color);\n transition: border-color .3s var(--n-bezier);\n transform: translate(-50%);\n content: \"\";\n top: var(--n-line-offset-top);\n bottom: var(--n-line-offset-bottom);\n `), cM('last-child', [c('&::before', `\n bottom: 50%;\n `)]), cM('is-leaf', [c('&::after', `\n position: absolute;\n content: \"\";\n left: calc(50% + 0.5px);\n right: 0;\n bottom: 50%;\n transition: border-color .3s var(--n-bezier);\n border-bottom: 1px solid var(--n-line-color);\n `)])]), cNotM('show-line', 'height: 0;')]), cB('tree-node-switcher', `\n cursor: pointer;\n display: inline-flex;\n flex-shrink: 0;\n height: var(--n-node-content-height);\n align-items: center;\n justify-content: center;\n transition: transform .15s var(--n-bezier);\n vertical-align: bottom;\n `, [cE('icon', `\n position: relative;\n height: 14px;\n width: 14px;\n display: flex;\n color: var(--n-arrow-color);\n transition: color .3s var(--n-bezier);\n font-size: 14px;\n `, [cB('icon', [iconSwitchTransitionNode]), cB('base-loading', `\n color: var(--n-loading-color);\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n `, [iconSwitchTransitionNode]), cB('base-icon', [iconSwitchTransitionNode])]), cM('hide', 'visibility: hidden;'), cM('expanded', 'transform: rotate(90deg);')]), cB('tree-node-checkbox', `\n display: inline-flex;\n height: var(--n-node-content-height);\n vertical-align: bottom;\n align-items: center;\n justify-content: center;\n `), cB('tree-node-content', `\n user-select: none;\n position: relative;\n display: inline-flex;\n align-items: center;\n min-height: var(--n-node-content-height);\n box-sizing: border-box;\n line-height: var(--n-line-height);\n vertical-align: bottom;\n padding: 0 6px 0 4px;\n cursor: default;\n border-radius: var(--n-node-border-radius);\n color: var(--n-node-text-color);\n transition:\n color .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n `, [c('&:last-child', 'margin-bottom: 0;'), cE('prefix', `\n display: inline-flex;\n margin-right: 8px;\n `), cE('text', `\n border-bottom: 1px solid #0000;\n transition: border-color .3s var(--n-bezier);\n flex-grow: 1;\n max-width: 100%;\n `), cE('suffix', `\n display: inline-flex;\n `)]), cE('empty', 'margin: auto;')]);","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { depx, getPadding, pxfy } from 'seemly';\nimport { createIndexGetter, createTreeMate, flatten } from 'treemate';\nimport { useMergedState } from 'vooks';\nimport { computed, defineComponent, h, inject, nextTick, provide, ref, toRef, watch, watchEffect } from 'vue';\nimport { VVirtualList } from 'vueuc';\nimport { NxScrollbar } from \"../../_internal/index.mjs\";\nimport { useConfig, useRtl, useTheme, useThemeClass } from \"../../_mixins/index.mjs\";\nimport { call, createDataKey, resolveSlot, warn, warnOnce } from \"../../_utils/index.mjs\";\nimport { NEmpty } from \"../../empty/index.mjs\";\nimport { treeSelectInjectionKey } from \"../../tree-select/src/interface.mjs\";\nimport { treeLight } from \"../styles/index.mjs\";\nimport { defaultAllowDrop } from \"./dnd.mjs\";\nimport { treeInjectionKey } from \"./interface.mjs\";\nimport { useKeyboard } from \"./keyboard.mjs\";\nimport MotionWrapper from \"./MotionWrapper.mjs\";\nimport style from \"./styles/index.cssr.mjs\";\nimport NTreeNode from \"./TreeNode.mjs\";\nimport { emptyImage, filterTree, isNodeDisabled, keysWithFilter, useMergedCheckStrategy } from \"./utils.mjs\";\nexport function createTreeMateOptions(keyField, childrenField, disabledField, getChildren) {\n const settledGetChildren = getChildren || (node => {\n return node[childrenField];\n });\n return {\n getIsGroup() {\n return false;\n },\n getKey(node) {\n return node[keyField];\n },\n getChildren: settledGetChildren,\n getDisabled(node) {\n return !!(node[disabledField] || node.checkboxDisabled);\n }\n };\n}\nexport const treeSharedProps = {\n allowCheckingNotLoaded: Boolean,\n filter: Function,\n defaultExpandAll: Boolean,\n expandedKeys: Array,\n keyField: {\n type: String,\n default: 'key'\n },\n labelField: {\n type: String,\n default: 'label'\n },\n childrenField: {\n type: String,\n default: 'children'\n },\n disabledField: {\n type: String,\n default: 'disabled'\n },\n defaultExpandedKeys: {\n type: Array,\n default: () => []\n },\n indent: {\n type: Number,\n default: 24\n },\n indeterminateKeys: Array,\n renderSwitcherIcon: Function,\n onUpdateIndeterminateKeys: [Function, Array],\n 'onUpdate:indeterminateKeys': [Function, Array],\n onUpdateExpandedKeys: [Function, Array],\n 'onUpdate:expandedKeys': [Function, Array],\n overrideDefaultNodeClickBehavior: Function\n};\nexport const treeProps = Object.assign(Object.assign(Object.assign(Object.assign({}, useTheme.props), {\n accordion: Boolean,\n showIrrelevantNodes: {\n type: Boolean,\n default: true\n },\n data: {\n type: Array,\n default: () => []\n },\n expandOnDragenter: {\n type: Boolean,\n default: true\n },\n expandOnClick: Boolean,\n checkOnClick: {\n type: [Boolean, Function],\n default: false\n },\n cancelable: {\n type: Boolean,\n default: true\n },\n checkable: Boolean,\n draggable: Boolean,\n blockNode: Boolean,\n blockLine: Boolean,\n showLine: Boolean,\n disabled: Boolean,\n checkedKeys: Array,\n defaultCheckedKeys: {\n type: Array,\n default: () => []\n },\n selectedKeys: Array,\n defaultSelectedKeys: {\n type: Array,\n default: () => []\n },\n multiple: Boolean,\n pattern: {\n type: String,\n default: ''\n },\n onLoad: Function,\n cascade: Boolean,\n selectable: {\n type: Boolean,\n default: true\n },\n scrollbarProps: Object,\n allowDrop: {\n type: Function,\n default: defaultAllowDrop\n },\n animated: {\n type: Boolean,\n default: true\n },\n ellipsis: Boolean,\n checkboxPlacement: {\n type: String,\n default: 'left'\n },\n virtualScroll: Boolean,\n watchProps: Array,\n renderLabel: Function,\n renderPrefix: Function,\n renderSuffix: Function,\n nodeProps: Function,\n keyboard: {\n type: Boolean,\n default: true\n },\n getChildren: Function,\n onDragenter: [Function, Array],\n onDragleave: [Function, Array],\n onDragend: [Function, Array],\n onDragstart: [Function, Array],\n onDragover: [Function, Array],\n onDrop: [Function, Array],\n onUpdateCheckedKeys: [Function, Array],\n 'onUpdate:checkedKeys': [Function, Array],\n onUpdateSelectedKeys: [Function, Array],\n 'onUpdate:selectedKeys': [Function, Array]\n}), treeSharedProps), {\n // internal props for tree-select\n internalTreeSelect: Boolean,\n internalScrollable: Boolean,\n internalScrollablePadding: String,\n // use it to display\n internalRenderEmpty: Function,\n internalHighlightKeySet: Object,\n internalUnifySelectCheck: Boolean,\n internalCheckboxFocusable: {\n type: Boolean,\n default: true\n },\n internalFocusable: {\n // Make tree-select take over keyboard operations\n type: Boolean,\n default: true\n },\n checkStrategy: {\n type: String,\n default: 'all'\n },\n /**\n * @deprecated\n */\n leafOnly: Boolean\n});\nexport default defineComponent({\n name: 'Tree',\n props: treeProps,\n slots: Object,\n setup(props) {\n if (process.env.NODE_ENV !== 'production') {\n watchEffect(() => {\n if (props.leafOnly) {\n warnOnce('tree', '`leaf-only` is deprecated, please use `check-strategy=\"child\"` instead');\n }\n });\n }\n const {\n mergedClsPrefixRef,\n inlineThemeDisabled,\n mergedRtlRef\n } = useConfig(props);\n const rtlEnabledRef = useRtl('Tree', mergedRtlRef, mergedClsPrefixRef);\n const themeRef = useTheme('Tree', '-tree', style, treeLight, props, mergedClsPrefixRef);\n const selfElRef = ref(null);\n const scrollbarInstRef = ref(null);\n const virtualListInstRef = ref(null);\n function getScrollContainer() {\n var _a;\n return (_a = virtualListInstRef.value) === null || _a === void 0 ? void 0 : _a.listElRef;\n }\n function getScrollContent() {\n var _a;\n return (_a = virtualListInstRef.value) === null || _a === void 0 ? void 0 : _a.itemsElRef;\n }\n const mergedFilterRef = computed(() => {\n const {\n filter\n } = props;\n if (filter) return filter;\n const {\n labelField\n } = props;\n return (pattern, node) => {\n if (!pattern.length) return true;\n const label = node[labelField];\n if (typeof label === 'string') {\n return label.toLowerCase().includes(pattern.toLowerCase());\n }\n return false;\n };\n });\n const filteredTreeInfoRef = computed(() => {\n const {\n pattern\n } = props;\n if (!pattern) {\n return {\n filteredTree: props.data,\n highlightKeySet: null,\n expandedKeys: undefined\n };\n }\n if (!pattern.length || !mergedFilterRef.value) {\n return {\n filteredTree: props.data,\n highlightKeySet: null,\n expandedKeys: undefined\n };\n }\n return filterTree(props.data, mergedFilterRef.value, pattern, props.keyField, props.childrenField);\n });\n // We don't expect data source to change so we just determine it once\n const displayTreeMateRef = computed(() => createTreeMate(props.showIrrelevantNodes ? props.data : filteredTreeInfoRef.value.filteredTree, createTreeMateOptions(props.keyField, props.childrenField, props.disabledField, props.getChildren)));\n const treeSelectInjection = inject(treeSelectInjectionKey, null);\n const dataTreeMateRef = props.internalTreeSelect ? treeSelectInjection.dataTreeMate : computed(() => props.showIrrelevantNodes ? displayTreeMateRef.value : createTreeMate(props.data, createTreeMateOptions(props.keyField, props.childrenField, props.disabledField, props.getChildren)));\n const {\n watchProps\n } = props;\n const uncontrolledCheckedKeysRef = ref([]);\n if (watchProps === null || watchProps === void 0 ? void 0 : watchProps.includes('defaultCheckedKeys')) {\n watchEffect(() => {\n uncontrolledCheckedKeysRef.value = props.defaultCheckedKeys;\n });\n } else {\n uncontrolledCheckedKeysRef.value = props.defaultCheckedKeys;\n }\n const controlledCheckedKeysRef = toRef(props, 'checkedKeys');\n const mergedCheckedKeysRef = useMergedState(controlledCheckedKeysRef, uncontrolledCheckedKeysRef);\n const checkedStatusRef = computed(() => {\n const value = dataTreeMateRef.value.getCheckedKeys(mergedCheckedKeysRef.value, {\n cascade: props.cascade,\n allowNotLoaded: props.allowCheckingNotLoaded\n });\n return value;\n });\n const mergedCheckStrategyRef = useMergedCheckStrategy(props);\n const displayedCheckedKeysRef = computed(() => {\n return checkedStatusRef.value.checkedKeys;\n });\n const displayedIndeterminateKeysRef = computed(() => {\n const {\n indeterminateKeys\n } = props;\n if (indeterminateKeys !== undefined) return indeterminateKeys;\n return checkedStatusRef.value.indeterminateKeys;\n });\n const uncontrolledSelectedKeysRef = ref([]);\n if (watchProps === null || watchProps === void 0 ? void 0 : watchProps.includes('defaultSelectedKeys')) {\n watchEffect(() => {\n uncontrolledSelectedKeysRef.value = props.defaultSelectedKeys;\n });\n } else {\n uncontrolledSelectedKeysRef.value = props.defaultSelectedKeys;\n }\n const controlledSelectedKeysRef = toRef(props, 'selectedKeys');\n const mergedSelectedKeysRef = useMergedState(controlledSelectedKeysRef, uncontrolledSelectedKeysRef);\n const uncontrolledExpandedKeysRef = ref([]);\n const initUncontrolledExpandedKeys = keys => {\n uncontrolledExpandedKeysRef.value = props.defaultExpandAll ? dataTreeMateRef.value.getNonLeafKeys() : keys === undefined ? props.defaultExpandedKeys : keys;\n };\n if (watchProps === null || watchProps === void 0 ? void 0 : watchProps.includes('defaultExpandedKeys')) {\n // if watching defaultExpandedKeys, we use access props.defaultExpandedKeys inside initiator\n watchEffect(() => {\n initUncontrolledExpandedKeys(undefined);\n });\n } else {\n // We by default watchEffect since if defaultExpandAll is true, we should remain tree expand if data changes\n watchEffect(() => {\n initUncontrolledExpandedKeys(props.defaultExpandedKeys);\n });\n }\n const controlledExpandedKeysRef = toRef(props, 'expandedKeys');\n const mergedExpandedKeysRef = useMergedState(controlledExpandedKeysRef, uncontrolledExpandedKeysRef);\n const fNodesRef = computed(() => displayTreeMateRef.value.getFlattenedNodes(mergedExpandedKeysRef.value));\n const {\n pendingNodeKeyRef,\n handleKeydown\n } = useKeyboard({\n props,\n mergedCheckedKeysRef,\n mergedSelectedKeysRef,\n fNodesRef,\n mergedExpandedKeysRef,\n handleCheck,\n handleSelect,\n handleSwitcherClick\n });\n let expandTimerId = null;\n let nodeKeyToBeExpanded = null;\n const uncontrolledHighlightKeySetRef = ref(new Set());\n const controlledHighlightKeySetRef = computed(() => {\n return props.internalHighlightKeySet || filteredTreeInfoRef.value.highlightKeySet;\n });\n const mergedHighlightKeySetRef = useMergedState(controlledHighlightKeySetRef, uncontrolledHighlightKeySetRef);\n const loadingKeysRef = ref(new Set());\n const expandedNonLoadingKeysRef = computed(() => {\n return mergedExpandedKeysRef.value.filter(key => !loadingKeysRef.value.has(key));\n });\n let dragStartX = 0;\n const draggingNodeRef = ref(null);\n const droppingNodeRef = ref(null);\n const droppingMouseNodeRef = ref(null);\n const droppingPositionRef = ref(null);\n const droppingOffsetLevelRef = ref(0);\n const droppingNodeParentRef = computed(() => {\n const {\n value: droppingNode\n } = droppingNodeRef;\n if (!droppingNode) return null;\n // May avoid overlap between line mark of first child & rect mark of parent\n // if (droppingNode.isFirstChild && droppingPositionRef.value === 'before') {\n // return null\n // }\n return droppingNode.parent;\n });\n // shallow watch data\n let isDataReset = false;\n watch(toRef(props, 'data'), () => {\n isDataReset = true;\n void nextTick(() => {\n isDataReset = false;\n });\n loadingKeysRef.value.clear();\n pendingNodeKeyRef.value = null;\n resetDndState();\n }, {\n deep: false\n });\n let expandAnimationDisabled = false;\n const disableExpandAnimationForOneTick = () => {\n expandAnimationDisabled = true;\n void nextTick(() => {\n expandAnimationDisabled = false;\n });\n };\n let memoizedExpandedKeys;\n watch(toRef(props, 'pattern'), (value, oldValue) => {\n if (props.showIrrelevantNodes) {\n memoizedExpandedKeys = undefined;\n if (value) {\n const {\n expandedKeys: expandedKeysAfterChange,\n highlightKeySet\n } = keysWithFilter(props.data, props.pattern, props.keyField, props.childrenField, mergedFilterRef.value);\n uncontrolledHighlightKeySetRef.value = highlightKeySet;\n disableExpandAnimationForOneTick();\n doUpdateExpandedKeys(expandedKeysAfterChange, getOptionsByKeys(expandedKeysAfterChange), {\n node: null,\n action: 'filter'\n });\n } else {\n uncontrolledHighlightKeySetRef.value = new Set();\n }\n } else {\n if (!value.length) {\n if (memoizedExpandedKeys !== undefined) {\n disableExpandAnimationForOneTick();\n doUpdateExpandedKeys(memoizedExpandedKeys, getOptionsByKeys(memoizedExpandedKeys), {\n node: null,\n action: 'filter'\n });\n }\n } else {\n if (!oldValue.length) {\n memoizedExpandedKeys = mergedExpandedKeysRef.value;\n }\n const {\n expandedKeys\n } = filteredTreeInfoRef.value;\n if (expandedKeys !== undefined) {\n disableExpandAnimationForOneTick();\n doUpdateExpandedKeys(expandedKeys, getOptionsByKeys(expandedKeys), {\n node: null,\n action: 'filter'\n });\n }\n }\n }\n });\n function triggerLoading(node) {\n return __awaiter(this, void 0, void 0, function* () {\n const {\n onLoad\n } = props;\n if (!onLoad) {\n if (process.env.NODE_ENV !== 'production') {\n warn('tree', 'There is unloaded node in data but props.onLoad is not specified.');\n }\n yield Promise.resolve();\n return;\n }\n const {\n value: loadingKeys\n } = loadingKeysRef;\n if (!loadingKeys.has(node.key)) {\n loadingKeys.add(node.key);\n try {\n const loadResult = yield onLoad(node.rawNode);\n if (loadResult === false) {\n resetDragExpandState();\n }\n } catch (loadError) {\n console.error(loadError);\n resetDragExpandState();\n }\n loadingKeys.delete(node.key);\n }\n });\n }\n watchEffect(() => {\n var _a;\n const {\n value: displayTreeMate\n } = displayTreeMateRef;\n if (!displayTreeMate) return;\n const {\n getNode\n } = displayTreeMate;\n (_a = mergedExpandedKeysRef.value) === null || _a === void 0 ? void 0 : _a.forEach(key => {\n const node = getNode(key);\n if (node && !node.shallowLoaded) {\n void triggerLoading(node);\n }\n });\n });\n // animation in progress\n const aipRef = ref(false);\n // animation flattened nodes\n const afNodesRef = ref([]);\n // Note: Since the virtual list depends on min height, if there's a node\n // whose height starts from 0, the virtual list will have a wrong height\n // during animation. This will seldom cause wired scrollbar status. It is\n // fixable and need some changes in vueuc, I've no time so I just leave it\n // here. Maybe the bug won't be fixed during the life time of the project.\n watch(expandedNonLoadingKeysRef, (value, prevValue) => {\n if (!props.animated || expandAnimationDisabled) {\n void nextTick(syncScrollbar);\n return;\n }\n if (isDataReset) {\n return;\n }\n const nodeHeight = depx(themeRef.value.self.nodeHeight);\n const prevVSet = new Set(prevValue);\n let addedKey = null;\n let removedKey = null;\n for (const expandedKey of value) {\n if (!prevVSet.has(expandedKey)) {\n if (addedKey !== null) return; // multi expand, not triggered by click\n addedKey = expandedKey;\n }\n }\n const currentVSet = new Set(value);\n for (const expandedKey of prevValue) {\n if (!currentVSet.has(expandedKey)) {\n if (removedKey !== null) return; // multi collapse, not triggered by click\n removedKey = expandedKey;\n }\n }\n if (addedKey === null && removedKey === null) {\n // 1. multi action, not triggered by click\n // 2. no action, don't know what happened\n return;\n }\n const {\n virtualScroll\n } = props;\n const viewportHeight = (virtualScroll ? virtualListInstRef.value.listElRef : selfElRef.value).offsetHeight;\n const viewportItemCount = Math.ceil(viewportHeight / nodeHeight) + 1;\n // play add animation\n let baseExpandedKeys;\n if (addedKey !== null) {\n baseExpandedKeys = prevValue;\n }\n if (removedKey !== null) {\n if (baseExpandedKeys === undefined) {\n baseExpandedKeys = value;\n } else {\n baseExpandedKeys = baseExpandedKeys.filter(key => key !== removedKey);\n }\n }\n aipRef.value = true;\n afNodesRef.value = displayTreeMateRef.value.getFlattenedNodes(baseExpandedKeys);\n if (addedKey !== null) {\n const expandedNodeIndex = afNodesRef.value.findIndex(node => node.key === addedKey);\n if (~expandedNodeIndex) {\n const children = afNodesRef.value[expandedNodeIndex].children;\n // sometimes user will pass leaf keys in\n if (children) {\n const expandedChildren = flatten(children, value);\n afNodesRef.value.splice(expandedNodeIndex + 1, 0, {\n __motion: true,\n mode: 'expand',\n height: virtualScroll ? expandedChildren.length * nodeHeight : undefined,\n nodes: virtualScroll ? expandedChildren.slice(0, viewportItemCount) : expandedChildren\n });\n }\n }\n }\n if (removedKey !== null) {\n const collapsedNodeIndex = afNodesRef.value.findIndex(node => node.key === removedKey);\n if (~collapsedNodeIndex) {\n const collapsedNodeChildren = afNodesRef.value[collapsedNodeIndex].children;\n // Sometime the whole tree is change, remove a key doesn't mean it is collapsed,\n // but maybe children removed\n if (!collapsedNodeChildren) return;\n // play remove animation\n aipRef.value = true;\n const collapsedChildren = flatten(collapsedNodeChildren, value);\n afNodesRef.value.splice(collapsedNodeIndex + 1, 0, {\n __motion: true,\n mode: 'collapse',\n height: virtualScroll ? collapsedChildren.length * nodeHeight : undefined,\n nodes: virtualScroll ? collapsedChildren.slice(0, viewportItemCount) : collapsedChildren\n });\n }\n }\n });\n const getFIndexRef = computed(() => {\n return createIndexGetter(fNodesRef.value);\n });\n const mergedFNodesRef = computed(() => {\n if (aipRef.value) return afNodesRef.value;else return fNodesRef.value;\n });\n function syncScrollbar() {\n const {\n value: scrollbarInst\n } = scrollbarInstRef;\n if (scrollbarInst) scrollbarInst.sync();\n }\n function handleAfterEnter() {\n aipRef.value = false;\n if (props.virtualScroll) {\n // If virtual scroll, we won't listen to resize during animation, so\n // resize callback of virtual list won't be called and as a result\n // scrollbar won't sync. We need to sync scrollbar manually.\n void nextTick(syncScrollbar);\n }\n }\n function getOptionsByKeys(keys) {\n const {\n getNode\n } = dataTreeMateRef.value;\n return keys.map(key => {\n var _a;\n return ((_a = getNode(key)) === null || _a === void 0 ? void 0 : _a.rawNode) || null;\n });\n }\n function doUpdateExpandedKeys(value, option, meta) {\n const {\n 'onUpdate:expandedKeys': _onUpdateExpandedKeys,\n onUpdateExpandedKeys\n } = props;\n uncontrolledExpandedKeysRef.value = value;\n if (_onUpdateExpandedKeys) {\n call(_onUpdateExpandedKeys, value, option, meta);\n }\n if (onUpdateExpandedKeys) {\n call(onUpdateExpandedKeys, value, option, meta);\n }\n }\n function doUpdateCheckedKeys(value, option, meta) {\n const {\n 'onUpdate:checkedKeys': _onUpdateCheckedKeys,\n onUpdateCheckedKeys\n } = props;\n uncontrolledCheckedKeysRef.value = value;\n if (onUpdateCheckedKeys) {\n call(onUpdateCheckedKeys, value, option, meta);\n }\n if (_onUpdateCheckedKeys) {\n call(_onUpdateCheckedKeys, value, option, meta);\n }\n }\n function doUpdateIndeterminateKeys(value, option) {\n const {\n 'onUpdate:indeterminateKeys': _onUpdateIndeterminateKeys,\n onUpdateIndeterminateKeys\n } = props;\n if (_onUpdateIndeterminateKeys) {\n call(_onUpdateIndeterminateKeys, value, option);\n }\n if (onUpdateIndeterminateKeys) {\n call(onUpdateIndeterminateKeys, value, option);\n }\n }\n function doUpdateSelectedKeys(value, option, meta) {\n const {\n 'onUpdate:selectedKeys': _onUpdateSelectedKeys,\n onUpdateSelectedKeys\n } = props;\n uncontrolledSelectedKeysRef.value = value;\n if (onUpdateSelectedKeys) {\n call(onUpdateSelectedKeys, value, option, meta);\n }\n if (_onUpdateSelectedKeys) {\n call(_onUpdateSelectedKeys, value, option, meta);\n }\n }\n // Drag & Drop\n function doDragEnter(info) {\n const {\n onDragenter\n } = props;\n if (onDragenter) call(onDragenter, info);\n }\n function doDragLeave(info) {\n const {\n onDragleave\n } = props;\n if (onDragleave) call(onDragleave, info);\n }\n function doDragEnd(info) {\n const {\n onDragend\n } = props;\n if (onDragend) call(onDragend, info);\n }\n function doDragStart(info) {\n const {\n onDragstart\n } = props;\n if (onDragstart) call(onDragstart, info);\n }\n function doDragOver(info) {\n const {\n onDragover\n } = props;\n if (onDragover) call(onDragover, info);\n }\n function doDrop(info) {\n const {\n onDrop\n } = props;\n if (onDrop) call(onDrop, info);\n }\n function resetDndState() {\n resetDragState();\n resetDropState();\n }\n function resetDragState() {\n draggingNodeRef.value = null;\n }\n function resetDropState() {\n droppingOffsetLevelRef.value = 0;\n droppingNodeRef.value = null;\n droppingMouseNodeRef.value = null;\n droppingPositionRef.value = null;\n resetDragExpandState();\n }\n function resetDragExpandState() {\n if (expandTimerId) {\n window.clearTimeout(expandTimerId);\n expandTimerId = null;\n }\n nodeKeyToBeExpanded = null;\n }\n function handleCheck(node, checked) {\n // We don't guard for leaf only since we have done it in view layer\n if (props.disabled || isNodeDisabled(node, props.disabledField)) {\n return;\n }\n if (props.internalUnifySelectCheck && !props.multiple) {\n handleSelect(node);\n return;\n }\n const checkedAction = checked ? 'check' : 'uncheck';\n const {\n checkedKeys,\n indeterminateKeys\n } = dataTreeMateRef.value[checkedAction](node.key, displayedCheckedKeysRef.value, {\n cascade: props.cascade,\n checkStrategy: mergedCheckStrategyRef.value,\n allowNotLoaded: props.allowCheckingNotLoaded\n });\n doUpdateCheckedKeys(checkedKeys, getOptionsByKeys(checkedKeys), {\n node: node.rawNode,\n action: checkedAction\n });\n doUpdateIndeterminateKeys(indeterminateKeys, getOptionsByKeys(indeterminateKeys));\n }\n function toggleExpand(node) {\n if (props.disabled) return;\n const {\n key\n } = node;\n const {\n value: mergedExpandedKeys\n } = mergedExpandedKeysRef;\n const index = mergedExpandedKeys.findIndex(expandNodeId => expandNodeId === key);\n if (~index) {\n const expandedKeysAfterChange = Array.from(mergedExpandedKeys);\n expandedKeysAfterChange.splice(index, 1);\n doUpdateExpandedKeys(expandedKeysAfterChange, getOptionsByKeys(expandedKeysAfterChange), {\n node: node.rawNode,\n action: 'collapse'\n });\n } else {\n const nodeToBeExpanded = displayTreeMateRef.value.getNode(key);\n if (!nodeToBeExpanded || nodeToBeExpanded.isLeaf) {\n return;\n }\n let nextKeys;\n if (props.accordion) {\n const siblingKeySet = new Set(node.siblings.map(({\n key\n }) => key));\n nextKeys = mergedExpandedKeys.filter(expandedKey => {\n return !siblingKeySet.has(expandedKey);\n });\n nextKeys.push(key);\n } else {\n nextKeys = mergedExpandedKeys.concat(key);\n }\n doUpdateExpandedKeys(nextKeys, getOptionsByKeys(nextKeys), {\n node: node.rawNode,\n action: 'expand'\n });\n }\n }\n function handleSwitcherClick(node) {\n if (props.disabled || aipRef.value) return;\n toggleExpand(node);\n }\n function handleSelect(node) {\n if (props.disabled || !props.selectable) {\n return;\n }\n pendingNodeKeyRef.value = node.key;\n if (props.internalUnifySelectCheck) {\n const {\n value: {\n checkedKeys,\n indeterminateKeys\n }\n } = checkedStatusRef;\n if (props.multiple) {\n handleCheck(node, !(checkedKeys.includes(node.key) || indeterminateKeys.includes(node.key)));\n } else {\n doUpdateCheckedKeys([node.key], getOptionsByKeys([node.key]), {\n node: node.rawNode,\n action: 'check'\n });\n }\n }\n if (props.multiple) {\n const selectedKeys = Array.from(mergedSelectedKeysRef.value);\n const index = selectedKeys.findIndex(key => key === node.key);\n if (~index) {\n if (props.cancelable) {\n selectedKeys.splice(index, 1);\n }\n } else if (!~index) {\n selectedKeys.push(node.key);\n }\n doUpdateSelectedKeys(selectedKeys, getOptionsByKeys(selectedKeys), {\n node: node.rawNode,\n action: ~index ? 'unselect' : 'select'\n });\n } else {\n const selectedKeys = mergedSelectedKeysRef.value;\n if (selectedKeys.includes(node.key)) {\n if (props.cancelable) {\n doUpdateSelectedKeys([], [], {\n node: node.rawNode,\n action: 'unselect'\n });\n }\n } else {\n doUpdateSelectedKeys([node.key], getOptionsByKeys([node.key]), {\n node: node.rawNode,\n action: 'select'\n });\n }\n }\n }\n function expandDragEnterNode(node) {\n if (expandTimerId) {\n window.clearTimeout(expandTimerId);\n expandTimerId = null;\n }\n // Don't expand leaf node.\n if (node.isLeaf) return;\n nodeKeyToBeExpanded = node.key;\n const expand = () => {\n if (nodeKeyToBeExpanded !== node.key) return;\n const {\n value: droppingMouseNode\n } = droppingMouseNodeRef;\n if (droppingMouseNode && droppingMouseNode.key === node.key && !mergedExpandedKeysRef.value.includes(node.key)) {\n const nextKeys = mergedExpandedKeysRef.value.concat(node.key);\n doUpdateExpandedKeys(nextKeys, getOptionsByKeys(nextKeys), {\n node: node.rawNode,\n action: 'expand'\n });\n }\n expandTimerId = null;\n nodeKeyToBeExpanded = null;\n };\n if (!node.shallowLoaded) {\n expandTimerId = window.setTimeout(() => {\n void triggerLoading(node).then(() => {\n expand();\n });\n }, 1000);\n } else {\n expandTimerId = window.setTimeout(() => {\n expand();\n }, 1000);\n }\n }\n // Dnd\n function handleDragEnter({\n event,\n node\n }) {\n // node should be a tmNode\n if (!props.draggable || props.disabled || isNodeDisabled(node, props.disabledField)) {\n return;\n }\n handleDragOver({\n event,\n node\n }, false);\n doDragEnter({\n event,\n node: node.rawNode\n });\n }\n function handleDragLeave({\n event,\n node\n }) {\n if (!props.draggable || props.disabled || isNodeDisabled(node, props.disabledField)) {\n return;\n }\n doDragLeave({\n event,\n node: node.rawNode\n });\n }\n function handleDragLeaveTree(e) {\n if (e.target !== e.currentTarget) return;\n resetDropState();\n }\n // Dragend is ok, we don't need to add global listener to reset drag status\n function handleDragEnd({\n event,\n node\n }) {\n resetDndState();\n if (!props.draggable || props.disabled || isNodeDisabled(node, props.disabledField)) {\n return;\n }\n doDragEnd({\n event,\n node: node.rawNode\n });\n }\n function handleDragStart({\n event,\n node\n }) {\n var _a;\n if (!props.draggable || props.disabled || isNodeDisabled(node, props.disabledField)) {\n return;\n }\n // Most of time, the image will block user's view\n if (emptyImage) {\n (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.setDragImage(emptyImage, 0, 0);\n }\n dragStartX = event.clientX;\n draggingNodeRef.value = node;\n doDragStart({\n event,\n node: node.rawNode\n });\n }\n function handleDragOver({\n event,\n node\n }, emit = true) {\n var _a;\n if (!props.draggable || props.disabled || isNodeDisabled(node, props.disabledField)) {\n return;\n }\n const {\n value: draggingNode\n } = draggingNodeRef;\n if (!draggingNode) return;\n const {\n allowDrop,\n indent\n } = props;\n if (emit) doDragOver({\n event,\n node: node.rawNode\n });\n // Update dropping node\n const el = event.currentTarget;\n const {\n height: elOffsetHeight,\n top: elClientTop\n } = el.getBoundingClientRect();\n const eventOffsetY = event.clientY - elClientTop;\n let mousePosition;\n const allowDropInside = allowDrop({\n node: node.rawNode,\n dropPosition: 'inside',\n phase: 'drag'\n });\n if (allowDropInside) {\n if (eventOffsetY <= 8) {\n mousePosition = 'before';\n } else if (eventOffsetY >= elOffsetHeight - 8) {\n mousePosition = 'after';\n } else {\n mousePosition = 'inside';\n }\n } else {\n if (eventOffsetY <= elOffsetHeight / 2) {\n mousePosition = 'before';\n } else {\n mousePosition = 'after';\n }\n }\n const {\n value: getFindex\n } = getFIndexRef;\n /** determine the drop position and drop node */\n /** the dropping node needn't to be the mouse hovering node! */\n /**\n * if there is something i've learned from implementing a complex\n * drag & drop. that is never write unit test before you really figure\n * out what behavior is exactly you want.\n */\n let finalDropNode;\n let finalDropPosition;\n const hoverNodeFIndex = getFindex(node.key);\n if (hoverNodeFIndex === null) {\n resetDropState();\n return;\n }\n let mouseAtExpandedNonLeafNode = false;\n if (mousePosition === 'inside') {\n finalDropNode = node;\n finalDropPosition = 'inside';\n } else {\n if (mousePosition === 'before') {\n if (node.isFirstChild) {\n finalDropNode = node;\n finalDropPosition = 'before';\n } else {\n finalDropNode = fNodesRef.value[hoverNodeFIndex - 1];\n finalDropPosition = 'after';\n }\n } else {\n finalDropNode = node;\n finalDropPosition = 'after';\n }\n }\n // If the node is non-leaf and it is expanded, we don't allow it to\n // drop after it and change it to drop before its next view sibling\n if (!finalDropNode.isLeaf && mergedExpandedKeysRef.value.includes(finalDropNode.key)) {\n mouseAtExpandedNonLeafNode = true;\n if (finalDropPosition === 'after') {\n finalDropNode = fNodesRef.value[hoverNodeFIndex + 1];\n if (!finalDropNode) {\n // maybe there is no next view sibling when non-leaf node has no\n // children and it is the last node in the tree\n finalDropNode = node;\n finalDropPosition = 'inside';\n } else {\n finalDropPosition = 'before';\n }\n }\n }\n const droppingMouseNode = finalDropNode;\n droppingMouseNodeRef.value = droppingMouseNode;\n // This is a speacial case, user is dragging a last child itself, so we\n // only view it as they are trying to drop after it.\n // There are some relevant codes in bailout 1's child branch.\n // Also, the expand bailout should have a high priority. If it's non-leaf\n // node and expanded, keep its origin drop position\n if (!mouseAtExpandedNonLeafNode && draggingNode.isLastChild && draggingNode.key === finalDropNode.key) {\n finalDropPosition = 'after';\n }\n if (finalDropPosition === 'after') {\n let offset = dragStartX - event.clientX; // drag left => > 0\n let offsetLevel = 0;\n while (offset >= indent / 2 // divide by 2 to make it easier to trigger\n && finalDropNode.parent !== null && finalDropNode.isLastChild && offsetLevel < 1) {\n offset -= indent;\n offsetLevel += 1;\n finalDropNode = finalDropNode.parent;\n }\n droppingOffsetLevelRef.value = offsetLevel;\n } else {\n droppingOffsetLevelRef.value = 0;\n }\n // Bailout 1\n // Drag self into self\n // Drag it into direct parent\n if (draggingNode.contains(finalDropNode) || finalDropPosition === 'inside' && ((_a = draggingNode.parent) === null || _a === void 0 ? void 0 : _a.key) === finalDropNode.key) {\n if (draggingNode.key === droppingMouseNode.key && draggingNode.key === finalDropNode.key) {\n // This is special case that we want ui to show a mark to guide user\n // to start dragging. Nor they will think nothing happens.\n // However this is an invalid drop, we need to guard it inside\n // handleDrop\n } else {\n resetDropState();\n return;\n }\n }\n // Bailout 3\n if (!allowDrop({\n node: finalDropNode.rawNode,\n dropPosition: finalDropPosition,\n phase: 'drag'\n })) {\n resetDropState();\n return;\n }\n if (draggingNode.key === finalDropNode.key) {\n // don't expand when drag on itself\n resetDragExpandState();\n } else {\n if (nodeKeyToBeExpanded !== finalDropNode.key) {\n if (finalDropPosition === 'inside') {\n if (props.expandOnDragenter) {\n expandDragEnterNode(finalDropNode);\n // Bailout 4\n // not try to loading\n if (!finalDropNode.shallowLoaded && nodeKeyToBeExpanded !== finalDropNode.key) {\n resetDndState();\n return;\n }\n } else {\n // Bailout 5\n // never expands on drag\n if (!finalDropNode.shallowLoaded) {\n resetDndState();\n return;\n }\n }\n } else {\n resetDragExpandState();\n }\n } else {\n if (finalDropPosition !== 'inside') {\n resetDragExpandState();\n }\n }\n }\n droppingPositionRef.value = finalDropPosition;\n droppingNodeRef.value = finalDropNode;\n }\n function handleDrop({\n event,\n node,\n dropPosition\n }) {\n if (!props.draggable || props.disabled || isNodeDisabled(node, props.disabledField)) {\n return;\n }\n const {\n value: draggingNode\n } = draggingNodeRef;\n const {\n value: droppingNode\n } = droppingNodeRef;\n const {\n value: droppingPosition\n } = droppingPositionRef;\n if (!draggingNode || !droppingNode || !droppingPosition) {\n return;\n }\n // Bailout 1\n if (!props.allowDrop({\n node: droppingNode.rawNode,\n dropPosition: droppingPosition,\n phase: 'drag'\n })) {\n return;\n }\n // Bailout 2\n // This is a special case to guard since we want ui to show the status\n // but not to emit a event\n if (draggingNode.key === droppingNode.key) {\n return;\n }\n // Bailout 3\n // insert before its next node\n // insert after its prev node\n if (droppingPosition === 'before') {\n const nextNode = draggingNode.getNext({\n includeDisabled: true\n });\n if (nextNode) {\n if (nextNode.key === droppingNode.key) {\n resetDropState();\n return;\n }\n }\n }\n if (droppingPosition === 'after') {\n const prevNode = draggingNode.getPrev({\n includeDisabled: true\n });\n if (prevNode) {\n if (prevNode.key === droppingNode.key) {\n resetDropState();\n return;\n }\n }\n }\n doDrop({\n event,\n node: droppingNode.rawNode,\n dragNode: draggingNode.rawNode,\n dropPosition\n });\n resetDndState();\n }\n function handleScroll() {\n syncScrollbar();\n }\n function handleResize() {\n syncScrollbar();\n }\n function handleFocusout(e) {\n var _a;\n if (props.virtualScroll || props.internalScrollable) {\n const {\n value: scrollbarInst\n } = scrollbarInstRef;\n if ((_a = scrollbarInst === null || scrollbarInst === void 0 ? void 0 : scrollbarInst.containerRef) === null || _a === void 0 ? void 0 : _a.contains(e.relatedTarget)) {\n return;\n }\n pendingNodeKeyRef.value = null;\n } else {\n const {\n value: selfEl\n } = selfElRef;\n if (selfEl === null || selfEl === void 0 ? void 0 : selfEl.contains(e.relatedTarget)) return;\n pendingNodeKeyRef.value = null;\n }\n }\n watch(pendingNodeKeyRef, value => {\n var _a, _b;\n if (value === null) return;\n if (props.virtualScroll) {\n (_a = virtualListInstRef.value) === null || _a === void 0 ? void 0 : _a.scrollTo({\n key: value\n });\n } else if (props.internalScrollable) {\n const {\n value: scrollbarInst\n } = scrollbarInstRef;\n if (scrollbarInst === null) return;\n const targetEl = (_b = scrollbarInst.contentRef) === null || _b === void 0 ? void 0 : _b.querySelector(`[data-key=\"${createDataKey(value)}\"]`);\n if (!targetEl) return;\n scrollbarInst.scrollTo({\n el: targetEl\n });\n }\n });\n provide(treeInjectionKey, {\n loadingKeysRef,\n highlightKeySetRef: mergedHighlightKeySetRef,\n displayedCheckedKeysRef,\n displayedIndeterminateKeysRef,\n mergedSelectedKeysRef,\n mergedExpandedKeysRef,\n mergedThemeRef: themeRef,\n mergedCheckStrategyRef,\n nodePropsRef: toRef(props, 'nodeProps'),\n disabledRef: toRef(props, 'disabled'),\n checkableRef: toRef(props, 'checkable'),\n selectableRef: toRef(props, 'selectable'),\n expandOnClickRef: toRef(props, 'expandOnClick'),\n onLoadRef: toRef(props, 'onLoad'),\n draggableRef: toRef(props, 'draggable'),\n blockLineRef: toRef(props, 'blockLine'),\n indentRef: toRef(props, 'indent'),\n cascadeRef: toRef(props, 'cascade'),\n checkOnClickRef: toRef(props, 'checkOnClick'),\n checkboxPlacementRef: props.checkboxPlacement,\n droppingMouseNodeRef,\n droppingNodeParentRef,\n draggingNodeRef,\n droppingPositionRef,\n droppingOffsetLevelRef,\n fNodesRef,\n pendingNodeKeyRef,\n showLineRef: toRef(props, 'showLine'),\n disabledFieldRef: toRef(props, 'disabledField'),\n internalScrollableRef: toRef(props, 'internalScrollable'),\n internalCheckboxFocusableRef: toRef(props, 'internalCheckboxFocusable'),\n internalTreeSelect: props.internalTreeSelect,\n renderLabelRef: toRef(props, 'renderLabel'),\n renderPrefixRef: toRef(props, 'renderPrefix'),\n renderSuffixRef: toRef(props, 'renderSuffix'),\n renderSwitcherIconRef: toRef(props, 'renderSwitcherIcon'),\n labelFieldRef: toRef(props, 'labelField'),\n multipleRef: toRef(props, 'multiple'),\n overrideDefaultNodeClickBehaviorRef: toRef(props, 'overrideDefaultNodeClickBehavior'),\n handleSwitcherClick,\n handleDragEnd,\n handleDragEnter,\n handleDragLeave,\n handleDragStart,\n handleDrop,\n handleDragOver,\n handleSelect,\n handleCheck\n });\n function scrollTo(options, y) {\n var _a, _b;\n if (typeof options === 'number') {\n (_a = virtualListInstRef.value) === null || _a === void 0 ? void 0 : _a.scrollTo(options, y || 0);\n } else {\n (_b = virtualListInstRef.value) === null || _b === void 0 ? void 0 : _b.scrollTo(options);\n }\n }\n const exposedMethods = {\n handleKeydown,\n scrollTo,\n getCheckedData: () => {\n if (!props.checkable) return {\n keys: [],\n options: []\n };\n const {\n checkedKeys\n } = checkedStatusRef.value;\n return {\n keys: checkedKeys,\n options: getOptionsByKeys(checkedKeys)\n };\n },\n getIndeterminateData: () => {\n if (!props.checkable) return {\n keys: [],\n options: []\n };\n const {\n indeterminateKeys\n } = checkedStatusRef.value;\n return {\n keys: indeterminateKeys,\n options: getOptionsByKeys(indeterminateKeys)\n };\n }\n };\n const cssVarsRef = computed(() => {\n const {\n common: {\n cubicBezierEaseInOut\n },\n self: {\n fontSize,\n nodeBorderRadius,\n nodeColorHover,\n nodeColorPressed,\n nodeColorActive,\n arrowColor,\n loadingColor,\n nodeTextColor,\n nodeTextColorDisabled,\n dropMarkColor,\n nodeWrapperPadding,\n nodeHeight,\n lineHeight,\n lineColor\n }\n } = themeRef.value;\n const lineOffsetTop = getPadding(nodeWrapperPadding, 'top');\n const lineOffsetBottom = getPadding(nodeWrapperPadding, 'bottom');\n const nodeContentHeight = pxfy(depx(nodeHeight) - depx(lineOffsetTop) - depx(lineOffsetBottom));\n return {\n '--n-arrow-color': arrowColor,\n '--n-loading-color': loadingColor,\n '--n-bezier': cubicBezierEaseInOut,\n '--n-font-size': fontSize,\n '--n-node-border-radius': nodeBorderRadius,\n '--n-node-color-active': nodeColorActive,\n '--n-node-color-hover': nodeColorHover,\n '--n-node-color-pressed': nodeColorPressed,\n '--n-node-text-color': nodeTextColor,\n '--n-node-text-color-disabled': nodeTextColorDisabled,\n '--n-drop-mark-color': dropMarkColor,\n '--n-node-wrapper-padding': nodeWrapperPadding,\n '--n-line-offset-top': `-${lineOffsetTop}`,\n '--n-line-offset-bottom': `-${lineOffsetBottom}`,\n '--n-node-content-height': nodeContentHeight,\n '--n-line-height': lineHeight,\n '--n-line-color': lineColor\n };\n });\n const themeClassHandle = inlineThemeDisabled ? useThemeClass('tree', undefined, cssVarsRef, props) : undefined;\n return Object.assign(Object.assign({}, exposedMethods), {\n mergedClsPrefix: mergedClsPrefixRef,\n mergedTheme: themeRef,\n rtlEnabled: rtlEnabledRef,\n fNodes: mergedFNodesRef,\n aip: aipRef,\n selfElRef,\n virtualListInstRef,\n scrollbarInstRef,\n handleFocusout,\n handleDragLeaveTree,\n handleScroll,\n getScrollContainer,\n getScrollContent,\n handleAfterEnter,\n handleResize,\n cssVars: inlineThemeDisabled ? undefined : cssVarsRef,\n themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass,\n onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender\n });\n },\n render() {\n var _a;\n const {\n fNodes,\n internalRenderEmpty\n } = this;\n if (!fNodes.length && internalRenderEmpty) {\n return internalRenderEmpty();\n }\n const {\n mergedClsPrefix,\n blockNode,\n blockLine,\n draggable,\n disabled,\n ellipsis,\n internalFocusable,\n checkable,\n handleKeydown,\n rtlEnabled,\n handleFocusout,\n scrollbarProps\n } = this;\n const mergedFocusable = internalFocusable && !disabled;\n const tabindex = mergedFocusable ? '0' : undefined;\n const treeClass = [`${mergedClsPrefix}-tree`, rtlEnabled && `${mergedClsPrefix}-tree--rtl`, checkable && `${mergedClsPrefix}-tree--checkable`, (blockLine || blockNode) && `${mergedClsPrefix}-tree--block-node`, blockLine && `${mergedClsPrefix}-tree--block-line`, ellipsis && `${mergedClsPrefix}-tree--ellipsis`];\n const createNode = tmNode => {\n return '__motion' in tmNode ? h(MotionWrapper, {\n height: tmNode.height,\n nodes: tmNode.nodes,\n clsPrefix: mergedClsPrefix,\n mode: tmNode.mode,\n onAfterEnter: this.handleAfterEnter\n }) : h(NTreeNode, {\n key: tmNode.key,\n tmNode: tmNode,\n clsPrefix: mergedClsPrefix\n });\n };\n if (this.virtualScroll) {\n const {\n mergedTheme,\n internalScrollablePadding\n } = this;\n const padding = getPadding(internalScrollablePadding || '0');\n return h(NxScrollbar, Object.assign({}, scrollbarProps, {\n ref: \"scrollbarInstRef\",\n onDragleave: draggable ? this.handleDragLeaveTree : undefined,\n container: this.getScrollContainer,\n content: this.getScrollContent,\n class: treeClass,\n theme: mergedTheme.peers.Scrollbar,\n themeOverrides: mergedTheme.peerOverrides.Scrollbar,\n tabindex: tabindex,\n onKeydown: mergedFocusable ? handleKeydown : undefined,\n onFocusout: mergedFocusable ? handleFocusout : undefined\n }), {\n default: () => {\n var _a;\n (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this);\n return !fNodes.length ? resolveSlot(this.$slots.empty, () => [h(NEmpty, {\n class: `${mergedClsPrefix}-tree__empty`,\n theme: this.mergedTheme.peers.Empty,\n themeOverrides: this.mergedTheme.peerOverrides.Empty\n })]) : h(VVirtualList, {\n ref: \"virtualListInstRef\",\n items: this.fNodes,\n itemSize: depx(mergedTheme.self.nodeHeight),\n ignoreItemResize: this.aip,\n paddingTop: padding.top,\n paddingBottom: padding.bottom,\n class: this.themeClass,\n style: [this.cssVars, {\n paddingLeft: padding.left,\n paddingRight: padding.right\n }],\n onScroll: this.handleScroll,\n onResize: this.handleResize,\n showScrollbar: false,\n itemResizable: true\n }, {\n default: ({\n item\n }) => createNode(item)\n });\n }\n });\n }\n const {\n internalScrollable\n } = this;\n treeClass.push(this.themeClass);\n (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this);\n if (internalScrollable) {\n return h(NxScrollbar, Object.assign({}, scrollbarProps, {\n class: treeClass,\n tabindex: tabindex,\n onKeydown: mergedFocusable ? handleKeydown : undefined,\n onFocusout: mergedFocusable ? handleFocusout : undefined,\n style: this.cssVars,\n contentStyle: {\n padding: this.internalScrollablePadding\n }\n }), {\n default: () => h(\"div\", {\n onDragleave: draggable ? this.handleDragLeaveTree : undefined,\n ref: \"selfElRef\"\n }, this.fNodes.map(createNode))\n });\n } else {\n return h(\"div\", {\n class: treeClass,\n tabindex: tabindex,\n ref: \"selfElRef\",\n style: this.cssVars,\n onKeydown: mergedFocusable ? handleKeydown : undefined,\n onFocusout: mergedFocusable ? handleFocusout : undefined,\n onDragleave: draggable ? this.handleDragLeaveTree : undefined\n }, !fNodes.length ? resolveSlot(this.$slots.empty, () => [h(NEmpty, {\n class: `${mergedClsPrefix}-tree__empty`,\n theme: this.mergedTheme.peers.Empty,\n themeOverrides: this.mergedTheme.peerOverrides.Empty\n })]) : fNodes.map(createNode));\n }\n }\n});","<script lang=\"ts\">\nconst stackIds = shallowRef<number[]>([]);\nconst useDialogStack = (getVisible: () => boolean) => {\n const t = Date.now();\n const clear = () => {\n stackIds.value = stackIds.value.filter((v) => v !== t);\n };\n onScopeDispose(clear);\n watchImmediate(getVisible, (v) => {\n clear();\n if (v) {\n stackIds.value = stackIds.value.concat(t);\n }\n });\n const zIndex = computed(() => {\n return 2000 + stackIds.value.indexOf(t);\n });\n const isTop = computed(() => stackIds.value.at(-1) === t);\n return {\n zIndex,\n isTop,\n };\n};\n</script>\n\n<script setup lang=\"ts\">\nconst show = defineModel<boolean>('show', { default: false, required: true });\nconst emit = defineEmits<{\n closed: [];\n}>();\n\nconst actualShow = shallowRef(show.value);\nconst state = shallowRef<'enter' | 'leave'>(); // 第一次进入不做动画\nconst duration = 300;\nlet taskId = 0;\nconst clearTask = () => {\n if (taskId) {\n clearTimeout(taskId);\n }\n taskId = 0;\n};\nonScopeDispose(clearTask);\nwatch(show, (v) => {\n clearTask();\n if (v) {\n actualShow.value = true;\n state.value = 'enter';\n } else {\n state.value = 'leave';\n taskId = window.setTimeout(() => {\n actualShow.value = false;\n state.value = undefined;\n clearTask();\n emit('closed');\n }, duration);\n }\n});\n\nconst { isTop, zIndex } = useDialogStack(() => actualShow.value);\nuseEventListener('keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isTop.value) {\n show.value = false;\n }\n});\n</script>\n<template>\n <Teleport v-if=\"actualShow\" to=\"body\">\n <div\n class=\"FullScreenDialog\"\n absolute\n top-0\n left-0\n page-size\n :style=\"{\n '--duration': duration + 'ms',\n 'z-index': zIndex,\n }\"\n :class=\"{\n 'enter-active': state === 'enter',\n 'exit-active': state === 'leave',\n }\"\n v-bind=\"$attrs\"\n >\n <slot />\n </div>\n </Teleport>\n</template>\n<style lang=\"scss\" scoped>\n.enter-active {\n animation: enter-keyframes var(--duration) forwards;\n}\n@keyframes enter-keyframes {\n 0% {\n opacity: 0;\n transform: translateY(-2%);\n }\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.exit-active {\n animation: exit-keyframes var(--duration) forwards;\n}\n@keyframes exit-keyframes {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, shallowRef, defineAsyncComponent } from 'vue';\nimport SelectorText from '@/components/SelectorText.vue';\nimport SvgIcon from '@/components/SvgIcon.vue';\nimport { NButton, NScrollbar } from 'naive-ui';\nimport { buildEmptyFn } from '@/utils/others';\nimport { type ResolvedSelector } from '@/utils/selector';\nimport type { AstNode, QueryResult } from '@gkd-kit/selector';\nimport { UnitSelectorExpression } from '@gkd-kit/selector';\nimport type { StyleValue } from 'vue';\nimport { useTheme } from '@/composables/useTheme';\n\nconst TrackGraphLoader = () => import('@/components/TrackGraph.vue');\nconst TrackGraph = defineAsyncComponent({\n loader: TrackGraphLoader,\n delay: 0,\n});\nsetTimeout(TrackGraphLoader, 3000);\n\nconst props = withDefaults(\n defineProps<{\n nodes: RawNode[];\n queryResult: QueryResult<RawNode>;\n selector: ResolvedSelector;\n onClose?: () => void;\n }>(),\n {\n onClose: buildEmptyFn,\n },\n);\n\nconst allUnitResults = computed(() => {\n if (!props.queryResult) return [];\n return Array.from(props.queryResult.unitResults.asJsReadonlyArrayView());\n});\n\nconst singleUnitResults = computed(() => {\n return allUnitResults.value.filter((v) => !v.context.prev);\n});\n\nconst showUnitResults = computed(() => {\n return allUnitResults.value.filter((v) => v.context.prev);\n});\n\nconst filterUnitResults = shallowRef<QueryResult.UnitResult<RawNode>[]>([]);\nwatchEffect(() => {\n filterUnitResults.value = showUnitResults.value;\n});\n\nconst switchUnitResult = (unitResult: QueryResult.UnitResult<RawNode>) => {\n if (filterUnitResults.value.includes(unitResult)) {\n filterUnitResults.value = filterUnitResults.value.filter(\n (v) => v !== unitResult,\n );\n } else {\n filterUnitResults.value = filterUnitResults.value.concat(unitResult);\n }\n};\n\nconst getNodeStyle = (node: AstNode<any>): StyleValue => {\n const value = node.value;\n if (\n value instanceof UnitSelectorExpression &&\n allUnitResults.value.some((u) => u.expression === value) &&\n !node.outChildren.some((v) => v.value instanceof UnitSelectorExpression)\n ) {\n return {\n outline: '1px solid var(--track-card-outline-color)',\n };\n }\n return '';\n};\n\nconst { themeTokens } = useTheme();\n\nconst palette = computed(() => {\n return themeTokens.value.palette.length\n ? themeTokens.value.palette\n : [themeTokens.value.graphEdgeFallbackStroke];\n});\n\nconst themeColors = computed(() => {\n return {\n text: 'var(--text-color)',\n lightBg: 'var(--bg-color-light)',\n border: 'var(--border-color)',\n hoverBg: 'var(--bg-color-hover)',\n };\n});\n</script>\n\n<template>\n <div\n class=\"TrackCard\"\n flex\n flex-col\n h-full\n p-12px\n box-border\n gap-8px\n overflow-hidden\n >\n <div flex justify-between items-center class=\"[--svg-h:24px]\">\n <div flex items-center gap-4px>\n <SvgIcon name=\"path\" />\n <div text=\"20px/28px\" font-bold :style=\"{ color: themeColors.text }\">\n 选择器路径视图\n </div>\n </div>\n <NButton text @click=\"onClose\">\n <SvgIcon name=\"close\" />\n </NButton>\n </div>\n\n <div flex-1 flex gap-12px overflow-hidden>\n <div self-stretch flex=\"[2]\">\n <TrackGraph\n v-if=\"nodes.length && queryResult\"\n :nodes=\"nodes\"\n :queryResult=\"queryResult\"\n :showUnitResults=\"showUnitResults\"\n :filterUnitResults=\"filterUnitResults\"\n class=\"h-[calc(100%-2px)] b-1px b-solid\"\n :style=\"{ borderColor: themeColors.border }\"\n />\n\n <div relative pointer-events-none z-1>\n <div\n absolute\n left-8px\n bottom-8px\n text=\"14px/14px\"\n style=\"color: var(--track-card-text-color)\"\n >\n *为简化视图已隐藏无关节点\n </div>\n </div>\n </div>\n\n <NScrollbar class=\"self-stretch flex-1 text-20px leading-28px gkd_code\">\n <div\n mb-24px\n break-all\n px-4px\n py-2px\n style=\"background-color: var(--track-card-bg-color)\"\n >\n <SelectorText\n :source=\"selector.source\"\n :node=\"selector.ast\"\n :getNodeStyle=\"getNodeStyle\"\n />\n </div>\n\n <div flex flex-col gap-12px>\n <div v-if=\"singleUnitResults.length\" flex gap-8px>\n <div\n v-for=\"(unitResult, i) in singleUnitResults\"\n :key=\"i\"\n break-all\n px-4px\n py-2px\n b-1px\n b-solid\n style=\"border-color: var(--track-card-border-color)\"\n >\n <SelectorText\n :source=\"selector.source\"\n :node=\"selector.findAst(unitResult.expression)\"\n />\n </div>\n </div>\n\n <div\n v-for=\"(unitResult, i) in showUnitResults\"\n :key=\"i\"\n cursor-pointer\n break-all\n px-4px\n py-2px\n b-1px\n b-solid\n transition-colors\n :style=\"{\n borderColor: palette[i % palette.length],\n backgroundColor: filterUnitResults.includes(unitResult)\n ? 'var(--track-card-bg-color)'\n : undefined,\n }\"\n @click=\"switchUnitResult(unitResult)\"\n >\n <div\n inline-block\n align-middle\n size-20px\n :style=\"{\n backgroundColor: palette[i % palette.length],\n }\"\n />\n <span pl-4px />\n <SelectorText\n :source=\"selector.source\"\n :node=\"selector.findAst(unitResult.expression)\"\n />\n </div>\n </div>\n </NScrollbar>\n </div>\n </div>\n</template>\n","import {\n detectSnapshot,\n exportSnapshotAsImageId,\n exportSnapshotAsImportId,\n} from '@/utils/export';\nimport { gmOk } from '@/utils/gm';\nimport { findNodesByXy, getAppInfo, listToTree } from '@/utils/node';\nimport { toFixedNumber, toInteger } from '@/utils/others';\nimport type { ResolvedSelector } from '@/utils/selector';\nimport { screenshotStorage, snapshotStorage } from '@/utils/snapshot';\nimport { useTask } from '@/utils/task';\nimport type { QueryResult } from '@gkd-kit/selector';\n\nif (import.meta.hot) {\n import.meta.hot.accept(() => {\n location.reload();\n });\n}\n\nconst getRemoteImportId = async (id: number): Promise<number> => {\n return fetch('https://detect.gkd.li/api/getImportId?id=' + id)\n .then((r) => r.json())\n .catch(() => 0);\n};\n\nexport const useSnapshotStore = createSharedComposable(() => {\n const route = useRoute();\n const router = useRouter();\n const {\n snapshotViewedTime,\n snapshotImportId,\n snapshotImageId,\n importSnapshotId,\n settingsStore,\n } = useStorageStore();\n const randomizeFocusColor = () => {\n const hue = Math.floor(Math.random() * 360);\n const saturation = 58;\n const lightness = 52;\n const c = (1 - Math.abs(2 * (lightness / 100) - 1)) * (saturation / 100);\n const x = c * (1 - Math.abs(((hue / 60) % 2) - 1));\n const m = lightness / 100 - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n if (hue < 60) {\n r = c;\n g = x;\n } else if (hue < 120) {\n r = x;\n g = c;\n } else if (hue < 180) {\n g = c;\n b = x;\n } else if (hue < 240) {\n g = x;\n b = c;\n } else if (hue < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n const to255 = (v: number) => Math.round((v + m) * 255);\n settingsStore.focusNodeColor = `rgb(${to255(r)}, ${to255(g)}, ${to255(b)})`;\n };\n\n const snapshotId = shallowRef<number>();\n watchImmediate(\n () => route.params.snapshotId,\n (v) => {\n snapshotId.value = toInteger(v);\n },\n );\n watchImmediate(\n () => snapshotId.value,\n (v) => {\n if (v && settingsStore.randomFocusNodeColorOnOpen) {\n randomizeFocusColor();\n }\n },\n );\n const importId = computed(() => {\n if (snapshotId.value) return snapshotImportId[snapshotId.value];\n return undefined;\n });\n const imageId = computed(() => {\n if (snapshotId.value) return snapshotImageId[snapshotId.value];\n return undefined;\n });\n const snapshot = shallowRef<Snapshot>();\n watchEffect(() => {\n if (snapshot.value) {\n document.title =\n '快照-' + (getAppInfo(snapshot.value).name || snapshot.value.appId);\n }\n });\n const screenshot = shallowRef<ArrayBuffer>();\n const screenshotUrl = computed(() => {\n if (screenshot.value) {\n return URL.createObjectURL(\n new Blob([screenshot.value], {\n type: 'image/png',\n }),\n );\n }\n return undefined;\n });\n const redirected = shallowRef(false);\n const update = useTask(async (id: number | undefined) => {\n redirected.value = false;\n if (!id) {\n snapshot.value = undefined;\n screenshot.value = undefined;\n return;\n }\n await Promise.all([\n snapshotStorage.getItem(id).then((r) => {\n snapshot.value = r || undefined;\n }),\n screenshotStorage.getItem(id).then((r) => {\n screenshot.value = r || undefined;\n }),\n ]);\n if (!snapshot.value) {\n const remoteImportId =\n snapshotImportId[id] || (await getRemoteImportId(id));\n if (remoteImportId && Number.isSafeInteger(remoteImportId)) {\n redirected.value = true;\n router.replace({\n path: '/i/' + remoteImportId,\n query: route.query,\n });\n return;\n }\n }\n if (snapshot.value?.id) {\n snapshotViewedTime[snapshot.value.id] = Date.now();\n }\n });\n const loading = computed(() => update.loading);\n watchImmediate(() => snapshotId.value, update.invoke);\n watchEffect(() => {\n if (\n importId.value &&\n !importSnapshotId[importId.value] &&\n snapshotId.value\n ) {\n fetch(\n `https://detect.gkd.li/api/detectSnapshot?importId=` + importId.value,\n );\n }\n });\n const autoUpload = computed(() => {\n return gmOk() && settingsStore.autoUploadImport;\n });\n watchEffect(() => {\n if (autoUpload.value && snapshot.value && !imageId.value) {\n exportSnapshotAsImageId(snapshot.value);\n }\n if (autoUpload.value && snapshot.value && !importId.value) {\n exportSnapshotAsImportId(snapshot.value);\n }\n if (autoUpload.value && snapshot.value && importId.value) {\n detectSnapshot(snapshot.value.id, importId.value);\n }\n });\n const nodes = computed(() => {\n if (snapshot.value) {\n if (snapshot.value.nodes.length <= settingsStore.maxShowNodeSize) {\n return structuredClone(snapshot.value.nodes);\n } else {\n return structuredClone(\n snapshot.value.nodes.slice(0, settingsStore.maxShowNodeSize),\n );\n }\n }\n return [];\n });\n const rootNode = computed(() => {\n if (nodes.value.length) {\n return listToTree(nodes.value);\n }\n return undefined;\n });\n const missNodeSize = computed(() => {\n if (snapshot.value) {\n return snapshot.value.nodes.length - settingsStore.maxShowNodeSize;\n }\n return 0;\n });\n const focusNode = shallowRef<RawNode>();\n const focusTime = shallowRef(0);\n const focusPosition = shallowRef<Position>();\n const overlapNodes = shallowRef<RawNode[]>();\n const updateFocusNode = async (node: RawNode) => {\n focusNode.value = node;\n focusTime.value = Date.now();\n await nextTick();\n if (overlapNodes.value && !overlapNodes.value.includes(node)) {\n focusPosition.value = undefined;\n overlapNodes.value = undefined;\n }\n };\n watchEffect(() => {\n if (rootNode.value) {\n updateFocusNode(rootNode.value);\n }\n });\n const updatePosition = (position: Position) => {\n focusPosition.value = position;\n const resultNodes = findNodesByXy(nodes.value, focusPosition.value);\n if (resultNodes.length) {\n updateFocusNode(resultNodes[0]);\n }\n if (resultNodes.length > 1) {\n overlapNodes.value = resultNodes;\n } else {\n overlapNodes.value = undefined;\n }\n };\n\n const trackShow = shallowRef(false);\n const trackData = shallowRef<TrackCardProps>();\n const showTrack = (\n selector: ResolvedSelector,\n result: QueryResult<RawNode>,\n ) => {\n trackShow.value = true;\n trackData.value = {\n selector,\n nodes: nodes.value,\n queryResult: result,\n };\n };\n\n return {\n snapshotId,\n snapshot,\n rootNode,\n screenshotUrl,\n loading,\n redirected,\n importId,\n imageId,\n focusNode,\n updateFocusNode,\n focusTime,\n overlapNodes,\n missNodeSize,\n focusPosition,\n updatePosition,\n trackData,\n trackShow,\n showTrack,\n };\n});\n\nexport const useSharedSnapshotHoverImg = createSharedComposable(() => {\n const { updatePosition, focusNode } = useSnapshotStore();\n\n const imgRef = shallowRef<HTMLImageElement>();\n const imgBounding = useElementBounding(imgRef);\n const imgLoadTime = shallowRef(false);\n\n const clickImg = (ev: MouseEvent) => {\n const img = imgRef.value;\n if (!img) {\n return;\n }\n\n const imgRect = img.getBoundingClientRect();\n\n const innerHeight = (imgRect.width / img.naturalWidth) * img.naturalHeight;\n const offsetTop = (imgRect.height - innerHeight) / 2;\n\n const x = ((ev.clientX - imgRect.left) / imgRect.width) * img.naturalWidth;\n const y =\n ((ev.clientY - imgRect.top - offsetTop) / innerHeight) *\n img.naturalHeight;\n\n updatePosition({ x, y });\n };\n\n const percent = (n: number) => {\n return `${n * 100}%`;\n };\n\n const imgSize = useElementSize(imgRef);\n\n const positionStyle = computed(() => {\n const img = imgRef.value;\n\n const attr = focusNode.value?.attr;\n if (!focusNode.value || !img || !attr || !imgLoadTime.value) {\n return ``;\n }\n const imgWidth = imgSize.width.value;\n const imgHeight = imgSize.height.value;\n const innerHeight = (imgWidth / img.naturalWidth) * img.naturalHeight;\n return {\n left: `calc(${percent(attr.left / img.naturalWidth)} - 2px)`,\n width: `calc(${percent(\n (attr.right - attr.left) / img.naturalWidth,\n )} + 2px)`,\n\n top: `calc(${percent(\n ((attr.top / img.naturalHeight) * innerHeight +\n (imgHeight - innerHeight) / 2) /\n imgHeight,\n )} - 2px)`,\n height: `calc(${percent(\n (((attr.bottom - attr.top) / img.naturalHeight) * innerHeight) /\n imgHeight,\n )} + 2px)`,\n };\n });\n const imgHover = shallowRef(false);\n const hoverPosition = shallowRef({ ox: 0, oy: 0 });\n const boxHoverPosition = computed(() => {\n const attr = focusNode.value?.attr;\n if (!attr) {\n return;\n }\n const { ox, oy } = hoverPosition.value;\n return {\n left: ox - attr.left,\n right: attr.right - ox,\n top: oy - attr.top,\n bottom: attr.bottom - oy,\n };\n });\n const boxHoverPerPosition = computed(() => {\n const attr = focusNode.value?.attr;\n if (!attr || !boxHoverPosition.value) {\n return;\n }\n if (attr.width <= 0 || attr.height <= 0) {\n return;\n }\n const { bottom, left, right, top } = boxHoverPosition.value;\n return {\n left: toFixedNumber(left / (right + left), 3),\n right: toFixedNumber(right / (right + left), 3),\n top: toFixedNumber(top / (top + bottom), 3),\n bottom: toFixedNumber(bottom / (top + bottom), 3),\n };\n });\n const hoverBgImgWidth = 1000;\n const hoverPositionStyle = shallowRef({\n left: '0',\n top: '0',\n width: hoverBgImgWidth + 'px',\n });\n\n const imgMove = (ev: MouseEvent) => {\n const img = imgRef.value;\n if (!img) return;\n const imgRect = img.getBoundingClientRect();\n\n const innerHeight = (imgRect.width / img.naturalWidth) * img.naturalHeight;\n const offsetTop = (imgRect.height - innerHeight) / 2;\n\n const ox = ((ev.clientX - imgRect.left) / imgRect.width) * img.naturalWidth;\n const oy =\n ((ev.clientY - imgRect.top - offsetTop) / innerHeight) *\n img.naturalHeight;\n hoverPosition.value = { ox, oy };\n hoverPositionStyle.value = {\n left:\n (-(ox - 0.1 * img.naturalWidth) / img.naturalWidth) * hoverBgImgWidth +\n 'px',\n top:\n (-(oy - 0.1 * img.naturalWidth) / img.naturalWidth) * hoverBgImgWidth +\n 'px',\n width: hoverBgImgWidth + 'px',\n };\n };\n return {\n imgRef,\n imgBounding,\n clickImg,\n positionStyle,\n imgHover,\n imgMove,\n hoverPositionStyle,\n boxHoverPerPosition,\n imgLoadTime,\n hoverPosition,\n boxHoverPosition,\n };\n});\n","<script setup lang=\"ts\">\nimport SvgIcon from '@/components/SvgIcon.vue';\n\ntype AttrTip = {\n desc: string;\n type: 'info' | 'quickFind';\n};\n\ndefineProps<{\n name: string;\n explain: string;\n tip?: AttrTip;\n}>();\n</script>\n\n<template>\n <div flex justify-between items-center gap-4px>\n <NTooltip\n :delay=\"300\"\n placement=\"top-start\"\n :show-arrow=\"true\"\n :keep-alive-on-hover=\"true\"\n >\n <template #trigger>\n <span>{{ name }}</span>\n </template>\n <div class=\"p-2px\">\n <div>{{ explain }}</div>\n </div>\n </NTooltip>\n <NTooltip\n v-if=\"tip\"\n :delay=\"300\"\n placement=\"top-start\"\n :show-arrow=\"true\"\n :keep-alive-on-hover=\"true\"\n >\n <template #trigger>\n <NIcon\n size=\"14\"\n :style=\"{\n color:\n tip.type === 'quickFind'\n ? 'var(--quickfind-color)'\n : 'var(--info-color)',\n }\"\n class=\"cursor-help transition-all hover:scale-110\"\n @click.stop\n >\n <SvgIcon v-if=\"tip.type === 'info'\" name=\"info\" />\n <SvgIcon\n v-else-if=\"tip.type === 'quickFind'\"\n name=\"ok\"\n class=\"quickfind-icon\"\n />\n </NIcon>\n </template>\n <div class=\"p-2px\">\n <div>{{ tip.desc }}</div>\n </div>\n </NTooltip>\n </div>\n</template>\n","<script setup lang=\"ts\">\nconst props = defineProps<{\n name: string;\n desc?: string | null;\n isNull: boolean;\n}>();\n\nconst displayDesc = computed(() => {\n if (\n props.desc === null ||\n props.desc === undefined ||\n props.desc === 'undefined'\n ) {\n return '--';\n }\n return props.desc;\n});\n</script>\n\n<template>\n <NEllipsis\n class=\"w-[calc(var(--gkd-w)*0.12)]\"\n :class=\"{\n 'text-left direction-rtl': name == 'id',\n 'opacity-50': isNull,\n }\"\n >\n {{ displayDesc }}\n </NEllipsis>\n</template>\n","<script setup lang=\"ts\">\nimport DraggableCard from '@/components/DraggableCard.vue';\nimport { getNodeSelectorText } from '@/utils/node';\nimport { buildEmptyFn, copy } from '@/utils/others';\nimport { useSnapshotStore } from './snapshot';\nimport AttrNameCell from './AttrNameCell.vue';\nimport AttrValueCell from './AttrValueCell.vue';\n\nwithDefaults(\n defineProps<{\n show: boolean;\n onUpdateShow?: (data: boolean) => void;\n }>(),\n {\n onUpdateShow: buildEmptyFn,\n },\n);\n\nconst { focusNode } = useSnapshotStore();\n\ntype AttrTipMap = Record<\n string,\n { desc: string; type: 'info' | 'quickFind'; show?: boolean }\n>;\n\nconst attrTip = computed<AttrTipMap>(() => {\n const node = focusNode.value;\n if (!node) return {};\n return {\n _id: {\n desc: `虚拟属性(真机不可用):生成快照访问节点顺序`,\n type: 'info',\n show: true,\n },\n _pid: {\n desc: `虚拟属性(真机不可用):父节点的 _id`,\n type: 'info',\n show: true,\n },\n _selector: {\n desc: `自动生成的选择器, 点击“_selector”可直接复制内容, 用于定位`,\n type: 'info',\n show: true,\n },\n depth: {\n desc: `使用此属性在某些应用上可能造成无限节点错误`,\n type: 'info',\n show: true,\n },\n id: {\n desc: `可快速查找`,\n type: 'quickFind',\n show: Boolean((node.quickFind || node.idQf) && node.attr.id),\n },\n vid: {\n desc: `可快速查找`,\n type: 'quickFind',\n show: Boolean((node.quickFind || node.idQf) && node.attr.vid),\n },\n text: {\n desc: `可快速查找`,\n type: 'quickFind',\n show: Boolean((node.quickFind || node.textQf) && node.attr.text),\n },\n } as AttrTipMap;\n});\n\nconst lenAttrNames = [`text`, `desc`];\nconst attrs = computed(() => {\n if (!focusNode.value) return [];\n return Object.entries(focusNode.value.attr)\n .map(([name, value]) => {\n const attr = {\n name,\n value,\n desc: JSON.stringify(value),\n tip: attrTip.value[name]?.show ? attrTip.value[name] : undefined,\n };\n if (lenAttrNames.includes(name)) {\n return [\n attr,\n {\n name: name + `.length`,\n value: (value as string)?.length ?? null,\n desc: JSON.stringify((value as string)?.length ?? null),\n tip: undefined,\n },\n ];\n }\n return attr;\n })\n .flat();\n});\n\nconst selectText = computed(() => {\n if (!focusNode.value) return '';\n return getNodeSelectorText(focusNode.value);\n});\n\nconst attrExplainMap: Record<string, string> = {\n id: '控件资源 ID(R.id.xxx)',\n vid: '虚拟 ID,用于区分同类动态控件',\n name: '控件类名(如 TextView、ImageView)',\n text: '控件显示文本内容',\n textLen: 'text 的字符数量',\n desc: '无障碍描述(content-desc)',\n descLen: 'desc 的字符数量',\n isClickable: '控件是否可点击',\n clickable: '控件是否可点击',\n focusable: '控件是否可获取焦点',\n checkable: '控件是否可勾选',\n checked: '控件是否已勾选',\n editable: '控件是否可编辑',\n longClickable: '控件是否支持长按',\n visibleToUser: '控件是否对用户可见',\n childCount: '子节点数量',\n index: '在父节点中的位置序号',\n depth: '在控件树中的层级深度',\n left: '左边界坐标(像素)',\n top: '上边界坐标(像素)',\n right: '右边界坐标(像素)',\n bottom: '下边界坐标(像素)',\n width: '控件宽度(像素)',\n height: '控件高度(像素)',\n _id: '快照遍历序号',\n _pid: '父节点的遍历序号',\n 'text.length': 'text 字段长度',\n 'desc.length': 'desc 字段长度',\n _selector: '自动生成的选择器表达式',\n};\n\nconst getAttrExplain = (name: string) => {\n return (\n attrExplainMap[name] || '该属性用于描述节点特征,可结合其他字段一起定位。'\n );\n};\n\n// 提取类名简写,例如从 \"android.view.View\" 中提取 \"View\"\nconst getClassNameShort = (fullClassName: string): string => {\n if (!fullClassName) return fullClassName;\n const parts = fullClassName.split('.');\n return parts[parts.length - 1] || fullClassName;\n};\n\n// 处理属性点击事件\nconst handleAttrClick = (attr: any) => {\n if (attr.name === 'name' && typeof attr.value === 'string') {\n // 对于 name 属性,只复制类名简写本身\n const shortClassName = getClassNameShort(attr.value);\n copy(shortClassName);\n } else {\n // 其他属性保持原有逻辑\n copy(`${attr.name}=${attr.desc}`);\n }\n};\n</script>\n\n<template>\n <DraggableCard\n v-slot=\"{ onRef }\"\n :initialValue=\"{ top: 40, right: 10 }\"\n class=\"box-shadow-dim snapshot-window window-anim\"\n :show=\"show && Boolean(focusNode)\"\n >\n <div class=\"snapshot-floating-panel relative p-8px\">\n <div absolute top-0 right-0 pt-4px pr-8px>\n <NButton text title=\"最小化\" @click=\"onUpdateShow(!show)\">\n <template #icon>\n <SvgIcon name=\"minus\" />\n </template>\n </NButton>\n </div>\n <NTable\n v-if=\"focusNode\"\n size=\"small\"\n striped\n :singleLine=\"false\"\n class=\"gkd_code\"\n :themeOverrides=\"{\n thPaddingSmall: '1px 3px',\n tdPaddingSmall: '0px 3px',\n }\"\n >\n <thead>\n <tr :ref=\"onRef\" cursor-move>\n <th>Name</th>\n <th>Value</th>\n </tr>\n </thead>\n <NTbody>\n <NTr v-for=\"attrx in attrs\" :key=\"attrx.name\">\n <NTd @click=\"handleAttrClick(attrx)\">\n <AttrNameCell\n :name=\"attrx.name\"\n :explain=\"getAttrExplain(attrx.name)\"\n :tip=\"attrx.tip\"\n />\n </NTd>\n <NTd>\n <AttrValueCell\n :name=\"attrx.name\"\n :desc=\"attrx.desc\"\n :isNull=\"attrx.value === null\"\n />\n </NTd>\n </NTr>\n <NTr>\n <NTd colspan=\"2\">\n <div flex items-center h-24px px-2px>\n <NTooltip>\n <template #trigger>\n <NButton text @click=\"copy(selectText)\">\n <template #icon>\n <NIcon size=\"20\">\n <SvgIcon name=\"path\" />\n </NIcon>\n </template>\n </NButton>\n </template>\n <div max-w-500px>\n {{ selectText }}\n </div>\n </NTooltip>\n </div>\n </NTd>\n </NTr>\n </NTbody>\n </NTable>\n </div>\n </DraggableCard>\n</template>\n","<script setup lang=\"ts\">\nimport DraggableCard from '@/components/DraggableCard.vue';\nimport { getNodeLabel, getNodeStyle } from '@/utils/node';\nimport { useSnapshotStore } from './snapshot';\n\nconst { focusNode, overlapNodes, focusPosition, updateFocusNode } =\n useSnapshotStore();\nconst _1vw = document.documentElement.scrollWidth / 100;\nconst left = _1vw * 25.5;\n</script>\n<template>\n <DraggableCard\n v-slot=\"{ onRef }\"\n :initialValue=\"{ top: 215, left }\"\n class=\"box-shadow-dim w-420px snapshot-window window-anim\"\n :show=\"Boolean(overlapNodes && focusPosition)\"\n >\n <NCard\n v-if=\"overlapNodes && focusPosition\"\n size=\"small\"\n closable\n @close=\"overlapNodes = undefined\"\n >\n <template #header>\n <div :ref=\"onRef\" cursor-move>\n 位置\n <span class=\"overlap-pos-token\">{{\n `${focusPosition.x.toFixed(0)},${focusPosition.y.toFixed(0)}`\n }}</span>\n 存在 {{ overlapNodes.length }} 个层叠节点\n </div>\n </template>\n <NSpace\n style=\"max-height: 400px; overflow-y: scroll; padding-bottom: 10px\"\n class=\"scrollbar-hidden\"\n >\n <NButton\n v-for=\"resultNode in overlapNodes\"\n :key=\"resultNode.id\"\n size=\"small\"\n :style=\"getNodeStyle(resultNode, focusNode)\"\n @click=\"updateFocusNode(resultNode)\"\n >\n {{ getNodeLabel(resultNode) }}\n </NButton>\n </NSpace>\n </NCard>\n </DraggableCard>\n</template>\n","const windowSize = useWindowSize();\nexport const vw = computed(() => windowSize.width.value / 100);\n// const vh = computed(() => windowSize.width.value / 100);\n\n// --gkd-w: max(1200px, 100vw);\nexport const gkdWidth = computed(() => Math.max(1200, windowSize.width.value));\n\n// --gkd-h: max(700px, 100vh);\nexport const gkdHeight = computed(() => Math.max(700, windowSize.height.value));\n","<script setup lang=\"ts\">\nimport DraggableCard from '@/components/DraggableCard.vue';\nimport { getNodeLabel, getNodeStyle } from '@/utils/node';\nimport { buildEmptyFn } from '@/utils/others';\nimport { parseSelector, type ResolvedSelector } from '@/utils/selector';\nimport { gkdWidth, vw } from '@/utils/size';\nimport type { ShallowRef } from 'vue';\nimport JSON5 from 'json5';\nimport { useSnapshotStore } from './snapshot';\n\nwithDefaults(\n defineProps<{\n show: boolean;\n onUpdateShow?: (data: boolean) => void;\n }>(),\n {\n onUpdateShow: buildEmptyFn,\n },\n);\n\nconst snapshotStore = useSnapshotStore();\nconst { rootNode, focusNode } = snapshotStore;\nconst snapshot = snapshotStore.snapshot as ShallowRef<Snapshot | undefined>;\n\nconst text = shallowRef('');\nconst lazyText = refDebounced(text, 500);\n\n/* -------------------------\n 类型定义 / 常量\n ------------------------- */\n\ninterface ResolvedData {\n matches?: string[];\n anyMatches?: string[];\n excludeMatches?: string[];\n excludeAllMatches?: string[];\n activityIds?: string[];\n snapshotUrls?: string[];\n excludeSnapshotUrls?: string[];\n fastQuery?: boolean;\n resetMatch?: 'activity' | 'match' | 'app';\n actionMaximum?: number;\n preKeys?: number[];\n [k: string]: any;\n}\n\ntype ValidateStage = 'json' | 'structure' | 'selector' | 'execute';\n\ntype RuleCheckResultSuccess = {\n success: true;\n node: RawNode;\n matched: {\n matches?: { selector: string; nodes: RawNode[] }[];\n anyMatches?: { selector: string; nodes: RawNode[] }[];\n excludeMatches?: { selector: string; nodes: RawNode[] }[];\n excludeAllMatches?: { selector: string; nodes: RawNode[] }[];\n };\n meta?: {\n expandedActivityIds?: string[];\n usedFastQuery?: boolean;\n };\n};\n\ntype RuleCheckResultFailure = {\n success: false;\n error: string;\n stage: ValidateStage;\n field?: string;\n index?: number;\n start?: number;\n end?: number;\n line?: number;\n column?: number;\n};\n\ntype RuleCheckResult = RuleCheckResultSuccess | RuleCheckResultFailure;\n\nconst PRE_CHARS_BEFORE = 120;\nconst PRE_CHARS_AFTER = 120;\n\n/* -------------------------\n 容错 JSON5 解析\n ------------------------- */\n\nfunction tryParseJSON5Tolerant(rawText: string): {\n value?: any;\n error?: Error;\n} {\n const text = String(rawText ?? '');\n if (!text.trim()) return { error: new Error('空输入') };\n\n try {\n return { value: JSON5.parse(text) };\n } catch {\n // 继续容错\n }\n\n const firstBrace = text.indexOf('{');\n const firstBracket = text.indexOf('[');\n const starts: { i: number; c: '{' | '[' }[] = [];\n if (firstBrace !== -1) starts.push({ i: firstBrace, c: '{' });\n if (firstBracket !== -1) starts.push({ i: firstBracket, c: '[' });\n\n if (starts.length) {\n starts.sort((a, b) => a.i - b.i);\n for (const s of starts) {\n const open = s.c;\n const close = open === '{' ? '}' : ']';\n let depth = 0;\n let inStr = false;\n let strChar = '';\n let escaped = false;\n let inLineComment = false;\n let inBlockComment = false;\n let startIndex = s.i;\n let endIndex = -1;\n\n for (let i = startIndex; i < text.length; i++) {\n const ch = text[i];\n const nextCh = text[i + 1] || '';\n\n if (inBlockComment) {\n if (ch === '*' && nextCh === '/') {\n inBlockComment = false;\n i++;\n }\n continue;\n }\n\n if (inLineComment) {\n if (ch === '\\n') {\n inLineComment = false;\n }\n continue;\n }\n\n if (inStr) {\n if (escaped) escaped = false;\n else if (ch === '\\\\') escaped = true;\n else if (ch === strChar) {\n inStr = false;\n strChar = '';\n }\n continue;\n }\n\n if (ch === '/' && nextCh === '/') {\n inLineComment = true;\n i++;\n continue;\n }\n if (ch === '/' && nextCh === '*') {\n inBlockComment = true;\n i++;\n continue;\n }\n\n if (ch === '\"' || ch === \"'\") {\n inStr = true;\n strChar = ch;\n continue;\n }\n\n if (ch === open) depth++;\n else if (ch === close) {\n depth--;\n if (depth === 0) {\n endIndex = i;\n break;\n }\n }\n }\n\n if (endIndex > 0) {\n const candidate = text.substring(startIndex, endIndex + 1);\n try {\n return { value: JSON5.parse(candidate) };\n } catch {\n // try next\n }\n }\n }\n }\n\n try {\n return { value: JSON5.parse(`[${text}]`) };\n } catch (e) {\n return { error: e as Error };\n }\n}\n\n/* -------------------------\n 工具函数\n ------------------------- */\n\nconst toArray = (v: any): string[] | undefined => {\n if (v === undefined || v === null) return [];\n if (typeof v === 'string') return [v];\n if (Array.isArray(v) && v.every((s) => typeof s === 'string')) return v;\n return undefined;\n};\n\nconst isObj = (v: any): v is Record<string, any> => {\n return typeof v === 'object' && v !== null && !Array.isArray(v);\n};\n\nfunction indexToLineCol(\n text: string,\n index: number,\n): { line: number; column: number } {\n if (index < 0) index = 0;\n const upto = text.slice(0, index);\n const lines = upto.split('\\n');\n const line = lines.length;\n const column = lines[lines.length - 1].length + 1;\n return { line, column };\n}\n\nfunction findFirstOccurrence(rawText: string, needle: string): number {\n if (!needle) return -1;\n let idx = rawText.indexOf(needle);\n if (idx >= 0) return idx;\n const withDouble = `\"${needle}\"`;\n idx = rawText.indexOf(withDouble);\n if (idx >= 0) return idx + 1;\n const withSingle = `'${needle}'`;\n idx = rawText.indexOf(withSingle);\n if (idx >= 0) return idx + 1;\n const esc = needle.replace(/\"/g, '\\\\\"');\n idx = rawText.indexOf(esc);\n return idx;\n}\n\nfunction expandActivityIds(\n arr: string[] | undefined,\n appId?: string,\n): string[] {\n if (!arr) return [];\n if (!appId) return arr.slice();\n return arr.map((id) => (id.startsWith('.') ? `${appId}${id}` : id));\n}\n\n/* -------------------------\n normalize & validate\n ------------------------- */\n\nfunction validateAndNormalizeRuleCandidate(\n obj: any,\n): { success: true; rule: ResolvedData } | RuleCheckResultFailure {\n if (!isObj(obj)) {\n return {\n success: false,\n error: '非法格式: 规则不是对象',\n stage: 'structure',\n };\n }\n\n const normalizeStringOrArrayField = (\n fieldName: string,\n ): string[] | undefined => {\n if (!(fieldName in obj)) return undefined;\n const arr = toArray(obj[fieldName]);\n if (arr === undefined) {\n throw new Error(`非法字段: ${fieldName} 必须为字符串或字符串数组`);\n }\n return arr;\n };\n\n try {\n const result: ResolvedData = {};\n\n if ('fastQuery' in obj) {\n if (typeof obj.fastQuery !== 'boolean')\n return {\n success: false,\n error: '非法字段: fastQuery 必须为 boolean',\n stage: 'structure',\n field: 'fastQuery',\n };\n result.fastQuery = obj.fastQuery;\n }\n\n if ('resetMatch' in obj) {\n const v = obj.resetMatch;\n if (!(v === 'activity' || v === 'match' || v === 'app')) {\n return {\n success: false,\n error: \"非法字段: resetMatch 必须为 'activity' | 'match' | 'app'\",\n stage: 'structure',\n field: 'resetMatch',\n };\n }\n result.resetMatch = v;\n }\n\n if ('actionMaximum' in obj) {\n const v = obj.actionMaximum;\n if (!(Number.isInteger(v) && v >= 0))\n return {\n success: false,\n error: '非法字段: actionMaximum 必须为非负整数',\n stage: 'structure',\n field: 'actionMaximum',\n };\n result.actionMaximum = v;\n }\n\n if ('preKeys' in obj) {\n if (\n !Array.isArray(obj.preKeys) ||\n !obj.preKeys.every((n: any) => Number.isInteger(n))\n ) {\n return {\n success: false,\n error: '非法字段: preKeys 必须为整数数组',\n stage: 'structure',\n field: 'preKeys',\n };\n }\n result.preKeys = obj.preKeys.slice();\n }\n\n try {\n const act = normalizeStringOrArrayField('activityIds');\n if (act !== undefined) result.activityIds = act;\n } catch (e: any) {\n return {\n success: false,\n error: e.message,\n stage: 'structure',\n field: 'activityIds',\n };\n }\n\n const urlFields = ['snapshotUrls', 'excludeSnapshotUrls', 'exampleUrls'];\n for (const f of urlFields) {\n try {\n const arr = normalizeStringOrArrayField(f);\n if (arr !== undefined) result[f] = arr;\n } catch (e: any) {\n return {\n success: false,\n error: e.message,\n stage: 'structure',\n field: f,\n };\n }\n }\n\n const selectorFields = [\n 'matches',\n 'anyMatches',\n 'excludeMatches',\n 'excludeAllMatches',\n ];\n for (const f of selectorFields) {\n try {\n const arr = normalizeStringOrArrayField(f);\n if (arr !== undefined) {\n result[f] = arr;\n }\n } catch (e: any) {\n return {\n success: false,\n error: e.message,\n stage: 'structure',\n field: f,\n };\n }\n }\n\n const hasMatches = (result.matches?.length ?? 0) > 0;\n const hasAnyMatches = (result.anyMatches?.length ?? 0) > 0;\n\n if (!hasMatches && !hasAnyMatches) {\n return {\n success: false,\n error: '非法规则: matches 和 anyMatches 至少存在一个',\n stage: 'structure',\n };\n }\n\n for (const f of selectorFields) {\n const arr: string[] | undefined = result[f];\n if (!arr) continue;\n for (let i = 0; i < arr.length; i++) {\n const s = arr[i];\n try {\n parseSelector(s);\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return {\n success: false,\n error: `非法选择器: ${f}[${i}] 错误: ${message}`,\n stage: 'selector',\n field: f,\n index: i,\n };\n }\n }\n }\n\n return { success: true, rule: result };\n } catch (e: any) {\n return {\n success: false,\n error: e.message ?? String(e),\n stage: 'structure',\n };\n }\n}\n\n/* -------------------------\n checkRule:执行匹配\n ------------------------- */\n\nfunction checkRule(\n obj: ResolvedData,\n root: RawNode | undefined,\n options?: {\n appId?: string;\n currentActivityId?: string;\n simulatedPreKeys?: number[];\n ignoreActivityCheck?: boolean;\n },\n): RuleCheckResult {\n if (!root)\n return { success: false, error: '当前无可用 rootNode', stage: 'execute' };\n\n const appId = options?.appId;\n const currentActivityId = options?.currentActivityId;\n const simulatedPreKeys = options?.simulatedPreKeys ?? [];\n const ignoreActivityCheck = options?.ignoreActivityCheck ?? false;\n\n const normalizedActivityIds = obj.activityIds ?? [];\n const expanded = expandActivityIds(normalizedActivityIds, appId);\n if (!ignoreActivityCheck && expanded.length > 0 && currentActivityId) {\n const matched = expanded.some((aid) => currentActivityId.startsWith(aid));\n if (!matched) {\n return {\n success: false,\n error: 'activityIds 未匹配当前界面',\n stage: 'execute',\n field: 'activityIds',\n };\n }\n }\n\n if (\n Array.isArray(obj.preKeys) &&\n obj.preKeys.length &&\n simulatedPreKeys.length > 0\n ) {\n const unmet = obj.preKeys.some(\n (k: number) => !simulatedPreKeys.includes(k),\n );\n if (unmet) {\n return {\n success: false,\n error: 'preKeys 未满足',\n stage: 'execute',\n field: 'preKeys',\n };\n }\n }\n\n const resolveSelectorsToNodes = (selectors?: string[]) => {\n if (!selectors || !selectors.length) return [] as RawNode[][];\n const resolved: ResolvedSelector[] = selectors.map((s) => parseSelector(s));\n return resolved.map((r) => r.querySelfOrSelectorAll(root));\n };\n\n const excludeArr = obj.excludeMatches ?? [];\n if (excludeArr.length) {\n const excludeResults = resolveSelectorsToNodes(excludeArr);\n const index = excludeResults.findIndex(\n (nodes) => Array.isArray(nodes) && nodes.length > 0,\n );\n if (index >= 0) {\n return {\n success: false,\n error: `excludeMatches[${index}] 命中(规则被排除)`,\n stage: 'execute',\n field: 'excludeMatches',\n index,\n };\n }\n }\n\n const excludeAllArr = obj.excludeAllMatches ?? [];\n if (excludeAllArr.length) {\n const excludeAllResults = resolveSelectorsToNodes(excludeAllArr);\n const allMatched =\n excludeAllResults.length > 0 &&\n excludeAllResults.every(\n (nodes) => Array.isArray(nodes) && nodes.length > 0,\n );\n if (allMatched) {\n return {\n success: false,\n error: `excludeAllMatches 全部命中(规则被排除)`,\n stage: 'execute',\n field: 'excludeAllMatches',\n };\n }\n }\n\n const matchesArr = obj.matches ?? [];\n const matchesResults = resolveSelectorsToNodes(matchesArr);\n if (matchesArr.length) {\n const notIndex = matchesResults.findIndex(\n (nodes) => !Array.isArray(nodes) || nodes.length === 0,\n );\n if (notIndex >= 0) {\n return {\n success: false,\n error: `无法匹配: matches[${notIndex}] 查找结果为空`,\n stage: 'execute',\n field: 'matches',\n index: notIndex,\n };\n }\n const lastNodes = matchesResults.at(-1) ?? [];\n const target = lastNodes[0];\n return {\n success: true,\n node: target,\n matched: {\n matches: matchesArr.map((sel, i) => ({\n selector: sel,\n nodes: matchesResults[i],\n })),\n },\n meta: { expandedActivityIds: expanded, usedFastQuery: !!obj.fastQuery },\n };\n }\n\n const anyArr = obj.anyMatches ?? [];\n const anyResults = resolveSelectorsToNodes(anyArr);\n if (anyArr.length) {\n if (\n anyResults.every((nodes) => !Array.isArray(nodes) || nodes.length === 0)\n ) {\n return {\n success: false,\n error: '无法匹配: anyMatches 查找结果为空',\n stage: 'execute',\n field: 'anyMatches',\n };\n }\n for (let i = 0; i < anyResults.length; i++) {\n const nodes = anyResults[i];\n if (Array.isArray(nodes) && nodes.length > 0) {\n return {\n success: true,\n node: nodes[0],\n matched: { anyMatches: [{ selector: anyArr[i], nodes }] },\n meta: {\n expandedActivityIds: expanded,\n usedFastQuery: !!obj.fastQuery,\n },\n };\n }\n }\n }\n\n return { success: false, error: '规则无有效匹配选择器', stage: 'execute' };\n}\n\n/* -------------------------\n 单一解析流与计算\n ------------------------- */\n\nconst parsedRuleResult = computed<RuleCheckResult | null>(() => {\n if (!lazyText.value) return null;\n const rawNormalized = lazyText.value.replace(/\\r\\n?/g, '\\n');\n\n const parsedAttempt = tryParseJSON5Tolerant(rawNormalized);\n if (parsedAttempt.error) {\n const msg = parsedAttempt.error.message ?? String(parsedAttempt.error);\n let idx: number | undefined;\n const posMatch =\n /position\\s+(\\d+)/i.exec(msg) || /at position\\s+(\\d+)/i.exec(msg);\n if (posMatch) {\n idx = parseInt(posMatch[1], 10);\n } else {\n const lcMatch =\n /line\\s+(\\d+)[,:\\s]+column\\s+(\\d+)/i.exec(msg) ||\n /line\\s+(\\d+)\\s+column\\s+(\\d+)/i.exec(msg);\n if (lcMatch) {\n const line = parseInt(lcMatch[1], 10);\n const column = parseInt(lcMatch[2], 10);\n const lines = rawNormalized.split('\\n');\n let acc = 0;\n const L = Math.max(1, Math.min(line, lines.length));\n for (let i = 0; i < L - 1; i++) acc += lines[i].length + 1;\n idx = acc + Math.max(0, column - 1);\n }\n }\n\n if (idx === undefined || Number.isNaN(idx)) idx = 0;\n const { line, column } = indexToLineCol(rawNormalized, idx);\n const start = Math.max(0, idx);\n const end = Math.min(rawNormalized.length, idx + 1);\n\n return {\n success: false,\n error: `解析失败: ${msg}`,\n stage: 'json',\n start,\n end,\n line,\n column,\n };\n }\n\n const parsed = parsedAttempt.value;\n const candidate = Array.isArray(parsed) && parsed.length ? parsed[0] : parsed;\n const validated = validateAndNormalizeRuleCandidate(candidate);\n\n if (!validated.success) {\n const errorObj = validated;\n let start = 0;\n let end = Math.min(200, rawNormalized.length);\n let line = 1;\n let column = 1;\n\n if (\n errorObj.stage === 'selector' &&\n errorObj.field &&\n errorObj.index !== undefined\n ) {\n try {\n const fieldValue = (candidate as any)[errorObj.field];\n let selectorString: string | undefined;\n if (Array.isArray(fieldValue) && fieldValue.length > errorObj.index) {\n selectorString = fieldValue[errorObj.index];\n } else if (typeof fieldValue === 'string' && errorObj.index === 0) {\n selectorString = fieldValue;\n }\n if (selectorString) {\n const pos = findFirstOccurrence(rawNormalized, selectorString);\n start = pos >= 0 ? pos : 0;\n end =\n pos >= 0\n ? pos + selectorString.length\n : Math.min(rawNormalized.length, start + 10);\n const lc = indexToLineCol(rawNormalized, start);\n line = lc.line;\n column = lc.column;\n }\n } catch {\n /* fallback */\n }\n } else if (errorObj.stage === 'structure' && errorObj.field) {\n const pos = findFirstOccurrence(rawNormalized, errorObj.field);\n start = pos >= 0 ? Math.max(0, pos - 10) : 0;\n end =\n pos >= 0\n ? Math.min(rawNormalized.length, pos + errorObj.field.length + 10)\n : Math.min(rawNormalized.length, start + 20);\n const lc = indexToLineCol(rawNormalized, start);\n line = lc.line;\n column = lc.column;\n }\n\n return { ...errorObj, start, end, line, column };\n }\n\n return checkRule(validated.rule, rootNode.value, {\n appId: snapshot.value?.appId,\n currentActivityId: snapshot.value?.activityId,\n simulatedPreKeys: [],\n ignoreActivityCheck: false,\n });\n});\n\n/* -------------------------\n 视图辅助\n ------------------------- */\n\nconst diagnostics = computed<RuleCheckResultFailure | null>(() => {\n const result = parsedRuleResult.value;\n if (\n result &&\n !result.success &&\n (result.stage === 'json' ||\n result.stage === 'structure' ||\n result.stage === 'selector')\n ) {\n return result as RuleCheckResultFailure;\n }\n return null;\n});\n\nconst errorText = computed(() => {\n if (parsedRuleResult.value && !parsedRuleResult.value.success) {\n return parsedRuleResult.value.error ?? '';\n }\n return '';\n});\n\nconst targetNode = computed(() => {\n if (parsedRuleResult.value && parsedRuleResult.value.success) {\n return parsedRuleResult.value.node;\n }\n return null;\n});\n\nconst errorPreview = computed(() => {\n const d = diagnostics.value;\n if (!d) return null;\n const raw = lazyText.value ? lazyText.value.replace(/\\r\\n?/g, '\\n') : '';\n const start = Math.max(0, d.start ?? 0);\n const end = Math.min(raw.length, d.end ?? start);\n const preStart = Math.max(0, start - PRE_CHARS_BEFORE);\n const postEnd = Math.min(raw.length, end + PRE_CHARS_AFTER);\n\n let head = raw.slice(preStart, start);\n const err = raw.slice(start, end) || ' ';\n let tail = raw.slice(end, postEnd);\n\n if (preStart > 0) head = '...' + head;\n if (postEnd < raw.length) tail = tail + '...';\n\n return { head, err, tail };\n});\n</script>\n\n<template>\n <DraggableCard\n v-slot=\"{ onRef }\"\n :initialValue=\"{\n top: 40,\n right: Math.max(315, 12 * vw + 135),\n width: Math.max(480, gkdWidth * 0.3),\n }\"\n :minWidth=\"300\"\n sizeDraggable\n class=\"box-shadow-dim snapshot-window window-anim\"\n :show=\"show\"\n >\n <div\n class=\"snapshot-floating-panel\"\n b-1px\n b-solid\n b-gray-200\n rounded-12px\n p-8px\n >\n <div flex m-b-4px pr-4px>\n <SvgIcon\n name=\"test\"\n class=\"mr-6px\"\n style=\"color: var(--accent-success-color)\"\n />\n <div>测试规则</div>\n <div :ref=\"onRef\" flex-1 cursor-move />\n <NButton text title=\"最小化\" @click=\"onUpdateShow(!show)\">\n <template #icon><SvgIcon name=\"minus\" /></template>\n </NButton>\n </div>\n\n <NInput\n v-model:value=\"text\"\n type=\"textarea\"\n placeholder=\"请输入单个规则测试(支持 JSON5,允许 string 或 string[],会自动 normalize)\"\n size=\"small\"\n class=\"gkd_code m-b-4px\"\n :autosize=\"{ minRows: 10, maxRows: 20 }\"\n />\n\n <div\n v-if=\"errorPreview\"\n mt-6px\n mb-8px\n p-4px\n gkd_code\n transition-colors\n class=\"selector-ast-view selector-ast-view-error\"\n >\n <span whitespace-pre-wrap>\n <span v-if=\"errorPreview.head\">{{ errorPreview.head }}</span>\n <span bg-red relative>\n <span v-if=\"errorPreview.err\" class=\"rc-error\">{{\n errorPreview.err\n }}</span>\n <span v-else pl-20px class=\"rc-error\" />\n <div\n absolute\n left-0\n right-0\n top--12px\n flex\n flex-col\n items-center\n animate-bounce\n pointer-events-none\n >\n <SvgIcon name=\"arrow\" class=\"selector-error-arrow\" />\n </div>\n </span>\n <span v-if=\"errorPreview.tail\">{{ errorPreview.tail }}</span>\n </span>\n </div>\n\n <div min-h-24px mt-4px>\n <div v-if=\"errorText\" color-red whitespace-pre>\n {{ errorText }}\n <template v-if=\"diagnostics\">\n <br />\n <span text-11px opacity-70>\n 行 {{ diagnostics.line }} | 列 {{ diagnostics.column }} | 阶段:\n {{ diagnostics.stage }}\n </span>\n </template>\n </div>\n\n <NButton\n v-else-if=\"targetNode\"\n size=\"small\"\n :style=\"getNodeStyle(targetNode, focusNode)\"\n @click=\"snapshotStore.updateFocusNode(targetNode)\"\n >\n {{ getNodeLabel(targetNode) }}\n </NButton>\n </div>\n </div>\n </DraggableCard>\n</template>\n\n<style scoped>\n.selector-ast-view {\n max-height: 160px;\n overflow: auto;\n border-radius: 6px;\n color: var(--text-primary, inherit);\n}\n\n.selector-ast-view-error {\n background: var(--selector-ast-error-bg-color2, rgba(255, 240, 240, 0.9));\n border: 1px solid rgba(255, 80, 80, 0.12);\n}\n\n.selector-error-arrow {\n color: var(--accent-error-color, #ff6666);\n}\n\n.selector-ast-view .rc-error,\n.selector-ast-view-error .rc-error {\n background: rgba(255, 90, 90, 0.12);\n border-bottom: 2px solid rgba(255, 60, 60, 0.9);\n padding: 0 2px;\n border-radius: 3px;\n}\n\n:global(html.dark-mode-active .selector-ast-view-error) {\n background: var(--selector-ast-error-bg-color2, rgba(40, 40, 40, 0.6));\n border: 1px solid rgba(255, 80, 80, 0.16);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useSharedSnapshotHoverImg, useSnapshotStore } from './snapshot';\n\nconst { screenshotUrl } = useSnapshotStore();\nconst {\n imgHover,\n imgBounding,\n hoverPositionStyle,\n boxHoverPosition,\n hoverPosition,\n boxHoverPerPosition,\n} = useSharedSnapshotHoverImg();\n</script>\n\n<template>\n <!-- Teleport 需要单独一个组件否则 hmr 错误 -->\n <Teleport v-if=\"screenshotUrl\" to=\"body\">\n <!-- 渲染在外部防止被遮挡 -->\n <div\n v-show=\"imgHover\"\n class=\"MiniHoverImg mini-hover-image\"\n :style=\"{\n left: imgBounding.right.value + 4 + 'px',\n top: imgBounding.top.value + 'px',\n borderColor: 'var(--mini-hover-border-color)',\n }\"\n pointer-events-none\n fixed\n overflow-hidden\n z-2\n h-200px\n w-200px\n border-1px\n border-dashed\n >\n <img\n :src=\"screenshotUrl\"\n :style=\"hoverPositionStyle\"\n object-contain\n absolute\n left-0\n top-0\n class=\"max-w-none!\"\n />\n <div\n absolute\n left-2px\n top-2px\n p-1px\n z-1\n text-13px\n class=\"leading-[1] mini-hover-token\"\n >\n {{ `${hoverPosition.ox.toFixed(0)}, ${hoverPosition.oy.toFixed(0)}` }}\n </div>\n <div\n v-if=\"boxHoverPosition\"\n absolute\n left-2px\n bottom-2px\n p-1px\n z-1\n text-12px\n class=\"leading-[1] mini-hover-token\"\n flex\n flex-col\n flex-items-center\n >\n <div>{{ boxHoverPosition.top.toFixed(0) }}</div>\n <div>\n {{\n boxHoverPosition.left.toFixed(0) +\n ', ' +\n boxHoverPosition.right.toFixed(0)\n }}\n </div>\n <div>{{ boxHoverPosition.bottom.toFixed(0) }}</div>\n </div>\n <div\n v-if=\"boxHoverPerPosition\"\n absolute\n right-2px\n bottom-2px\n p-1px\n z-1\n text-12px\n class=\"leading-[1] mini-hover-token\"\n flex\n flex-col\n flex-items-center\n >\n <div>{{ boxHoverPerPosition.top }}</div>\n <div>\n {{ boxHoverPerPosition.left + ', ' + boxHoverPerPosition.right }}\n </div>\n <div>{{ boxHoverPerPosition.bottom }}</div>\n </div>\n <div\n class=\"top-[calc(50%-1px)] bg-[length:10px_1px]\"\n absolute\n left-0\n right-0\n h-1px\n bg-repeat-x\n mix-blend-difference\n style=\"\n background-image: linear-gradient(\n to left,\n transparent 0%,\n transparent 50%,\n var(--mini-hover-cross-color) 50%,\n var(--mini-hover-cross-color) 100%\n );\n background-position-x: 1.5px;\n \"\n />\n <div\n class=\"left-[calc(50%-1px)] bg-[length:1px_10px]\"\n absolute\n top-0\n bottom-0\n w-1px\n bg-repeat-y\n mix-blend-difference\n style=\"\n background-image: linear-gradient(\n to top,\n transparent 0%,\n transparent 50%,\n var(--mini-hover-cross-color) 50%,\n var(--mini-hover-cross-color) 100%\n );\n background-position-y: 1.5px;\n \"\n />\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport dayjs from 'dayjs';\nimport MiniHoverImg from './MiniHoverImg.vue';\nimport { useSharedSnapshotHoverImg, useSnapshotStore } from './snapshot';\n\nconst { screenshotUrl, snapshot } = useSnapshotStore();\nconst { clickImg, imgHover, imgMove, imgLoadTime, positionStyle, imgRef } =\n useSharedSnapshotHoverImg();\n</script>\n\n<template>\n <div\n v-if=\"snapshot && screenshotUrl\"\n flex\n flex-col\n relative\n h-full\n p-2px\n overflow-hidden\n >\n <img\n ref=\"imgRef\"\n :src=\"screenshotUrl\"\n cursor-crosshair\n object-contain\n h-full\n class=\"max-w-[calc(var(--gkd-w)*0.35)]\"\n @click=\"clickImg\"\n @mouseover=\"imgHover = true\"\n @mouseleave=\"imgHover = false\"\n @mousemove=\"imgMove\"\n @load=\"imgLoadTime = true\"\n />\n <div pointer-events-none absolute left-2px top-2px size=\"[calc(100%-4px)]\">\n <div\n :style=\"positionStyle\"\n absolute\n transition-all-300\n b-1px\n b-solid\n style=\"border-color: var(--screenshot-focus-border-color)\"\n >\n <div\n absolute\n left-0\n top-0\n bottom-0\n right-0\n b-solid\n b-1px\n style=\"border-color: var(--screenshot-focus-border-inner-color)\"\n />\n </div>\n </div>\n <div\n absolute\n z-4\n pointer-events-none\n left-4px\n top-4px\n text-12px\n leading=\"100%\"\n flex\n gap-4px\n >\n <div\n py-1px\n px-2px\n style=\"background-color: var(--screenshot-card-bg-color); color: var(--screenshot-card-text-color)\"\n title=\"尺寸\"\n >\n {{ `${snapshot.screenWidth}x${snapshot.screenHeight}` }}\n </div>\n <div\n py-1px\n px-2px\n style=\"background-color: var(--screenshot-card-bg-color); color: var(--screenshot-card-text-color)\"\n title=\"创建时间\"\n >\n {{ dayjs(snapshot.id).format('YYYY-MM-DD HH:mm:ss') }}\n </div>\n </div>\n <MiniHoverImg v-if=\"imgRef\" />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport DraggableCard from '@/components/DraggableCard.vue';\nimport SelectorText from '@/components/SelectorText.vue';\nimport { message } from '@/utils/discrete';\nimport { errorTry, errorWrap } from '@/utils/error';\nimport { getAppInfo, getNodeLabel, getNodeStyle } from '@/utils/node';\nimport { buildEmptyFn, copy } from '@/utils/others';\nimport { parseSelector, wasmLoadTask } from '@/utils/selector';\nimport { gkdWidth, vw } from '@/utils/size';\nimport { getImagUrl, getImportUrl, getOfficialImportUrl } from '@/utils/url';\nimport {\n AstNode,\n FastQuery,\n GkdException,\n Selector,\n SyntaxException,\n} from '@gkd-kit/selector';\nimport dayjs from 'dayjs';\nimport * as base64url from 'universal-base64url';\nimport type { ShallowRef } from 'vue';\nimport JSON5 from 'json5';\nimport { useSnapshotStore } from './snapshot';\n\nwithDefaults(\n defineProps<{\n show: boolean;\n onUpdateShow?: (data: boolean) => void;\n }>(),\n {\n onUpdateShow: buildEmptyFn,\n },\n);\n\nconst route = useRoute();\nconst { settingsStore, snapshotImportId, snapshotImageId } = useStorageStore();\n\nconst snapshotStore = useSnapshotStore();\nconst snapshot = snapshotStore.snapshot as ShallowRef<Snapshot>;\nconst rootNode = snapshotStore.rootNode as ShallowRef<RawNode>;\nconst { focusNode, updateFocusNode } = snapshotStore;\n\nconst searchText = shallowRef(``);\nconst searchTextLazy = useDebounce(searchText, 220);\n\nconst selectorResults = shallowReactive<SearchResult[]>([]);\nconst expandedKeys = shallowRef<number[]>([]);\n\nconst searchSelector = (text: string) => {\n const selector = errorWrap(\n () => parseSelector(text),\n (e) => {\n if (typeof e == 'string') return e;\n if (e instanceof GkdException) return `非法选择器:` + e.outMessage;\n return `非法选择器:` + (e instanceof Error ? e.message : e);\n },\n );\n if (\n selectorResults.find(\n (s) =>\n typeof s.selector == 'object' &&\n s.selector.toString() == selector.toString(),\n )\n ) {\n message.warning(`不可重复选择`);\n return;\n }\n\n const results = selector.querySelfOrSelectorAllContext(rootNode.value);\n // 修正 1: 将 QueryResult 转换为真正的数组以适配 TS 和后续的 map 操作\n const resultsArray = Array.from(results);\n\n if (resultsArray.length == 0) {\n message.success(`没有选择到节点`);\n return;\n }\n message.success(`选择到 ${resultsArray.length} 个节点`);\n selectorResults.unshift({\n selector,\n nodes: resultsArray.map((r) => r.target),\n results: resultsArray as any,\n key: Date.now(),\n gkd: true,\n });\n return resultsArray.length;\n};\n\nconst searchString = (text: string) => {\n if (\n selectorResults.find(\n (s) => typeof s.selector == 'string' && s.selector.toString() == text,\n )\n ) {\n message.warning(`不可重复搜索`);\n return;\n }\n const results: RawNode[] = [];\n const stack: RawNode[] = [rootNode.value];\n while (stack.length > 0) {\n const n = stack.pop()!;\n if (getNodeLabel(n).includes(text)) {\n results.push(n);\n }\n stack.push(...[...n.children].reverse());\n }\n if (results.length == 0) {\n message.success(`没有搜索到节点`);\n return;\n }\n message.success(`搜索到 ${results.length} 个节点`);\n selectorResults.unshift({\n gkd: false,\n selector: text,\n nodes: results,\n key: Date.now(),\n });\n return results.length;\n};\n\nconst refreshExpandedKeys = () => {\n const newResult = selectorResults[0];\n const newNode = newResult.nodes[0];\n if (!Array.isArray(newNode)) {\n updateFocusNode(newNode);\n } else if (typeof newResult.selector == 'object') {\n updateFocusNode(newNode);\n }\n const allKeys = new Set(selectorResults.map((s) => s.key));\n const newKeys = expandedKeys.value.filter((k) => allKeys.has(k));\n newKeys.push(newResult.key);\n expandedKeys.value = newKeys;\n};\n\nconst searchBySelector = errorTry(() => {\n const text = searchText.value.trim();\n if (!text) return;\n if (enableSearchBySelector.value) {\n if (!searchSelector(text)) return;\n } else {\n if (!searchString(text)) return;\n }\n refreshExpandedKeys();\n});\n\nconst handleTextareaKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n searchBySelector();\n }\n};\n\nonMounted(async () => {\n await wasmLoadTask;\n let count = 0;\n if (route.query.gkd) {\n count += searchSelector(base64url.decode(route.query.gkd as string)) || 0;\n }\n if (route.query.str) {\n count += searchString(route.query.str as string) || 0;\n }\n if (count > 0) {\n refreshExpandedKeys();\n }\n});\n\nconst generateRules = errorTry(async (result: SelectorSearchResult) => {\n const imageId = snapshotImageId[snapshot.value.id];\n const importId = snapshotImportId[snapshot.value.id];\n const snapshotUrls = importId\n ? settingsStore.shareUseOfficialImportDomain\n ? getOfficialImportUrl(importId)\n : getImportUrl(importId)\n : undefined;\n const exampleUrls = imageId ? getImagUrl(imageId) : undefined;\n\n const s = result.selector;\n // 修正 2: 显式类型转换以修复 .map 报错\n // 使用 Array.from 配合 unknown 转换,这是最符合 TS 规范的绕过方式\n const t = Array.from(result.results as unknown as Iterable<any>).map(\n (v: any) => v.context.toArray().at(-1)!,\n )[0];\n\n const fastQuery = [\n (t.quickFind ?? t.idQf) &&\n t.attr.id &&\n s.fastQueryList.some(\n (v) => v instanceof FastQuery.Id && v.acceptText(t.attr.id!),\n ),\n (t.quickFind ?? t.idQf) &&\n t.attr.vid &&\n s.fastQueryList.some(\n (v) => v instanceof FastQuery.Vid && v.acceptText(t.attr.vid!),\n ),\n (t.quickFind ?? t.textQf) &&\n t.attr.text &&\n s.fastQueryList.some(\n (v) => v instanceof FastQuery.Text && v.acceptText(t.attr.text!),\n ),\n ].some(Boolean);\n const rule = {\n id: snapshot.value.appId,\n name: getAppInfo(snapshot.value).name,\n groups: [\n {\n key: 1,\n name: `[ChangeMe]规则名称-${dayjs().format('YYYY-MM-DD HH:mm:ss')}`,\n desc: `[ChangeMe]本规则由GKD网页端审查工具生成`,\n rules: [\n {\n fastQuery: fastQuery || undefined,\n activityIds: snapshot.value.activityId,\n matches: s.toString(),\n exampleUrls,\n snapshotUrls,\n },\n ],\n },\n ],\n };\n\n copy(JSON5.stringify(rule, undefined, 2));\n});\n\nconst enableSearchBySelector = shallowRef(true);\nconst selectorSyntaxText = computed(() => {\n if (!enableSearchBySelector.value) return '';\n return searchTextLazy.value.trim();\n});\n\nconst selectorSyntaxResult = computed(() => {\n const text = selectorSyntaxText.value;\n if (!text) return;\n try {\n return Selector.Companion.parseAst(text);\n } catch (e) {\n return e as GkdException;\n }\n});\n\nconst selectorSyntaxAst = computed(() => {\n if (selectorSyntaxResult.value instanceof AstNode) {\n return selectorSyntaxResult.value;\n }\n return undefined;\n});\n\nconst selectorSyntaxError = computed(() => {\n const result = selectorSyntaxResult.value;\n const text = selectorSyntaxText.value;\n if (result instanceof SyntaxException) {\n const hasErrorChar = result.index < text.length;\n const eofLike =\n !hasErrorChar || /expect\\s+eof/i.test(result.outMessage || '');\n return {\n isEof: eofLike,\n headText: text.substring(0, result.index),\n errorText: hasErrorChar\n ? text.substring(result.index, result.index + 1)\n : '',\n tailText: hasErrorChar ? text.substring(result.index + 1) : '',\n message: result.outMessage,\n };\n }\n if (result && !(result instanceof AstNode)) {\n const msg =\n typeof (result as any).outMessage == 'string'\n ? (result as any).outMessage\n : typeof (result as any).message == 'string'\n ? (result as any).message\n : '';\n return {\n isEof: /expect\\s+eof/i.test(msg),\n headText: '',\n errorText: '',\n tailText: '',\n message: msg,\n };\n }\n return undefined;\n});\n\nconst hasZipId = computed(() => {\n return snapshotImportId[snapshot.value.id];\n});\n\nconst shareResult = (result: SearchResult) => {\n if (!hasZipId.value) return;\n const importUrl = new URL(\n settingsStore.shareUseOfficialImportDomain\n ? getOfficialImportUrl(snapshotImportId[snapshot.value.id])\n : getImportUrl(snapshotImportId[snapshot.value.id]),\n );\n if (typeof result.selector == 'object') {\n importUrl.searchParams.set(\n 'gkd',\n base64url.encode(result.selector.toString()),\n );\n } else {\n importUrl.searchParams.set('str', result.selector.toString());\n }\n copy(importUrl.toString());\n};\n</script>\n\n<template>\n <DraggableCard\n v-slot=\"{ onRef }\"\n :initialValue=\"{\n top: 40,\n right: Math.max(315, 12 * vw + 135),\n width: Math.max(480, gkdWidth * 0.3),\n }\"\n :minWidth=\"300\"\n sizeDraggable\n class=\"box-shadow-dim snapshot-window window-anim\"\n :show=\"show\"\n >\n <div\n class=\"snapshot-floating-panel\"\n b-1px\n b-solid\n b-gray-200\n rounded-12px\n p-8px\n >\n <div flex m-b-4px pr-4px>\n <NRadioGroup v-model:value=\"enableSearchBySelector\">\n <NSpace>\n <NRadio :value=\"false\"> 字符搜索 </NRadio>\n <NRadio :value=\"true\"> 选择器查询 </NRadio>\n </NSpace>\n </NRadioGroup>\n <div :ref=\"onRef\" flex-1 cursor-move />\n <NButton text title=\"最小化\" @click=\"onUpdateShow(!show)\">\n <template #icon>\n <SvgIcon name=\"minus\" />\n </template>\n </NButton>\n </div>\n <NInputGroup>\n <NInput\n v-model:value=\"searchText\"\n type=\"textarea\"\n :placeholder=\"enableSearchBySelector ? `请输入选择器` : `请输入字符`\"\n :autosize=\"{ minRows: 1, maxRows: 6 }\"\n :inputProps=\"{ class: 'selector-textarea' }\"\n @keydown=\"handleTextareaKeyDown\"\n />\n <NButton @click=\"searchBySelector\">\n <template #icon>\n <SvgIcon name=\"search\" />\n </template>\n </NButton>\n </NInputGroup>\n\n <div\n v-if=\"enableSearchBySelector && selectorSyntaxText\"\n mt-6px\n mb-8px\n p-4px\n gkd_code\n transition-colors\n class=\"selector-ast-view\"\n :class=\"selectorSyntaxError ? `selector-ast-view-error` : ``\"\n >\n <div v-if=\"selectorSyntaxAst\" overflow-x-scroll scrollbar-hidden>\n <SelectorText\n :source=\"selectorSyntaxText\"\n :node=\"selectorSyntaxAst\"\n />\n </div>\n <span v-else-if=\"selectorSyntaxError\" whitespace-pre-wrap>\n <span v-if=\"selectorSyntaxError.headText\">{{\n selectorSyntaxError.headText\n }}</span>\n <span bg-red relative>\n <span v-if=\"selectorSyntaxError.errorText\">{{\n selectorSyntaxError.errorText\n }}</span>\n <span v-else pl-20px />\n <div\n absolute\n left-0\n right-0\n top--12px\n flex\n flex-col\n items-center\n animate-bounce\n pointer-events-none\n >\n <SvgIcon name=\"arrow\" class=\"selector-error-arrow\" />\n </div>\n </span>\n <span v-if=\"selectorSyntaxError.tailText\">{{\n selectorSyntaxError.tailText\n }}</span>\n </span>\n </div>\n <div\n v-if=\"selectorSyntaxError && !selectorSyntaxError.isEof\"\n p-4px\n gkd_code\n class=\"selector-error-box\"\n >\n {{ selectorSyntaxError.message }}\n </div>\n <div p-5px />\n <NCollapse v-model:expandedNames=\"expandedKeys\">\n <NCollapseItem\n v-for=\"(result, index) in selectorResults\"\n :key=\"result.key\"\n :name=\"result.key\"\n >\n <template #header>\n <span\n v-if=\"result.nodes.length > 1\"\n underline\n leading-20px\n decoration-1\n m-r-4px\n gkd_code\n title=\"查询数量\"\n >\n {{ result.nodes.length }}\n </span>\n <span\n break-all\n px-4px\n leading-20px\n class=\"snapshot-token\"\n gkd_code\n :title=\"result.gkd ? `选择器` : `搜索字符`\"\n >\n <SelectorText\n v-if=\"result.gkd\"\n :node=\"result.selector.ast\"\n :source=\"result.selector.source\"\n />\n <template v-else>{{ result.selector }}</template>\n </span>\n <span pl-4px />\n </template>\n <template #header-extra>\n <NButtonGroup>\n <NButton\n v-if=\"result.gkd && result.selector.canCopy\"\n size=\"small\"\n title=\"复制规则\"\n @click.stop=\"generateRules(result as SelectorSearchResult)\"\n >\n <template #icon>\n <SvgIcon name=\"copy\" />\n </template>\n </NButton>\n <NButton\n v-if=\"hasZipId\"\n size=\"small\"\n :title=\"result.gkd ? `复制查询链接` : `复制搜索链接`\"\n @click.stop=\"shareResult(result)\"\n >\n <template #icon>\n <SvgIcon name=\"share\" />\n </template>\n </NButton>\n <NButton\n size=\"small\"\n title=\"删除记录\"\n @click.stop=\"selectorResults.splice(index, 1)\"\n >\n <template #icon>\n <SvgIcon name=\"delete\" />\n </template>\n </NButton>\n </NButtonGroup>\n </template>\n <NScrollbar xScrollable style=\"max-height: 400px\">\n <div flex gap-8px flex-wrap>\n <template\n v-if=\"!result.gkd || result.selector.connectKeys.length === 0\"\n >\n <NButton\n v-for=\"resultNode in result.nodes\"\n :key=\"resultNode.id\"\n size=\"small\"\n :style=\"getNodeStyle(resultNode, focusNode)\"\n @click=\"updateFocusNode(resultNode)\"\n >\n {{ getNodeLabel(resultNode) }}\n </NButton>\n </template>\n <template v-else>\n <NButtonGroup v-for=\"(resultNode, i) in result.nodes\" :key=\"i\">\n <NButton\n size=\"small\"\n @click=\"\n snapshotStore.showTrack(\n result.selector,\n (result.results as any)[i],\n )\n \"\n >\n <NIcon>\n <SvgIcon name=\"path\" />\n </NIcon>\n </NButton>\n <NButton\n size=\"small\"\n :style=\"getNodeStyle(resultNode, focusNode)\"\n @click=\"updateFocusNode(resultNode)\"\n >\n {{ getNodeLabel(resultNode) }}\n </NButton>\n </NButtonGroup>\n </template>\n </div>\n <div un=\"h-10px\" />\n </NScrollbar>\n </NCollapseItem>\n </NCollapse>\n </div>\n </DraggableCard>\n</template>\n\n<style scoped>\n:deep(.selector-textarea) {\n font-family:\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono',\n 'Courier New', monospace;\n resize: none;\n}\n</style>\n","import type { SlotsType } from 'vue';\n\nconst emptyArray = [] as [];\nconst GapList = defineComponent<\n {},\n {},\n string,\n SlotsType<{\n default: () => VNode[];\n gap: (props: { index: number }) => VNode[];\n }>\n>((props, ctx) => {\n return () => {\n const defaultNodes = (ctx.slots.default?.() || emptyArray).filter((n) => {\n return typeof n.type !== 'symbol'; // remove comment nodes\n });\n const nodes: typeof defaultNodes = [];\n if (defaultNodes.length > 0) {\n nodes.push(defaultNodes[0]);\n }\n if (defaultNodes.length > 1) {\n for (let i = 1; i < defaultNodes.length; i++) {\n const gapNodes = ctx.slots.gap?.({ index: i - 1 }) || emptyArray;\n nodes.push(...gapNodes);\n nodes.push(defaultNodes[i]);\n }\n }\n return h('div', props, nodes);\n };\n});\n\nexport default GapList;\n","<script setup lang=\"ts\">\nimport ActionCard from '@/components/ActionCard.vue';\nimport GapList from '@/components/GapList';\nimport { message } from '@/utils/discrete';\nimport {\n getAppInfo,\n getDevice,\n getGkdAppInfo,\n getNodeLabel,\n getNodeStyle,\n getNodeQf,\n} from '@/utils/node';\nimport { copy, delay } from '@/utils/others';\nimport type { TreeInst, TreeOption, TreeProps } from 'naive-ui';\nimport { h, type ShallowRef, useTemplateRef } from 'vue';\nimport { useSnapshotStore } from './snapshot';\nimport SvgIcon from '@/components/SvgIcon.vue';\n\n// ==========================================\n// 1. 自定义扩展定义区 (Quick Find)\n// ==========================================\ninterface QuickFindMeta {\n self: boolean;\n has: boolean;\n}\n\n// ==========================================\n// 2. 原版核心状态区\n// ==========================================\nconst router = useRouter();\nconst snapshotStore = useSnapshotStore();\nconst { updateFocusNode, focusNode, focusTime } = snapshotStore;\nconst snapshot = snapshotStore.snapshot as ShallowRef<Snapshot>;\nconst rootNode = snapshotStore.rootNode as ShallowRef<RawNode>;\n\nlet lastClickId = Number.NaN;\nconst expandedKeys = shallowRef<number[]>([]);\nconst selectedKeys = shallowRef<number[]>([]);\nconst treeContainer = useTemplateRef<HTMLElement>('treeContainerRef');\nconst treeRef = shallowRef<TreeInst>();\n\n// ==========================================\n// 3. 自定义功能计算区 (Quick Find 逻辑)\n// ==========================================\nconst quickFindMeta = computed(() => {\n const root = rootNode.value;\n if (!root) return new Map<number, QuickFindMeta>();\n\n const metaMap = new Map<number, QuickFindMeta>();\n const computeMeta = (node: RawNode): QuickFindMeta => {\n const self = getNodeQf(node);\n let has = self;\n for (const child of node.children) {\n if (computeMeta(child).has) has = true;\n }\n const meta = { self, has };\n metaMap.set(node.id, meta);\n return meta;\n };\n computeMeta(root);\n return metaMap;\n});\n\nconst findQuickTarget = (node: RawNode): RawNode | null => {\n const meta = quickFindMeta.value.get(node.id);\n if (!meta || !meta.has) return null;\n if (meta.self) return node;\n for (const child of node.children) {\n const target = findQuickTarget(child);\n if (target) return target;\n }\n return null;\n};\n\n// ==========================================\n// 4. 核心监听与渲染区 (原版混合扩展)\n// ==========================================\nwatch([() => focusNode.value, () => focusTime.value], async () => {\n if (!focusNode.value) return;\n const key = focusNode.value.id;\n\n // --- [扩展插件] Quick Find 拦截 ---\n if (lastClickId === key) {\n lastClickId = Number.NaN;\n } else {\n lastClickId = Number.NaN;\n const target = findQuickTarget(focusNode.value);\n if (target && target.id !== key) {\n updateFocusNode(target);\n return; // 拦截成功,退出本次滚动逻辑\n }\n }\n // ----------------------------------\n\n nextTick().then(async () => {\n await delay(300);\n if (key === focusNode.value?.id) {\n selectedKeys.value = [key];\n\n // --- [原版] 节点树滚动逻辑 (完整保留,防止冲突) ---\n if (!treeContainer.value) return;\n const nodeRef = treeContainer.value.querySelector(\n `[data-node-id=\"${key}\"]`,\n );\n if (nodeRef) {\n nodeRef.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n } else {\n await delay(300);\n treeRef.value?.scrollTo({ key, behavior: 'smooth', debounce: true });\n }\n // ---------------------------------------------------\n }\n });\n\n // [原版] 展开所有父节点\n let parent = focusNode.value.parent;\n if (!parent) return;\n const s = new Set(expandedKeys.value);\n while (parent) {\n s.add(parent.id);\n parent = parent.parent;\n }\n if (\n s.size == expandedKeys.value.length &&\n expandedKeys.value.every((v) => s.has(v))\n ) {\n return;\n }\n expandedKeys.value = [...s];\n});\n\nconst treeData = computed<TreeOption[]>(() => {\n return rootNode.value ? [rootNode.value as unknown as TreeOption] : [];\n});\n\nconst treeFilter: NonNullable<TreeProps['filter']> = (_pattern, node) => {\n const rawNode = node as unknown as RawNode;\n return rawNode.id === focusNode.value?.id;\n};\n\nconst treeNodeProps: NonNullable<TreeProps['nodeProps']> = (info) => {\n const option = info.option as unknown as RawNode;\n\n // 1. [原版] 基础样式与事件\n const style = getNodeStyle(option, focusNode.value);\n const props = {\n onClick: () => {\n lastClickId = option.id;\n updateFocusNode(option);\n },\n style: {\n '--n-node-text-color': style.color,\n ...style,\n } as Record<string, string | number | undefined>,\n class: 'whitespace-nowrap',\n 'data-node-id': String(option.id),\n };\n\n // 2. [扩展插件] 追加 Quick Find 的透明度处理\n const meta = quickFindMeta.value.get(option.id);\n if (meta && !meta.has && props.style.opacity === undefined) {\n props.style.opacity = 0.7;\n }\n\n return props;\n};\n\nconst renderLabel: NonNullable<TreeProps['renderLabel']> = (info) => {\n const option = info.option as unknown as RawNode;\n const label = getNodeLabel(option); // [原版] 获取 label\n const meta = quickFindMeta.value.get(option.id);\n\n // [扩展插件] 如果没有 QF 数据,直接返回原版 label\n if (!meta || !meta.has) {\n return label;\n }\n\n // [扩展插件] 有 QF 数据,使用 h 函数渲染带有 Icon 的 label\n return h(\n 'span',\n { style: { display: 'inline-flex', alignItems: 'center', gap: '4px' } },\n [\n label,\n h(SvgIcon, {\n name: 'ok',\n class: 'quickfind-icon',\n style: {\n width: '14px',\n height: '14px',\n color: 'var(--n-success-color, var(--accent-success-color))',\n fill: 'var(--n-success-color, var(--accent-success-color))',\n opacity: meta.self ? '1' : '0.4',\n stroke: 'var(--n-success-color, var(--accent-success-color))',\n strokeWidth: '2',\n display: 'inline-block',\n verticalAlign: 'middle',\n marginLeft: '2px',\n },\n }),\n ],\n );\n};\n\n// ==========================================\n// 5. 顶栏信息计算区 (原版)\n// ==========================================\nconst deviceName = computed(\n () =>\n `${getDevice(snapshot.value).manufacturer} Android ${getDevice(snapshot.value).release || ``}`,\n);\nconst isSystem = computed(() => getAppInfo(snapshot.value).isSystem);\nconst activityId = computed(() => {\n const v = snapshot.value.activityId;\n const appId = snapshot.value.appId;\n if (!v || !appId) return '';\n if (v.startsWith(appId) && v[appId.length] === '.') {\n return v.substring(appId.length);\n }\n return v;\n});\nconst gkdVersionName = computed(() => {\n const v = getGkdAppInfo(snapshot.value).versionName;\n return v ? `GKD@${v}` : undefined;\n});\n\nconst onDelete = async () => {\n message.success(`删除成功,即将回到首页`);\n await delay(2000);\n router.replace({ path: `/` });\n};\n</script>\n\n<template>\n <div flex flex-col overflow-hidden>\n <div flex items-center px-8px>\n <GapList class=\"flex flex-wrap items-center gap-8px gkd_code\">\n <template #gap>\n <div w-1px bg-gray h-12px />\n </template>\n <NTooltip>\n <template #trigger>\n <div @click=\"copy(deviceName)\">{{ deviceName }}</div>\n </template>\n 设备名称\n </NTooltip>\n\n <NTooltip>\n <template #trigger>\n <div :class=\"{ 'opacity-50': !gkdVersionName }\">\n {{ gkdVersionName || 'null' }}\n </div>\n </template>\n GKD 版本\n </NTooltip>\n\n <div flex items-center gap-2px max-w-120px>\n <NTooltip v-if=\"isSystem\">\n <template #trigger>\n <SvgIcon name=\"system\" />\n </template>\n {{ `${getAppInfo(snapshot).name} 是一个系统应用` }}\n </NTooltip>\n <NTooltip>\n <template #trigger>\n <div @click=\"copy(getAppInfo(snapshot).name)\">\n {{ getAppInfo(snapshot).name }}\n </div>\n </template>\n 应用名称\n </NTooltip>\n </div>\n\n <NTooltip>\n <template #trigger>\n <div @click=\"copy(getAppInfo(snapshot).versionName)\">\n {{ getAppInfo(snapshot).versionName }}\n </div>\n </template>\n 版本名称\n </NTooltip>\n\n <NTooltip>\n <template #trigger>\n <div @click=\"copy(getAppInfo(snapshot).versionCode.toString())\">\n {{ getAppInfo(snapshot).versionCode }}\n </div>\n </template>\n 版本代码\n </NTooltip>\n\n <NTooltip>\n <template #trigger>\n <div @click=\"copy(snapshot.appId)\">\n {{ snapshot.appId }}\n </div>\n </template>\n 应用ID\n </NTooltip>\n\n <NTooltip>\n <template #trigger>\n <div\n :class=\"{ 'opacity-50': !activityId }\"\n @click=\"copy(activityId)\"\n >\n {{ activityId || 'null' }}\n </div>\n </template>\n 界面ID\n </NTooltip>\n </GapList>\n <div flex-1 />\n <ActionCard\n class=\"ml-8px\"\n :snapshot=\"snapshot\"\n :showPreview=\"false\"\n @delete=\"onDelete\"\n />\n </div>\n\n <div h-1px mt-4px style=\"background-color: var(--divider-color)\" />\n\n <div ref=\"treeContainerRef\" flex-1 min-h-0>\n <NTree\n ref=\"treeRef\"\n v-model:expandedKeys=\"expandedKeys\"\n v-model:selectedKeys=\"selectedKeys\"\n class=\"h-full\"\n virtualScroll\n showLine\n blockLine\n keyField=\"id\"\n :data=\"treeData\"\n :filter=\"treeFilter\"\n :nodeProps=\"treeNodeProps\"\n :renderLabel=\"renderLabel\"\n />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport DeviceControlTools from '@/components/DeviceControlTools.vue';\nimport FullScreenDialog from '@/components/FullScreenDialog.vue';\nimport SettingsModal from '@/components/SettingsModal.vue';\nimport TrackCard from '@/components/TrackCard.vue';\nimport { loadingBar } from '@/utils/discrete';\nimport AttrCard from './AttrCard.vue';\nimport OverlapCard from './OverlapCard.vue';\nimport RuleCard from './RuleCard.vue';\nimport ScreenshotCard from './ScreenshotCard.vue';\nimport SearchCard from './SearchCard.vue';\nimport { useSnapshotStore } from './snapshot';\nimport WindowCard from './WindowCard.vue';\n\nconst { snapshot, rootNode, loading, redirected, trackData, trackShow } =\n useSnapshotStore();\n\nwatchEffect(() => {\n if (loading.value) loadingBar.start();\n else loadingBar.finish();\n});\n\nconst searchShow = useStorage('searchShow', true, sessionStorage);\nconst ruleShow = useStorage('ruleShow', false, sessionStorage);\nconst attrShow = useStorage('attrShow', true, sessionStorage);\nconst settingsDlgShow = shallowRef(false);\n</script>\n\n<template>\n <template v-if=\"snapshot && rootNode\">\n <div page-size flex gap-5px class=\"snapshot-page\">\n <div py-12px flex flex-col items-center gap-16px class=\"snapshot-sidebar\">\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton text>\n <RouterLink to=\"/\"><SvgIcon name=\"home\" /></RouterLink>\n </NButton>\n </template>\n 回到首页\n </NTooltip>\n <NTooltip placement=\"right\">\n <template #trigger>\n <RouterLink to=\"/device\">\n <NButton text><SvgIcon name=\"device\" /></NButton>\n </RouterLink>\n </template>\n 连接设备\n </NTooltip>\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton text @click=\"settingsDlgShow = true\"\n ><SvgIcon name=\"settings\"\n /></NButton>\n </template>\n 设置\n </NTooltip>\n <div />\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton text @click=\"searchShow = !searchShow\"\n ><SvgIcon name=\"search-list\"\n /></NButton>\n </template>\n 搜索面板\n </NTooltip>\n <DeviceControlTools />\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton text @click=\"attrShow = !attrShow\"\n ><SvgIcon name=\"prop\"\n /></NButton>\n </template>\n 属性面板\n </NTooltip>\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton text @click=\"ruleShow = !ruleShow\"\n ><SvgIcon name=\"test\"\n /></NButton>\n </template>\n 测试规则\n </NTooltip>\n <div />\n <NTooltip placement=\"right\">\n <template #trigger>\n <a\n flex\n justify-center\n href=\"https://github.com/orgs/gkd-kit/discussions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <NButton text><SvgIcon name=\"discussion\" /></NButton>\n </a>\n </template>\n 讨论交流\n </NTooltip>\n <NTooltip placement=\"right\">\n <template #trigger>\n <a\n flex\n justify-center\n href=\"https://gkd.li/guide/snapshot#share-note\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <NButton text><SvgIcon name=\"warn\" /></NButton>\n </a>\n </template>\n 分享须知\n </NTooltip>\n </div>\n <ScreenshotCard />\n <WindowCard class=\"flex-1\" />\n </div>\n\n <SearchCard :show=\"searchShow\" @updateShow=\"searchShow = $event\" />\n <RuleCard :show=\"ruleShow\" @updateShow=\"ruleShow = $event\" />\n <AttrCard :show=\"attrShow\" @updateShow=\"attrShow = $event\" />\n <OverlapCard />\n <FullScreenDialog v-model:show=\"trackShow\" @closed=\"trackData = undefined\">\n <TrackCard\n v-if=\"trackData\"\n class=\"snapshot-floating-panel snapshot-window window-anim\"\n v-bind=\"trackData\"\n @close=\"trackShow = false\"\n />\n </FullScreenDialog>\n\n <SettingsModal v-model:show=\"settingsDlgShow\" />\n </template>\n <div\n v-else-if=\"!loading && !redirected\"\n page-size\n pt-80px\n flex\n flex-col\n items-center\n justify-center\n >\n <div mb-8px>\n <span>快照数据缺失</span>\n <a\n href=\"https://gkd.li/guide/snapshot#share-note\"\n target=\"_blank\"\n referrerpolicy=\"no-referrer\"\n >\n 分享须知\n </a>\n </div>\n </div>\n</template>\n"],"file":"SnapshotPage-B6Jpif--.js"}