@cjy0812/inspect-plus 0.0.1772240426360
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +148 -0
- package/dist/.nojekyll +1 -0
- package/dist/404.html +38 -0
- package/dist/_redirects +1 -0
- package/dist/assets/ActionCard.vue_vue_type_script_setup_true_lang-CzzwrEAn.js +17 -0
- package/dist/assets/ActionCard.vue_vue_type_script_setup_true_lang-CzzwrEAn.js.map +1 -0
- package/dist/assets/DevicePage-ClkEpwEg.js +2 -0
- package/dist/assets/DevicePage-ClkEpwEg.js.map +1 -0
- package/dist/assets/HomePage-DWBCu_RV.js +55 -0
- package/dist/assets/HomePage-DWBCu_RV.js.map +1 -0
- package/dist/assets/ImportPage-DNhXkQRM.js +2 -0
- package/dist/assets/ImportPage-DNhXkQRM.js.map +1 -0
- package/dist/assets/SelectorPage-BPf1NT6K.js +2 -0
- package/dist/assets/SelectorPage-BPf1NT6K.js.map +1 -0
- package/dist/assets/SettingsModal.vue_vue_type_script_setup_true_lang-Dzypo389.js +977 -0
- package/dist/assets/SettingsModal.vue_vue_type_script_setup_true_lang-Dzypo389.js.map +1 -0
- package/dist/assets/SnapshotPage-B6Jpif--.js +250 -0
- package/dist/assets/SnapshotPage-B6Jpif--.js.map +1 -0
- package/dist/assets/SnapshotPage-B_oz4RvQ.css +1 -0
- package/dist/assets/SvgPage-BgerzYLu.js +2 -0
- package/dist/assets/SvgPage-BgerzYLu.js.map +1 -0
- package/dist/assets/TrackGraph-BqCqbx5h.css +1 -0
- package/dist/assets/TrackGraph-CSZuKoTS.js +134 -0
- package/dist/assets/TrackGraph-CSZuKoTS.js.map +1 -0
- package/dist/assets/_404Page-Beb778B7.js +2 -0
- package/dist/assets/_404Page-Beb778B7.js.map +1 -0
- package/dist/assets/import-ohlNKANL.js +2 -0
- package/dist/assets/import-ohlNKANL.js.map +1 -0
- package/dist/assets/index-BlWrRSuL.js +18 -0
- package/dist/assets/index-BlWrRSuL.js.map +1 -0
- package/dist/assets/index-CFzr9cs0.css +1 -0
- package/dist/assets/index-DfAptoUr.js +1172 -0
- package/dist/assets/index-DfAptoUr.js.map +1 -0
- package/dist/assets/index-OOkxa8o-.css +1 -0
- package/dist/assets/jszip.min-DUXE_wq7.js +3 -0
- package/dist/assets/jszip.min-DUXE_wq7.js.map +1 -0
- package/dist/assets/mod-BHC4TAjm.wasm +0 -0
- package/dist/assets/node-TLy2IyRG.js +118 -0
- package/dist/assets/node-TLy2IyRG.js.map +1 -0
- package/dist/assets/polyfills-t8dO9Hxd.js +2 -0
- package/dist/assets/polyfills-t8dO9Hxd.js.map +1 -0
- package/dist/assets/snapshot-D02dgTNQ.js +4 -0
- package/dist/assets/snapshot-D02dgTNQ.js.map +1 -0
- package/dist/assets/snapshotGroup-DhERMZkD.js +2 -0
- package/dist/assets/snapshotGroup-DhERMZkD.js.map +1 -0
- package/dist/assets/svg-D9PkDGa0.js +2 -0
- package/dist/assets/svg-D9PkDGa0.js.map +1 -0
- package/dist/assets/worker-NxeETyFs.js +10 -0
- package/dist/assets/worker-NxeETyFs.js.map +1 -0
- package/dist/index.html +38 -0
- package/package.json +102 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HomePage-DWBCu_RV.js","sources":["../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/spin/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/spin/src/Spin.mjs","../../src/views/home/HomePage.vue"],"sourcesContent":["import { fadeInTransition } from \"../../../_styles/transitions/fade-in.cssr.mjs\";\nimport { c, cB, cM } from \"../../../_utils/cssr/index.mjs\";\n// vars:\n// --n-bezier\n// --n-opacity-spinning\n// --n-size\n// --n-color\n// --n-text-color\n// --n-font-size\nexport default c([c('@keyframes spin-rotate', `\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n `), cB('spin-container', `\n position: relative;\n `, [cB('spin-body', `\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translateX(-50%) translateY(-50%);\n `, [fadeInTransition()])]), cB('spin-body', `\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n `), cB('spin', `\n display: inline-flex;\n height: var(--n-size);\n width: var(--n-size);\n font-size: var(--n-size);\n color: var(--n-color);\n `, [cM('rotate', `\n animation: spin-rotate 2s linear infinite;\n `)]), cB('spin-description', `\n display: inline-block;\n font-size: var(--n-font-size);\n color: var(--n-text-color);\n transition: color .3s var(--n-bezier);\n margin-top: 8px;\n `), cB('spin-content', `\n opacity: 1;\n transition: opacity .3s var(--n-bezier);\n pointer-events: all;\n `, [cM('spinning', `\n user-select: none;\n -webkit-user-select: none;\n pointer-events: none;\n opacity: var(--n-opacity-spinning);\n `)])]);","import { pxfy } from 'seemly';\nimport { useCompitable } from 'vooks';\nimport { computed, defineComponent, h, ref, Transition, watchEffect } from 'vue';\nimport { NBaseLoading } from \"../../_internal/index.mjs\";\nimport { useConfig, useTheme, useThemeClass } from \"../../_mixins/index.mjs\";\nimport { createKey, warnOnce } from \"../../_utils/index.mjs\";\nimport { spinLight } from \"../styles/index.mjs\";\nimport style from \"./styles/index.cssr.mjs\";\nconst STROKE_WIDTH = {\n small: 20,\n medium: 18,\n large: 16\n};\nexport const spinProps = Object.assign(Object.assign({}, useTheme.props), {\n contentClass: String,\n contentStyle: [Object, String],\n description: String,\n stroke: String,\n size: {\n type: [String, Number],\n default: 'medium'\n },\n show: {\n type: Boolean,\n default: true\n },\n strokeWidth: Number,\n rotate: {\n type: Boolean,\n default: true\n },\n spinning: {\n type: Boolean,\n validator: () => {\n return true;\n },\n default: undefined\n },\n delay: Number\n});\nexport default defineComponent({\n name: 'Spin',\n props: spinProps,\n slots: Object,\n setup(props) {\n if (process.env.NODE_ENV !== 'production') {\n watchEffect(() => {\n if (props.spinning !== undefined) {\n warnOnce('spin', '`spinning` is deprecated, please use `show` instead.');\n }\n });\n }\n const {\n mergedClsPrefixRef,\n inlineThemeDisabled\n } = useConfig(props);\n const themeRef = useTheme('Spin', '-spin', style, spinLight, props, mergedClsPrefixRef);\n const cssVarsRef = computed(() => {\n const {\n size: spinSize\n } = props;\n const {\n common: {\n cubicBezierEaseInOut\n },\n self\n } = themeRef.value;\n const {\n opacitySpinning,\n color,\n textColor\n } = self;\n const size = typeof spinSize === 'number' ? pxfy(spinSize) : self[createKey('size', spinSize)];\n return {\n '--n-bezier': cubicBezierEaseInOut,\n '--n-opacity-spinning': opacitySpinning,\n '--n-size': size,\n '--n-color': color,\n '--n-text-color': textColor\n };\n });\n const themeClassHandle = inlineThemeDisabled ? useThemeClass('spin', computed(() => {\n const {\n size\n } = props;\n return typeof size === 'number' ? String(size) : size[0];\n }), cssVarsRef, props) : undefined;\n const compitableShow = useCompitable(props, ['spinning', 'show']);\n const activeRef = ref(false);\n watchEffect(onCleanup => {\n let timerId;\n if (compitableShow.value) {\n const {\n delay\n } = props;\n if (delay) {\n timerId = window.setTimeout(() => {\n activeRef.value = true;\n }, delay);\n onCleanup(() => {\n clearTimeout(timerId);\n });\n return;\n }\n }\n activeRef.value = compitableShow.value;\n });\n return {\n mergedClsPrefix: mergedClsPrefixRef,\n active: activeRef,\n mergedStrokeWidth: computed(() => {\n const {\n strokeWidth\n } = props;\n if (strokeWidth !== undefined) return strokeWidth;\n const {\n size\n } = props;\n return STROKE_WIDTH[typeof size === 'number' ? 'medium' : size];\n }),\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, _b;\n const {\n $slots,\n mergedClsPrefix,\n description\n } = this;\n const rotate = $slots.icon && this.rotate;\n const descriptionNode = (description || $slots.description) && h(\"div\", {\n class: `${mergedClsPrefix}-spin-description`\n }, description || ((_a = $slots.description) === null || _a === void 0 ? void 0 : _a.call($slots)));\n const icon = $slots.icon ? h(\"div\", {\n class: [`${mergedClsPrefix}-spin-body`, this.themeClass]\n }, h(\"div\", {\n class: [`${mergedClsPrefix}-spin`, rotate && `${mergedClsPrefix}-spin--rotate`],\n style: $slots.default ? '' : this.cssVars\n }, $slots.icon()), descriptionNode) : h(\"div\", {\n class: [`${mergedClsPrefix}-spin-body`, this.themeClass]\n }, h(NBaseLoading, {\n clsPrefix: mergedClsPrefix,\n style: $slots.default ? '' : this.cssVars,\n stroke: this.stroke,\n \"stroke-width\": this.mergedStrokeWidth,\n class: `${mergedClsPrefix}-spin`\n }), descriptionNode);\n (_b = this.onRender) === null || _b === void 0 ? void 0 : _b.call(this);\n return $slots.default ? h(\"div\", {\n class: [`${mergedClsPrefix}-spin-container`, this.themeClass],\n style: this.cssVars\n }, h(\"div\", {\n class: [`${mergedClsPrefix}-spin-content`, this.active && `${mergedClsPrefix}-spin-content--spinning`, this.contentClass],\n style: this.contentStyle\n }, $slots), h(Transition, {\n name: \"fade-in-transition\"\n }, {\n default: () => this.active ? icon : null\n })) : icon;\n }\n});","<script setup lang=\"ts\">\nimport ActionCard from '@/components/ActionCard.vue';\nimport DeviceControlTools from '@/components/DeviceControlTools.vue';\nimport SettingsModal from '@/components/SettingsModal.vue';\nimport { usePreviewCache } from '@/composables/usePreviewCache';\nimport { toValidURL } from '@/utils/check';\nimport { showTextDLg, waitShareAgree } from '@/utils/dialog';\nimport { dialog } from '@/utils/discrete';\nimport {\n batchCreateImageId,\n batchCreateZipUrl,\n batchImageDownloadZip,\n batchZipDownloadZip,\n} from '@/utils/export';\nimport { importFromLocal, importFromNetwork } from '@/utils/import';\nimport { getAppInfo, getDevice } from '@/utils/node';\nimport { filterQuery, getDragEventFiles } from '@/utils/others';\nimport { buildGroupedSnapshots } from '@/utils/snapshotGroup';\nimport {\n screenshotStorage,\n shallowSnapshotStorage,\n snapshotStorage,\n} from '@/utils/snapshot';\nimport { useTask } from '@/utils/task';\nimport {\n getCustomDomainImportUrl,\n getImagUrl,\n getImportUrl,\n getOfficialImportUrl,\n} from '@/utils/url';\nimport dayjs from 'dayjs';\n\nconst route = useRoute();\nconst router = useRouter();\nconst { settingsStore, snapshotImportTime, snapshotViewedTime } =\n useStorageStore();\n\nconst snapshots = shallowRef<Snapshot[]>([]);\nconst loading = shallowRef(true);\nconst updateSnapshots = async () => {\n loading.value = true;\n snapshots.value = (await shallowSnapshotStorage.getAllItems()).reverse();\n checkedRowKeys.value = [];\n loading.value = false;\n};\nonMounted(updateSnapshots);\n\nconst filterOption = shallowReactive({\n query: '',\n actualQuery: '',\n updateQuery: () => {\n filterOption.actualQuery = filterOption.query.trim();\n checkedRowKeys.value = [];\n },\n});\n\nconst filteredSnapshots = computed(() => {\n const query = filterOption.actualQuery;\n return snapshots.value.filter((s) => {\n if (!query) return true;\n return (\n (getAppInfo(s).name || '').includes(query) ||\n (s.appId || '').includes(query) ||\n (s.appInfo?.id || '').includes(query) ||\n (s.activityId || '').includes(query)\n );\n });\n});\n\nconst groupedSnapshots = computed(() =>\n buildGroupedSnapshots(filteredSnapshots.value, snapshotImportTime),\n);\n\nconst expandedPackageNames = shallowRef<(string | number)[]>([]);\nconst expandedActivityNames = shallowRef<(string | number)[]>([]);\nwatchEffect(() => {\n if (!settingsStore.autoExpandSnapshots) {\n expandedPackageNames.value = [];\n expandedActivityNames.value = [];\n return;\n }\n expandedPackageNames.value = groupedSnapshots.value\n .slice(0, 4)\n .map((g) => g.packageName);\n expandedActivityNames.value = groupedSnapshots.value\n .slice(0, 4)\n .flatMap((g) =>\n g.activities.slice(0, 3).map((a) => `${g.packageName}::${a.activityId}`),\n );\n});\n\nconst goToSnapshot = (snapshotId: number) => {\n router.push({\n name: 'snapshot',\n params: { snapshotId },\n query: filterQuery(route.query, ['str', 'gkd']),\n });\n};\n\nconst importLocal = useTask(async (_files?: File[]) => {\n if (await importFromLocal(_files)) {\n await updateSnapshots();\n }\n});\nuseEventListener(document.body, 'drop', async (e) => {\n e.preventDefault();\n await importLocal.invoke(getDragEventFiles(e));\n});\nuseEventListener(document.body, 'dragover', (e) => e.preventDefault());\n\nconst showImportModal = shallowRef(false);\nconst textImportValue = shallowRef('');\nconst importNetwork = useTask(async () => {\n const urls = textImportValue.value\n .trim()\n .split('\\n')\n .map((u) => u.trim())\n .filter((u) => toValidURL(u));\n if (urls.length == 0) return;\n const r = await importFromNetwork(urls);\n if (!r) return;\n await updateSnapshots();\n textImportValue.value = '';\n});\n\nuseEventListener(document.body, 'paste', (e) => {\n if (showImportModal.value) return;\n const target = e.target as HTMLElement;\n const className =\n target.getAttribute?.('class') ||\n (typeof target.className == 'string' ? target.className : '');\n if (\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target.classList?.contains('input') ||\n className.includes('input')\n ) {\n return;\n }\n const dataTransfer = e.clipboardData;\n if (!dataTransfer) return;\n const text = (dataTransfer.getData('text') || '').trim();\n if (text.startsWith('https://') || text.startsWith('http://')) {\n showImportModal.value = true;\n setTimeout(() => {\n textImportValue.value = text;\n });\n }\n});\n\nconst checkedRowKeys = shallowRef<number[]>([]);\nconst checkedSet = computed(() => new Set(checkedRowKeys.value));\nconst allFilteredSnapshotIds = computed(() =>\n filteredSnapshots.value.map((s) => s.id),\n);\nconst getActivitySnapshotIds = (activity: { snapshots: Snapshot[] }) =>\n activity.snapshots.map((s) => s.id);\nconst getGroupSnapshotIds = (group: {\n activities: Array<{ snapshots: Snapshot[] }>;\n}) => group.activities.flatMap((a) => getActivitySnapshotIds(a));\nconst getCheckedStats = (ids: number[]) => {\n if (!ids.length) return { checked: false, indeterminate: false };\n let checkedCount = 0;\n ids.forEach((id) => {\n if (checkedSet.value.has(id)) checkedCount++;\n });\n return {\n checked: checkedCount == ids.length,\n indeterminate: checkedCount > 0 && checkedCount < ids.length,\n };\n};\nconst setCheckedByIds = (ids: number[], checked: boolean) => {\n if (checked) {\n const next = new Set(checkedRowKeys.value);\n ids.forEach((id) => next.add(id));\n checkedRowKeys.value = [...next];\n return;\n }\n const idSet = new Set(ids);\n checkedRowKeys.value = checkedRowKeys.value.filter((id) => !idSet.has(id));\n};\nconst toggleChecked = (id: number, checked: boolean) => {\n if (checked) {\n if (!checkedSet.value.has(id))\n checkedRowKeys.value = [...checkedRowKeys.value, id];\n } else {\n checkedRowKeys.value = checkedRowKeys.value.filter((k) => k != id);\n }\n};\nconst checkedSnapshots = () =>\n Promise.all(\n checkedRowKeys.value.map(\n (id) => snapshotStorage.getItem(id) as Promise<Snapshot>,\n ),\n );\n\nconst batchDelete = useTask(async () => {\n await new Promise((res, rej) => {\n dialog.warning({\n title: '删除',\n content: `是否批量删除 ${checkedRowKeys.value.length} 个快照`,\n negativeText: '取消',\n positiveText: '确认',\n onClose: rej,\n onEsc: rej,\n onMaskClick: rej,\n onNegativeClick: rej,\n onPositiveClick: res,\n });\n });\n await Promise.all(\n checkedRowKeys.value.map((k) => snapshotStorage.removeItem(k)),\n );\n await updateSnapshots();\n});\nconst batchDownloadImage = useTask(async () => {\n await batchImageDownloadZip(await checkedSnapshots());\n});\nconst batchDownloadZip = useTask(async () => {\n await batchZipDownloadZip(await checkedSnapshots());\n});\nconst batchShareImageUrl = useTask(async () => {\n await waitShareAgree();\n const imageIds = await batchCreateImageId(await checkedSnapshots());\n showTextDLg({\n content: imageIds.map((s) => getImagUrl(s)).join('\\n') + '\\n',\n });\n});\nconst batchShareZipUrl = useTask(async () => {\n await waitShareAgree();\n const zipUrls = await batchCreateZipUrl(await checkedSnapshots());\n const primaryUrls = zipUrls.map((s) =>\n settingsStore.shareUseOfficialImportDomain\n ? getOfficialImportUrl(s)\n : getImportUrl(s),\n );\n const customUrls = zipUrls\n .map((s) => getCustomDomainImportUrl(s))\n .filter((s) => !!s);\n showTextDLg({\n content: primaryUrls.join('\\n') + '\\n',\n extraContent: customUrls.length ? customUrls.join('\\n') + '\\n' : '',\n });\n});\n\nconst settingsDlgShow = shallowRef(false);\nconst inputImportRef = shallowRef();\nconst groupRemarkModal = shallowReactive({\n show: false,\n key: '',\n title: '',\n value: '',\n});\nconst ensureGroupRemarks = () => {\n if (!settingsStore.groupRemarks) settingsStore.groupRemarks = {};\n return settingsStore.groupRemarks;\n};\nconst getGroupRemark = (key: string) =>\n (ensureGroupRemarks()[key] || '').trim();\nconst getPackageRemarkKey = (packageName: string) => `package:${packageName}`;\nconst getActivityRemarkKey = (packageName: string, activityId: string) =>\n `activity:${packageName}::${activityId}`;\nconst openGroupRemarkModal = (key: string, title: string) => {\n groupRemarkModal.show = true;\n groupRemarkModal.key = key;\n groupRemarkModal.title = title;\n groupRemarkModal.value = getGroupRemark(key);\n};\nconst saveGroupRemark = () => {\n const key = groupRemarkModal.key;\n if (!key) return;\n const value = groupRemarkModal.value.trim();\n if (value) ensureGroupRemarks()[key] = value;\n else delete ensureGroupRemarks()[key];\n groupRemarkModal.show = false;\n};\n\nconst previewCacheLimit = computed(() =>\n settingsStore.lowMemoryMode ? 6 : 24,\n);\nconst { previewUrlMap, previewLoadingMap, previewErrorMap, ensurePreview } =\n usePreviewCache({\n getScreenshot: (id) => screenshotStorage.getItem(id),\n cacheLimit: previewCacheLimit,\n });\n</script>\n\n<template>\n <div flex flex-col p-10px gap-10px page-size>\n <div flex>\n <NSpace>\n <NInputGroup>\n <NInput\n v-model:value=\"filterOption.query\"\n placeholder=\"请输入应用名/应用ID/界面ID\"\n clearable\n class=\"min-w-320px\"\n @keyup.enter=\"filterOption.updateQuery\"\n @change=\"filterOption.updateQuery\"\n />\n <NButton @click=\"filterOption.updateQuery\">\n <template #icon><SvgIcon name=\"search\" /></template>\n </NButton>\n </NInputGroup>\n <NCheckbox\n v-if=\"allFilteredSnapshotIds.length\"\n :checked=\"getCheckedStats(allFilteredSnapshotIds).checked\"\n :indeterminate=\"getCheckedStats(allFilteredSnapshotIds).indeterminate\"\n @update:checked=\"setCheckedByIds(allFilteredSnapshotIds, $event)\"\n >\n {{ `全选当前结果 (${allFilteredSnapshotIds.length})` }}\n </NCheckbox>\n <template v-if=\"checkedRowKeys.length\">\n <NPopover>\n <template #trigger><NButton>批量下载</NButton></template>\n <NSpace vertical>\n <NButton\n :loading=\"batchDownloadZip.loading\"\n @click=\"batchDownloadZip.invoke\"\n >批量下载-快照</NButton\n >\n <NButton\n :loading=\"batchDownloadImage.loading\"\n @click=\"batchDownloadImage.invoke\"\n >批量下载-图片</NButton\n >\n </NSpace>\n </NPopover>\n <NPopover>\n <template #trigger><NButton>批量分享</NButton></template>\n <NSpace vertical>\n <NButton\n :loading=\"batchShareZipUrl.loading\"\n @click=\"batchShareZipUrl.invoke\"\n >批量生成链接-快照</NButton\n >\n <NButton\n :loading=\"batchShareImageUrl.loading\"\n @click=\"batchShareImageUrl.invoke\"\n >批量生成链接-图片</NButton\n >\n </NSpace>\n </NPopover>\n <NButton @click=\"batchDelete.invoke\">批量删除</NButton>\n <div h-full flex flex-items-center>\n {{ `已选中 ${checkedRowKeys.length} 个快照` }}\n </div>\n </template>\n </NSpace>\n <div flex-1 />\n <div flex gap-24px items-center pr-8px class=\"home-topbar-icons\">\n <NTooltip>\n <template #trigger>\n <NButton text @click=\"settingsDlgShow = true\"\n ><SvgIcon name=\"settings\"\n /></NButton>\n </template>\n 设置\n </NTooltip>\n <NPopover>\n <template #trigger\n ><NButton text><SvgIcon name=\"import\" /></NButton\n ></template>\n <NSpace vertical>\n <NButton\n :loading=\"importLocal.loading\"\n @click=\"importLocal.invoke()\"\n >导入本地文件</NButton\n >\n <NButton\n :loading=\"importNetwork.loading\"\n @click=\"showImportModal = true\"\n >导入网络文件</NButton\n >\n </NSpace>\n </NPopover>\n <NTooltip>\n <template #trigger>\n <RouterLink flex to=\"/device\"\n ><NButton text><SvgIcon name=\"device\" /></NButton\n ></RouterLink>\n </template>\n 连接设备\n </NTooltip>\n <DeviceControlTools />\n <NTooltip>\n <template #trigger>\n <a\n flex\n href=\"https://github.com/orgs/gkd-kit/discussions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <NButton text><SvgIcon name=\"discussion\" /></NButton>\n </a>\n </template>\n 讨论交流\n </NTooltip>\n <NTooltip>\n <template #trigger>\n <a\n flex\n href=\"https://github.com/cjy0812/inspect-plus\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <NButton text><SvgIcon name=\"github\" /></NButton>\n </a>\n </template>\n Github\n </NTooltip>\n </div>\n </div>\n\n <div class=\"flex-1 min-h-0 overflow-auto pr-6px\">\n <NSpin :show=\"loading\" class=\"h-full\">\n <div\n v-if=\"!loading && !groupedSnapshots.length\"\n py-40px\n text-center\n opacity-70\n >\n 未找到匹配快照\n </div>\n <NCollapse\n v-else\n v-model:expandedNames=\"expandedPackageNames\"\n :accordion=\"false\"\n :displayDirective=\"settingsStore.lowMemoryMode ? 'if' : 'show'\"\n >\n <NCollapseItem\n v-for=\"group in groupedSnapshots\"\n :key=\"group.packageName\"\n :name=\"group.packageName\"\n >\n <template #header>\n <div flex items-center gap-8px>\n <NCheckbox\n :checked=\"getCheckedStats(getGroupSnapshotIds(group)).checked\"\n :indeterminate=\"\n getCheckedStats(getGroupSnapshotIds(group)).indeterminate\n \"\n @click.stop\n @update:checked=\"\n setCheckedByIds(getGroupSnapshotIds(group), $event)\n \"\n />\n <NTag type=\"info\" size=\"small\">应用</NTag>\n <code>{{ `${group.appName} (${group.packageName})` }}</code>\n <NTag size=\"small\">{{ group.activities.length }} 个界面</NTag>\n <NTag\n v-if=\"getGroupRemark(getPackageRemarkKey(group.packageName))\"\n size=\"small\"\n class=\"max-w-240px\"\n >\n {{ getGroupRemark(getPackageRemarkKey(group.packageName)) }}\n </NTag>\n <NButton\n text\n size=\"tiny\"\n @click.stop=\"\n openGroupRemarkModal(\n getPackageRemarkKey(group.packageName),\n `应用备注: ${group.packageName}`,\n )\n \"\n >\n 备注\n </NButton>\n </div>\n </template>\n <NCollapse\n v-model:expandedNames=\"expandedActivityNames\"\n :accordion=\"false\"\n :displayDirective=\"settingsStore.lowMemoryMode ? 'if' : 'show'\"\n >\n <NCollapseItem\n v-for=\"activity in group.activities\"\n :key=\"`${group.packageName}::${activity.activityId}`\"\n :name=\"`${group.packageName}::${activity.activityId}`\"\n >\n <template #header>\n <div flex items-center gap-8px>\n <NCheckbox\n :checked=\"\n getCheckedStats(getActivitySnapshotIds(activity))\n .checked\n \"\n :indeterminate=\"\n getCheckedStats(getActivitySnapshotIds(activity))\n .indeterminate\n \"\n @click.stop\n @update:checked=\"\n setCheckedByIds(\n getActivitySnapshotIds(activity),\n $event,\n )\n \"\n />\n <NTag type=\"success\" size=\"small\">Activity</NTag>\n <code>{{ activity.activityId }}</code>\n <NTag size=\"small\"\n >{{ activity.snapshots.length }} 个快照</NTag\n >\n <NTag\n v-if=\"\n getGroupRemark(\n getActivityRemarkKey(\n group.packageName,\n activity.activityId,\n ),\n )\n \"\n size=\"small\"\n class=\"max-w-240px\"\n >\n {{\n getGroupRemark(\n getActivityRemarkKey(\n group.packageName,\n activity.activityId,\n ),\n )\n }}\n </NTag>\n <NButton\n text\n size=\"tiny\"\n @click.stop=\"\n openGroupRemarkModal(\n getActivityRemarkKey(\n group.packageName,\n activity.activityId,\n ),\n `界面备注: ${activity.activityId}`,\n )\n \"\n >\n 备注\n </NButton>\n </div>\n </template>\n <NSpace vertical :size=\"6\">\n <div\n v-for=\"item in activity.snapshots\"\n :key=\"item.id\"\n class=\"rounded-8px border border-solid px-10px py-6px transition-colors\"\n :class=\"[\n snapshotViewedTime[item.id]\n ? 'snapshot-row-viewed'\n : 'surface-card',\n ]\"\n >\n <div flex items-start gap-10px flex-wrap>\n <NCheckbox\n :checked=\"checkedSet.has(item.id)\"\n @update:checked=\"toggleChecked(item.id, $event)\"\n />\n <NPopover\n trigger=\"hover\"\n placement=\"right-start\"\n :flip=\"true\"\n :shift=\"true\"\n @update:show=\"\n if ($event) {\n ensurePreview(item.id);\n }\n \"\n >\n <template #trigger>\n <div\n class=\"min-w-0 inline-flex max-w-full cursor-default select-text flex-col\"\n @mouseenter=\"ensurePreview(item.id)\"\n >\n <div flex items-center gap-6px leading-18px>\n <NTag size=\"small\" type=\"warning\">{{\n dayjs(item.id).format('MM-DD HH:mm:ss')\n }}</NTag>\n <NTag\n v-if=\"snapshotViewedTime[item.id]\"\n size=\"small\"\n type=\"success\"\n >已查看</NTag\n >\n <span class=\"truncate font-600\">{{\n getAppInfo(item).name || item.appId\n }}</span>\n </div>\n <div text-12px mt-2px class=\"font-600\">\n 界面ID: {{ item.activityId || '(unknown)' }}\n </div>\n <div\n text-11px\n opacity-65\n leading-18px\n flex\n flex-wrap\n gap-x-10px\n >\n <span mr-10px\n >创建:\n {{\n dayjs(item.id).format('YYYY-MM-DD HH:mm:ss')\n }}</span\n >\n <span\n >导入:\n {{\n dayjs(\n snapshotImportTime[item.id] || item.id,\n ).format('YYYY-MM-DD HH:mm:ss')\n }}</span\n >\n </div>\n <div\n text-11px\n opacity-65\n leading-18px\n flex\n flex-wrap\n gap-x-10px\n >\n <span mr-10px\n >设备:\n {{\n `${getDevice(item).manufacturer} Android ${getDevice(item).release || ''}`\n }}</span\n >\n <span mr-10px>应用ID: {{ item.appId }}</span>\n <span mr-10px\n >版本代码:\n {{ getAppInfo(item).versionCode }}</span\n >\n <span\n >版本号:\n {{\n getAppInfo(item).versionName || 'unknown'\n }}</span\n >\n </div>\n </div>\n </template>\n <div class=\"inline-block w-fit max-w-90vw\">\n <img\n v-if=\"previewUrlMap[item.id]\"\n :src=\"previewUrlMap[item.id]\"\n class=\"block h-auto w-auto max-h-320px max-w-80vw rounded-6px\"\n alt=\"preview\"\n />\n <div v-else py-20px text-center opacity-70>\n {{\n previewErrorMap[item.id] ||\n (previewLoadingMap[item.id]\n ? '预览加载中...'\n : '暂无预览')\n }}\n </div>\n </div>\n </NPopover>\n <NButton\n text\n size=\"small\"\n class=\"ml-auto shrink-0\"\n @click=\"goToSnapshot(item.id)\"\n >\n <template #icon><SvgIcon name=\"code\" /></template>\n </NButton>\n <ActionCard\n :snapshot=\"item\"\n :showPreview=\"false\"\n :onDelete=\"updateSnapshots\"\n />\n </div>\n </div>\n </NSpace>\n </NCollapseItem>\n </NCollapse>\n </NCollapseItem>\n </NCollapse>\n </NSpin>\n </div>\n </div>\n\n <NModal\n :show=\"showImportModal\"\n preset=\"dialog\"\n title=\"导入网络文件\"\n :showIcon=\"false\"\n positiveText=\"确认\"\n negativeText=\"取消\"\n style=\"width: 800px\"\n :loading=\"importNetwork.loading\"\n @positiveClick=\"importNetwork.invoke\"\n @negativeClick=\"showImportModal = false\"\n @close=\"showImportModal = false\"\n @esc=\"showImportModal = false\"\n @afterEnter=\"inputImportRef?.focus()\"\n @afterLeave=\"textImportValue = ''\"\n >\n <NInput\n ref=\"inputImportRef\"\n :value=\"textImportValue\"\n type=\"textarea\"\n :placeholder=\"`1.支持 ZIP 文件链接\\n2.支持快照分享链接\\n每行一个\\n空白行自动忽略\\n非法链接行自动忽略`\"\n :autosize=\"{ minRows: 8, maxRows: 16 }\"\n :inputProps=\"{ style: 'white-space: nowrap;' }\"\n @update:value=\"\n if (!importNetwork.loading) {\n textImportValue = $event;\n }\n \"\n />\n </NModal>\n\n <SettingsModal v-model:show=\"settingsDlgShow\" />\n\n <NModal\n :show=\"groupRemarkModal.show\"\n preset=\"dialog\"\n :title=\"groupRemarkModal.title || '分组备注'\"\n :showIcon=\"false\"\n positiveText=\"保存\"\n negativeText=\"取消\"\n @positiveClick=\"saveGroupRemark\"\n @negativeClick=\"groupRemarkModal.show = false\"\n @close=\"groupRemarkModal.show = false\"\n >\n <NInput\n v-model:value=\"groupRemarkModal.value\"\n type=\"textarea\"\n maxlength=\"160\"\n show-count\n :autosize=\"{ minRows: 3, maxRows: 6 }\"\n placeholder=\"请输入备注\"\n />\n </NModal>\n</template>\n"],"names":["style","c","cB","fadeInTransition","cM","STROKE_WIDTH","spinProps","useTheme","__unplugin_components_10","defineComponent","props","mergedClsPrefixRef","inlineThemeDisabled","useConfig","themeRef","spinLight","cssVarsRef","computed","spinSize","cubicBezierEaseInOut","self","opacitySpinning","color","textColor","size","pxfy","createKey","themeClassHandle","useThemeClass","compitableShow","useCompitable","activeRef","ref","watchEffect","onCleanup","timerId","delay","strokeWidth","_a","_b","$slots","mergedClsPrefix","description","rotate","descriptionNode","h","icon","NBaseLoading","Transition","route","useRoute","router","useRouter","settingsStore","snapshotImportTime","snapshotViewedTime","useStorageStore","snapshots","shallowRef","loading","updateSnapshots","shallowSnapshotStorage","checkedRowKeys","onMounted","filterOption","shallowReactive","filteredSnapshots","query","s","getAppInfo","groupedSnapshots","buildGroupedSnapshots","expandedPackageNames","expandedActivityNames","g","a","goToSnapshot","snapshotId","filterQuery","importLocal","useTask","_files","importFromLocal","useEventListener","e","getDragEventFiles","showImportModal","textImportValue","importNetwork","urls","u","toValidURL","importFromNetwork","target","className","dataTransfer","text","checkedSet","allFilteredSnapshotIds","getActivitySnapshotIds","activity","getGroupSnapshotIds","group","getCheckedStats","ids","checkedCount","id","setCheckedByIds","checked","next","idSet","toggleChecked","k","checkedSnapshots","snapshotStorage","batchDelete","res","rej","dialog","batchDownloadImage","batchImageDownloadZip","batchDownloadZip","batchZipDownloadZip","batchShareImageUrl","waitShareAgree","imageIds","batchCreateImageId","showTextDLg","getImagUrl","batchShareZipUrl","zipUrls","batchCreateZipUrl","primaryUrls","getOfficialImportUrl","getImportUrl","customUrls","getCustomDomainImportUrl","settingsDlgShow","inputImportRef","groupRemarkModal","ensureGroupRemarks","getGroupRemark","key","getPackageRemarkKey","packageName","getActivityRemarkKey","activityId","openGroupRemarkModal","title","saveGroupRemark","value","previewCacheLimit","previewUrlMap","previewLoadingMap","previewErrorMap","ensurePreview","usePreviewCache","screenshotStorage","_createElementVNode","_hoisted_1","_hoisted_2","_createVNode","_component_NSpace","_component_NInputGroup","_component_NInput","_unref","_cache","$event","_withKeys","_component_NButton","_component_SvgIcon","_createBlock","_component_NCheckbox","_createTextVNode","_toDisplayString","_createElementBlock","_Fragment","_component_NPopover","_hoisted_3","_hoisted_4","_component_NTooltip","_component_RouterLink","DeviceControlTools","_hoisted_5","_hoisted_6","_hoisted_7","_component_NSpin","_hoisted_8","_component_NCollapse","_renderList","_component_NCollapseItem","_hoisted_9","_component_NTag","_withModifiers","_openBlock","_hoisted_10","item","_hoisted_11","_hoisted_13","dayjs","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","getDevice","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_24","ActionCard","_component_NModal","SettingsModal"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{d as x,k as y,l as I,b9 as v,o as w,ba as b,aZ as S,a$ as m,b0 as n,bb as R,t as u,z as i,F as f,v as g,H as B,aW as N,aX as U,G as V,R as h,U as q,Q as C,C as k}from"./index-DfAptoUr.js";import{a as F,g as z}from"./snapshot-D02dgTNQ.js";import{a as D}from"./import-ohlNKANL.js";const Q={"page-size":"",flex:"","gap-5px":"","pt-40px":"","flex-col":"","flex-items-center":""},T={key:0,"mb-20px":""},M=x({__name:"ImportPage",setup(E){const p=y(),l=I(),c=h(!0),a=h("加载中..."),d=async e=>{l.replace({name:"snapshot",params:{snapshotId:e},query:q(p.query,["str","gkd"])})},s=String(p.query.url||""),t=v(s),{importSnapshotId:o,snapshotImportId:_}=C();return w(async()=>{if(!b(s)){S.error("非法URL参数"),await m(1e3),l.replace({path:"/"});return}if(t){const e=o[t];if(e)if(await F.getItem(e)){d(e);return}else delete o[t]}n.start();try{const[e]=await D(t?R(t):s)||[];e&&(n.finish(),e!=null&&e.id?(t&&(o[t]=e.id,_[e.id]=t),c.value=!1,await m(500),d(e.id)):a.value="获取资源失败")}catch{n.error(),a.value="加载资源失败"}}),(e,r)=>(k(),u("div",Q,[i(z)()?B("",!0):(k(),u("div",T,[...r[0]||(r[0]=[f(" 建议安装并启用 ",-1),g("a",{href:"https://github.com/gkd-kit/network-extension",target:"_blank",rel:"noopener noreferrer"}," 油猴脚本 ",-1),f(" 获取更快加载速度 ",-1)])])),N(g("div",null,V(i(a)),513),[[U,i(c)]])]))}});export{M as default};
|
|
2
|
+
//# sourceMappingURL=ImportPage-DNhXkQRM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImportPage-DNhXkQRM.js","sources":["../../src/views/ImportPage.vue"],"sourcesContent":["<script setup lang=\"tsx\">\nimport { loadingBar, message } from '@/utils/discrete';\nimport { gmOk } from '@/utils/gm';\nimport { importFromNetwork } from '@/utils/import';\nimport { delay, filterQuery } from '@/utils/others';\nimport { snapshotStorage } from '@/utils/snapshot';\nimport { getImportFileUrl, getImportId, isValidUrl } from '@/utils/url';\n\nconst route = useRoute();\nconst router = useRouter();\n\nconst loading = shallowRef(true);\nconst tip = shallowRef(`加载中...`);\n\nconst goToSnapshot = async (snapshotId: number) => {\n router.replace({\n name: 'snapshot',\n params: { snapshotId },\n query: filterQuery(route.query, ['str', 'gkd']),\n });\n};\n\nconst url = String(route.query.url || ``);\nconst importId = getImportId(url);\nconst { importSnapshotId, snapshotImportId } = useStorageStore();\n\nonMounted(async () => {\n if (!isValidUrl(url)) {\n message.error(`非法URL参数`);\n await delay(1000);\n router.replace({\n path: `/`,\n });\n return;\n }\n if (importId) {\n const snapshotId = importSnapshotId[importId];\n if (snapshotId) {\n const snapshot = await snapshotStorage.getItem(snapshotId);\n if (snapshot) {\n goToSnapshot(snapshotId);\n return;\n } else {\n delete importSnapshotId[importId];\n }\n }\n }\n loadingBar.start();\n try {\n const [snapshot] =\n (await importFromNetwork(importId ? getImportFileUrl(importId) : url)) ||\n [];\n if (snapshot) {\n loadingBar.finish();\n if (snapshot?.id) {\n if (importId) {\n importSnapshotId[importId] = snapshot.id;\n snapshotImportId[snapshot.id] = importId;\n }\n loading.value = false;\n await delay(500);\n goToSnapshot(snapshot.id);\n } else {\n tip.value = `获取资源失败`;\n }\n }\n } catch {\n loadingBar.error();\n tip.value = `加载资源失败`;\n }\n});\n</script>\n<template>\n <div page-size flex gap-5px pt-40px flex-col flex-items-center>\n <div v-if=\"!gmOk()\" mb-20px>\n 建议安装并启用\n <a\n href=\"https://github.com/gkd-kit/network-extension\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n 油猴脚本\n </a>\n 获取更快加载速度\n </div>\n <div v-show=\"loading\">\n {{ tip }}\n </div>\n </div>\n</template>\n"],"names":["route","useRoute","router","useRouter","loading","shallowRef","tip","goToSnapshot","snapshotId","replace","name","params","query","filterQuery","url","String","importId","getImportId","importSnapshotId","snapshotImportId","useStorageStore","onMounted","isValidUrl","message","error","delay","path","snapshotStorage","getItem","loadingBar","start","snapshot","importFromNetwork","getImportFileUrl","finish","id","value","_openBlock","_createElementBlock","_hoisted_1","_unref","gmOk","_hoisted_2","_cache","_createElementVNode","href","target","rel","_withDirectives"],"mappings":"ubAQA,MAAMA,EAAQC,EAAQ,EAChBC,EAASC,EAAS,EAElBC,EAAUC,EAAW,EAAI,EACzBC,EAAMD,EAAW,QAAQ,EAEzBE,EAAe,MAAOC,GAAuB,CACjDN,EAAOO,QAAQ,CACbC,KAAM,WACNC,OAAQ,CAAEH,WAAAA,GACVI,MAAOC,EAAYb,EAAMY,MAAO,CAAC,MAAO,KAAK,CAAC,CAChD,CAAC,CACH,EAEME,EAAMC,OAAOf,EAAMY,MAAME,KAAO,EAAE,EAClCE,EAAWC,EAAYH,CAAG,EAC1B,CAAEI,iBAAAA,EAAkBC,iBAAAA,GAAqBC,EAAe,EAE9DC,OAAAA,EAAU,SAAY,CACpB,GAAI,CAACC,EAAWR,CAAG,EAAG,CACpBS,EAAQC,MAAM,SAAS,EACvB,MAAMC,EAAM,GAAI,EAChBvB,EAAOO,QAAQ,CACbiB,KAAM,GACR,CAAC,EACD,MACF,CACA,GAAIV,EAAU,CACZ,MAAMR,EAAaU,EAAiBF,CAAQ,EAC5C,GAAIR,EAEF,GADiB,MAAMmB,EAAgBC,QAAQpB,CAAU,EAC3C,CACZD,EAAaC,CAAU,EACvB,MACF,MACE,OAAOU,EAAiBF,CAAQ,CAGtC,CACAa,EAAWC,MAAK,EAChB,GAAI,CACF,KAAM,CAACC,CAAQ,EACZ,MAAMC,EAAkBhB,EAAWiB,EAAiBjB,CAAQ,EAAIF,CAAG,GACpE,CAAA,EACEiB,IACFF,EAAWK,OAAM,EACbH,GAAAA,MAAAA,EAAUI,IACRnB,IACFE,EAAiBF,CAAQ,EAAIe,EAASI,GACtChB,EAAiBY,EAASI,EAAE,EAAInB,GAElCZ,EAAQgC,MAAQ,GAChB,MAAMX,EAAM,GAAG,EACflB,EAAawB,EAASI,EAAE,GAExB7B,EAAI8B,MAAQ,SAGlB,MAAQ,CACNP,EAAWL,MAAK,EAChBlB,EAAI8B,MAAQ,QACd,CACF,CAAC,UAGCC,EAAA,EAAAC,EAeM,MAfNC,EAeM,CAdQC,EAAAC,CAAA,EAAI,YAAhBJ,EAAA,EAAAC,EAUM,MAVNI,EAUM,CAAA,GAAAC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,GAVsB,YAE1B,EAAA,EAAAC,EAMI,IAAA,CALFC,KAAK,+CACLC,OAAO,SACPC,IAAI,uBACL,SAED,EAAA,IAAI,aAEN,EAAA,CAAA,MACAC,EAAAJ,EAEM,aADDJ,EAAAlC,CAAA,CAAG,EAAA,GAAA,EAAA,IADKkC,EAAApC,CAAA,CAAO,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{N as B,_ as I,d as g,A as V,S as q,a as A}from"./index-BlWrRSuL.js";import{d as E,k as F,l as L,R as D,aY as G,av as H,q as h,t as r,v as n,x as a,y as u,F as J,B as M,J as P,z as t,_ as U,L as Y,G as p,H as d,I as $,i as x,C as i}from"./index-DfAptoUr.js";import{a as j}from"./node-TLy2IyRG.js";const K={flex:"","items-center":"","gap-16px":"","pt-12px":"","px-12px":""},O={flex:"","flex-col":"","items-center":"","p-8px":"",text:"40px/52px"},Q={key:0,"overflow-x-scroll":"","scrollbar-hidden":""},W={key:1,"whitespace-pre-wrap":""},X={key:0},Z={"bg-red":"",relative:""},ee={key:0},te={key:1,"pl-20px":""},oe={absolute:"","left-0":"","right-0":"","top--12px":"",flex:"","flex-col":"","items-center":"","animate-bounce":"","pointer-events-none":""},se={key:1},ne={key:0,"p-4px":"",gkd_code:"",class:"selector-error-box"},ce=E({__name:"SelectorPage",setup(re){const y=F(),k=L(),T=()=>{const e=String(y.query.gkd||"");if(!e)return e;try{return g.decode(e)}catch{return m(""),""}},m=e=>{k.replace({query:{gkd:e?g.encode(e):void 0}})},c=D(T()),w=G(c,500),l=x(()=>(c.value&&w.value).trim());H(l,()=>{m(l.value)});const _=x(()=>{if(l.value)try{return A.Companion.parseAst(l.value)}catch(e){return e}}),v=x(()=>{if(_.value instanceof V)return _.value}),s=x(()=>{const e=_.value,o=l.value;if(e instanceof q)return{headText:o.substring(0,e.index),errorText:o.substring(e.index,e.index+1),tailText:o.substring(e.index+1),message:e.outMessage}});return(e,o)=>{const f=h("SvgIcon"),N=B,R=h("RouterLink"),b=M,S=j,C=U;return i(),r($,null,[n("div",K,[a(S,{placement:"right"},{trigger:u(()=>[a(b,{text:""},{icon:u(()=>[a(R,{to:"/",color:"inherit"},{default:u(()=>[a(N,{size:"24"},{default:u(()=>[a(f,{name:"home"})]),_:1})]),_:1})]),_:1})]),default:u(()=>[o[1]||(o[1]=J(" 回到首页 ",-1))]),_:1}),o[2]||(o[2]=n("div",{flex:"","gap-16px":"","items-center":""},[n("div",{"text-18px":""},"测试选择器"),n("div",null,"语法高亮/错误解析")],-1))]),n("div",O,[a(C,{value:t(c),"onUpdate:value":o[0]||(o[0]=z=>P(c)?c.value=z:null),type:"textarea",placeholder:"请输入选择器",class:"gkd_code py-4px",style:{"--n-font-size":"20px","--n-line-height-textarea":"28px"},autosize:{minRows:3,maxRows:8}},null,8,["value"]),o[3]||(o[3]=n("div",{"h-20px":""},null,-1)),n("div",{"max-w-full":"","mb-8px":"","p-4px":"",gkd_code:"","transition-colors":"",class:Y(["selector-ast-view",t(s)?"selector-ast-view-error":""])},[t(v)?(i(),r("div",Q,[a(I,{source:t(l),node:t(v)},null,8,["source","node"])])):t(s)?(i(),r("span",W,[t(s).headText?(i(),r("span",X,p(t(s).headText),1)):d("",!0),n("span",Z,[t(s).errorText?(i(),r("span",ee,p(t(s).errorText),1)):(i(),r("span",te)),n("div",oe,[a(f,{name:"arrow",class:"text-18px selector-error-arrow"})])]),t(s).tailText?(i(),r("span",se,p(t(s).tailText),1)):d("",!0)])):d("",!0)],2),t(s)?(i(),r("div",ne,p(t(s).message),1)):d("",!0)])],64)}}});export{ce as default};
|
|
2
|
+
//# sourceMappingURL=SelectorPage-BPf1NT6K.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectorPage-BPf1NT6K.js","sources":["../../src/views/SelectorPage.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport SelectorText from '@/components/SelectorText.vue';\nimport {\n AstNode,\n GkdException,\n Selector,\n SyntaxException,\n} from '@gkd-kit/selector';\nimport * as base64url from 'universal-base64url';\n\nconst route = useRoute();\nconst router = useRouter();\n\nconst getTextFromRoute = () => {\n const t = String(route.query.gkd || '');\n if (!t) return t;\n try {\n return base64url.decode(t);\n } catch {\n setTextToRoute('');\n return '';\n }\n};\nconst setTextToRoute = (t: string) => {\n router.replace({ query: { gkd: t ? base64url.encode(t) : undefined } });\n};\n\nconst inputText = shallowRef(getTextFromRoute());\nconst lazyText = useDebounce(inputText, 500);\nconst text = computed(() => {\n return (inputText.value && lazyText.value).trim();\n});\nwatch(text, () => {\n setTextToRoute(text.value);\n});\nconst result = computed(() => {\n if (!text.value) return;\n try {\n return Selector.Companion.parseAst(text.value);\n } catch (e) {\n return e as GkdException;\n }\n});\n\nconst ast = computed(() => {\n if (result.value instanceof AstNode) {\n return result.value;\n }\n return undefined;\n});\n\nconst error = computed(() => {\n const e = result.value;\n const t = text.value;\n if (e instanceof SyntaxException) {\n return {\n headText: t.substring(0, e.index),\n errorText: t.substring(e.index, e.index + 1),\n tailText: t.substring(e.index + 1),\n message: e.outMessage,\n };\n }\n return undefined;\n});\n</script>\n<template>\n <div flex items-center gap-16px pt-12px px-12px>\n <NTooltip placement=\"right\">\n <template #trigger>\n <NButton text>\n <template #icon>\n <RouterLink to=\"/\" color=\"inherit\">\n <NIcon size=\"24\">\n <SvgIcon name=\"home\" />\n </NIcon>\n </RouterLink>\n </template>\n </NButton>\n </template>\n 回到首页\n </NTooltip>\n <div flex gap-16px items-center>\n <div text-18px>测试选择器</div>\n <div>语法高亮/错误解析</div>\n </div>\n </div>\n <div flex flex-col items-center p-8px text=\"40px/52px\">\n <NInput\n v-model:value=\"inputText\"\n type=\"textarea\"\n placeholder=\"请输入选择器\"\n class=\"gkd_code py-4px\"\n style=\"--n-font-size: 20px; --n-line-height-textarea: 28px\"\n :autosize=\"{\n minRows: 3,\n maxRows: 8,\n }\"\n />\n <div h-20px />\n <div\n max-w-full\n mb-8px\n p-4px\n gkd_code\n transition-colors\n class=\"selector-ast-view\"\n :class=\"error ? `selector-ast-view-error` : ``\"\n >\n <div v-if=\"ast\" overflow-x-scroll scrollbar-hidden>\n <SelectorText :source=\"text\" :node=\"ast\" />\n </div>\n <span v-else-if=\"error\" whitespace-pre-wrap>\n <span v-if=\"error.headText\">{{ error.headText }}</span>\n <span bg-red relative>\n <span v-if=\"error.errorText\">{{ error.errorText }}</span>\n <span v-else pl-20px />\n <div\n absolute\n left-0\n right-0\n top--12px\n flex\n flex-col\n items-center\n animate-bounce\n pointer-events-none\n >\n <SvgIcon name=\"arrow\" class=\"text-18px selector-error-arrow\" />\n </div>\n </span>\n <span v-if=\"error.tailText\">{{ error.tailText }}</span>\n </span>\n </div>\n <div v-if=\"error\" p-4px gkd_code class=\"selector-error-box\">\n {{ error.message }}\n </div>\n </div>\n</template>\n"],"names":["route","useRoute","router","useRouter","getTextFromRoute","t","base64url.decode","setTextToRoute","base64url.encode","inputText","shallowRef","lazyText","useDebounce","text","computed","watch","result","Selector","ast","AstNode","error","SyntaxException","_createElementVNode","_hoisted_1","_createVNode","_component_NTooltip","_component_NButton","_component_RouterLink","_component_NIcon","_component_SvgIcon","_hoisted_2","_component_NInput","_unref","$event","_normalizeClass","_openBlock","_createElementBlock","_hoisted_3","SelectorText","_hoisted_4","_hoisted_5","_toDisplayString","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11"],"mappings":"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"}
|