@gkd-kit/inspect 0.0.1749367608743 → 0.0.1749439290226
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{ActionCard.vue_vue_type_script_setup_true_lang-Caj5VsLm.js → ActionCard.vue_vue_type_script_setup_true_lang-DU4pt--9.js} +2 -2
- package/dist/assets/{ActionCard.vue_vue_type_script_setup_true_lang-Caj5VsLm.js.map → ActionCard.vue_vue_type_script_setup_true_lang-DU4pt--9.js.map} +1 -1
- package/dist/assets/{DevicePage-BkqlVhe7.js → DevicePage-CBSvm_vv.js} +2 -2
- package/dist/assets/{DevicePage-BkqlVhe7.js.map → DevicePage-CBSvm_vv.js.map} +1 -1
- package/dist/assets/{HomePage-4ldzgcB4.js → HomePage-N14oZR_I.js} +7 -7
- package/dist/assets/{HomePage-4ldzgcB4.js.map → HomePage-N14oZR_I.js.map} +1 -1
- package/dist/assets/ImportPage-flY1gTRb.js +2 -0
- package/dist/assets/ImportPage-flY1gTRb.js.map +1 -0
- package/dist/assets/{Input-BAk7HlsW.js → Input-D4KWqeWH.js} +2 -2
- package/dist/assets/{Input-BAk7HlsW.js.map → Input-D4KWqeWH.js.map} +1 -1
- package/dist/assets/{SelectorPage-n-KrNT4q.js → SelectorPage-BcxetUIX.js} +2 -2
- package/dist/assets/{SelectorPage-n-KrNT4q.js.map → SelectorPage-BcxetUIX.js.map} +1 -1
- package/dist/assets/{SnapshotPage-Bbg8XVjn.js → SnapshotPage-CwOAZlmE.js} +4 -4
- package/dist/assets/{SnapshotPage-Bbg8XVjn.js.map → SnapshotPage-CwOAZlmE.js.map} +1 -1
- package/dist/assets/{SvgPage-BwpO2Icx.js → SvgPage-BZU0H3vr.js} +2 -2
- package/dist/assets/{SvgPage-BwpO2Icx.js.map → SvgPage-BZU0H3vr.js.map} +1 -1
- package/dist/assets/{TrackGraph-Dc1QDhx0.js → TrackGraph-DdCOvVKa.js} +3 -3
- package/dist/assets/{TrackGraph-Dc1QDhx0.js.map → TrackGraph-DdCOvVKa.js.map} +1 -1
- package/dist/assets/{_404Page-BY-fZfSg.js → _404Page-403o9W_M.js} +2 -2
- package/dist/assets/{_404Page-BY-fZfSg.js.map → _404Page-403o9W_M.js.map} +1 -1
- package/dist/assets/chunk-BJS9npRX.js +3 -0
- package/dist/assets/{chunk-Cq75DicM.js.map → chunk-BJS9npRX.js.map} +1 -1
- package/dist/assets/{dayjs.min-DD7YyuP-.js → dayjs.min-BtRfTVBh.js} +2 -2
- package/dist/assets/{dayjs.min-DD7YyuP-.js.map → dayjs.min-BtRfTVBh.js.map} +1 -1
- package/dist/assets/{error-CZdhkKZU.js → error-xNFSYohO.js} +2 -2
- package/dist/assets/{error-CZdhkKZU.js.map → error-xNFSYohO.js.map} +1 -1
- package/dist/assets/{import-DYzYwAQY.js → import-Dusv6BQN.js} +2 -2
- package/dist/assets/import-Dusv6BQN.js.map +1 -0
- package/dist/assets/{index-DiuccYHc.js → index-BDvOwdMH.js} +3 -3
- package/dist/assets/{index-DiuccYHc.js.map → index-BDvOwdMH.js.map} +1 -1
- package/dist/assets/{index-d_sGH3qC.js → index-EsA5VFY-.js} +6 -6
- package/dist/assets/{index-d_sGH3qC.js.map → index-EsA5VFY-.js.map} +1 -1
- package/dist/assets/{jszip.min-Dg7wZQLA.js → jszip.min-DWn1nr2b.js} +2 -2
- package/dist/assets/{jszip.min-Dg7wZQLA.js.map → jszip.min-DWn1nr2b.js.map} +1 -1
- package/dist/assets/{node-Dvv82saR.js → node-BuNKmMiV.js} +2 -2
- package/dist/assets/{node-Dvv82saR.js.map → node-BuNKmMiV.js.map} +1 -1
- package/dist/assets/{polyfills-CaqqA8pJ.js → polyfills-BI7TBZoP.js} +2 -2
- package/dist/assets/polyfills-BI7TBZoP.js.map +1 -0
- package/dist/assets/{snapshot-CFNIbrFU.js → snapshot-CuDNuSe-.js} +2 -2
- package/dist/assets/{snapshot-CFNIbrFU.js.map → snapshot-CuDNuSe-.js.map} +1 -1
- package/dist/assets/{table-B4tpbfUd.js → table-CaNPLMrp.js} +2 -2
- package/dist/assets/{table-B4tpbfUd.js.map → table-CaNPLMrp.js.map} +1 -1
- package/dist/index.html +3 -3
- package/package.json +1 -1
- package/dist/assets/ImportPage-Bep5UqpU.js +0 -2
- package/dist/assets/ImportPage-Bep5UqpU.js.map +0 -1
- package/dist/assets/chunk-Cq75DicM.js +0 -3
- package/dist/assets/import-DYzYwAQY.js.map +0 -1
- package/dist/assets/polyfills-CaqqA8pJ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["createDataKey","key","ChevronLeftIcon","defineComponent","h","SwitcherIcon","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","self","vars","fontWeight","textColor1","textColor2","textColorDisabled","dividerColor","fontSize","collapseLight","commonLight","style$2","fadeInHeightExpandTransition","collapseProps","useTheme","collapseInjectionKey","createInjectionKey","__unplugin_components_10","slots","inlineThemeDisabled","uncontrolledExpandedNamesRef","ref","controlledExpandedNamesRef","computed","mergedExpandedNamesRef","useMergedState","themeRef","doUpdateExpandedNames","names","_onUpdateExpandedNames","onUpdateExpandedNames","onExpandedNamesChange","call","doItemHeaderClick","info","onItemHeaderClick","toggleItem","collapse","name","event","accordion","expandedNames","activeNames","index","activeName","rtlEnabledRef","cssVarsRef","cubicBezierEaseInOut","titleFontWeight","titlePadding","titleTextColor","titleTextColorDisabled","textColor","arrowColor","titleFontSize","arrowColorDisabled","itemMargin","themeClassHandle","useThemeClass","_a","NCollapseItemContent","useFalseUntilTruthy","toRef","NFadeInExpandTransition","show","displayDirective","onceTrue","clsPrefix","useVShow","contentNode","withDirectives","vShow","collapseItemProps","__unplugin_components_9","randomName","createId","mergedNameRef","useMemo","NCollapse","inject","throwError","expandedNamesRef","collapseSlots","collapsedRef","expandedName","e","happensInArea","happensIn","$slots","arrowPlacement","collapsed","mergedDisplayDirective","disabled","triggerAreas","headerNode","resolveSlotWithTypedProps","headerExtraSlot","arrowSlot","area","NBaseIcon","ArrowLeftIcon","ArrowRightIcon","resolveWrappedSlotWithProps","children","sizeVariables","cardColor","modalColor","popoverColor","tableHeaderColor","tableColorStriped","borderRadius","fontWeightStrong","lineHeight","fontSizeSmall","fontSizeMedium","fontSizeLarge","composite","tableLight","borderRadiusSmall","hoverColor","pressedColor","primaryColor","textColor3","changeColor","treeLight","createTheme","checkboxLight","scrollbarLight","emptyLight","scrollbarProps","Scrollbar","scrollbarInstRef","args","NScrollbar","style$1","insideModal","insidePopover","tableProps","__unplugin_components_7","size","borderColor","tdColor","tdColorModal","tdColorPopover","thColor","thColorModal","thColorPopover","thTextColor","tdTextColor","thFontWeight","borderColorModal","borderColorPopover","tdColorStriped","tdColorStripedModal","tdColorStripedPopover","createKey","tdPadding","thPadding","__unplugin_components_6","__unplugin_components_3","__unplugin_components_5","treeSelectInjectionKey","renderDropMark","position","offsetLevel","indent","el","cssPosition","defaultAllowDrop","dropPosition","node","treeInjectionKey","useKeyboard","fNodesRef","mergedExpandedKeysRef","mergedSelectedKeysRef","mergedCheckedKeysRef","handleCheck","handleSelect","handleSwitcherClick","mergedSelectedKeys","treeSelectInjection","pendingNodeKeyRef","handleKeydown","pendingNodeKey","enterBehavior","fNodes","fIndex","tmNode","pendingNode","parentTmNode","NTreeNodeCheckbox","NTree","doCheck","value","onCheck","handleUpdateValue","mergedTheme","checked","indeterminate","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","expanded","hide","NIconSwitchTransition","NBaseLoading","renderSwitcherIcon","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","build","sibs","isVisitedTail","isVisitedNonTail","clonedNode","TreeNode","droppingNodeParentRef","droppingMouseNodeRef","draggingNodeRef","droppingPositionRef","droppingOffsetLevelRef","nodePropsRef","indentRef","blockLineRef","checkboxPlacementRef","checkOnClickRef","disabledFieldRef","showLineRef","overrideDefaultNodeClickBehaviorRef","checkboxDisabledRef","nodeIsDisabledRef","disabledRef","resolvedNodePropsRef","contentInstRef","contentElRef","onMounted","onLoad","selectableRef","checkableRef","checkedRef","mergedCheckOnClickRef","checkable","checkOnClick","_handleClick","expandOnClick","selectable","mergedCheckOnClick","handleNodeClick","_b","overrideDefaultNodeClickBehavior","shouldOverride","handleContentClick","handleLineClick","handleDragStart","handleDragEnter","handleDragOver","handleDragEnd","handleDragLeave","handleDrop","indentNodes","cursor","repeat","draggingNode","droppingPosition","droppingMouseNode","droppingNodeParent","highlight","draggable","blockLine","pending","internalScrollable","checkboxPlacement","dragEventHandlers","dataKey","checkboxOnRight","checkboxNode","MotionWrapper","FadeInExpandTransition","pxfy","iconSwitchTransitionNode","iconSwitchTransition","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","reject","fulfilled","step","rejected","result","createTreeMateOptions","getChildren","treeSharedProps","treeProps","__unplugin_components_1","selfElRef","virtualListInstRef","getScrollContainer","getScrollContent","mergedFilterRef","filteredTreeInfoRef","displayTreeMateRef","createTreeMate","dataTreeMateRef","watchProps","uncontrolledCheckedKeysRef","watchEffect","controlledCheckedKeysRef","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","doUpdateCheckedKeys","_onUpdateCheckedKeys","onUpdateCheckedKeys","doUpdateIndeterminateKeys","_onUpdateIndeterminateKeys","onUpdateIndeterminateKeys","doUpdateSelectedKeys","_onUpdateSelectedKeys","onUpdateSelectedKeys","doDragEnter","onDragenter","doDragLeave","onDragleave","doDragEnd","onDragend","doDragStart","doDragOver","onDragover","doDrop","onDrop","resetDragState","resetDropState","checkedAction","checkedKeys","toggleExpand","mergedExpandedKeys","expandNodeId","nodeToBeExpanded","nextKeys","siblingKeySet","selectedKeys","expandDragEnterNode","expand","handleDragLeaveTree","emit","allowDrop","elOffsetHeight","elClientTop","eventOffsetY","mousePosition","getFindex","finalDropNode","finalDropPosition","hoverNodeFIndex","mouseAtExpandedNonLeafNode","offset","nextNode","prevNode","handleScroll","handleResize","handleFocusout","selfEl","targetEl","scrollTo","options","y","exposedMethods","nodeBorderRadius","nodeColorHover","nodeColorPressed","nodeColorActive","loadingColor","nodeTextColor","nodeTextColorDisabled","dropMarkColor","nodeWrapperPadding","lineColor","lineOffsetTop","getPadding","lineOffsetBottom","nodeContentHeight","internalRenderEmpty","blockNode","internalFocusable","rtlEnabled","mergedFocusable","tabindex","treeClass","createNode","NTreeNode","internalScrollablePadding","padding","NxScrollbar","VVirtualList","item","resolveSlot","NEmpty","TrackGraphLoader","__vitePreload","TrackGraph","defineAsyncComponent","__props","allUnitResults","singleUnitResults","v","showUnitResults","filterUnitResults","shallowRef","switchUnitResult","unitResult","getNodeStyle","UnitSelectorExpression","u","innerShow","showStatus","watchImmediate","r","useEventListener","useDragMove","xFilter","target","prevOffset","shallowReactive","prevEv","preventSelection","ev","startMove","move","dx","dy","endMove","windowEndMove","top","bottom","left","right","onUnmounted","newValue","currentMaxZIndex","useZindex","zIndex","transition","isLeft","isTop","leftDragBar","w","rightDragBar","currentStyle","width","widthStyle","yStyle","moved","box","boxDiv","updateTarget","arg","setTop","getRemoteImportId","id","useSnapshotStore","defineStore","route","useRoute","router","useRouter","settingsStore","useSettingsStore","storageStore","useStorageStore","snapshotImportId","snapshotImageId","importSnapshotId","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","storeToRefs","attrTip","lenAttrNames","attrs","attr","_c","selectText","getNodeSelectorText","snapshotStore","windowSize","useWindowSize","vw","gkdWidth","snapshotRefs","text","lazyText","refDebounced","toArray","s","checkRule","obj","matches","anyMatches","excludeMatches","resolvedMatches","parseSelector","message","matchesResult","notIndex","resolvedAnyMatches","anyMatchesResult","resolvedExcludeMatches","excludeMatchesResult","isObj","dataRef","JSON5","group","rules","rule","errorText","targetNode","imgBounding","useElementBounding","imgRef","imgLoadTime","clickImg","img","imgRect","innerHeight","offsetTop","x","percent","imgSize","useElementSize","positionStyle","imgWidth","imgHeight","imgHover","hoverPosition","boxHoverPosition","ox","oy","boxHoverPerPosition","toFixedNumber","hoverPositionStyle","imgMove","searchText","selectorResults","searchSelector","errorWrap","GkdException","results","searchString","stack","getNodeLabel","refreshExpandedKeys","newResult","newNode","allKeys","newKeys","k","searchBySelector","errorTry","enableSearchBySelector","wasmLoadTask","count","base64url.decode","generateRules","snapshotUrls","getImportUrl","exampleUrls","getImagUrl","fastQuery","FastQuery","dayjs","copy","hasZipId","shareResult","importUrl","base64url.encode","emptyArray","GapList","ctx","tag","defaultNodes","gapNodes","_d","lastClickId","Number","NaN","then","delay","document","querySelector","scrollIntoView","behavior","block","parent","Set","add","length","every","has","treeRef","treeFilter","treeNodeProps","color","class","String","deviceName","getDevice","manufacturer","release","isSystem","activityId","appId","startsWith","substring","onDelete","success","replace","loadingBar","searchShow","useStorage","ruleShow","attrShow","clickSettings"],"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,25,26,27,28,29,30],"sources":["../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/_utils/vue/create-data-key.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/_internal/icons/ChevronLeft.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/_internal/icons/Switcher.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/button-group/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/button-group/src/ButtonGroup.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/collapse/styles/light.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/collapse/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/collapse/src/Collapse.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/collapse/src/CollapseItemContent.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/collapse/src/CollapseItem.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/styles/_common.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/styles/light.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/styles/light.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/scrollbar/src/Scrollbar.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/src/Table.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/src/Tbody.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/src/Td.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/src/Tr.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree-select/src/interface.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/dnd.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/interface.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/keyboard.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/TreeNodeCheckbox.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/TreeNodeContent.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/TreeNodeSwitcher.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/utils.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/TreeNode.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/MotionWrapper.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/Tree.mjs","../../src/components/TrackCard.vue","../../src/components/TrackModal.vue","../../src/utils/draggable.ts","../../src/components/DraggableCard.vue","../../src/store/snapshot.ts","../../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: 'ChevronLeft',\n render() {\n return h(\"svg\", {\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, h(\"path\", {\n d: \"M10.3536 3.14645C10.5488 3.34171 10.5488 3.65829 10.3536 3.85355L6.20711 8L10.3536 12.1464C10.5488 12.3417 10.5488 12.6583 10.3536 12.8536C10.1583 13.0488 9.84171 13.0488 9.64645 12.8536L5.14645 8.35355C4.95118 8.15829 4.95118 7.84171 5.14645 7.64645L9.64645 3.14645C9.84171 2.95118 10.1583 2.95118 10.3536 3.14645Z\",\n fill: \"currentColor\"\n }));\n }\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 { commonLight } from \"../../_styles/common/index.mjs\";\nexport function self(vars) {\n const {\n fontWeight,\n textColor1,\n textColor2,\n textColorDisabled,\n dividerColor,\n fontSize\n } = vars;\n return {\n titleFontSize: fontSize,\n titleFontWeight: fontWeight,\n dividerColor,\n titleTextColor: textColor1,\n titleTextColorDisabled: textColorDisabled,\n fontSize,\n textColor: textColor2,\n arrowColor: textColor2,\n arrowColorDisabled: textColorDisabled,\n itemMargin: '16px 0 0 0',\n titlePadding: '16px 0 0 0'\n };\n}\nconst collapseLight = {\n name: 'Collapse',\n common: commonLight,\n self\n};\nexport default collapseLight;","import { fadeInHeightExpandTransition } from \"../../../_styles/transitions/fade-in-height-expand.cssr.mjs\";\nimport { c, cB, cE, cM, cNotM } from \"../../../_utils/cssr/index.mjs\";\n// vars:\n// --n-font-size\n// --n-bezier\n// --n-text-color\n// --n-divider-color\n// --n-title-padding\n// --n-title-font-size\n// --n-title-text-color\n// --n-title-font-weight\n// --n-arrow-color\n// --n-arrow-color-disabled\n// --n-title-text-color-disabled\n// --n-item-margin\nexport default cB('collapse', 'width: 100%;', [cB('collapse-item', `\n font-size: var(--n-font-size);\n color: var(--n-text-color);\n transition:\n color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n margin: var(--n-item-margin);\n `, [cM('disabled', [cE('header', 'cursor: not-allowed;', [cE('header-main', `\n color: var(--n-title-text-color-disabled);\n `), cB('collapse-item-arrow', `\n color: var(--n-arrow-color-disabled);\n `)])]), cB('collapse-item', 'margin-left: 32px;'), c('&:first-child', 'margin-top: 0;'), c('&:first-child >', [cE('header', 'padding-top: 0;')]), cM('left-arrow-placement', [cE('header', [cB('collapse-item-arrow', 'margin-right: 4px;')])]), cM('right-arrow-placement', [cE('header', [cB('collapse-item-arrow', 'margin-left: 4px;')])]), cE('content-wrapper', [cE('content-inner', 'padding-top: 16px;'), fadeInHeightExpandTransition({\n duration: '0.15s'\n})]), cM('active', [cE('header', [cM('active', [cB('collapse-item-arrow', 'transform: rotate(90deg);')])])]), c('&:not(:first-child)', 'border-top: 1px solid var(--n-divider-color);'), cNotM('disabled', [cM('trigger-area-main', [cE('header', [cE('header-main', 'cursor: pointer;'), cB('collapse-item-arrow', 'cursor: default;')])]), cM('trigger-area-arrow', [cE('header', [cB('collapse-item-arrow', 'cursor: pointer;')])]), cM('trigger-area-extra', [cE('header', [cE('header-extra', 'cursor: pointer;')])])]), cE('header', `\n font-size: var(--n-title-font-size);\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n transition: color .3s var(--n-bezier);\n position: relative;\n padding: var(--n-title-padding);\n color: var(--n-title-text-color);\n `, [cE('header-main', `\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n font-weight: var(--n-title-font-weight);\n transition: color .3s var(--n-bezier);\n flex: 1;\n color: var(--n-title-text-color);\n `), cE('header-extra', `\n display: flex;\n align-items: center;\n transition: color .3s var(--n-bezier);\n color: var(--n-text-color);\n `), cB('collapse-item-arrow', `\n display: flex;\n transition:\n transform .15s var(--n-bezier),\n color .3s var(--n-bezier);\n font-size: 18px;\n color: var(--n-arrow-color);\n `)])])]);","import { useMergedState } from 'vooks';\nimport { computed, defineComponent, h, provide, ref } from 'vue';\nimport { useConfig, useTheme, useThemeClass } from \"../../_mixins/index.mjs\";\nimport { useRtl } from \"../../_mixins/use-rtl.mjs\";\nimport { call, createInjectionKey, warn } from \"../../_utils/index.mjs\";\nimport { collapseLight } from \"../styles/index.mjs\";\nimport style from \"./styles/index.cssr.mjs\";\nexport const collapseProps = Object.assign(Object.assign({}, useTheme.props), {\n defaultExpandedNames: {\n type: [Array, String],\n default: null\n },\n expandedNames: [Array, String],\n arrowPlacement: {\n type: String,\n default: 'left'\n },\n accordion: {\n type: Boolean,\n default: false\n },\n displayDirective: {\n type: String,\n default: 'if'\n },\n triggerAreas: {\n type: Array,\n default: () => ['main', 'extra', 'arrow']\n },\n onItemHeaderClick: [Function, Array],\n 'onUpdate:expandedNames': [Function, Array],\n onUpdateExpandedNames: [Function, Array],\n // deprecated\n onExpandedNamesChange: {\n type: [Function, Array],\n validator: () => {\n if (process.env.NODE_ENV !== 'production') {\n warn('collapse', '`on-expanded-names-change` is deprecated, please use `on-update:expanded-names` instead.');\n }\n return true;\n },\n default: undefined\n }\n});\nexport const collapseInjectionKey = createInjectionKey('n-collapse');\nexport default defineComponent({\n name: 'Collapse',\n props: collapseProps,\n slots: Object,\n setup(props, {\n slots\n }) {\n const {\n mergedClsPrefixRef,\n inlineThemeDisabled,\n mergedRtlRef\n } = useConfig(props);\n const uncontrolledExpandedNamesRef = ref(props.defaultExpandedNames);\n const controlledExpandedNamesRef = computed(() => props.expandedNames);\n const mergedExpandedNamesRef = useMergedState(controlledExpandedNamesRef, uncontrolledExpandedNamesRef);\n const themeRef = useTheme('Collapse', '-collapse', style, collapseLight, props, mergedClsPrefixRef);\n function doUpdateExpandedNames(names) {\n const {\n 'onUpdate:expandedNames': _onUpdateExpandedNames,\n onUpdateExpandedNames,\n onExpandedNamesChange\n } = props;\n if (onUpdateExpandedNames) {\n call(onUpdateExpandedNames, names);\n }\n if (_onUpdateExpandedNames) {\n call(_onUpdateExpandedNames, names);\n }\n if (onExpandedNamesChange) {\n call(onExpandedNamesChange, names);\n }\n uncontrolledExpandedNamesRef.value = names;\n }\n function doItemHeaderClick(info) {\n const {\n onItemHeaderClick\n } = props;\n if (onItemHeaderClick) {\n call(onItemHeaderClick, info);\n }\n }\n function toggleItem(collapse, name, event) {\n const {\n accordion\n } = props;\n const {\n value: expandedNames\n } = mergedExpandedNamesRef;\n if (accordion) {\n if (collapse) {\n doUpdateExpandedNames([name]);\n doItemHeaderClick({\n name,\n expanded: true,\n event\n });\n } else {\n doUpdateExpandedNames([]);\n doItemHeaderClick({\n name,\n expanded: false,\n event\n });\n }\n } else {\n if (!Array.isArray(expandedNames)) {\n doUpdateExpandedNames([name]);\n doItemHeaderClick({\n name,\n expanded: true,\n event\n });\n } else {\n const activeNames = expandedNames.slice();\n const index = activeNames.findIndex(activeName => name === activeName);\n if (~index) {\n activeNames.splice(index, 1);\n doUpdateExpandedNames(activeNames);\n doItemHeaderClick({\n name,\n expanded: false,\n event\n });\n } else {\n activeNames.push(name);\n doUpdateExpandedNames(activeNames);\n doItemHeaderClick({\n name,\n expanded: true,\n event\n });\n }\n }\n }\n }\n provide(collapseInjectionKey, {\n props,\n mergedClsPrefixRef,\n expandedNamesRef: mergedExpandedNamesRef,\n slots,\n toggleItem\n });\n const rtlEnabledRef = useRtl('Collapse', mergedRtlRef, mergedClsPrefixRef);\n const cssVarsRef = computed(() => {\n const {\n common: {\n cubicBezierEaseInOut\n },\n self: {\n titleFontWeight,\n dividerColor,\n titlePadding,\n titleTextColor,\n titleTextColorDisabled,\n textColor,\n arrowColor,\n fontSize,\n titleFontSize,\n arrowColorDisabled,\n itemMargin\n }\n } = themeRef.value;\n return {\n '--n-font-size': fontSize,\n '--n-bezier': cubicBezierEaseInOut,\n '--n-text-color': textColor,\n '--n-divider-color': dividerColor,\n '--n-title-padding': titlePadding,\n '--n-title-font-size': titleFontSize,\n '--n-title-text-color': titleTextColor,\n '--n-title-text-color-disabled': titleTextColorDisabled,\n '--n-title-font-weight': titleFontWeight,\n '--n-arrow-color': arrowColor,\n '--n-arrow-color-disabled': arrowColorDisabled,\n '--n-item-margin': itemMargin\n };\n });\n const themeClassHandle = inlineThemeDisabled ? useThemeClass('collapse', undefined, cssVarsRef, props) : undefined;\n return {\n rtlEnabled: rtlEnabledRef,\n mergedTheme: themeRef,\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 (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this);\n return h(\"div\", {\n class: [`${this.mergedClsPrefix}-collapse`, this.rtlEnabled && `${this.mergedClsPrefix}-collapse--rtl`, this.themeClass],\n style: this.cssVars\n }, this.$slots);\n }\n});","import { useFalseUntilTruthy } from 'vooks';\nimport { defineComponent, h, toRef, vShow, withDirectives } from 'vue';\nimport { NFadeInExpandTransition } from \"../../_internal/index.mjs\";\nexport default defineComponent({\n name: 'CollapseItemContent',\n props: {\n displayDirective: {\n type: String,\n required: true\n },\n show: Boolean,\n clsPrefix: {\n type: String,\n required: true\n }\n },\n setup(props) {\n const onceTrueRef = useFalseUntilTruthy(toRef(props, 'show'));\n return {\n onceTrue: onceTrueRef\n };\n },\n render() {\n return h(NFadeInExpandTransition, null, {\n default: () => {\n const {\n show,\n displayDirective,\n onceTrue,\n clsPrefix\n } = this;\n const useVShow = displayDirective === 'show' && onceTrue;\n const contentNode = h(\"div\", {\n class: `${clsPrefix}-collapse-item__content-wrapper`\n }, h(\"div\", {\n class: `${clsPrefix}-collapse-item__content-inner`\n }, this.$slots));\n return useVShow ? withDirectives(contentNode, [[vShow, show]]) : show ? contentNode : null;\n }\n });\n }\n});","import { createId, happensIn } from 'seemly';\nimport { useMemo } from 'vooks';\nimport { computed, defineComponent, h, inject, toRef } from 'vue';\nimport { NBaseIcon } from \"../../_internal/index.mjs\";\nimport { ChevronLeftIcon as ArrowLeftIcon, ChevronRightIcon as ArrowRightIcon } from \"../../_internal/icons/index.mjs\";\nimport { useConfig } from \"../../_mixins/index.mjs\";\nimport { useRtl } from \"../../_mixins/use-rtl.mjs\";\nimport { resolveSlotWithTypedProps, resolveWrappedSlotWithProps, throwError } from \"../../_utils/index.mjs\";\nimport { collapseInjectionKey } from \"./Collapse.mjs\";\nimport NCollapseItemContent from \"./CollapseItemContent.mjs\";\nexport const collapseItemProps = {\n title: String,\n name: [String, Number],\n disabled: Boolean,\n displayDirective: String\n};\nexport default defineComponent({\n name: 'CollapseItem',\n props: collapseItemProps,\n setup(props) {\n const {\n mergedRtlRef\n } = useConfig(props);\n const randomName = createId();\n const mergedNameRef = useMemo(() => {\n var _a;\n return (_a = props.name) !== null && _a !== void 0 ? _a : randomName;\n });\n const NCollapse = inject(collapseInjectionKey);\n if (!NCollapse) {\n throwError('collapse-item', '`n-collapse-item` must be placed inside `n-collapse`.');\n }\n const {\n expandedNamesRef,\n props: collapseProps,\n mergedClsPrefixRef,\n slots: collapseSlots\n } = NCollapse;\n const collapsedRef = computed(() => {\n const {\n value: expandedNames\n } = expandedNamesRef;\n if (Array.isArray(expandedNames)) {\n const {\n value: name\n } = mergedNameRef;\n return !~expandedNames.findIndex(expandedName => expandedName === name);\n } else if (expandedNames) {\n const {\n value: name\n } = mergedNameRef;\n return name !== expandedNames;\n }\n return true;\n });\n const rtlEnabledRef = useRtl('Collapse', mergedRtlRef, mergedClsPrefixRef);\n return {\n rtlEnabled: rtlEnabledRef,\n collapseSlots,\n randomName,\n mergedClsPrefix: mergedClsPrefixRef,\n collapsed: collapsedRef,\n triggerAreas: toRef(collapseProps, 'triggerAreas'),\n mergedDisplayDirective: computed(() => {\n const {\n displayDirective\n } = props;\n if (displayDirective) {\n return displayDirective;\n } else {\n return collapseProps.displayDirective;\n }\n }),\n arrowPlacement: computed(() => {\n return collapseProps.arrowPlacement;\n }),\n handleClick(e) {\n let happensInArea = 'main';\n if (happensIn(e, 'arrow')) happensInArea = 'arrow';\n if (happensIn(e, 'extra')) happensInArea = 'extra';\n if (!collapseProps.triggerAreas.includes(happensInArea)) {\n return;\n }\n if (NCollapse && !props.disabled) {\n NCollapse.toggleItem(collapsedRef.value, mergedNameRef.value, e);\n }\n }\n };\n },\n render() {\n const {\n collapseSlots,\n $slots,\n arrowPlacement,\n collapsed,\n mergedDisplayDirective,\n mergedClsPrefix,\n disabled,\n triggerAreas\n } = this;\n const headerNode = resolveSlotWithTypedProps($slots.header, {\n collapsed\n }, () => [this.title]);\n const headerExtraSlot = $slots['header-extra'] || collapseSlots['header-extra'];\n const arrowSlot = $slots.arrow || collapseSlots.arrow;\n return h(\"div\", {\n class: [`${mergedClsPrefix}-collapse-item`, `${mergedClsPrefix}-collapse-item--${arrowPlacement}-arrow-placement`, disabled && `${mergedClsPrefix}-collapse-item--disabled`, !collapsed && `${mergedClsPrefix}-collapse-item--active`, triggerAreas.map(area => {\n return `${mergedClsPrefix}-collapse-item--trigger-area-${area}`;\n })]\n }, h(\"div\", {\n class: [`${mergedClsPrefix}-collapse-item__header`, !collapsed && `${mergedClsPrefix}-collapse-item__header--active`]\n }, h(\"div\", {\n class: `${mergedClsPrefix}-collapse-item__header-main`,\n onClick: this.handleClick\n }, arrowPlacement === 'right' && headerNode, h(\"div\", {\n class: `${mergedClsPrefix}-collapse-item-arrow`,\n key: this.rtlEnabled ? 0 : 1,\n \"data-arrow\": true\n }, resolveSlotWithTypedProps(arrowSlot, {\n collapsed\n }, () => [h(NBaseIcon, {\n clsPrefix: mergedClsPrefix\n }, {\n default: () => this.rtlEnabled ? h(ArrowLeftIcon, null) : h(ArrowRightIcon, null)\n })])), arrowPlacement === 'left' && headerNode), resolveWrappedSlotWithProps(headerExtraSlot, {\n collapsed\n }, children => h(\"div\", {\n class: `${mergedClsPrefix}-collapse-item__header-extra`,\n onClick: this.handleClick,\n \"data-extra\": true\n }, children))), h(NCollapseItemContent, {\n clsPrefix: mergedClsPrefix,\n displayDirective: mergedDisplayDirective,\n show: !collapsed\n }, $slots));\n }\n});","export default {\n thPaddingSmall: '6px',\n thPaddingMedium: '12px',\n thPaddingLarge: '12px',\n tdPaddingSmall: '6px',\n tdPaddingMedium: '12px',\n tdPaddingLarge: '12px'\n};","import { composite } from 'seemly';\nimport { commonLight } from \"../../_styles/common/index.mjs\";\nimport sizeVariables from \"./_common.mjs\";\nexport function self(vars) {\n const {\n dividerColor,\n cardColor,\n modalColor,\n popoverColor,\n tableHeaderColor,\n tableColorStriped,\n textColor1,\n textColor2,\n borderRadius,\n fontWeightStrong,\n lineHeight,\n fontSizeSmall,\n fontSizeMedium,\n fontSizeLarge\n } = vars;\n return Object.assign(Object.assign({}, sizeVariables), {\n fontSizeSmall,\n fontSizeMedium,\n fontSizeLarge,\n lineHeight,\n borderRadius,\n borderColor: composite(cardColor, dividerColor),\n borderColorModal: composite(modalColor, dividerColor),\n borderColorPopover: composite(popoverColor, dividerColor),\n tdColor: cardColor,\n tdColorModal: modalColor,\n tdColorPopover: popoverColor,\n tdColorStriped: composite(cardColor, tableColorStriped),\n tdColorStripedModal: composite(modalColor, tableColorStriped),\n tdColorStripedPopover: composite(popoverColor, tableColorStriped),\n thColor: composite(cardColor, tableHeaderColor),\n thColorModal: composite(modalColor, tableHeaderColor),\n thColorPopover: composite(popoverColor, tableHeaderColor),\n thTextColor: textColor1,\n tdTextColor: textColor2,\n thFontWeight: fontWeightStrong\n });\n}\nconst tableLight = {\n name: 'Table',\n common: commonLight,\n self\n};\nexport default tableLight;","import { changeColor } from 'seemly';\nimport { scrollbarLight } from \"../../_internal/scrollbar/styles/index.mjs\";\nimport { createTheme } from \"../../_mixins/use-theme.mjs\";\nimport { commonLight } from \"../../_styles/common/index.mjs\";\nimport { checkboxLight } from \"../../checkbox/styles/index.mjs\";\nimport { emptyLight } from \"../../empty/styles/index.mjs\";\nexport function self(vars) {\n const {\n borderRadiusSmall,\n dividerColor,\n hoverColor,\n pressedColor,\n primaryColor,\n textColor3,\n textColor2,\n textColorDisabled,\n fontSize\n } = vars;\n return {\n fontSize,\n lineHeight: '1.5',\n nodeHeight: '30px',\n nodeWrapperPadding: '3px 0',\n nodeBorderRadius: borderRadiusSmall,\n nodeColorHover: hoverColor,\n nodeColorPressed: pressedColor,\n nodeColorActive: changeColor(primaryColor, {\n alpha: 0.1\n }),\n arrowColor: textColor3,\n nodeTextColor: textColor2,\n nodeTextColorDisabled: textColorDisabled,\n loadingColor: primaryColor,\n dropMarkColor: primaryColor,\n lineColor: dividerColor\n };\n}\nconst treeLight = createTheme({\n name: 'Tree',\n common: commonLight,\n peers: {\n Checkbox: checkboxLight,\n Scrollbar: scrollbarLight,\n Empty: emptyLight\n },\n self\n});\nexport default treeLight;","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 transform: translate3d(0,0,0);\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 `)])]), 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 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 indent: {\n type: Number,\n default: 24\n },\n allowDrop: {\n type: Function,\n default: defaultAllowDrop\n },\n animated: {\n type: Boolean,\n default: true\n },\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 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`];\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 TrackGraphLoader = () => import('@/components/TrackGraph.vue');\nconst TrackGraph = defineAsyncComponent({\n loader: TrackGraphLoader,\n delay: 0,\n});\nsetTimeout(TrackGraphLoader, 3000);\n</script>\n<script setup lang=\"ts\">\nimport SelectorText from '@/components/SelectorText.vue';\nimport { buildEmptyFn, colorList } from '@/utils/others';\nimport { type ResolvedSelector } from '@/utils/selector';\nimport type { RawNode } from '@/utils/types';\nimport type { AstNode, QueryResult } from '@gkd-kit/selector';\nimport { UnitSelectorExpression } from '@gkd-kit/selector';\nimport type { StyleValue } from 'vue';\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 props.queryResult.unitResults.asJsReadonlyArrayView().concat();\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});\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 #00F',\n };\n }\n return '';\n};\n</script>\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>\n <div flex items-center gap-4px>\n <SvgIcon name=\"path\" h=\"24px\" />\n <div text=\"20px/28px\" font-bold>选择器路径视图</div>\n </div>\n <NButton text @click=\"onClose\">\n <SvgIcon name=\"close\" h=\"20px\" />\n </NButton>\n </div>\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 />\n <div relative pointer-events-none z-1>\n <div absolute left-8px bottom-8px text=\"14px/14px #6C6E71\">\n *为简化视图已隐藏无关节点\n </div>\n </div>\n </div>\n <NScrollbar class=\"self-stretch flex-1 text-20px leading-28px gkd_code\">\n <div mb-24px break-all px-4px py-2px bg=\"#eee\">\n <SelectorText\n :source=\"selector.source\"\n :node=\"selector.ast\"\n :getNodeStyle=\"getNodeStyle\"\n />\n </div>\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 b=\"#ccc\"\n >\n <SelectorText\n :source=\"selector.source\"\n :node=\"selector.findAst(unitResult.expression)\"\n />\n </div>\n </div>\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 @click=\"switchUnitResult(unitResult)\"\n :style=\"{\n borderColor: colorList[i % colorList.length],\n backgroundColor: filterUnitResults.includes(unitResult)\n ? '#eee'\n : undefined,\n }\"\n >\n <div\n inline-block\n align-middle\n size-20px\n :style=\"{\n backgroundColor: colorList[i % colorList.length],\n }\"\n ></div>\n <span pl-4px></span>\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","<script setup lang=\"ts\">\nimport type { TrackCardProps } from '@/utils/types';\nimport TrackCard from './TrackCard.vue';\nimport { buildEmptyFn } from '@/utils/others';\n\nconst props = withDefaults(\n defineProps<{\n data?: TrackCardProps;\n show?: boolean;\n onUpdateShow?: (show: boolean) => void;\n onUpdateData?: (data?: TrackCardProps) => void;\n }>(),\n {\n onUpdateShow: buildEmptyFn,\n onUpdateData: buildEmptyFn,\n },\n);\n\ntype ShowStatus = -1 | 0 | 1;\n\nconst innerShow = ref(false);\nconst showStatus = ref<ShowStatus>(0);\nwatchImmediate(\n () => props.show,\n async () => {\n if (props.show) {\n innerShow.value = true;\n showStatus.value = -1;\n await new Promise((r) => setTimeout(r, 300));\n showStatus.value = 0;\n } else {\n showStatus.value = 1;\n await new Promise((r) => setTimeout(r, 300));\n innerShow.value = false;\n showStatus.value = 0;\n props.onUpdateData();\n }\n },\n);\n\nuseEventListener('keyup', (e) => {\n if (e.key === 'Escape') {\n props.onUpdateShow(false);\n }\n});\n</script>\n<template>\n <div\n v-if=\"innerShow\"\n class=\"TrackModal\"\n absolute\n left-0\n top-0\n bg-white\n z-3000\n w=\"[--gkd-w]\"\n h=\"[--gkd-h]\"\n :class=\"{\n 'track-model-enter': showStatus === -1,\n 'track-model-exit': showStatus === 1,\n }\"\n >\n <TrackCard v-if=\"data\" v-bind=\"data\" @close=\"onUpdateShow(false)\" />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.track-model-enter {\n animation: enter-keyframes 300ms;\n}\n@keyframes enter-keyframes {\n 0% {\n opacity: 0.5;\n transform: translateY(15%);\n }\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.track-model-exit {\n animation: exit-keyframes 300ms forwards;\n}\n@keyframes exit-keyframes {\n 0% {\n opacity: 1;\n transform: translateY(0);\n }\n 100% {\n opacity: 0;\n transform: translateY(15%);\n }\n}\n</style>\n","export const useDragMove = (xFilter: (x: number) => boolean) => {\n const target = shallowRef<HTMLElement>();\n const prevOffset = {\n x: 0,\n y: 0,\n };\n\n const offset = shallowReactive({ ...prevOffset });\n let prevEv: PointerEvent | undefined = undefined;\n const preventSelection = (ev: Event) => {\n if (prevEv) {\n ev.preventDefault();\n }\n };\n const startMove = (ev: PointerEvent) => {\n prevEv = ev;\n prevOffset.x = offset.x;\n prevOffset.y = offset.y;\n };\n const move = (ev: PointerEvent) => {\n if (!prevEv || !target.value) return;\n\n const dx = ev.clientX - prevEv.clientX; // ev.movementX;\n const dy = ev.clientY - prevEv.clientY; //ev.movementY;\n\n if (xFilter(dx)) {\n offset.x = prevOffset.x + dx;\n }\n offset.y = prevOffset.y + dy;\n };\n const endMove = () => {\n prevEv = undefined;\n };\n const windowEndMove = () => {\n if (!target.value || !prevEv) return;\n endMove();\n const { top, bottom, left, right } = target.value.getBoundingClientRect();\n if (\n right < 0 ||\n left > window.innerWidth ||\n bottom < 0 ||\n top > window.innerHeight\n ) {\n // isOutsideViewport\n offset.x = prevOffset.x;\n offset.y = prevOffset.y;\n }\n };\n onMounted(() => {\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', windowEndMove);\n document.addEventListener('selectstart', preventSelection);\n });\n onUnmounted(() => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', windowEndMove);\n document.removeEventListener('selectstart', preventSelection);\n endMove();\n });\n watch(target, (newValue, oldValue) => {\n if (newValue) {\n newValue.addEventListener('pointerdown', startMove);\n newValue.addEventListener('pointerup', endMove);\n }\n if (oldValue) {\n oldValue.removeEventListener('pointerdown', startMove);\n oldValue.removeEventListener('pointerup', endMove);\n }\n });\n onUnmounted(() => {\n if (!target.value) return;\n target.value.removeEventListener('pointerdown', startMove);\n target.value.removeEventListener('pointerup', endMove);\n });\n return {\n target,\n offset,\n };\n};\n\nlet currentMaxZIndex = 1000;\nexport const useZindex = () => {\n currentMaxZIndex++;\n const zIndex = shallowRef(currentMaxZIndex);\n const setTop = () => {\n if (zIndex.value === currentMaxZIndex) return;\n currentMaxZIndex++;\n zIndex.value = currentMaxZIndex;\n };\n return {\n zIndex,\n setTop,\n };\n};\n","<script setup lang=\"ts\">\nimport { useDragMove, useZindex } from '@/utils/draggable';\n\nconst props = withDefaults(\n defineProps<{\n initialValue: {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n\n width?: number;\n };\n minWidth?: number;\n sizeDraggable?: boolean;\n show?: boolean;\n class?: string;\n }>(),\n { initialValue: () => ({}), show: true },\n);\n\nconst isLeft = props.initialValue.left !== void 0;\nconst isTop = props.initialValue.top !== void 0;\nconst prevOffset = {\n x: (isLeft ? props.initialValue.left : props.initialValue.right) ?? 0,\n y: (isTop ? props.initialValue.top : props.initialValue.bottom) ?? 0,\n};\n\nconst leftDragBar = useDragMove((dx) => {\n const w =\n (props.initialValue.width || 0) +\n rightDragBar.offset.x +\n -leftDragBar.offset.x -\n dx;\n return (props.minWidth || 0) < w;\n});\nconst rightDragBar = useDragMove((dx) => {\n const w =\n (props.initialValue.width || 0) +\n rightDragBar.offset.x +\n dx -\n leftDragBar.offset.x;\n\n return (props.minWidth || 0) < w;\n});\n\nconst offset = shallowReactive({ ...prevOffset });\nconst currentStyle = computed(() => {\n const width =\n (props.initialValue.width || 0) +\n rightDragBar.offset.x -\n leftDragBar.offset.x;\n const widthStyle = props.initialValue.width ? `width:${width}px;` : ``;\n const yStyle = isTop ? `top:${offset.y}px;` : `bottom:${offset.y}px;`;\n if (isLeft) {\n return `left:${offset.x - leftDragBar.offset.x}px;` + yStyle + widthStyle;\n } else {\n return `right:${offset.x - rightDragBar.offset.x}px;` + yStyle + widthStyle;\n }\n});\n/**\n * it will be PointerEvent when moving\n */\nlet prevEv: PointerEvent | undefined = undefined;\nconst moved = shallowRef(false);\nconst startMove = (ev: PointerEvent) => {\n prevEv = ev;\n prevOffset.x = offset.x;\n prevOffset.y = offset.y;\n moved.value = false;\n};\nconst move = (ev: PointerEvent) => {\n if (!target.value || !prevEv) return;\n\n const dx = ev.clientX - prevEv.clientX; // ev.movementX;\n const dy = ev.clientY - prevEv.clientY; //ev.movementY;\n\n offset.x = prevOffset.x + (isLeft ? dx : -dx);\n offset.y = prevOffset.y + (isTop ? dy : -dy);\n\n moved.value = true;\n};\nconst endMove = () => {\n prevEv = undefined;\n};\nconst box = shallowRef<HTMLElement>();\nconst target = shallowRef<HTMLElement>();\nconst preventSelection = (ev: Event) => {\n if (prevEv) {\n ev.preventDefault();\n }\n};\nconst transition = `transition-top,bottom,left,right-500`;\nconst windowEndMove = () => {\n if (!target.value || !prevEv) return;\n endMove();\n const { top, bottom, left, right } = target.value.getBoundingClientRect();\n if (\n right < 0 ||\n left > window.innerWidth ||\n bottom < 0 ||\n top > window.innerHeight\n ) {\n // isOutsideViewport\n offset.x = prevOffset.x;\n offset.y = prevOffset.y;\n\n const boxDiv = box.value;\n if (boxDiv) {\n boxDiv.classList.add(transition);\n setTimeout(() => {\n boxDiv.classList.remove(transition);\n }, 550);\n }\n }\n};\n\n// move 事件应该给 window. 如果给目标元素,容易出现鼠标移速过快无法跟随的bug\nonMounted(() => {\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', windowEndMove);\n document.addEventListener('selectstart', preventSelection);\n});\nonUnmounted(() => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', windowEndMove);\n document.removeEventListener('selectstart', preventSelection);\n endMove();\n});\n\nwatch(target, (newValue, oldValue) => {\n if (newValue) {\n newValue.addEventListener('pointerdown', startMove);\n newValue.addEventListener('pointerup', endMove);\n }\n if (oldValue) {\n oldValue.removeEventListener('pointerdown', startMove);\n oldValue.removeEventListener('pointerup', endMove);\n }\n});\nonUnmounted(() => {\n if (!target.value) return;\n target.value.removeEventListener('pointerdown', startMove);\n target.value.removeEventListener('pointerup', endMove);\n});\nconst updateTarget = (arg: unknown) => {\n if (arg instanceof HTMLElement) {\n target.value = arg;\n } else {\n target.value = void 0;\n }\n};\n\nconst { setTop, zIndex } = useZindex();\nwatch(\n () => props.show,\n () => {\n if (props.show) {\n setTop();\n }\n },\n);\n</script>\n<template>\n <Teleport to=\"body\">\n <div\n v-if=\"show\"\n fixed\n ref=\"box\"\n class=\"DraggableCard\"\n :style=\"[currentStyle, { zIndex }]\"\n :class=\"props.class\"\n @mousedown=\"setTop\"\n >\n <slot :onRef=\"updateTarget\" :moved=\"moved\"></slot>\n\n <template v-if=\"sizeDraggable\">\n <div\n :ref=\"leftDragBar.target\"\n absolute\n right-full\n top-0\n bottom-0\n w-5px\n cursor-ew-resize\n ></div>\n <div\n :ref=\"rightDragBar.target\"\n absolute\n left-full\n top-0\n bottom-0\n w-5px\n cursor-ew-resize\n ></div>\n </template>\n </div>\n </Teleport>\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 { toInteger } from '@/utils/others';\nimport type { ResolvedSelector } from '@/utils/selector';\nimport { screenshotStorage, snapshotStorage } from '@/utils/snapshot';\nimport { useTask } from '@/utils/task';\nimport type {\n Position,\n RawNode,\n Snapshot,\n TrackCardProps,\n} from '@/utils/types';\nimport type { QueryResult } from '@gkd-kit/selector';\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 = defineStore('snapshot', () => {\n const route = useRoute();\n const router = useRouter();\n const settingsStore = useSettingsStore();\n const storageStore = useStorageStore();\n const { snapshotImportId, snapshotImageId, importSnapshotId } = storageStore;\n\n const snapshotId = shallowRef<number>();\n watchImmediate(\n () => route.params.snapshotId,\n (v) => {\n snapshotId.value = toInteger(v);\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 });\n const loading = computed(() => update.loading);\n watchImmediate(() => snapshotId.value, update.invoke);\n watchEffect(() => {\n if (\n importId.value &&\n storageStore.inited &&\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 (\n gmOk() &&\n settingsStore.inited &&\n settingsStore.autoUploadImport &&\n storageStore.inited\n );\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 && settingsStore.inited) {\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 = ref(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\nif (import.meta.hot) {\n import.meta.hot.accept(() => {\n location.reload();\n });\n}\n","<script setup lang=\"ts\">\nimport DraggableCard from '@/components/DraggableCard.vue';\nimport { getNodeSelectorText } from '@/utils/node';\nimport { buildEmptyFn, copy } from '@/utils/others';\n\nwithDefaults(\n defineProps<{\n show: boolean;\n onUpdateShow?: (data: boolean) => void;\n }>(),\n {\n onUpdateShow: buildEmptyFn,\n },\n);\n\nconst { focusNode } = storeToRefs(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</script>\n\n<template>\n <DraggableCard\n :initialValue=\"{ top: 40, right: 10 }\"\n v-slot=\"{ onRef }\"\n class=\"box-shadow-dim\"\n :show=\"show && Boolean(focusNode)\"\n >\n <div absolute top-0 right-0 pt-4px pr-8px>\n <NButton @click=\"onUpdateShow(!show)\" text title=\"最小化\">\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 ><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=\"copy(`${attrx.name}=${attrx.desc}`)\">\n <div v-if=\"attrx.tip\" flex justify-between items-center>\n <div>\n {{ attrx.name }}\n </div>\n <NTooltip>\n <template #trigger>\n <NIcon size=\"16\">\n <SvgIcon name=\"info\" v-if=\"attrx.tip.type == 'info'\" />\n <SvgIcon\n v-else-if=\"attrx.tip.type == 'quickFind'\"\n name=\"ok\"\n />\n </NIcon>\n </template>\n {{ attrx.tip.desc }}\n </NTooltip>\n </div>\n <template v-else>\n {{ attrx.name }}\n </template>\n </NTd>\n <NTd>\n <NEllipsis\n class=\"w-[calc(var(--gkd-w)*0.12)]\"\n :class=\"{\n 'text-left direction-rtl': attrx.name == 'id',\n 'opacity-50': attrx.value === null,\n }\"\n >\n {{ attrx.desc }}\n </NEllipsis>\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>{{ selectText }}</div>\n </NTooltip>\n </div>\n </NTd>\n </NTr>\n </NTbody>\n </NTable>\n </DraggableCard>\n</template>\n","<script setup lang=\"ts\">\nimport DraggableCard from '@/components/DraggableCard.vue';\nimport { getNodeLabel, getNodeStyle } from '@/utils/node';\n\nconst snapshotStore = useSnapshotStore();\nconst { focusNode, overlapNodes, focusPosition } = storeToRefs(snapshotStore);\nconst _1vw = document.documentElement.scrollWidth / 100;\nconst left = _1vw * 25.5;\n</script>\n<template>\n <DraggableCard\n :initialValue=\"{ top: 215, left }\"\n v-slot=\"{ onRef }\"\n class=\"box-shadow-dim w-420px\"\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 bg=\"#eee\" px-2px>{{\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 @click=\"snapshotStore.updateFocusNode(resultNode)\"\n size=\"small\"\n :style=\"getNodeStyle(resultNode, focusNode)\"\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 { RawNode, Snapshot } from '@/utils/types';\nimport type { ShallowRef } from 'vue';\n\nwithDefaults(\n defineProps<{\n show: boolean;\n onUpdateShow?: (data: boolean) => void;\n }>(),\n {\n onUpdateShow: buildEmptyFn,\n },\n);\n\nconst snapshotStore = useSnapshotStore();\nconst snapshotRefs = storeToRefs(snapshotStore);\nconst { rootNode, focusNode } = snapshotRefs;\nconst snapshot = snapshotRefs.snapshot as ShallowRef<Snapshot>;\n\nconst text = shallowRef('');\nconst lazyText = refDebounced(text, 500);\n\ninterface ResolvedData {\n matches: string[];\n anyMatches: string[];\n excludeMatches: string[];\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};\nconst checkRule = (obj: ResolvedData): string | RawNode => {\n const matches = toArray(obj.matches);\n if (!matches) {\n return '非法格式: matches';\n }\n const anyMatches = toArray(obj.anyMatches);\n if (!anyMatches) {\n return '非法格式: anyMatches';\n }\n const excludeMatches = toArray(obj.excludeMatches);\n if (!excludeMatches) {\n return '非法格式: excludeMatches';\n }\n\n const resolvedMatches: ResolvedSelector[] = [];\n for (let i = 0; i < matches.length; i++) {\n const v = matches[i];\n try {\n resolvedMatches.push(parseSelector(v));\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return `非法选择器: matches[${i}]\\n错误: ${message}`;\n }\n }\n const matchesResult = resolvedMatches.map((s) =>\n s.querySelfOrSelectorAll(rootNode.value),\n );\n if (resolvedMatches.length) {\n const notIndex = matchesResult.findIndex((s) => s.length === 0);\n if (notIndex >= 0) {\n return `无法匹配: matches[${notIndex}] 查找结果为空`;\n }\n }\n\n const resolvedAnyMatches: ResolvedSelector[] = [];\n for (let i = 0; i < anyMatches.length; i++) {\n const v = anyMatches[i];\n try {\n resolvedAnyMatches.push(parseSelector(v));\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return `非法选择器: anyMatches[${i}]\\n错误: ${message}`;\n }\n }\n const anyMatchesResult = resolvedAnyMatches.map((s) =>\n s.querySelfOrSelectorAll(rootNode.value),\n );\n if (resolvedAnyMatches.length) {\n if (anyMatchesResult.every((s) => s.length === 0)) {\n return `无法匹配: anyMatches 查找结果为空`;\n }\n }\n\n if (!matches.length && !anyMatches.length) {\n return '非法规则: matches 和 anyMatches 至少存在一个';\n }\n\n const resolvedExcludeMatches: ResolvedSelector[] = [];\n for (let i = 0; i < excludeMatches.length; i++) {\n const v = excludeMatches[i];\n try {\n resolvedExcludeMatches.push(parseSelector(v));\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return `非法选择器: excludeMatches[${i}]\\n错误: ${message}`;\n }\n }\n const excludeMatchesResult = resolvedExcludeMatches.map((s) =>\n s.querySelfOrSelectorAll(rootNode.value),\n );\n if (resolvedExcludeMatches.length) {\n const index = excludeMatchesResult.findIndex((s) => s.length !== 0);\n if (index >= 0) {\n return `无法匹配: excludeMatches[${index}] 查找结果不为空`;\n }\n }\n if (!matchesResult.length) {\n return anyMatchesResult[0][0];\n }\n return matchesResult.at(-1)![0];\n};\n\nconst isObj = (v: any): v is Record<string, any> => {\n return typeof v === 'object' && v !== null && !Array.isArray(v);\n};\n\nconst dataRef = computed<RawNode | string>(() => {\n if (!lazyText.value) return '';\n const obj = (() => {\n try {\n return JSON5.parse(lazyText.value);\n } catch (e) {\n return e as Error;\n }\n })();\n if (obj instanceof Error) {\n return `非法格式: ${obj.message}`;\n }\n if (!isObj(obj)) {\n return '非法格式: 请使用对象格式';\n }\n if (typeof obj.id === 'string') {\n if (obj.id !== snapshot.value.appId) {\n return '非法格式: id 不匹配 appId';\n }\n if (!Array.isArray(obj.groups)) {\n return '非法格式: groups 不是数组';\n }\n if (obj.groups.length !== 1) {\n return '非法格式: groups 长度不为 1';\n }\n const group = obj.groups[0];\n if (!group?.rules) {\n return '非法格式: groups[0].rules 非法';\n }\n const rules = Array.isArray(group.rules) ? group.rules : [group.rules];\n if (rules.length !== 1) {\n return '非法格式: groups[0].rules 长度不为 1';\n }\n const rule =\n typeof rules[0] === 'string' ? { matches: rules[0] } : rules[0];\n if (!isObj(rule)) {\n return '非法格式: rules[0] 非法';\n }\n return checkRule(rule as ResolvedData);\n }\n if (obj.rules) {\n const rules = Array.isArray(obj.rules) ? obj.rules : [obj.rules];\n if (rules.length !== 1) {\n return '非法格式: rules 长度不为 1';\n }\n const rule =\n typeof rules[0] === 'string' ? { matches: rules[0] } : rules[0];\n if (!isObj(rule)) {\n return '非法格式: rules[0] 非法';\n }\n return checkRule(rule as ResolvedData);\n }\n return checkRule(obj as ResolvedData);\n});\nconst errorText = computed(() => {\n if (text.value && lazyText.value && typeof dataRef.value === 'string') {\n return dataRef.value;\n }\n return '';\n});\nconst targetNode = computed(() => {\n if (typeof dataRef.value === 'string') return null;\n return dataRef.value;\n});\n</script>\n<template>\n <DraggableCard\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 v-slot=\"{ onRef }\"\n class=\"box-shadow-dim\"\n :show=\"show\"\n >\n <div bg-white b-1px b-solid b-gray-200 rounded-4px p-8px>\n <div flex m-b-4px pr-4px>\n <div>测试规则</div>\n <div flex-1 cursor-move :ref=\"onRef\"></div>\n <NButton @click=\"onUpdateShow(!show)\" text title=\"最小化\">\n <template #icon>\n <SvgIcon name=\"minus\" />\n </template>\n </NButton>\n </div>\n <NInput\n v-model:value=\"text\"\n type=\"textarea\"\n placeholder=\"请输入单个规则测试\"\n size=\"small\"\n class=\"gkd_code m-b-4px\"\n :autosize=\"{\n minRows: 10,\n maxRows: 20,\n }\"\n />\n <div min-h-24px>\n <div color-red whitespace-pre v-if=\"errorText\">{{ errorText }}</div>\n\n <NButton\n v-else-if=\"targetNode\"\n @click=\"snapshotStore.updateFocusNode(targetNode)\"\n size=\"small\"\n :style=\"getNodeStyle(targetNode, focusNode)\"\n >\n {{ getNodeLabel(targetNode) }}\n </NButton>\n </div>\n </div>\n </DraggableCard>\n</template>\n","<script lang=\"ts\" setup>\nconst props = defineProps<{\n imgRef: HTMLElement;\n imgHover: boolean;\n screenshotUrl: string;\n hoverPosition: {\n ox: number;\n oy: number;\n };\n hoverPositionStyle?: {\n left: string;\n top: string;\n };\n boxHoverPosition?: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n boxHoverPerPosition?: {\n left: string;\n right: string;\n top: string;\n bottom: string;\n };\n}>();\n\nconst imgBounding = useElementBounding(computed(() => props.imgRef));\n</script>\n\n<template>\n <!-- Teleport 需要单独一个组件否则 hmr 错误 -->\n <Teleport to=\"body\">\n <!-- 渲染在外部防止被遮挡 -->\n <div\n v-show=\"imgHover\"\n :style=\"{\n left: imgBounding.right.value + 4 + 'px',\n top: imgBounding.top.value + 'px',\n }\"\n pointer-events-none\n fixed\n overflow-hidden\n z-2\n bg-white\n h-200px\n w-200px\n border-1px\n border-indigo-600\n border-dashed\n >\n <img\n :src=\"screenshotUrl\"\n object-contain\n absolute\n left-0\n top-0\n :style=\"hoverPositionStyle\"\n w-1000px\n />\n <div\n absolute\n left-2px\n top-2px\n p-1px\n z-1\n text-13px\n class=\"leading-[1] bg-[rgba(256,256,256,0.7)]\"\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] bg-[rgba(256,256,256,0.7)]\"\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] bg-[rgba(256,256,256,0.7)]\"\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 #fff 50%,\n #fff 100%\n );\n background-position-x: 1.5px;\n \"\n ></div>\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 #fff 50%,\n #fff 100%\n );\n background-position-y: 1.5px;\n \"\n ></div>\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport dayjs from 'dayjs';\nimport MiniHoverImg from './MiniHoverImg.vue';\nimport { toFixedNumber } from '@/utils/others';\n\nconst snapshotStore = useSnapshotStore();\nconst { updatePosition } = snapshotStore;\nconst snapshotRefs = storeToRefs(snapshotStore);\nconst { focusNode, screenshotUrl } = snapshotRefs;\n\nconst snapshot = computed(() => snapshotStore.snapshot!);\n\nconst imgRef = shallowRef<HTMLImageElement>();\nconst imgLoadTime = shallowRef(false);\n\nconst 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) * img.naturalHeight;\n\n updatePosition({ x, y });\n};\n\nconst percent = (n: number) => {\n return `${n * 100}%`;\n};\n\nconst imgSize = useElementSize(imgRef);\n\nconst 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});\nconst imgHover = shallowRef(false);\nconst hoverPosition = shallowRef({ ox: 0, oy: 0 });\nconst 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});\nconst 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});\nconst hoverPositionStyle = shallowRef({ left: '0', top: '0' });\n\nconst 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) * img.naturalHeight;\n hoverPosition.value = { ox, oy };\n hoverPositionStyle.value = {\n left: (-(ox - 0.1 * img.naturalWidth) / img.naturalWidth) * 1000 + 'px',\n top: (-(oy - 0.1 * img.naturalWidth) / img.naturalWidth) * 1000 + 'px',\n };\n};\n</script>\n\n<template>\n <div\n v-if=\"screenshotUrl\"\n flex\n flex-col\n relative\n h-full\n p-2px\n box-border\n overflow-hidden\n >\n <img\n ref=\"imgRef\"\n :src=\"screenshotUrl\"\n @click=\"clickImg\"\n cursor-crosshair\n object-contain\n h-full\n class=\"max-w-[calc(var(--gkd-w)*0.35)]\"\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-blue\n b-solid\n >\n <div absolute left-0 top-0 bottom-0 right-0 b-solid b-1px b-red></div>\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 py-1px px-2px bg=\"#ffffff90\" title=\"尺寸\">\n {{ `${snapshot.screenWidth}x${snapshot.screenHeight}` }}\n </div>\n <div py-1px px-2px bg=\"#ffffff90\" title=\"创建时间\">\n {{ dayjs(snapshot.id).format('YYYY-MM-DD HH:mm:ss') }}\n </div>\n </div>\n <MiniHoverImg\n v-if=\"imgRef\"\n :imgHover=\"imgHover\"\n :imgRef=\"imgRef\"\n :boxHoverPerPosition=\"boxHoverPerPosition\"\n :boxHoverPosition=\"boxHoverPosition\"\n :hoverPositionStyle=\"hoverPositionStyle\"\n :hoverPosition=\"hoverPosition\"\n :screenshotUrl=\"screenshotUrl\"\n />\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 type {\n RawNode,\n SearchResult,\n SelectorSearchResult,\n Snapshot,\n} from '@/utils/types';\nimport { getImagUrl, getImportUrl } from '@/utils/url';\nimport { FastQuery, GkdException } from '@gkd-kit/selector';\nimport dayjs from 'dayjs';\nimport * as base64url from 'universal-base64url';\nimport type { ShallowRef } from 'vue';\n\nwithDefaults(\n defineProps<{\n show: boolean;\n onUpdateShow?: (data: boolean) => void;\n }>(),\n {\n onUpdateShow: buildEmptyFn,\n },\n);\n\nconst route = useRoute();\nconst { snapshotImportId, snapshotImageId } = useStorageStore();\n\nconst snapshotStore = useSnapshotStore();\nconst { updateFocusNode } = snapshotStore;\nconst snapshotRefs = storeToRefs(snapshotStore);\nconst snapshot = snapshotRefs.snapshot as ShallowRef<Snapshot>;\nconst rootNode = snapshotRefs.rootNode as ShallowRef<RawNode>;\nconst { focusNode } = snapshotRefs;\n\nconst searchText = shallowRef(``);\n\nconst selectorResults = shallowReactive<SearchResult[]>([]);\nconst expandedKeys = shallowRef<number[]>([]);\nconst searchSelector = (text: string) => {\n const selector = errorWrap(\n () => parseSelector(text),\n (e) => {\n if (typeof e == 'string') {\n return e;\n }\n if (e instanceof GkdException) {\n return `非法选择器:` + e.outMessage;\n }\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 if (results.length == 0) {\n message.success(`没有选择到节点`);\n return;\n }\n message.success(`选择到 ${results.length} 个节点`);\n selectorResults.unshift({\n selector,\n nodes: results.map((r) => r.target),\n results,\n key: Date.now(),\n gkd: true,\n });\n return results.length;\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};\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};\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\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 ? getImportUrl(importId) : undefined;\n const exampleUrls = imageId ? getImagUrl(imageId) : undefined;\n\n const s = result.selector;\n const t = result.results.map((v) => v.context.toArray().at(-1)!)[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});\nconst enableSearchBySelector = shallowRef(true);\nconst hasZipId = computed(() => {\n return snapshotImportId[snapshot.value.id];\n});\nconst shareResult = (result: SearchResult) => {\n if (!hasZipId.value) return;\n const importUrl = new URL(getImportUrl(snapshotImportId[snapshot.value.id]));\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<template>\n <DraggableCard\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 v-slot=\"{ onRef }\"\n class=\"box-shadow-dim\"\n :show=\"show\"\n >\n <div bg-white b-1px b-solid b-gray-200 rounded-4px p-8px>\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 flex-1 cursor-move :ref=\"onRef\"></div>\n <NButton @click=\"onUpdateShow(!show)\" text title=\"最小化\">\n <template #icon>\n <SvgIcon name=\"minus\" />\n </template>\n </NButton>\n </div>\n <NInputGroup>\n <NInput\n v-model:value=\"searchText\"\n :placeholder=\"enableSearchBySelector ? `请输入选择器` : `请输入字符`\"\n @keyup.enter=\"searchBySelector\"\n :inputProps=\"{ class: 'gkd_code' }\"\n ></NInput>\n <NButton @click=\"searchBySelector\">\n <template #icon>\n <SvgIcon name=\"search\" />\n </template>\n </NButton>\n </NInputGroup>\n <div p-5px></div>\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 bg=\"#eee\"\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></span>\n </template>\n <template #header-extra>\n <NButtonGroup>\n <NButton\n size=\"small\"\n v-if=\"result.gkd && result.selector.canCopy\"\n @click.stop=\"generateRules(result as SelectorSearchResult)\"\n title=\"复制规则\"\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 @click.stop=\"selectorResults.splice(index, 1)\"\n title=\"删除记录\"\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 @click=\"updateFocusNode(resultNode)\"\n size=\"small\"\n :style=\"getNodeStyle(resultNode, focusNode)\"\n >\n {{ getNodeLabel(resultNode) }}\n </NButton>\n </template>\n <template v-else>\n <NButtonGroup\n v-for=\"(resultNode, index) in result.nodes\"\n :key=\"index\"\n >\n <NButton\n size=\"small\"\n @click=\"\n snapshotStore.showTrack(\n result.selector,\n result.results[index],\n )\n \"\n >\n <NIcon>\n <SvgIcon name=\"path\" />\n </NIcon>\n </NButton>\n <NButton\n @click=\"updateFocusNode(resultNode)\"\n size=\"small\"\n :style=\"getNodeStyle(resultNode, focusNode)\"\n >\n {{ getNodeLabel(resultNode) }}\n </NButton>\n </NButtonGroup>\n </template>\n </div>\n <div un=\"h-10px\"></div>\n </NScrollbar>\n </NCollapseItem>\n </NCollapse>\n </div>\n </DraggableCard>\n</template>\n","import type { SlotsType } from 'vue';\n\nconst emptyArray = [] as [];\nconst GapList = defineComponent<\n { tag?: string; virtual?: boolean },\n {},\n string,\n SlotsType<{\n default: () => VNode[];\n gap: (props: { index: number }) => VNode[];\n }>\n>(\n (props, ctx) => {\n const tag = computed(() => props.tag || 'div');\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 if (props.virtual) return nodes;\n return h(tag.value, props, nodes);\n };\n },\n { props: ['tag', 'virtual'] },\n);\n\nexport default GapList;\n","<script setup lang=\"tsx\">\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} from '@/utils/node';\nimport { copy, delay } from '@/utils/others';\nimport type { RawNode, Snapshot } from '@/utils/types';\nimport type { TreeInst } from 'naive-ui';\nimport type { HTMLAttributes, ShallowRef } from 'vue';\n\nconst router = useRouter();\n\nconst snapshotStore = useSnapshotStore();\nconst { updateFocusNode } = snapshotStore;\nconst snapshotRefs = storeToRefs(snapshotStore);\nconst snapshot = snapshotRefs.snapshot as ShallowRef<Snapshot>;\nconst rootNode = snapshotRefs.rootNode as ShallowRef<RawNode>;\nconst { focusNode, focusTime } = snapshotRefs;\n\nlet lastClickId = Number.NaN;\nconst expandedKeys = shallowRef<number[]>([]);\nconst selectedKeys = shallowRef<number[]>([]);\nwatch([() => focusNode.value, () => focusTime.value], async () => {\n if (!focusNode.value) return;\n const key = focusNode.value.id;\n nextTick().then(async () => {\n await delay(300);\n if (key === focusNode.value?.id) {\n if (lastClickId === key) {\n // 当点击节点树中的节点时, 不滚动\n lastClickId = Number.NaN;\n return;\n }\n // NTree 被 virtualScroll 包裹后, treeRef.value?.scrollTo 无效, 使用 scrollIntoView\n const item = document.querySelector<HTMLElement>(\n `[data-node-id=\"${key}\"]`,\n );\n if (!item) return;\n selectedKeys.value = [key];\n item.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n });\n let parent = focusNode.value.parent;\n if (!parent) {\n return;\n }\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 treeRef = shallowRef<TreeInst>();\n\nconst treeFilter = (pattern: string, node: RawNode) => {\n return node.id === focusNode.value?.id;\n};\nconst treeNodeProps = (info: {\n option: RawNode;\n}): HTMLAttributes & Record<string, unknown> => {\n const style = getNodeStyle(info.option, focusNode.value);\n return {\n onClick: () => {\n lastClickId = info.option.id;\n updateFocusNode(info.option);\n },\n style: {\n '--n-node-text-color': style.color,\n ...style,\n },\n class: 'whitespace-nowrap',\n 'data-node-id': String(info.option.id),\n };\n};\n\nconst renderLabel = (info: {\n option: RawNode;\n checked: boolean;\n selected: boolean;\n}) => {\n return getNodeLabel(info.option);\n};\n\nconst deviceName = computed(() => {\n return `${getDevice(snapshot.value).manufacturer} Android ${getDevice(snapshot.value).release || ``}`;\n});\n\nconst isSystem = computed(() => {\n return getAppInfo(snapshot.value).isSystem;\n});\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});\n\nconst onDelete = async () => {\n message.success(`删除成功,即将回到首页`);\n await delay(2000);\n router.replace({\n path: `/`,\n });\n};\n</script>\n\n<template>\n <div flex flex-col overflow-hidden>\n <div flex items-center px-8px>\n <GapList flex flex-wrap items-center gap-8px gkd_code>\n <template #gap>\n <div w-1px bg-gray h-12px></div>\n </template>\n <NTooltip>\n <template #trigger>\n <div @click=\"copy(deviceName)\">\n {{ deviceName }}\n </div>\n </template>\n 设备名称\n </NTooltip>\n\n <NTooltip>\n <template #trigger>\n <div\n :class=\"{\n 'opacity-50': !getGkdAppInfo(snapshot).versionName,\n }\"\n >\n {{ getGkdAppInfo(snapshot).versionName || '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 @click=\"copy(activityId)\"\n :class=\"{\n 'opacity-50': !activityId,\n }\"\n >\n {{ activityId || 'null' }}\n </div>\n </template>\n 界面ID\n </NTooltip>\n </GapList>\n <div flex-1></div>\n <ActionCard\n class=\"ml-8px\"\n :snapshot=\"snapshot\"\n @delete=\"onDelete\"\n :showPreview=\"false\"\n />\n </div>\n <div h-1px mt-4px bg=\"#efeff5\"></div>\n\n <NScrollbar xScrollable class=\"flex-1\">\n <NTree\n class=\"mb-24px mr-24px\"\n ref=\"treeRef\"\n virtualScroll\n showLine\n blockLine\n keyField=\"id\"\n v-model:expandedKeys=\"expandedKeys\"\n v-model:selectedKeys=\"selectedKeys\"\n :data=\"[rootNode as any]\"\n :filter=\"(treeFilter as any)\"\n :nodeProps=\"(treeNodeProps as any)\"\n :renderLabel=\"(renderLabel as any)\"\n />\n </NScrollbar>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport TrackModal from '@/components/TrackModal.vue';\nimport { loadingBar, message } 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 WindowCard from './WindowCard.vue';\n\nconst snapshotStore = useSnapshotStore();\nconst snapshotRefs = storeToRefs(snapshotStore);\nconst { snapshot, rootNode, loading, redirected, trackData, trackShow } =\n snapshotRefs;\n\nwatchEffect(() => {\n if (loading.value) {\n loadingBar.start();\n } else {\n loadingBar.finish();\n }\n});\n\nconst searchShow = useStorage('searchShow', true, sessionStorage);\nconst ruleShow = useStorage('ruleShow', false, sessionStorage);\nconst attrShow = useStorage('attrShow', true, sessionStorage);\n\nconst clickSettings = () => {\n message.info('暂未实现');\n};\n</script>\n<template>\n <template v-if=\"snapshot && rootNode\">\n <div h-full flex gap-5px>\n <div\n w-40px\n py-12px\n flex\n flex-col\n items-center\n gap-16px\n class=\"[--svg-h:24px]\"\n >\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton text>\n <RouterLink to=\"/\">\n <SvgIcon name=\"home\" />\n </RouterLink>\n </NButton>\n </template>\n 回到首页\n </NTooltip>\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton @click=\"clickSettings\" text>\n <SvgIcon name=\"settings\" />\n </NButton>\n </template>\n 设置\n </NTooltip>\n <div></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 <NTooltip placement=\"right\">\n <template #trigger>\n <NButton @click=\"attrShow = !attrShow\" text>\n <SvgIcon name=\"prop\" />\n </NButton>\n </template>\n 属性面板\n </NTooltip>\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton @click=\"ruleShow = !ruleShow\" text>\n <SvgIcon name=\"test\" />\n </NButton>\n </template>\n 测试规则\n </NTooltip>\n <div></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>\n <SvgIcon name=\"discussion\" />\n </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>\n <SvgIcon name=\"warn\" />\n </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\n <TrackModal\n :show=\"trackShow\"\n @updateShow=\"trackShow = $event\"\n :data=\"trackData\"\n @updateData=\"trackData = $event\"\n />\n </template>\n <div v-else-if=\"!loading && !redirected\" flex justify-center pt-80px>\n <div>快照数据缺失</div>\n </div>\n</template>\n"],"file":"assets/SnapshotPage-Bbg8XVjn.js"}
|
|
1
|
+
{"version":3,"mappings":"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","names":["createDataKey","key","ChevronLeftIcon","defineComponent","h","SwitcherIcon","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","self","vars","fontWeight","textColor1","textColor2","textColorDisabled","dividerColor","fontSize","collapseLight","commonLight","style$2","fadeInHeightExpandTransition","collapseProps","useTheme","collapseInjectionKey","createInjectionKey","__unplugin_components_10","slots","inlineThemeDisabled","uncontrolledExpandedNamesRef","ref","controlledExpandedNamesRef","computed","mergedExpandedNamesRef","useMergedState","themeRef","doUpdateExpandedNames","names","_onUpdateExpandedNames","onUpdateExpandedNames","onExpandedNamesChange","call","doItemHeaderClick","info","onItemHeaderClick","toggleItem","collapse","name","event","accordion","expandedNames","activeNames","index","activeName","rtlEnabledRef","cssVarsRef","cubicBezierEaseInOut","titleFontWeight","titlePadding","titleTextColor","titleTextColorDisabled","textColor","arrowColor","titleFontSize","arrowColorDisabled","itemMargin","themeClassHandle","useThemeClass","_a","NCollapseItemContent","useFalseUntilTruthy","toRef","NFadeInExpandTransition","show","displayDirective","onceTrue","clsPrefix","useVShow","contentNode","withDirectives","vShow","collapseItemProps","__unplugin_components_9","randomName","createId","mergedNameRef","useMemo","NCollapse","inject","throwError","expandedNamesRef","collapseSlots","collapsedRef","expandedName","e","happensInArea","happensIn","$slots","arrowPlacement","collapsed","mergedDisplayDirective","disabled","triggerAreas","headerNode","resolveSlotWithTypedProps","headerExtraSlot","arrowSlot","area","NBaseIcon","ArrowLeftIcon","ArrowRightIcon","resolveWrappedSlotWithProps","children","sizeVariables","cardColor","modalColor","popoverColor","tableHeaderColor","tableColorStriped","borderRadius","fontWeightStrong","lineHeight","fontSizeSmall","fontSizeMedium","fontSizeLarge","composite","tableLight","borderRadiusSmall","hoverColor","pressedColor","primaryColor","textColor3","changeColor","treeLight","createTheme","checkboxLight","scrollbarLight","emptyLight","scrollbarProps","Scrollbar","scrollbarInstRef","args","NScrollbar","style$1","insideModal","insidePopover","tableProps","__unplugin_components_7","size","borderColor","tdColor","tdColorModal","tdColorPopover","thColor","thColorModal","thColorPopover","thTextColor","tdTextColor","thFontWeight","borderColorModal","borderColorPopover","tdColorStriped","tdColorStripedModal","tdColorStripedPopover","createKey","tdPadding","thPadding","__unplugin_components_6","__unplugin_components_3","__unplugin_components_5","treeSelectInjectionKey","renderDropMark","position","offsetLevel","indent","el","cssPosition","defaultAllowDrop","dropPosition","node","treeInjectionKey","useKeyboard","fNodesRef","mergedExpandedKeysRef","mergedSelectedKeysRef","mergedCheckedKeysRef","handleCheck","handleSelect","handleSwitcherClick","mergedSelectedKeys","treeSelectInjection","pendingNodeKeyRef","handleKeydown","pendingNodeKey","enterBehavior","fNodes","fIndex","tmNode","pendingNode","parentTmNode","NTreeNodeCheckbox","NTree","doCheck","value","onCheck","handleUpdateValue","mergedTheme","checked","indeterminate","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","expanded","hide","NIconSwitchTransition","NBaseLoading","renderSwitcherIcon","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","build","sibs","isVisitedTail","isVisitedNonTail","clonedNode","TreeNode","droppingNodeParentRef","droppingMouseNodeRef","draggingNodeRef","droppingPositionRef","droppingOffsetLevelRef","nodePropsRef","indentRef","blockLineRef","checkboxPlacementRef","checkOnClickRef","disabledFieldRef","showLineRef","overrideDefaultNodeClickBehaviorRef","checkboxDisabledRef","nodeIsDisabledRef","disabledRef","resolvedNodePropsRef","contentInstRef","contentElRef","onMounted","onLoad","selectableRef","checkableRef","checkedRef","mergedCheckOnClickRef","checkable","checkOnClick","_handleClick","expandOnClick","selectable","mergedCheckOnClick","handleNodeClick","_b","overrideDefaultNodeClickBehavior","shouldOverride","handleContentClick","handleLineClick","handleDragStart","handleDragEnter","handleDragOver","handleDragEnd","handleDragLeave","handleDrop","indentNodes","cursor","repeat","draggingNode","droppingPosition","droppingMouseNode","droppingNodeParent","highlight","draggable","blockLine","pending","internalScrollable","checkboxPlacement","dragEventHandlers","dataKey","checkboxOnRight","checkboxNode","MotionWrapper","FadeInExpandTransition","pxfy","iconSwitchTransitionNode","iconSwitchTransition","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","reject","fulfilled","step","rejected","result","createTreeMateOptions","getChildren","treeSharedProps","treeProps","__unplugin_components_1","selfElRef","virtualListInstRef","getScrollContainer","getScrollContent","mergedFilterRef","filteredTreeInfoRef","displayTreeMateRef","createTreeMate","dataTreeMateRef","watchProps","uncontrolledCheckedKeysRef","watchEffect","controlledCheckedKeysRef","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","doUpdateCheckedKeys","_onUpdateCheckedKeys","onUpdateCheckedKeys","doUpdateIndeterminateKeys","_onUpdateIndeterminateKeys","onUpdateIndeterminateKeys","doUpdateSelectedKeys","_onUpdateSelectedKeys","onUpdateSelectedKeys","doDragEnter","onDragenter","doDragLeave","onDragleave","doDragEnd","onDragend","doDragStart","doDragOver","onDragover","doDrop","onDrop","resetDragState","resetDropState","checkedAction","checkedKeys","toggleExpand","mergedExpandedKeys","expandNodeId","nodeToBeExpanded","nextKeys","siblingKeySet","selectedKeys","expandDragEnterNode","expand","handleDragLeaveTree","emit","allowDrop","elOffsetHeight","elClientTop","eventOffsetY","mousePosition","getFindex","finalDropNode","finalDropPosition","hoverNodeFIndex","mouseAtExpandedNonLeafNode","offset","nextNode","prevNode","handleScroll","handleResize","handleFocusout","selfEl","targetEl","scrollTo","options","y","exposedMethods","nodeBorderRadius","nodeColorHover","nodeColorPressed","nodeColorActive","loadingColor","nodeTextColor","nodeTextColorDisabled","dropMarkColor","nodeWrapperPadding","lineColor","lineOffsetTop","getPadding","lineOffsetBottom","nodeContentHeight","internalRenderEmpty","blockNode","internalFocusable","rtlEnabled","mergedFocusable","tabindex","treeClass","createNode","NTreeNode","internalScrollablePadding","padding","NxScrollbar","VVirtualList","item","resolveSlot","NEmpty","TrackGraphLoader","__vitePreload","TrackGraph","defineAsyncComponent","__props","allUnitResults","singleUnitResults","v","showUnitResults","filterUnitResults","shallowRef","switchUnitResult","unitResult","getNodeStyle","UnitSelectorExpression","u","innerShow","showStatus","watchImmediate","r","useEventListener","useDragMove","xFilter","target","prevOffset","shallowReactive","prevEv","preventSelection","ev","startMove","move","dx","dy","endMove","windowEndMove","top","bottom","left","right","onUnmounted","newValue","currentMaxZIndex","useZindex","zIndex","transition","isLeft","isTop","leftDragBar","w","rightDragBar","currentStyle","width","widthStyle","yStyle","moved","box","boxDiv","updateTarget","arg","setTop","getRemoteImportId","id","useSnapshotStore","defineStore","route","useRoute","router","useRouter","settingsStore","useSettingsStore","storageStore","useStorageStore","snapshotImportId","snapshotImageId","importSnapshotId","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","storeToRefs","attrTip","lenAttrNames","attrs","attr","_c","selectText","getNodeSelectorText","snapshotStore","windowSize","useWindowSize","vw","gkdWidth","snapshotRefs","text","lazyText","refDebounced","toArray","s","checkRule","obj","matches","anyMatches","excludeMatches","resolvedMatches","parseSelector","message","matchesResult","notIndex","resolvedAnyMatches","anyMatchesResult","resolvedExcludeMatches","excludeMatchesResult","isObj","dataRef","JSON5","group","rules","rule","errorText","targetNode","imgBounding","useElementBounding","imgRef","imgLoadTime","clickImg","img","imgRect","innerHeight","offsetTop","x","percent","imgSize","useElementSize","positionStyle","imgWidth","imgHeight","imgHover","hoverPosition","boxHoverPosition","ox","oy","boxHoverPerPosition","toFixedNumber","hoverPositionStyle","imgMove","searchText","selectorResults","searchSelector","errorWrap","GkdException","results","searchString","stack","getNodeLabel","refreshExpandedKeys","newResult","newNode","allKeys","newKeys","k","searchBySelector","errorTry","enableSearchBySelector","wasmLoadTask","count","base64url.decode","generateRules","snapshotUrls","getImportUrl","exampleUrls","getImagUrl","fastQuery","FastQuery","dayjs","copy","hasZipId","shareResult","importUrl","base64url.encode","emptyArray","GapList","ctx","tag","defaultNodes","gapNodes","_d","lastClickId","Number","NaN","then","delay","document","querySelector","scrollIntoView","behavior","block","parent","Set","add","length","every","has","treeRef","treeFilter","treeNodeProps","color","class","String","deviceName","getDevice","manufacturer","release","isSystem","activityId","appId","startsWith","substring","onDelete","success","replace","loadingBar","searchShow","useStorage","ruleShow","attrShow","clickSettings"],"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,25,26,27,28,29,30],"sources":["../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/_utils/vue/create-data-key.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/_internal/icons/ChevronLeft.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/_internal/icons/Switcher.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/button-group/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/button-group/src/ButtonGroup.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/collapse/styles/light.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/collapse/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/collapse/src/Collapse.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/collapse/src/CollapseItemContent.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/collapse/src/CollapseItem.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/styles/_common.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/styles/light.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/styles/light.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/scrollbar/src/Scrollbar.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/src/Table.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/src/Tbody.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/src/Td.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/table/src/Tr.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree-select/src/interface.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/dnd.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/interface.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/keyboard.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/TreeNodeCheckbox.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/TreeNodeContent.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/TreeNodeSwitcher.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/utils.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/TreeNode.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/MotionWrapper.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.41.0_vue@3.5.13_typescript@5.7.3_/node_modules/naive-ui/es/tree/src/Tree.mjs","../../src/components/TrackCard.vue","../../src/components/TrackModal.vue","../../src/utils/draggable.ts","../../src/components/DraggableCard.vue","../../src/store/snapshot.ts","../../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: 'ChevronLeft',\n render() {\n return h(\"svg\", {\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, h(\"path\", {\n d: \"M10.3536 3.14645C10.5488 3.34171 10.5488 3.65829 10.3536 3.85355L6.20711 8L10.3536 12.1464C10.5488 12.3417 10.5488 12.6583 10.3536 12.8536C10.1583 13.0488 9.84171 13.0488 9.64645 12.8536L5.14645 8.35355C4.95118 8.15829 4.95118 7.84171 5.14645 7.64645L9.64645 3.14645C9.84171 2.95118 10.1583 2.95118 10.3536 3.14645Z\",\n fill: \"currentColor\"\n }));\n }\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 { commonLight } from \"../../_styles/common/index.mjs\";\nexport function self(vars) {\n const {\n fontWeight,\n textColor1,\n textColor2,\n textColorDisabled,\n dividerColor,\n fontSize\n } = vars;\n return {\n titleFontSize: fontSize,\n titleFontWeight: fontWeight,\n dividerColor,\n titleTextColor: textColor1,\n titleTextColorDisabled: textColorDisabled,\n fontSize,\n textColor: textColor2,\n arrowColor: textColor2,\n arrowColorDisabled: textColorDisabled,\n itemMargin: '16px 0 0 0',\n titlePadding: '16px 0 0 0'\n };\n}\nconst collapseLight = {\n name: 'Collapse',\n common: commonLight,\n self\n};\nexport default collapseLight;","import { fadeInHeightExpandTransition } from \"../../../_styles/transitions/fade-in-height-expand.cssr.mjs\";\nimport { c, cB, cE, cM, cNotM } from \"../../../_utils/cssr/index.mjs\";\n// vars:\n// --n-font-size\n// --n-bezier\n// --n-text-color\n// --n-divider-color\n// --n-title-padding\n// --n-title-font-size\n// --n-title-text-color\n// --n-title-font-weight\n// --n-arrow-color\n// --n-arrow-color-disabled\n// --n-title-text-color-disabled\n// --n-item-margin\nexport default cB('collapse', 'width: 100%;', [cB('collapse-item', `\n font-size: var(--n-font-size);\n color: var(--n-text-color);\n transition:\n color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n margin: var(--n-item-margin);\n `, [cM('disabled', [cE('header', 'cursor: not-allowed;', [cE('header-main', `\n color: var(--n-title-text-color-disabled);\n `), cB('collapse-item-arrow', `\n color: var(--n-arrow-color-disabled);\n `)])]), cB('collapse-item', 'margin-left: 32px;'), c('&:first-child', 'margin-top: 0;'), c('&:first-child >', [cE('header', 'padding-top: 0;')]), cM('left-arrow-placement', [cE('header', [cB('collapse-item-arrow', 'margin-right: 4px;')])]), cM('right-arrow-placement', [cE('header', [cB('collapse-item-arrow', 'margin-left: 4px;')])]), cE('content-wrapper', [cE('content-inner', 'padding-top: 16px;'), fadeInHeightExpandTransition({\n duration: '0.15s'\n})]), cM('active', [cE('header', [cM('active', [cB('collapse-item-arrow', 'transform: rotate(90deg);')])])]), c('&:not(:first-child)', 'border-top: 1px solid var(--n-divider-color);'), cNotM('disabled', [cM('trigger-area-main', [cE('header', [cE('header-main', 'cursor: pointer;'), cB('collapse-item-arrow', 'cursor: default;')])]), cM('trigger-area-arrow', [cE('header', [cB('collapse-item-arrow', 'cursor: pointer;')])]), cM('trigger-area-extra', [cE('header', [cE('header-extra', 'cursor: pointer;')])])]), cE('header', `\n font-size: var(--n-title-font-size);\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n transition: color .3s var(--n-bezier);\n position: relative;\n padding: var(--n-title-padding);\n color: var(--n-title-text-color);\n `, [cE('header-main', `\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n font-weight: var(--n-title-font-weight);\n transition: color .3s var(--n-bezier);\n flex: 1;\n color: var(--n-title-text-color);\n `), cE('header-extra', `\n display: flex;\n align-items: center;\n transition: color .3s var(--n-bezier);\n color: var(--n-text-color);\n `), cB('collapse-item-arrow', `\n display: flex;\n transition:\n transform .15s var(--n-bezier),\n color .3s var(--n-bezier);\n font-size: 18px;\n color: var(--n-arrow-color);\n `)])])]);","import { useMergedState } from 'vooks';\nimport { computed, defineComponent, h, provide, ref } from 'vue';\nimport { useConfig, useTheme, useThemeClass } from \"../../_mixins/index.mjs\";\nimport { useRtl } from \"../../_mixins/use-rtl.mjs\";\nimport { call, createInjectionKey, warn } from \"../../_utils/index.mjs\";\nimport { collapseLight } from \"../styles/index.mjs\";\nimport style from \"./styles/index.cssr.mjs\";\nexport const collapseProps = Object.assign(Object.assign({}, useTheme.props), {\n defaultExpandedNames: {\n type: [Array, String],\n default: null\n },\n expandedNames: [Array, String],\n arrowPlacement: {\n type: String,\n default: 'left'\n },\n accordion: {\n type: Boolean,\n default: false\n },\n displayDirective: {\n type: String,\n default: 'if'\n },\n triggerAreas: {\n type: Array,\n default: () => ['main', 'extra', 'arrow']\n },\n onItemHeaderClick: [Function, Array],\n 'onUpdate:expandedNames': [Function, Array],\n onUpdateExpandedNames: [Function, Array],\n // deprecated\n onExpandedNamesChange: {\n type: [Function, Array],\n validator: () => {\n if (process.env.NODE_ENV !== 'production') {\n warn('collapse', '`on-expanded-names-change` is deprecated, please use `on-update:expanded-names` instead.');\n }\n return true;\n },\n default: undefined\n }\n});\nexport const collapseInjectionKey = createInjectionKey('n-collapse');\nexport default defineComponent({\n name: 'Collapse',\n props: collapseProps,\n slots: Object,\n setup(props, {\n slots\n }) {\n const {\n mergedClsPrefixRef,\n inlineThemeDisabled,\n mergedRtlRef\n } = useConfig(props);\n const uncontrolledExpandedNamesRef = ref(props.defaultExpandedNames);\n const controlledExpandedNamesRef = computed(() => props.expandedNames);\n const mergedExpandedNamesRef = useMergedState(controlledExpandedNamesRef, uncontrolledExpandedNamesRef);\n const themeRef = useTheme('Collapse', '-collapse', style, collapseLight, props, mergedClsPrefixRef);\n function doUpdateExpandedNames(names) {\n const {\n 'onUpdate:expandedNames': _onUpdateExpandedNames,\n onUpdateExpandedNames,\n onExpandedNamesChange\n } = props;\n if (onUpdateExpandedNames) {\n call(onUpdateExpandedNames, names);\n }\n if (_onUpdateExpandedNames) {\n call(_onUpdateExpandedNames, names);\n }\n if (onExpandedNamesChange) {\n call(onExpandedNamesChange, names);\n }\n uncontrolledExpandedNamesRef.value = names;\n }\n function doItemHeaderClick(info) {\n const {\n onItemHeaderClick\n } = props;\n if (onItemHeaderClick) {\n call(onItemHeaderClick, info);\n }\n }\n function toggleItem(collapse, name, event) {\n const {\n accordion\n } = props;\n const {\n value: expandedNames\n } = mergedExpandedNamesRef;\n if (accordion) {\n if (collapse) {\n doUpdateExpandedNames([name]);\n doItemHeaderClick({\n name,\n expanded: true,\n event\n });\n } else {\n doUpdateExpandedNames([]);\n doItemHeaderClick({\n name,\n expanded: false,\n event\n });\n }\n } else {\n if (!Array.isArray(expandedNames)) {\n doUpdateExpandedNames([name]);\n doItemHeaderClick({\n name,\n expanded: true,\n event\n });\n } else {\n const activeNames = expandedNames.slice();\n const index = activeNames.findIndex(activeName => name === activeName);\n if (~index) {\n activeNames.splice(index, 1);\n doUpdateExpandedNames(activeNames);\n doItemHeaderClick({\n name,\n expanded: false,\n event\n });\n } else {\n activeNames.push(name);\n doUpdateExpandedNames(activeNames);\n doItemHeaderClick({\n name,\n expanded: true,\n event\n });\n }\n }\n }\n }\n provide(collapseInjectionKey, {\n props,\n mergedClsPrefixRef,\n expandedNamesRef: mergedExpandedNamesRef,\n slots,\n toggleItem\n });\n const rtlEnabledRef = useRtl('Collapse', mergedRtlRef, mergedClsPrefixRef);\n const cssVarsRef = computed(() => {\n const {\n common: {\n cubicBezierEaseInOut\n },\n self: {\n titleFontWeight,\n dividerColor,\n titlePadding,\n titleTextColor,\n titleTextColorDisabled,\n textColor,\n arrowColor,\n fontSize,\n titleFontSize,\n arrowColorDisabled,\n itemMargin\n }\n } = themeRef.value;\n return {\n '--n-font-size': fontSize,\n '--n-bezier': cubicBezierEaseInOut,\n '--n-text-color': textColor,\n '--n-divider-color': dividerColor,\n '--n-title-padding': titlePadding,\n '--n-title-font-size': titleFontSize,\n '--n-title-text-color': titleTextColor,\n '--n-title-text-color-disabled': titleTextColorDisabled,\n '--n-title-font-weight': titleFontWeight,\n '--n-arrow-color': arrowColor,\n '--n-arrow-color-disabled': arrowColorDisabled,\n '--n-item-margin': itemMargin\n };\n });\n const themeClassHandle = inlineThemeDisabled ? useThemeClass('collapse', undefined, cssVarsRef, props) : undefined;\n return {\n rtlEnabled: rtlEnabledRef,\n mergedTheme: themeRef,\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 (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this);\n return h(\"div\", {\n class: [`${this.mergedClsPrefix}-collapse`, this.rtlEnabled && `${this.mergedClsPrefix}-collapse--rtl`, this.themeClass],\n style: this.cssVars\n }, this.$slots);\n }\n});","import { useFalseUntilTruthy } from 'vooks';\nimport { defineComponent, h, toRef, vShow, withDirectives } from 'vue';\nimport { NFadeInExpandTransition } from \"../../_internal/index.mjs\";\nexport default defineComponent({\n name: 'CollapseItemContent',\n props: {\n displayDirective: {\n type: String,\n required: true\n },\n show: Boolean,\n clsPrefix: {\n type: String,\n required: true\n }\n },\n setup(props) {\n const onceTrueRef = useFalseUntilTruthy(toRef(props, 'show'));\n return {\n onceTrue: onceTrueRef\n };\n },\n render() {\n return h(NFadeInExpandTransition, null, {\n default: () => {\n const {\n show,\n displayDirective,\n onceTrue,\n clsPrefix\n } = this;\n const useVShow = displayDirective === 'show' && onceTrue;\n const contentNode = h(\"div\", {\n class: `${clsPrefix}-collapse-item__content-wrapper`\n }, h(\"div\", {\n class: `${clsPrefix}-collapse-item__content-inner`\n }, this.$slots));\n return useVShow ? withDirectives(contentNode, [[vShow, show]]) : show ? contentNode : null;\n }\n });\n }\n});","import { createId, happensIn } from 'seemly';\nimport { useMemo } from 'vooks';\nimport { computed, defineComponent, h, inject, toRef } from 'vue';\nimport { NBaseIcon } from \"../../_internal/index.mjs\";\nimport { ChevronLeftIcon as ArrowLeftIcon, ChevronRightIcon as ArrowRightIcon } from \"../../_internal/icons/index.mjs\";\nimport { useConfig } from \"../../_mixins/index.mjs\";\nimport { useRtl } from \"../../_mixins/use-rtl.mjs\";\nimport { resolveSlotWithTypedProps, resolveWrappedSlotWithProps, throwError } from \"../../_utils/index.mjs\";\nimport { collapseInjectionKey } from \"./Collapse.mjs\";\nimport NCollapseItemContent from \"./CollapseItemContent.mjs\";\nexport const collapseItemProps = {\n title: String,\n name: [String, Number],\n disabled: Boolean,\n displayDirective: String\n};\nexport default defineComponent({\n name: 'CollapseItem',\n props: collapseItemProps,\n setup(props) {\n const {\n mergedRtlRef\n } = useConfig(props);\n const randomName = createId();\n const mergedNameRef = useMemo(() => {\n var _a;\n return (_a = props.name) !== null && _a !== void 0 ? _a : randomName;\n });\n const NCollapse = inject(collapseInjectionKey);\n if (!NCollapse) {\n throwError('collapse-item', '`n-collapse-item` must be placed inside `n-collapse`.');\n }\n const {\n expandedNamesRef,\n props: collapseProps,\n mergedClsPrefixRef,\n slots: collapseSlots\n } = NCollapse;\n const collapsedRef = computed(() => {\n const {\n value: expandedNames\n } = expandedNamesRef;\n if (Array.isArray(expandedNames)) {\n const {\n value: name\n } = mergedNameRef;\n return !~expandedNames.findIndex(expandedName => expandedName === name);\n } else if (expandedNames) {\n const {\n value: name\n } = mergedNameRef;\n return name !== expandedNames;\n }\n return true;\n });\n const rtlEnabledRef = useRtl('Collapse', mergedRtlRef, mergedClsPrefixRef);\n return {\n rtlEnabled: rtlEnabledRef,\n collapseSlots,\n randomName,\n mergedClsPrefix: mergedClsPrefixRef,\n collapsed: collapsedRef,\n triggerAreas: toRef(collapseProps, 'triggerAreas'),\n mergedDisplayDirective: computed(() => {\n const {\n displayDirective\n } = props;\n if (displayDirective) {\n return displayDirective;\n } else {\n return collapseProps.displayDirective;\n }\n }),\n arrowPlacement: computed(() => {\n return collapseProps.arrowPlacement;\n }),\n handleClick(e) {\n let happensInArea = 'main';\n if (happensIn(e, 'arrow')) happensInArea = 'arrow';\n if (happensIn(e, 'extra')) happensInArea = 'extra';\n if (!collapseProps.triggerAreas.includes(happensInArea)) {\n return;\n }\n if (NCollapse && !props.disabled) {\n NCollapse.toggleItem(collapsedRef.value, mergedNameRef.value, e);\n }\n }\n };\n },\n render() {\n const {\n collapseSlots,\n $slots,\n arrowPlacement,\n collapsed,\n mergedDisplayDirective,\n mergedClsPrefix,\n disabled,\n triggerAreas\n } = this;\n const headerNode = resolveSlotWithTypedProps($slots.header, {\n collapsed\n }, () => [this.title]);\n const headerExtraSlot = $slots['header-extra'] || collapseSlots['header-extra'];\n const arrowSlot = $slots.arrow || collapseSlots.arrow;\n return h(\"div\", {\n class: [`${mergedClsPrefix}-collapse-item`, `${mergedClsPrefix}-collapse-item--${arrowPlacement}-arrow-placement`, disabled && `${mergedClsPrefix}-collapse-item--disabled`, !collapsed && `${mergedClsPrefix}-collapse-item--active`, triggerAreas.map(area => {\n return `${mergedClsPrefix}-collapse-item--trigger-area-${area}`;\n })]\n }, h(\"div\", {\n class: [`${mergedClsPrefix}-collapse-item__header`, !collapsed && `${mergedClsPrefix}-collapse-item__header--active`]\n }, h(\"div\", {\n class: `${mergedClsPrefix}-collapse-item__header-main`,\n onClick: this.handleClick\n }, arrowPlacement === 'right' && headerNode, h(\"div\", {\n class: `${mergedClsPrefix}-collapse-item-arrow`,\n key: this.rtlEnabled ? 0 : 1,\n \"data-arrow\": true\n }, resolveSlotWithTypedProps(arrowSlot, {\n collapsed\n }, () => [h(NBaseIcon, {\n clsPrefix: mergedClsPrefix\n }, {\n default: () => this.rtlEnabled ? h(ArrowLeftIcon, null) : h(ArrowRightIcon, null)\n })])), arrowPlacement === 'left' && headerNode), resolveWrappedSlotWithProps(headerExtraSlot, {\n collapsed\n }, children => h(\"div\", {\n class: `${mergedClsPrefix}-collapse-item__header-extra`,\n onClick: this.handleClick,\n \"data-extra\": true\n }, children))), h(NCollapseItemContent, {\n clsPrefix: mergedClsPrefix,\n displayDirective: mergedDisplayDirective,\n show: !collapsed\n }, $slots));\n }\n});","export default {\n thPaddingSmall: '6px',\n thPaddingMedium: '12px',\n thPaddingLarge: '12px',\n tdPaddingSmall: '6px',\n tdPaddingMedium: '12px',\n tdPaddingLarge: '12px'\n};","import { composite } from 'seemly';\nimport { commonLight } from \"../../_styles/common/index.mjs\";\nimport sizeVariables from \"./_common.mjs\";\nexport function self(vars) {\n const {\n dividerColor,\n cardColor,\n modalColor,\n popoverColor,\n tableHeaderColor,\n tableColorStriped,\n textColor1,\n textColor2,\n borderRadius,\n fontWeightStrong,\n lineHeight,\n fontSizeSmall,\n fontSizeMedium,\n fontSizeLarge\n } = vars;\n return Object.assign(Object.assign({}, sizeVariables), {\n fontSizeSmall,\n fontSizeMedium,\n fontSizeLarge,\n lineHeight,\n borderRadius,\n borderColor: composite(cardColor, dividerColor),\n borderColorModal: composite(modalColor, dividerColor),\n borderColorPopover: composite(popoverColor, dividerColor),\n tdColor: cardColor,\n tdColorModal: modalColor,\n tdColorPopover: popoverColor,\n tdColorStriped: composite(cardColor, tableColorStriped),\n tdColorStripedModal: composite(modalColor, tableColorStriped),\n tdColorStripedPopover: composite(popoverColor, tableColorStriped),\n thColor: composite(cardColor, tableHeaderColor),\n thColorModal: composite(modalColor, tableHeaderColor),\n thColorPopover: composite(popoverColor, tableHeaderColor),\n thTextColor: textColor1,\n tdTextColor: textColor2,\n thFontWeight: fontWeightStrong\n });\n}\nconst tableLight = {\n name: 'Table',\n common: commonLight,\n self\n};\nexport default tableLight;","import { changeColor } from 'seemly';\nimport { scrollbarLight } from \"../../_internal/scrollbar/styles/index.mjs\";\nimport { createTheme } from \"../../_mixins/use-theme.mjs\";\nimport { commonLight } from \"../../_styles/common/index.mjs\";\nimport { checkboxLight } from \"../../checkbox/styles/index.mjs\";\nimport { emptyLight } from \"../../empty/styles/index.mjs\";\nexport function self(vars) {\n const {\n borderRadiusSmall,\n dividerColor,\n hoverColor,\n pressedColor,\n primaryColor,\n textColor3,\n textColor2,\n textColorDisabled,\n fontSize\n } = vars;\n return {\n fontSize,\n lineHeight: '1.5',\n nodeHeight: '30px',\n nodeWrapperPadding: '3px 0',\n nodeBorderRadius: borderRadiusSmall,\n nodeColorHover: hoverColor,\n nodeColorPressed: pressedColor,\n nodeColorActive: changeColor(primaryColor, {\n alpha: 0.1\n }),\n arrowColor: textColor3,\n nodeTextColor: textColor2,\n nodeTextColorDisabled: textColorDisabled,\n loadingColor: primaryColor,\n dropMarkColor: primaryColor,\n lineColor: dividerColor\n };\n}\nconst treeLight = createTheme({\n name: 'Tree',\n common: commonLight,\n peers: {\n Checkbox: checkboxLight,\n Scrollbar: scrollbarLight,\n Empty: emptyLight\n },\n self\n});\nexport default treeLight;","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 transform: translate3d(0,0,0);\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 `)])]), 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 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 indent: {\n type: Number,\n default: 24\n },\n allowDrop: {\n type: Function,\n default: defaultAllowDrop\n },\n animated: {\n type: Boolean,\n default: true\n },\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 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`];\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 TrackGraphLoader = () => import('@/components/TrackGraph.vue');\nconst TrackGraph = defineAsyncComponent({\n loader: TrackGraphLoader,\n delay: 0,\n});\nsetTimeout(TrackGraphLoader, 3000);\n</script>\n<script setup lang=\"ts\">\nimport SelectorText from '@/components/SelectorText.vue';\nimport { buildEmptyFn, colorList } from '@/utils/others';\nimport { type ResolvedSelector } from '@/utils/selector';\nimport type { RawNode } from '@/utils/types';\nimport type { AstNode, QueryResult } from '@gkd-kit/selector';\nimport { UnitSelectorExpression } from '@gkd-kit/selector';\nimport type { StyleValue } from 'vue';\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 props.queryResult.unitResults.asJsReadonlyArrayView().concat();\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});\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 #00F',\n };\n }\n return '';\n};\n</script>\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>\n <div flex items-center gap-4px>\n <SvgIcon name=\"path\" h=\"24px\" />\n <div text=\"20px/28px\" font-bold>选择器路径视图</div>\n </div>\n <NButton text @click=\"onClose\">\n <SvgIcon name=\"close\" h=\"20px\" />\n </NButton>\n </div>\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 />\n <div relative pointer-events-none z-1>\n <div absolute left-8px bottom-8px text=\"14px/14px #6C6E71\">\n *为简化视图已隐藏无关节点\n </div>\n </div>\n </div>\n <NScrollbar class=\"self-stretch flex-1 text-20px leading-28px gkd_code\">\n <div mb-24px break-all px-4px py-2px bg=\"#eee\">\n <SelectorText\n :source=\"selector.source\"\n :node=\"selector.ast\"\n :getNodeStyle=\"getNodeStyle\"\n />\n </div>\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 b=\"#ccc\"\n >\n <SelectorText\n :source=\"selector.source\"\n :node=\"selector.findAst(unitResult.expression)\"\n />\n </div>\n </div>\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 @click=\"switchUnitResult(unitResult)\"\n :style=\"{\n borderColor: colorList[i % colorList.length],\n backgroundColor: filterUnitResults.includes(unitResult)\n ? '#eee'\n : undefined,\n }\"\n >\n <div\n inline-block\n align-middle\n size-20px\n :style=\"{\n backgroundColor: colorList[i % colorList.length],\n }\"\n ></div>\n <span pl-4px></span>\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","<script setup lang=\"ts\">\nimport type { TrackCardProps } from '@/utils/types';\nimport TrackCard from './TrackCard.vue';\nimport { buildEmptyFn } from '@/utils/others';\n\nconst props = withDefaults(\n defineProps<{\n data?: TrackCardProps;\n show?: boolean;\n onUpdateShow?: (show: boolean) => void;\n onUpdateData?: (data?: TrackCardProps) => void;\n }>(),\n {\n onUpdateShow: buildEmptyFn,\n onUpdateData: buildEmptyFn,\n },\n);\n\ntype ShowStatus = -1 | 0 | 1;\n\nconst innerShow = ref(false);\nconst showStatus = ref<ShowStatus>(0);\nwatchImmediate(\n () => props.show,\n async () => {\n if (props.show) {\n innerShow.value = true;\n showStatus.value = -1;\n await new Promise((r) => setTimeout(r, 300));\n showStatus.value = 0;\n } else {\n showStatus.value = 1;\n await new Promise((r) => setTimeout(r, 300));\n innerShow.value = false;\n showStatus.value = 0;\n props.onUpdateData();\n }\n },\n);\n\nuseEventListener('keyup', (e) => {\n if (e.key === 'Escape') {\n props.onUpdateShow(false);\n }\n});\n</script>\n<template>\n <div\n v-if=\"innerShow\"\n class=\"TrackModal\"\n absolute\n left-0\n top-0\n bg-white\n z-3000\n w=\"[--gkd-w]\"\n h=\"[--gkd-h]\"\n :class=\"{\n 'track-model-enter': showStatus === -1,\n 'track-model-exit': showStatus === 1,\n }\"\n >\n <TrackCard v-if=\"data\" v-bind=\"data\" @close=\"onUpdateShow(false)\" />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.track-model-enter {\n animation: enter-keyframes 300ms;\n}\n@keyframes enter-keyframes {\n 0% {\n opacity: 0.5;\n transform: translateY(15%);\n }\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.track-model-exit {\n animation: exit-keyframes 300ms forwards;\n}\n@keyframes exit-keyframes {\n 0% {\n opacity: 1;\n transform: translateY(0);\n }\n 100% {\n opacity: 0;\n transform: translateY(15%);\n }\n}\n</style>\n","export const useDragMove = (xFilter: (x: number) => boolean) => {\n const target = shallowRef<HTMLElement>();\n const prevOffset = {\n x: 0,\n y: 0,\n };\n\n const offset = shallowReactive({ ...prevOffset });\n let prevEv: PointerEvent | undefined = undefined;\n const preventSelection = (ev: Event) => {\n if (prevEv) {\n ev.preventDefault();\n }\n };\n const startMove = (ev: PointerEvent) => {\n prevEv = ev;\n prevOffset.x = offset.x;\n prevOffset.y = offset.y;\n };\n const move = (ev: PointerEvent) => {\n if (!prevEv || !target.value) return;\n\n const dx = ev.clientX - prevEv.clientX; // ev.movementX;\n const dy = ev.clientY - prevEv.clientY; //ev.movementY;\n\n if (xFilter(dx)) {\n offset.x = prevOffset.x + dx;\n }\n offset.y = prevOffset.y + dy;\n };\n const endMove = () => {\n prevEv = undefined;\n };\n const windowEndMove = () => {\n if (!target.value || !prevEv) return;\n endMove();\n const { top, bottom, left, right } = target.value.getBoundingClientRect();\n if (\n right < 0 ||\n left > window.innerWidth ||\n bottom < 0 ||\n top > window.innerHeight\n ) {\n // isOutsideViewport\n offset.x = prevOffset.x;\n offset.y = prevOffset.y;\n }\n };\n onMounted(() => {\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', windowEndMove);\n document.addEventListener('selectstart', preventSelection);\n });\n onUnmounted(() => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', windowEndMove);\n document.removeEventListener('selectstart', preventSelection);\n endMove();\n });\n watch(target, (newValue, oldValue) => {\n if (newValue) {\n newValue.addEventListener('pointerdown', startMove);\n newValue.addEventListener('pointerup', endMove);\n }\n if (oldValue) {\n oldValue.removeEventListener('pointerdown', startMove);\n oldValue.removeEventListener('pointerup', endMove);\n }\n });\n onUnmounted(() => {\n if (!target.value) return;\n target.value.removeEventListener('pointerdown', startMove);\n target.value.removeEventListener('pointerup', endMove);\n });\n return {\n target,\n offset,\n };\n};\n\nlet currentMaxZIndex = 1000;\nexport const useZindex = () => {\n currentMaxZIndex++;\n const zIndex = shallowRef(currentMaxZIndex);\n const setTop = () => {\n if (zIndex.value === currentMaxZIndex) return;\n currentMaxZIndex++;\n zIndex.value = currentMaxZIndex;\n };\n return {\n zIndex,\n setTop,\n };\n};\n","<script setup lang=\"ts\">\nimport { useDragMove, useZindex } from '@/utils/draggable';\n\nconst props = withDefaults(\n defineProps<{\n initialValue: {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n\n width?: number;\n };\n minWidth?: number;\n sizeDraggable?: boolean;\n show?: boolean;\n class?: string;\n }>(),\n { initialValue: () => ({}), show: true },\n);\n\nconst isLeft = props.initialValue.left !== void 0;\nconst isTop = props.initialValue.top !== void 0;\nconst prevOffset = {\n x: (isLeft ? props.initialValue.left : props.initialValue.right) ?? 0,\n y: (isTop ? props.initialValue.top : props.initialValue.bottom) ?? 0,\n};\n\nconst leftDragBar = useDragMove((dx) => {\n const w =\n (props.initialValue.width || 0) +\n rightDragBar.offset.x +\n -leftDragBar.offset.x -\n dx;\n return (props.minWidth || 0) < w;\n});\nconst rightDragBar = useDragMove((dx) => {\n const w =\n (props.initialValue.width || 0) +\n rightDragBar.offset.x +\n dx -\n leftDragBar.offset.x;\n\n return (props.minWidth || 0) < w;\n});\n\nconst offset = shallowReactive({ ...prevOffset });\nconst currentStyle = computed(() => {\n const width =\n (props.initialValue.width || 0) +\n rightDragBar.offset.x -\n leftDragBar.offset.x;\n const widthStyle = props.initialValue.width ? `width:${width}px;` : ``;\n const yStyle = isTop ? `top:${offset.y}px;` : `bottom:${offset.y}px;`;\n if (isLeft) {\n return `left:${offset.x - leftDragBar.offset.x}px;` + yStyle + widthStyle;\n } else {\n return `right:${offset.x - rightDragBar.offset.x}px;` + yStyle + widthStyle;\n }\n});\n/**\n * it will be PointerEvent when moving\n */\nlet prevEv: PointerEvent | undefined = undefined;\nconst moved = shallowRef(false);\nconst startMove = (ev: PointerEvent) => {\n prevEv = ev;\n prevOffset.x = offset.x;\n prevOffset.y = offset.y;\n moved.value = false;\n};\nconst move = (ev: PointerEvent) => {\n if (!target.value || !prevEv) return;\n\n const dx = ev.clientX - prevEv.clientX; // ev.movementX;\n const dy = ev.clientY - prevEv.clientY; //ev.movementY;\n\n offset.x = prevOffset.x + (isLeft ? dx : -dx);\n offset.y = prevOffset.y + (isTop ? dy : -dy);\n\n moved.value = true;\n};\nconst endMove = () => {\n prevEv = undefined;\n};\nconst box = shallowRef<HTMLElement>();\nconst target = shallowRef<HTMLElement>();\nconst preventSelection = (ev: Event) => {\n if (prevEv) {\n ev.preventDefault();\n }\n};\nconst transition = `transition-top,bottom,left,right-500`;\nconst windowEndMove = () => {\n if (!target.value || !prevEv) return;\n endMove();\n const { top, bottom, left, right } = target.value.getBoundingClientRect();\n if (\n right < 0 ||\n left > window.innerWidth ||\n bottom < 0 ||\n top > window.innerHeight\n ) {\n // isOutsideViewport\n offset.x = prevOffset.x;\n offset.y = prevOffset.y;\n\n const boxDiv = box.value;\n if (boxDiv) {\n boxDiv.classList.add(transition);\n setTimeout(() => {\n boxDiv.classList.remove(transition);\n }, 550);\n }\n }\n};\n\n// move 事件应该给 window. 如果给目标元素,容易出现鼠标移速过快无法跟随的bug\nonMounted(() => {\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', windowEndMove);\n document.addEventListener('selectstart', preventSelection);\n});\nonUnmounted(() => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', windowEndMove);\n document.removeEventListener('selectstart', preventSelection);\n endMove();\n});\n\nwatch(target, (newValue, oldValue) => {\n if (newValue) {\n newValue.addEventListener('pointerdown', startMove);\n newValue.addEventListener('pointerup', endMove);\n }\n if (oldValue) {\n oldValue.removeEventListener('pointerdown', startMove);\n oldValue.removeEventListener('pointerup', endMove);\n }\n});\nonUnmounted(() => {\n if (!target.value) return;\n target.value.removeEventListener('pointerdown', startMove);\n target.value.removeEventListener('pointerup', endMove);\n});\nconst updateTarget = (arg: unknown) => {\n if (arg instanceof HTMLElement) {\n target.value = arg;\n } else {\n target.value = void 0;\n }\n};\n\nconst { setTop, zIndex } = useZindex();\nwatch(\n () => props.show,\n () => {\n if (props.show) {\n setTop();\n }\n },\n);\n</script>\n<template>\n <Teleport to=\"body\">\n <div\n v-if=\"show\"\n fixed\n ref=\"box\"\n class=\"DraggableCard\"\n :style=\"[currentStyle, { zIndex }]\"\n :class=\"props.class\"\n @mousedown=\"setTop\"\n >\n <slot :onRef=\"updateTarget\" :moved=\"moved\"></slot>\n\n <template v-if=\"sizeDraggable\">\n <div\n :ref=\"leftDragBar.target\"\n absolute\n right-full\n top-0\n bottom-0\n w-5px\n cursor-ew-resize\n ></div>\n <div\n :ref=\"rightDragBar.target\"\n absolute\n left-full\n top-0\n bottom-0\n w-5px\n cursor-ew-resize\n ></div>\n </template>\n </div>\n </Teleport>\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 { toInteger } from '@/utils/others';\nimport type { ResolvedSelector } from '@/utils/selector';\nimport { screenshotStorage, snapshotStorage } from '@/utils/snapshot';\nimport { useTask } from '@/utils/task';\nimport type {\n Position,\n RawNode,\n Snapshot,\n TrackCardProps,\n} from '@/utils/types';\nimport type { QueryResult } from '@gkd-kit/selector';\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 = defineStore('snapshot', () => {\n const route = useRoute();\n const router = useRouter();\n const settingsStore = useSettingsStore();\n const storageStore = useStorageStore();\n const { snapshotImportId, snapshotImageId, importSnapshotId } = storageStore;\n\n const snapshotId = shallowRef<number>();\n watchImmediate(\n () => route.params.snapshotId,\n (v) => {\n snapshotId.value = toInteger(v);\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 });\n const loading = computed(() => update.loading);\n watchImmediate(() => snapshotId.value, update.invoke);\n watchEffect(() => {\n if (\n importId.value &&\n storageStore.inited &&\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 (\n gmOk() &&\n settingsStore.inited &&\n settingsStore.autoUploadImport &&\n storageStore.inited\n );\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 && settingsStore.inited) {\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 = ref(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\nif (import.meta.hot) {\n import.meta.hot.accept(() => {\n location.reload();\n });\n}\n","<script setup lang=\"ts\">\nimport DraggableCard from '@/components/DraggableCard.vue';\nimport { getNodeSelectorText } from '@/utils/node';\nimport { buildEmptyFn, copy } from '@/utils/others';\n\nwithDefaults(\n defineProps<{\n show: boolean;\n onUpdateShow?: (data: boolean) => void;\n }>(),\n {\n onUpdateShow: buildEmptyFn,\n },\n);\n\nconst { focusNode } = storeToRefs(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</script>\n\n<template>\n <DraggableCard\n :initialValue=\"{ top: 40, right: 10 }\"\n v-slot=\"{ onRef }\"\n class=\"box-shadow-dim\"\n :show=\"show && Boolean(focusNode)\"\n >\n <div absolute top-0 right-0 pt-4px pr-8px>\n <NButton @click=\"onUpdateShow(!show)\" text title=\"最小化\">\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 ><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=\"copy(`${attrx.name}=${attrx.desc}`)\">\n <div v-if=\"attrx.tip\" flex justify-between items-center>\n <div>\n {{ attrx.name }}\n </div>\n <NTooltip>\n <template #trigger>\n <NIcon size=\"16\">\n <SvgIcon name=\"info\" v-if=\"attrx.tip.type == 'info'\" />\n <SvgIcon\n v-else-if=\"attrx.tip.type == 'quickFind'\"\n name=\"ok\"\n />\n </NIcon>\n </template>\n {{ attrx.tip.desc }}\n </NTooltip>\n </div>\n <template v-else>\n {{ attrx.name }}\n </template>\n </NTd>\n <NTd>\n <NEllipsis\n class=\"w-[calc(var(--gkd-w)*0.12)]\"\n :class=\"{\n 'text-left direction-rtl': attrx.name == 'id',\n 'opacity-50': attrx.value === null,\n }\"\n >\n {{ attrx.desc }}\n </NEllipsis>\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>{{ selectText }}</div>\n </NTooltip>\n </div>\n </NTd>\n </NTr>\n </NTbody>\n </NTable>\n </DraggableCard>\n</template>\n","<script setup lang=\"ts\">\nimport DraggableCard from '@/components/DraggableCard.vue';\nimport { getNodeLabel, getNodeStyle } from '@/utils/node';\n\nconst snapshotStore = useSnapshotStore();\nconst { focusNode, overlapNodes, focusPosition } = storeToRefs(snapshotStore);\nconst _1vw = document.documentElement.scrollWidth / 100;\nconst left = _1vw * 25.5;\n</script>\n<template>\n <DraggableCard\n :initialValue=\"{ top: 215, left }\"\n v-slot=\"{ onRef }\"\n class=\"box-shadow-dim w-420px\"\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 bg=\"#eee\" px-2px>{{\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 @click=\"snapshotStore.updateFocusNode(resultNode)\"\n size=\"small\"\n :style=\"getNodeStyle(resultNode, focusNode)\"\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 { RawNode, Snapshot } from '@/utils/types';\nimport type { ShallowRef } from 'vue';\n\nwithDefaults(\n defineProps<{\n show: boolean;\n onUpdateShow?: (data: boolean) => void;\n }>(),\n {\n onUpdateShow: buildEmptyFn,\n },\n);\n\nconst snapshotStore = useSnapshotStore();\nconst snapshotRefs = storeToRefs(snapshotStore);\nconst { rootNode, focusNode } = snapshotRefs;\nconst snapshot = snapshotRefs.snapshot as ShallowRef<Snapshot>;\n\nconst text = shallowRef('');\nconst lazyText = refDebounced(text, 500);\n\ninterface ResolvedData {\n matches: string[];\n anyMatches: string[];\n excludeMatches: string[];\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};\nconst checkRule = (obj: ResolvedData): string | RawNode => {\n const matches = toArray(obj.matches);\n if (!matches) {\n return '非法格式: matches';\n }\n const anyMatches = toArray(obj.anyMatches);\n if (!anyMatches) {\n return '非法格式: anyMatches';\n }\n const excludeMatches = toArray(obj.excludeMatches);\n if (!excludeMatches) {\n return '非法格式: excludeMatches';\n }\n\n const resolvedMatches: ResolvedSelector[] = [];\n for (let i = 0; i < matches.length; i++) {\n const v = matches[i];\n try {\n resolvedMatches.push(parseSelector(v));\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return `非法选择器: matches[${i}]\\n错误: ${message}`;\n }\n }\n const matchesResult = resolvedMatches.map((s) =>\n s.querySelfOrSelectorAll(rootNode.value),\n );\n if (resolvedMatches.length) {\n const notIndex = matchesResult.findIndex((s) => s.length === 0);\n if (notIndex >= 0) {\n return `无法匹配: matches[${notIndex}] 查找结果为空`;\n }\n }\n\n const resolvedAnyMatches: ResolvedSelector[] = [];\n for (let i = 0; i < anyMatches.length; i++) {\n const v = anyMatches[i];\n try {\n resolvedAnyMatches.push(parseSelector(v));\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return `非法选择器: anyMatches[${i}]\\n错误: ${message}`;\n }\n }\n const anyMatchesResult = resolvedAnyMatches.map((s) =>\n s.querySelfOrSelectorAll(rootNode.value),\n );\n if (resolvedAnyMatches.length) {\n if (anyMatchesResult.every((s) => s.length === 0)) {\n return `无法匹配: anyMatches 查找结果为空`;\n }\n }\n\n if (!matches.length && !anyMatches.length) {\n return '非法规则: matches 和 anyMatches 至少存在一个';\n }\n\n const resolvedExcludeMatches: ResolvedSelector[] = [];\n for (let i = 0; i < excludeMatches.length; i++) {\n const v = excludeMatches[i];\n try {\n resolvedExcludeMatches.push(parseSelector(v));\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return `非法选择器: excludeMatches[${i}]\\n错误: ${message}`;\n }\n }\n const excludeMatchesResult = resolvedExcludeMatches.map((s) =>\n s.querySelfOrSelectorAll(rootNode.value),\n );\n if (resolvedExcludeMatches.length) {\n const index = excludeMatchesResult.findIndex((s) => s.length !== 0);\n if (index >= 0) {\n return `无法匹配: excludeMatches[${index}] 查找结果不为空`;\n }\n }\n if (!matchesResult.length) {\n return anyMatchesResult[0][0];\n }\n return matchesResult.at(-1)![0];\n};\n\nconst isObj = (v: any): v is Record<string, any> => {\n return typeof v === 'object' && v !== null && !Array.isArray(v);\n};\n\nconst dataRef = computed<RawNode | string>(() => {\n if (!lazyText.value) return '';\n const obj = (() => {\n try {\n return JSON5.parse(lazyText.value);\n } catch (e) {\n return e as Error;\n }\n })();\n if (obj instanceof Error) {\n return `非法格式: ${obj.message}`;\n }\n if (!isObj(obj)) {\n return '非法格式: 请使用对象格式';\n }\n if (typeof obj.id === 'string') {\n if (obj.id !== snapshot.value.appId) {\n return '非法格式: id 不匹配 appId';\n }\n if (!Array.isArray(obj.groups)) {\n return '非法格式: groups 不是数组';\n }\n if (obj.groups.length !== 1) {\n return '非法格式: groups 长度不为 1';\n }\n const group = obj.groups[0];\n if (!group?.rules) {\n return '非法格式: groups[0].rules 非法';\n }\n const rules = Array.isArray(group.rules) ? group.rules : [group.rules];\n if (rules.length !== 1) {\n return '非法格式: groups[0].rules 长度不为 1';\n }\n const rule =\n typeof rules[0] === 'string' ? { matches: rules[0] } : rules[0];\n if (!isObj(rule)) {\n return '非法格式: rules[0] 非法';\n }\n return checkRule(rule as ResolvedData);\n }\n if (obj.rules) {\n const rules = Array.isArray(obj.rules) ? obj.rules : [obj.rules];\n if (rules.length !== 1) {\n return '非法格式: rules 长度不为 1';\n }\n const rule =\n typeof rules[0] === 'string' ? { matches: rules[0] } : rules[0];\n if (!isObj(rule)) {\n return '非法格式: rules[0] 非法';\n }\n return checkRule(rule as ResolvedData);\n }\n return checkRule(obj as ResolvedData);\n});\nconst errorText = computed(() => {\n if (text.value && lazyText.value && typeof dataRef.value === 'string') {\n return dataRef.value;\n }\n return '';\n});\nconst targetNode = computed(() => {\n if (typeof dataRef.value === 'string') return null;\n return dataRef.value;\n});\n</script>\n<template>\n <DraggableCard\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 v-slot=\"{ onRef }\"\n class=\"box-shadow-dim\"\n :show=\"show\"\n >\n <div bg-white b-1px b-solid b-gray-200 rounded-4px p-8px>\n <div flex m-b-4px pr-4px>\n <div>测试规则</div>\n <div flex-1 cursor-move :ref=\"onRef\"></div>\n <NButton @click=\"onUpdateShow(!show)\" text title=\"最小化\">\n <template #icon>\n <SvgIcon name=\"minus\" />\n </template>\n </NButton>\n </div>\n <NInput\n v-model:value=\"text\"\n type=\"textarea\"\n placeholder=\"请输入单个规则测试\"\n size=\"small\"\n class=\"gkd_code m-b-4px\"\n :autosize=\"{\n minRows: 10,\n maxRows: 20,\n }\"\n />\n <div min-h-24px>\n <div color-red whitespace-pre v-if=\"errorText\">{{ errorText }}</div>\n\n <NButton\n v-else-if=\"targetNode\"\n @click=\"snapshotStore.updateFocusNode(targetNode)\"\n size=\"small\"\n :style=\"getNodeStyle(targetNode, focusNode)\"\n >\n {{ getNodeLabel(targetNode) }}\n </NButton>\n </div>\n </div>\n </DraggableCard>\n</template>\n","<script lang=\"ts\" setup>\nconst props = defineProps<{\n imgRef: HTMLElement;\n imgHover: boolean;\n screenshotUrl: string;\n hoverPosition: {\n ox: number;\n oy: number;\n };\n hoverPositionStyle?: {\n left: string;\n top: string;\n };\n boxHoverPosition?: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n boxHoverPerPosition?: {\n left: string;\n right: string;\n top: string;\n bottom: string;\n };\n}>();\n\nconst imgBounding = useElementBounding(computed(() => props.imgRef));\n</script>\n\n<template>\n <!-- Teleport 需要单独一个组件否则 hmr 错误 -->\n <Teleport to=\"body\">\n <!-- 渲染在外部防止被遮挡 -->\n <div\n v-show=\"imgHover\"\n :style=\"{\n left: imgBounding.right.value + 4 + 'px',\n top: imgBounding.top.value + 'px',\n }\"\n pointer-events-none\n fixed\n overflow-hidden\n z-2\n bg-white\n h-200px\n w-200px\n border-1px\n border-indigo-600\n border-dashed\n >\n <img\n :src=\"screenshotUrl\"\n object-contain\n absolute\n left-0\n top-0\n :style=\"hoverPositionStyle\"\n w-1000px\n />\n <div\n absolute\n left-2px\n top-2px\n p-1px\n z-1\n text-13px\n class=\"leading-[1] bg-[rgba(256,256,256,0.7)]\"\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] bg-[rgba(256,256,256,0.7)]\"\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] bg-[rgba(256,256,256,0.7)]\"\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 #fff 50%,\n #fff 100%\n );\n background-position-x: 1.5px;\n \"\n ></div>\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 #fff 50%,\n #fff 100%\n );\n background-position-y: 1.5px;\n \"\n ></div>\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport dayjs from 'dayjs';\nimport MiniHoverImg from './MiniHoverImg.vue';\nimport { toFixedNumber } from '@/utils/others';\n\nconst snapshotStore = useSnapshotStore();\nconst { updatePosition } = snapshotStore;\nconst snapshotRefs = storeToRefs(snapshotStore);\nconst { focusNode, screenshotUrl } = snapshotRefs;\n\nconst snapshot = computed(() => snapshotStore.snapshot!);\n\nconst imgRef = shallowRef<HTMLImageElement>();\nconst imgLoadTime = shallowRef(false);\n\nconst 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) * img.naturalHeight;\n\n updatePosition({ x, y });\n};\n\nconst percent = (n: number) => {\n return `${n * 100}%`;\n};\n\nconst imgSize = useElementSize(imgRef);\n\nconst 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});\nconst imgHover = shallowRef(false);\nconst hoverPosition = shallowRef({ ox: 0, oy: 0 });\nconst 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});\nconst 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});\nconst hoverPositionStyle = shallowRef({ left: '0', top: '0' });\n\nconst 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) * img.naturalHeight;\n hoverPosition.value = { ox, oy };\n hoverPositionStyle.value = {\n left: (-(ox - 0.1 * img.naturalWidth) / img.naturalWidth) * 1000 + 'px',\n top: (-(oy - 0.1 * img.naturalWidth) / img.naturalWidth) * 1000 + 'px',\n };\n};\n</script>\n\n<template>\n <div\n v-if=\"screenshotUrl\"\n flex\n flex-col\n relative\n h-full\n p-2px\n box-border\n overflow-hidden\n >\n <img\n ref=\"imgRef\"\n :src=\"screenshotUrl\"\n @click=\"clickImg\"\n cursor-crosshair\n object-contain\n h-full\n class=\"max-w-[calc(var(--gkd-w)*0.35)]\"\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-blue\n b-solid\n >\n <div absolute left-0 top-0 bottom-0 right-0 b-solid b-1px b-red></div>\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 py-1px px-2px bg=\"#ffffff90\" title=\"尺寸\">\n {{ `${snapshot.screenWidth}x${snapshot.screenHeight}` }}\n </div>\n <div py-1px px-2px bg=\"#ffffff90\" title=\"创建时间\">\n {{ dayjs(snapshot.id).format('YYYY-MM-DD HH:mm:ss') }}\n </div>\n </div>\n <MiniHoverImg\n v-if=\"imgRef\"\n :imgHover=\"imgHover\"\n :imgRef=\"imgRef\"\n :boxHoverPerPosition=\"boxHoverPerPosition\"\n :boxHoverPosition=\"boxHoverPosition\"\n :hoverPositionStyle=\"hoverPositionStyle\"\n :hoverPosition=\"hoverPosition\"\n :screenshotUrl=\"screenshotUrl\"\n />\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 type {\n RawNode,\n SearchResult,\n SelectorSearchResult,\n Snapshot,\n} from '@/utils/types';\nimport { getImagUrl, getImportUrl } from '@/utils/url';\nimport { FastQuery, GkdException } from '@gkd-kit/selector';\nimport dayjs from 'dayjs';\nimport * as base64url from 'universal-base64url';\nimport type { ShallowRef } from 'vue';\n\nwithDefaults(\n defineProps<{\n show: boolean;\n onUpdateShow?: (data: boolean) => void;\n }>(),\n {\n onUpdateShow: buildEmptyFn,\n },\n);\n\nconst route = useRoute();\nconst { snapshotImportId, snapshotImageId } = useStorageStore();\n\nconst snapshotStore = useSnapshotStore();\nconst { updateFocusNode } = snapshotStore;\nconst snapshotRefs = storeToRefs(snapshotStore);\nconst snapshot = snapshotRefs.snapshot as ShallowRef<Snapshot>;\nconst rootNode = snapshotRefs.rootNode as ShallowRef<RawNode>;\nconst { focusNode } = snapshotRefs;\n\nconst searchText = shallowRef(``);\n\nconst selectorResults = shallowReactive<SearchResult[]>([]);\nconst expandedKeys = shallowRef<number[]>([]);\nconst searchSelector = (text: string) => {\n const selector = errorWrap(\n () => parseSelector(text),\n (e) => {\n if (typeof e == 'string') {\n return e;\n }\n if (e instanceof GkdException) {\n return `非法选择器:` + e.outMessage;\n }\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 if (results.length == 0) {\n message.success(`没有选择到节点`);\n return;\n }\n message.success(`选择到 ${results.length} 个节点`);\n selectorResults.unshift({\n selector,\n nodes: results.map((r) => r.target),\n results,\n key: Date.now(),\n gkd: true,\n });\n return results.length;\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};\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};\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\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 ? getImportUrl(importId) : undefined;\n const exampleUrls = imageId ? getImagUrl(imageId) : undefined;\n\n const s = result.selector;\n const t = result.results.map((v) => v.context.toArray().at(-1)!)[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});\nconst enableSearchBySelector = shallowRef(true);\nconst hasZipId = computed(() => {\n return snapshotImportId[snapshot.value.id];\n});\nconst shareResult = (result: SearchResult) => {\n if (!hasZipId.value) return;\n const importUrl = new URL(getImportUrl(snapshotImportId[snapshot.value.id]));\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<template>\n <DraggableCard\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 v-slot=\"{ onRef }\"\n class=\"box-shadow-dim\"\n :show=\"show\"\n >\n <div bg-white b-1px b-solid b-gray-200 rounded-4px p-8px>\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 flex-1 cursor-move :ref=\"onRef\"></div>\n <NButton @click=\"onUpdateShow(!show)\" text title=\"最小化\">\n <template #icon>\n <SvgIcon name=\"minus\" />\n </template>\n </NButton>\n </div>\n <NInputGroup>\n <NInput\n v-model:value=\"searchText\"\n :placeholder=\"enableSearchBySelector ? `请输入选择器` : `请输入字符`\"\n @keyup.enter=\"searchBySelector\"\n :inputProps=\"{ class: 'gkd_code' }\"\n ></NInput>\n <NButton @click=\"searchBySelector\">\n <template #icon>\n <SvgIcon name=\"search\" />\n </template>\n </NButton>\n </NInputGroup>\n <div p-5px></div>\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 bg=\"#eee\"\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></span>\n </template>\n <template #header-extra>\n <NButtonGroup>\n <NButton\n size=\"small\"\n v-if=\"result.gkd && result.selector.canCopy\"\n @click.stop=\"generateRules(result as SelectorSearchResult)\"\n title=\"复制规则\"\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 @click.stop=\"selectorResults.splice(index, 1)\"\n title=\"删除记录\"\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 @click=\"updateFocusNode(resultNode)\"\n size=\"small\"\n :style=\"getNodeStyle(resultNode, focusNode)\"\n >\n {{ getNodeLabel(resultNode) }}\n </NButton>\n </template>\n <template v-else>\n <NButtonGroup\n v-for=\"(resultNode, index) in result.nodes\"\n :key=\"index\"\n >\n <NButton\n size=\"small\"\n @click=\"\n snapshotStore.showTrack(\n result.selector,\n result.results[index],\n )\n \"\n >\n <NIcon>\n <SvgIcon name=\"path\" />\n </NIcon>\n </NButton>\n <NButton\n @click=\"updateFocusNode(resultNode)\"\n size=\"small\"\n :style=\"getNodeStyle(resultNode, focusNode)\"\n >\n {{ getNodeLabel(resultNode) }}\n </NButton>\n </NButtonGroup>\n </template>\n </div>\n <div un=\"h-10px\"></div>\n </NScrollbar>\n </NCollapseItem>\n </NCollapse>\n </div>\n </DraggableCard>\n</template>\n","import type { SlotsType } from 'vue';\n\nconst emptyArray = [] as [];\nconst GapList = defineComponent<\n { tag?: string; virtual?: boolean },\n {},\n string,\n SlotsType<{\n default: () => VNode[];\n gap: (props: { index: number }) => VNode[];\n }>\n>(\n (props, ctx) => {\n const tag = computed(() => props.tag || 'div');\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 if (props.virtual) return nodes;\n return h(tag.value, props, nodes);\n };\n },\n { props: ['tag', 'virtual'] },\n);\n\nexport default GapList;\n","<script setup lang=\"tsx\">\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} from '@/utils/node';\nimport { copy, delay } from '@/utils/others';\nimport type { RawNode, Snapshot } from '@/utils/types';\nimport type { TreeInst } from 'naive-ui';\nimport type { HTMLAttributes, ShallowRef } from 'vue';\n\nconst router = useRouter();\n\nconst snapshotStore = useSnapshotStore();\nconst { updateFocusNode } = snapshotStore;\nconst snapshotRefs = storeToRefs(snapshotStore);\nconst snapshot = snapshotRefs.snapshot as ShallowRef<Snapshot>;\nconst rootNode = snapshotRefs.rootNode as ShallowRef<RawNode>;\nconst { focusNode, focusTime } = snapshotRefs;\n\nlet lastClickId = Number.NaN;\nconst expandedKeys = shallowRef<number[]>([]);\nconst selectedKeys = shallowRef<number[]>([]);\nwatch([() => focusNode.value, () => focusTime.value], async () => {\n if (!focusNode.value) return;\n const key = focusNode.value.id;\n nextTick().then(async () => {\n await delay(300);\n if (key === focusNode.value?.id) {\n if (lastClickId === key) {\n // 当点击节点树中的节点时, 不滚动\n lastClickId = Number.NaN;\n return;\n }\n // NTree 被 virtualScroll 包裹后, treeRef.value?.scrollTo 无效, 使用 scrollIntoView\n const item = document.querySelector<HTMLElement>(\n `[data-node-id=\"${key}\"]`,\n );\n if (!item) return;\n selectedKeys.value = [key];\n item.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n });\n let parent = focusNode.value.parent;\n if (!parent) {\n return;\n }\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 treeRef = shallowRef<TreeInst>();\n\nconst treeFilter = (pattern: string, node: RawNode) => {\n return node.id === focusNode.value?.id;\n};\nconst treeNodeProps = (info: {\n option: RawNode;\n}): HTMLAttributes & Record<string, unknown> => {\n const style = getNodeStyle(info.option, focusNode.value);\n return {\n onClick: () => {\n lastClickId = info.option.id;\n updateFocusNode(info.option);\n },\n style: {\n '--n-node-text-color': style.color,\n ...style,\n },\n class: 'whitespace-nowrap',\n 'data-node-id': String(info.option.id),\n };\n};\n\nconst renderLabel = (info: {\n option: RawNode;\n checked: boolean;\n selected: boolean;\n}) => {\n return getNodeLabel(info.option);\n};\n\nconst deviceName = computed(() => {\n return `${getDevice(snapshot.value).manufacturer} Android ${getDevice(snapshot.value).release || ``}`;\n});\n\nconst isSystem = computed(() => {\n return getAppInfo(snapshot.value).isSystem;\n});\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});\n\nconst onDelete = async () => {\n message.success(`删除成功,即将回到首页`);\n await delay(2000);\n router.replace({\n path: `/`,\n });\n};\n</script>\n\n<template>\n <div flex flex-col overflow-hidden>\n <div flex items-center px-8px>\n <GapList flex flex-wrap items-center gap-8px gkd_code>\n <template #gap>\n <div w-1px bg-gray h-12px></div>\n </template>\n <NTooltip>\n <template #trigger>\n <div @click=\"copy(deviceName)\">\n {{ deviceName }}\n </div>\n </template>\n 设备名称\n </NTooltip>\n\n <NTooltip>\n <template #trigger>\n <div\n :class=\"{\n 'opacity-50': !getGkdAppInfo(snapshot).versionName,\n }\"\n >\n {{ getGkdAppInfo(snapshot).versionName || '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 @click=\"copy(activityId)\"\n :class=\"{\n 'opacity-50': !activityId,\n }\"\n >\n {{ activityId || 'null' }}\n </div>\n </template>\n 界面ID\n </NTooltip>\n </GapList>\n <div flex-1></div>\n <ActionCard\n class=\"ml-8px\"\n :snapshot=\"snapshot\"\n @delete=\"onDelete\"\n :showPreview=\"false\"\n />\n </div>\n <div h-1px mt-4px bg=\"#efeff5\"></div>\n\n <NScrollbar xScrollable class=\"flex-1\">\n <NTree\n class=\"mb-24px mr-24px\"\n ref=\"treeRef\"\n virtualScroll\n showLine\n blockLine\n keyField=\"id\"\n v-model:expandedKeys=\"expandedKeys\"\n v-model:selectedKeys=\"selectedKeys\"\n :data=\"[rootNode as any]\"\n :filter=\"(treeFilter as any)\"\n :nodeProps=\"(treeNodeProps as any)\"\n :renderLabel=\"(renderLabel as any)\"\n />\n </NScrollbar>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport TrackModal from '@/components/TrackModal.vue';\nimport { loadingBar, message } 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 WindowCard from './WindowCard.vue';\n\nconst snapshotStore = useSnapshotStore();\nconst snapshotRefs = storeToRefs(snapshotStore);\nconst { snapshot, rootNode, loading, redirected, trackData, trackShow } =\n snapshotRefs;\n\nwatchEffect(() => {\n if (loading.value) {\n loadingBar.start();\n } else {\n loadingBar.finish();\n }\n});\n\nconst searchShow = useStorage('searchShow', true, sessionStorage);\nconst ruleShow = useStorage('ruleShow', false, sessionStorage);\nconst attrShow = useStorage('attrShow', true, sessionStorage);\n\nconst clickSettings = () => {\n message.info('暂未实现');\n};\n</script>\n<template>\n <template v-if=\"snapshot && rootNode\">\n <div h-full flex gap-5px>\n <div\n w-40px\n py-12px\n flex\n flex-col\n items-center\n gap-16px\n class=\"[--svg-h:24px]\"\n >\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton text>\n <RouterLink to=\"/\">\n <SvgIcon name=\"home\" />\n </RouterLink>\n </NButton>\n </template>\n 回到首页\n </NTooltip>\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton @click=\"clickSettings\" text>\n <SvgIcon name=\"settings\" />\n </NButton>\n </template>\n 设置\n </NTooltip>\n <div></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 <NTooltip placement=\"right\">\n <template #trigger>\n <NButton @click=\"attrShow = !attrShow\" text>\n <SvgIcon name=\"prop\" />\n </NButton>\n </template>\n 属性面板\n </NTooltip>\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton @click=\"ruleShow = !ruleShow\" text>\n <SvgIcon name=\"test\" />\n </NButton>\n </template>\n 测试规则\n </NTooltip>\n <div></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>\n <SvgIcon name=\"discussion\" />\n </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>\n <SvgIcon name=\"warn\" />\n </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\n <TrackModal\n :show=\"trackShow\"\n @updateShow=\"trackShow = $event\"\n :data=\"trackData\"\n @updateData=\"trackData = $event\"\n />\n </template>\n <div v-else-if=\"!loading && !redirected\" flex justify-center pt-80px>\n <div>快照数据缺失</div>\n </div>\n</template>\n"],"file":"assets/SnapshotPage-CwOAZlmE.js"}
|