@gkd-kit/docs 0.0.1778124232018 → 0.0.1788031478448
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/.vitepress/dist/404.html +11 -13
- package/.vitepress/dist/404_.md +11 -13
- package/.vitepress/dist/_config.json +1 -1
- package/.vitepress/dist/api/index.html +16 -18
- package/.vitepress/dist/api/index_.md +16 -18
- package/.vitepress/dist/api/interfaces/RawApp.html +15 -17
- package/.vitepress/dist/api/interfaces/RawAppGroup.html +19 -26
- package/.vitepress/dist/api/interfaces/RawAppGroup_.md +19 -26
- package/.vitepress/dist/api/interfaces/RawAppRule.html +15 -37
- package/.vitepress/dist/api/interfaces/RawAppRuleProps.html +15 -17
- package/.vitepress/dist/api/interfaces/RawAppRuleProps_.md +15 -17
- package/.vitepress/dist/api/interfaces/RawAppRule_.md +15 -37
- package/.vitepress/dist/api/interfaces/RawApp_.md +15 -17
- package/.vitepress/dist/api/interfaces/RawCategory.html +15 -17
- package/.vitepress/dist/api/interfaces/RawCategory_.md +15 -17
- package/.vitepress/dist/api/interfaces/RawCommonProps.html +20 -22
- package/.vitepress/dist/api/interfaces/RawCommonProps_.md +20 -22
- package/.vitepress/dist/api/interfaces/RawGlobalApp.html +15 -17
- package/.vitepress/dist/api/interfaces/RawGlobalApp_.md +15 -17
- package/.vitepress/dist/api/interfaces/RawGlobalGroup.html +15 -22
- package/.vitepress/dist/api/interfaces/RawGlobalGroup_.md +15 -22
- package/.vitepress/dist/api/interfaces/RawGlobalRule.html +15 -37
- package/.vitepress/dist/api/interfaces/RawGlobalRuleProps.html +15 -17
- package/.vitepress/dist/api/interfaces/RawGlobalRuleProps_.md +15 -17
- package/.vitepress/dist/api/interfaces/RawGlobalRule_.md +15 -37
- package/.vitepress/dist/api/interfaces/RawGroupProps.html +15 -22
- package/.vitepress/dist/api/interfaces/RawGroupProps_.md +15 -22
- package/.vitepress/dist/api/interfaces/RawRuleProps.html +30 -37
- package/.vitepress/dist/api/interfaces/RawRuleProps_.md +30 -37
- package/.vitepress/dist/api/interfaces/RawSubscription.html +16 -18
- package/.vitepress/dist/api/interfaces/RawSubscription_.md +16 -18
- package/.vitepress/dist/api/type-aliases/IArray.html +18 -20
- package/.vitepress/dist/api/type-aliases/IArray_.md +18 -20
- package/.vitepress/dist/api/type-aliases/Integer.html +16 -18
- package/.vitepress/dist/api/type-aliases/IntegerMatcher.html +15 -17
- package/.vitepress/dist/api/type-aliases/IntegerMatcher_.md +15 -17
- package/.vitepress/dist/api/type-aliases/Integer_.md +16 -18
- package/.vitepress/dist/api/type-aliases/Position.html +22 -24
- package/.vitepress/dist/api/type-aliases/Position_.md +22 -24
- package/.vitepress/dist/api/type-aliases/StringMatcher.html +15 -17
- package/.vitepress/dist/api/type-aliases/StringMatcher_.md +15 -17
- package/.vitepress/dist/api/type-aliases/SwipeArg.html +15 -17
- package/.vitepress/dist/api/type-aliases/SwipeArg_.md +15 -17
- package/.vitepress/dist/assets/api_index.md.CjQzKled.js +1 -0
- package/.vitepress/dist/assets/api_index.md.CjQzKled.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawApp.md.BpzQ9G66.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawApp.md.BpzQ9G66.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawAppGroup.md.Ck2PMmew.js +18 -0
- package/.vitepress/dist/assets/api_interfaces_RawAppGroup.md.Ck2PMmew.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawAppRule.md.svCCf5YM.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawAppRule.md.svCCf5YM.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawAppRuleProps.md.Djcgq66H.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawAppRuleProps.md.Djcgq66H.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawCategory.md.DHBN1t1h.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawCategory.md.DHBN1t1h.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawCommonProps.md.BqWR20Ki.js +6 -0
- package/.vitepress/dist/assets/api_interfaces_RawCommonProps.md.BqWR20Ki.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawGlobalApp.md.nzd5SVi6.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawGlobalApp.md.nzd5SVi6.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawGlobalGroup.md.BX5E3cY2.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawGlobalGroup.md.BX5E3cY2.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawGlobalRule.md.BBIb-pml.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawGlobalRule.md.BBIb-pml.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawGlobalRuleProps.md.CnnmlY17.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawGlobalRuleProps.md.CnnmlY17.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawGroupProps.md.b_Emqo9z.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawGroupProps.md.b_Emqo9z.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawRuleProps.md.Dub6x9Ex.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawRuleProps.md.Dub6x9Ex.lean.js +1 -0
- package/.vitepress/dist/assets/api_interfaces_RawSubscription.md.DGEaq3vF.js +4 -0
- package/.vitepress/dist/assets/api_interfaces_RawSubscription.md.DGEaq3vF.lean.js +1 -0
- package/.vitepress/dist/assets/api_type-aliases_IArray.md.CaN7hADu.js +4 -0
- package/.vitepress/dist/assets/api_type-aliases_IArray.md.CaN7hADu.lean.js +1 -0
- package/.vitepress/dist/assets/api_type-aliases_Integer.md.Dm63ynqV.js +2 -0
- package/.vitepress/dist/assets/api_type-aliases_Integer.md.Dm63ynqV.lean.js +1 -0
- package/.vitepress/dist/assets/api_type-aliases_IntegerMatcher.md.BE39eIyQ.js +1 -0
- package/.vitepress/dist/assets/api_type-aliases_IntegerMatcher.md.BE39eIyQ.lean.js +1 -0
- package/.vitepress/dist/assets/api_type-aliases_Position.md.CieLiaPU.js +16 -0
- package/.vitepress/dist/assets/api_type-aliases_Position.md.CieLiaPU.lean.js +1 -0
- package/.vitepress/dist/assets/api_type-aliases_StringMatcher.md.DMiH2Jb8.js +1 -0
- package/.vitepress/dist/assets/api_type-aliases_StringMatcher.md.DMiH2Jb8.lean.js +1 -0
- package/.vitepress/dist/assets/api_type-aliases_SwipeArg.md.CJ5jBhMZ.js +1 -0
- package/.vitepress/dist/assets/api_type-aliases_SwipeArg.md.CJ5jBhMZ.lean.js +1 -0
- package/.vitepress/dist/assets/app.DsMGk2Gm.js +1 -0
- package/.vitepress/dist/assets/chunks/@localSearchIndexroot.DWHYjgK3.js +1 -0
- package/.vitepress/dist/assets/chunks/FileSaver.min.mmHyTxhb.js +1 -0
- package/.vitepress/dist/assets/chunks/VPLocalSearchBox.cfebC-xP.js +3 -0
- package/.vitepress/dist/assets/chunks/framework.bo_0njjP.js +5 -0
- package/.vitepress/dist/assets/chunks/metadata.0dc14c20.js +1 -0
- package/.vitepress/dist/assets/chunks/rolldown-runtime.CbXtAM7H.js +1 -0
- package/.vitepress/dist/assets/chunks/theme.BqxP_Qp6.js +1 -0
- package/.vitepress/dist/assets/guide_example.md.DLHK84th.js +1 -0
- package/.vitepress/dist/assets/guide_example.md.DLHK84th.lean.js +1 -0
- package/.vitepress/dist/assets/guide_external.md.gUhHg9ej.js +1 -0
- package/.vitepress/dist/assets/guide_external.md.gUhHg9ej.lean.js +1 -0
- package/.vitepress/dist/assets/guide_faq.md.DeiwxCAf.js +21 -0
- package/.vitepress/dist/assets/guide_faq.md.DeiwxCAf.lean.js +1 -0
- package/.vitepress/dist/assets/guide_index.md.6qboURPf.js +1 -0
- package/.vitepress/dist/assets/guide_index.md.6qboURPf.lean.js +1 -0
- package/.vitepress/dist/assets/guide_node.md.CwfEt3rN.js +1 -0
- package/.vitepress/dist/assets/guide_node.md.CwfEt3rN.lean.js +1 -0
- package/.vitepress/dist/assets/guide_optimize.md.FR-Zkx4h.js +1 -0
- package/.vitepress/dist/assets/guide_optimize.md.FR-Zkx4h.lean.js +1 -0
- package/.vitepress/dist/assets/guide_privacy.md.DBrgK5-u.js +1 -0
- package/.vitepress/dist/assets/guide_privacy.md.DBrgK5-u.lean.js +1 -0
- package/.vitepress/dist/assets/guide_selector.md.nAYYctX6.js +1 -0
- package/.vitepress/dist/assets/guide_selector.md.nAYYctX6.lean.js +1 -0
- package/.vitepress/dist/assets/guide_snapshot.md.AsADTlKo.js +1 -0
- package/.vitepress/dist/assets/guide_snapshot.md.AsADTlKo.lean.js +1 -0
- package/.vitepress/dist/assets/guide_sponsor.md.DZrghTwB.js +1 -0
- package/.vitepress/dist/assets/guide_sponsor.md.DZrghTwB.lean.js +1 -0
- package/.vitepress/dist/assets/{guide_subscription.md.b3kL74Yn.js → guide_subscription.md.u5UT7BiK.js} +6 -6
- package/.vitepress/dist/assets/guide_subscription.md.u5UT7BiK.lean.js +1 -0
- package/.vitepress/dist/assets/guide_terms.md.DFt17QYh.js +1 -0
- package/.vitepress/dist/assets/guide_terms.md.DFt17QYh.lean.js +1 -0
- package/.vitepress/dist/assets/guide_what-is-gkd.md.nCfci---.js +1 -0
- package/.vitepress/dist/assets/guide_what-is-gkd.md.nCfci---.lean.js +1 -0
- package/.vitepress/dist/assets/{index.md.C7gsJKtc.js → index.md.BdZV93Gs.js} +1 -1
- package/.vitepress/dist/assets/{index.md.C7gsJKtc.lean.js → index.md.BdZV93Gs.lean.js} +1 -1
- package/.vitepress/dist/assets/inter-italic-cyrillic-ext._dlW9xFb.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-cyrillic.D7dRslh9.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-greek-ext.Ct-Tf2bq.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-greek.DNcpQ8QC.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-latin-ext.DytegdRQ.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-latin.CoImASkB.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-symbols.DBflboKE.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-vietnamese.BI5UxJD-.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-cyrillic-ext.BeNbU08G.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-cyrillic.CD0kT8R4.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-greek-ext.CFAEQ5Ow.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-greek.Dsf7YjP7.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-latin-ext.Dl_ayf4-.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-latin.BOE8-mWI.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-symbols.w-B2-dTa.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-vietnamese.CpqCnS2H.woff2 +0 -0
- package/.vitepress/dist/assets/polyfills.CHgXubMX.js +3 -0
- package/.vitepress/dist/assets/style.sQiVUa0J.css +2 -0
- package/.vitepress/dist/guide/example.html +15 -17
- package/.vitepress/dist/guide/example_.md +15 -17
- package/.vitepress/dist/guide/external.html +15 -17
- package/.vitepress/dist/guide/external_.md +15 -17
- package/.vitepress/dist/guide/faq.html +16 -18
- package/.vitepress/dist/guide/faq_.md +16 -18
- package/.vitepress/dist/guide/index.html +15 -17
- package/.vitepress/dist/guide/index_.md +15 -17
- package/.vitepress/dist/guide/node.html +15 -17
- package/.vitepress/dist/guide/node_.md +15 -17
- package/.vitepress/dist/guide/optimize.html +15 -17
- package/.vitepress/dist/guide/optimize_.md +15 -17
- package/.vitepress/dist/guide/privacy.html +15 -17
- package/.vitepress/dist/guide/privacy_.md +15 -17
- package/.vitepress/dist/guide/selector.html +21 -23
- package/.vitepress/dist/guide/selector_.md +21 -23
- package/.vitepress/dist/guide/snapshot.html +15 -17
- package/.vitepress/dist/guide/snapshot_.md +15 -17
- package/.vitepress/dist/guide/sponsor.html +15 -17
- package/.vitepress/dist/guide/sponsor_.md +15 -17
- package/.vitepress/dist/guide/subscription.html +20 -22
- package/.vitepress/dist/guide/subscription_.md +20 -22
- package/.vitepress/dist/guide/terms.html +15 -17
- package/.vitepress/dist/guide/terms_.md +15 -17
- package/.vitepress/dist/guide/what-is-gkd.html +15 -17
- package/.vitepress/dist/guide/what-is-gkd_.md +15 -17
- package/.vitepress/dist/hashmap.json +1 -1
- package/.vitepress/dist/index.html +15 -17
- package/.vitepress/dist/index_.md +15 -17
- package/_config.json +1 -1
- package/package.json +1 -4
- package/.vitepress/dist/assets/api_index.md.DbsdFYfN.js +0 -1
- package/.vitepress/dist/assets/api_index.md.DbsdFYfN.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawApp.md.VF5jpSTM.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawApp.md.VF5jpSTM.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawAppGroup.md.CIX1JDEc.js +0 -23
- package/.vitepress/dist/assets/api_interfaces_RawAppGroup.md.CIX1JDEc.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawAppRule.md.DhYtItNA.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawAppRule.md.DhYtItNA.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawAppRuleProps.md.B7FJNPoD.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawAppRuleProps.md.B7FJNPoD.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawCategory.md.r-sNQdvB.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawCategory.md.r-sNQdvB.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawCommonProps.md.CZf8W6jX.js +0 -6
- package/.vitepress/dist/assets/api_interfaces_RawCommonProps.md.CZf8W6jX.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawGlobalApp.md.Pg3dMO1q.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawGlobalApp.md.Pg3dMO1q.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawGlobalGroup.md.C6tJ8Ztc.js +0 -6
- package/.vitepress/dist/assets/api_interfaces_RawGlobalGroup.md.C6tJ8Ztc.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawGlobalRule.md.DKEsLdiI.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawGlobalRule.md.DKEsLdiI.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawGlobalRuleProps.md.DCuw4zBK.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawGlobalRuleProps.md.DCuw4zBK.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawGroupProps.md.BQw600Ow.js +0 -6
- package/.vitepress/dist/assets/api_interfaces_RawGroupProps.md.BQw600Ow.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawRuleProps.md.CEwmTzSR.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawRuleProps.md.CEwmTzSR.lean.js +0 -1
- package/.vitepress/dist/assets/api_interfaces_RawSubscription.md.DH1bY2R2.js +0 -4
- package/.vitepress/dist/assets/api_interfaces_RawSubscription.md.DH1bY2R2.lean.js +0 -1
- package/.vitepress/dist/assets/api_type-aliases_IArray.md.mS9PXjxK.js +0 -4
- package/.vitepress/dist/assets/api_type-aliases_IArray.md.mS9PXjxK.lean.js +0 -1
- package/.vitepress/dist/assets/api_type-aliases_Integer.md.CD5PaiMa.js +0 -2
- package/.vitepress/dist/assets/api_type-aliases_Integer.md.CD5PaiMa.lean.js +0 -1
- package/.vitepress/dist/assets/api_type-aliases_IntegerMatcher.md.DffqKRFD.js +0 -1
- package/.vitepress/dist/assets/api_type-aliases_IntegerMatcher.md.DffqKRFD.lean.js +0 -1
- package/.vitepress/dist/assets/api_type-aliases_Position.md.OdVVrNbs.js +0 -16
- package/.vitepress/dist/assets/api_type-aliases_Position.md.OdVVrNbs.lean.js +0 -1
- package/.vitepress/dist/assets/api_type-aliases_StringMatcher.md.Dm_IN8ij.js +0 -1
- package/.vitepress/dist/assets/api_type-aliases_StringMatcher.md.Dm_IN8ij.lean.js +0 -1
- package/.vitepress/dist/assets/api_type-aliases_SwipeArg.md.BBrbAV2_.js +0 -1
- package/.vitepress/dist/assets/api_type-aliases_SwipeArg.md.BBrbAV2_.lean.js +0 -1
- package/.vitepress/dist/assets/app.Bof6In7P.js +0 -1
- package/.vitepress/dist/assets/chunks/@localSearchIndexroot.CIJmSUUZ.js +0 -1
- package/.vitepress/dist/assets/chunks/FileSaver.min.BxHcgHsl.js +0 -1
- package/.vitepress/dist/assets/chunks/VPLocalSearchBox.BEJmHkAl.js +0 -2
- package/.vitepress/dist/assets/chunks/framework.C9O3MI31.js +0 -2
- package/.vitepress/dist/assets/chunks/index.BJCOYsj9.js +0 -275
- package/.vitepress/dist/assets/chunks/theme.HzWOLh31.js +0 -1
- package/.vitepress/dist/assets/guide_example.md.DQFpVk96.js +0 -1
- package/.vitepress/dist/assets/guide_example.md.DQFpVk96.lean.js +0 -1
- package/.vitepress/dist/assets/guide_external.md.jyqZleQg.js +0 -1
- package/.vitepress/dist/assets/guide_external.md.jyqZleQg.lean.js +0 -1
- package/.vitepress/dist/assets/guide_faq.md.CJ97c3Oj.js +0 -21
- package/.vitepress/dist/assets/guide_faq.md.CJ97c3Oj.lean.js +0 -1
- package/.vitepress/dist/assets/guide_index.md.DXqOoSRT.js +0 -1
- package/.vitepress/dist/assets/guide_index.md.DXqOoSRT.lean.js +0 -1
- package/.vitepress/dist/assets/guide_node.md.Dueqr68D.js +0 -1
- package/.vitepress/dist/assets/guide_node.md.Dueqr68D.lean.js +0 -1
- package/.vitepress/dist/assets/guide_optimize.md.QtHsJC_W.js +0 -1
- package/.vitepress/dist/assets/guide_optimize.md.QtHsJC_W.lean.js +0 -1
- package/.vitepress/dist/assets/guide_privacy.md.DEY7H6Xw.js +0 -1
- package/.vitepress/dist/assets/guide_privacy.md.DEY7H6Xw.lean.js +0 -1
- package/.vitepress/dist/assets/guide_selector.md.CkWe6yh0.js +0 -12
- package/.vitepress/dist/assets/guide_selector.md.CkWe6yh0.lean.js +0 -1
- package/.vitepress/dist/assets/guide_snapshot.md.CAyOxKjJ.js +0 -1
- package/.vitepress/dist/assets/guide_snapshot.md.CAyOxKjJ.lean.js +0 -1
- package/.vitepress/dist/assets/guide_sponsor.md.BcOIEi8A.js +0 -1
- package/.vitepress/dist/assets/guide_sponsor.md.BcOIEi8A.lean.js +0 -1
- package/.vitepress/dist/assets/guide_subscription.md.b3kL74Yn.lean.js +0 -1
- package/.vitepress/dist/assets/guide_terms.md.DfiFWTE8.js +0 -1
- package/.vitepress/dist/assets/guide_terms.md.DfiFWTE8.lean.js +0 -1
- package/.vitepress/dist/assets/guide_what-is-gkd.md.L893NqGU.js +0 -1
- package/.vitepress/dist/assets/guide_what-is-gkd.md.L893NqGU.lean.js +0 -1
- package/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/.vitepress/dist/assets/polyfills.-wjBxrqk.js +0 -1
- package/.vitepress/dist/assets/style.DmRq6upP.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime.CbXtAM7H.js";import{$ as t,A as n,At as r,C as i,Ct as a,Dt as o,E as s,Et as c,F as l,Ft as u,Ht as d,It as f,K as p,L as m,Lt as h,Mt as g,N as _,O as v,Ot as y,P as b,Q as x,R as ee,Rt as S,S as C,St as w,T as te,Tt as T,U as E,Ut as D,Vt as O,Wt as k,X as ne,Y as re,Z as ie,_t as ae,a as oe,at as A,bt as se,ct as j,dt as ce,et as le,f as ue,ft as de,gt as M,ht as fe,it as N,j as P,jt as F,kt as pe,l as I,lt as me,m as he,mt as L,nt as R,o as z,pt as B,rt as V,st as H,tt as U,u as ge,ut as W,v as _e,vt as ve,w as ye,wt as G,x as be,xt as K,y as xe,yt as q,z as Se,zt as J}from"./framework.bo_0njjP.js";var Ce=W({__name:`VPBadge`,props:{text:{},type:{default:`tip`}},setup(e){return(t,n)=>(q(),A(`span`,{class:d([`VPBadge`,e.type])},[w(t.$slots,`default`,{},()=>[H(k(e.text),1)])],2))}}),we={key:0,class:`VPBackdrop`},Te=z(W({__name:`VPBackdrop`,props:{show:{type:Boolean}},setup(e){return(t,n)=>(q(),V(p,{name:`fade`},{default:F(()=>[e.show?(q(),A(`div`,we)):N(``,!0)]),_:1}))}}),[[`__scopeId`,`data-v-1fe35ec1`]]),Y=_e;function Ee(e,t){let n,r=!1;return()=>{n&&clearTimeout(n),r?n=setTimeout(e,t):(e(),(r=!0)&&setTimeout(()=>r=!1,t))}}function De(e){return e.startsWith(`/`)?e:`/${e}`}function Oe(e,t,n){return n===void 0?!!e&&i(e)||t===`_blank`:n}function ke(e){let{pathname:t,search:n,hash:r,protocol:a}=new URL(e,`http://a.com`);if(i(e)||e.startsWith(`#`)||!a.startsWith(`http`)||!s(t))return e;let{site:o}=Y(),c=t.endsWith(`/`)||t.endsWith(`.html`)?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,o.value.cleanUrls?``:`.html`)}${n}${r}`);return he(c)}function Ae(e,t){let n=new Set;return e.filter(e=>{let r=t(e);return!n.has(r)&&n.add(r)})}function je({linkToCorrespondingPage:e=!1}={}){let t=Y(),n=I(),{site:r,localeIndex:i}=t,a=U(()=>{var e,t;return{label:(e=r.value.locales[i.value])==null?void 0:e.label,link:((t=r.value.locales[i.value])==null?void 0:t.link)||(i.value===`root`?`/`:`/${i.value}/`)}});return{currentLang:a,localeLinks:U(()=>Object.entries(r.value.locales).flatMap(([r,i])=>a.value.label===i.label?[]:{text:i.label,link:Me(t,n,{targetLocale:r,targetLocaleLink:i.link||(r===`root`?`/`:`/${r}/`),currentLocaleLink:a.value.link,linkToCorrespondingPage:e}),lang:i.lang,dir:i.dir}))}}function Me(e,t,{targetLocale:n,targetLocaleLink:r,currentLocaleLink:i,linkToCorrespondingPage:a}){let{site:o,theme:s}=e,c=s.value.i18nRouting;return a&&typeof c==`function`?c(e,t,n):Ne(r,c!==!1&&a,t.data.relativePath.slice(i.length-1),!o.value.cleanUrls)+t.query+t.hash}function Ne(e,t,n,r){return t?e.replace(/\/$/,``)+De(n.replace(/(^|\/)index\.md$/,`$1`).replace(/\.md$/,r?`.html`:``)):e}var Pe={class:`NotFound`},Fe={class:`code`},Ie={class:`title`},Le={class:`quote`},Re={class:`action`},ze=[`href`,`aria-label`],Be=z(W({__name:`NotFound`,setup(e){let{theme:t}=Y(),{currentLang:n}=je();return(e,r)=>{var i,a,o,s,c,l,u,d,f,p,m,h;return q(),A(`div`,Pe,[R(`p`,Fe,k((i=(a=O(t).notFound)==null?void 0:a.code)==null?`404`:i),1),R(`h1`,Ie,k((o=(s=O(t).notFound)==null?void 0:s.title)==null?`PAGE NOT FOUND`:o),1),r[0]||(r[0]=R(`div`,{class:`divider`},null,-1)),R(`blockquote`,Le,k((c=(l=O(t).notFound)==null?void 0:l.quote)==null?`But if you don't change your direction, and if you keep looking, you may end up where you are heading.`:c),1),R(`div`,Re,[R(`a`,{class:`link`,href:O(he)((u=(d=O(t).notFound)==null?void 0:d.link)==null?O(n).link:u),"aria-label":(f=(p=O(t).notFound)==null?void 0:p.linkLabel)==null?`go to home`:f},k((m=(h=O(t).notFound)==null?void 0:h.linkText)==null?`Take me home`:m),9,ze)])])}}}),[[`__scopeId`,`data-v-8ef36f60`]]);function Ve(e,t){if(Array.isArray(e))return Ge(e);if(e==null)return[];t=De(t);let n=Object.keys(e).sort((e,t)=>t.split(`/`).length-e.split(`/`).length).find(e=>t.startsWith(De(e))),r=n?e[n]:[];return Array.isArray(r)?Ge(r):Ge(r.items,r.base)}function He(e){let t=[],n=0;for(let r in e){let i=e[r];if(i.items){n=t.push(i);continue}t[n]||t.push({items:[]}),t[n].items.push(i)}return t}function Ue(e){let t=[];function n(e){for(let r of e)r.text&&r.link&&t.push({text:r.text,link:r.link,docFooterText:r.docFooterText,rel:r.rel,target:r.target}),r.items&&n(r.items)}return n(e),t}function We(e,t,n){return Array.isArray(n)?n.some(n=>We(e,t,n)):n.link&&C(e,t,n.link)?!0:n.items?We(e,t,n.items):!1}function Ge(e,t){return[...e].map(e=>{let n={...e},r=n.base||t;return r&&n.link&&!i(n.link)&&(n.link=r+n.link.replace(/^\//,r.endsWith(`/`)?``:`/`)),n.items&&(n.items=Ge(n.items,r)),n})}function Ke(){let{hasSidebar:e}=Z(),t=_(`(min-width: 960px)`),n=_(`(min-width: 1280px)`);return{isAsideEnabled:U(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}var qe=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,Je=[];function Ye(e){return typeof e.outline==`object`&&!Array.isArray(e.outline)&&e.outline.label||`On this page`}function Xe(e){return Qe([...document.querySelectorAll(`.VPDoc h1, .VPDoc h2, .VPDoc h3, .VPDoc h4, .VPDoc h5, .VPDoc h6`)].filter(e=>e.id&&e.hasChildNodes()).map(e=>{let t=Number(e.tagName[1]);return{element:e,title:Ze(e),link:`#`+e.id,level:t}}),e)}function Ze(e){let t=``;for(let n of e.childNodes)if(n.nodeType===1){if(qe.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function Qe(e,t){if(t===!1)return[];let n=(typeof t==`object`&&!Array.isArray(t)?t.level:t)||2,[r,i]=typeof n==`number`?[n,n]:n===`deep`?[2,6]:n;return tt(e,r,i)}function $e(e,t){let{isAsideEnabled:n}=Ke(),r=Ee(s,100),i=null,a=!1;M(()=>{requestAnimationFrame(s),window.addEventListener(`scroll`,r),e.value.addEventListener(`click`,o)}),ve(()=>{c(location.hash)}),ae(()=>{window.removeEventListener(`scroll`,r)});function o(e){var t;if(!n.value)return;let r=e.target instanceof Element?(t=e.target.closest(`a`))==null?void 0:t.hash:null;r&&(a=!0,c(r))}function s(){if(!n.value)return;if(a){a=!1;return}let e=window.scrollY,t=window.innerHeight,r=document.body.offsetHeight,i=Math.abs(e+t-r)<1,o=Je.map(({element:e,link:t})=>({link:t,top:et(e),scrollMarginTop:Number.parseFloat(getComputedStyle(e).scrollMarginTop)||0})).filter(({top:e})=>!Number.isNaN(e)).sort((e,t)=>e.top-t.top);if(!o.length){c(null);return}if(e<1){c(null);return}if(i){c(o[o.length-1].link);return}let s=null;for(let{link:t,top:n,scrollMarginTop:r}of o){if(n>e+r+4)break;s=t}c(s)}function c(n){i&&i.classList.remove(`active`),i=n==null?null:e.value.querySelector(`a[href$="${decodeURIComponent(n)}"]`);let r=i;r?(r.classList.add(`active`),t.value.style.top=r.offsetTop+39+`px`,t.value.style.opacity=`1`):(t.value.style.top=`33px`,t.value.style.opacity=`0`)}}function et(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function tt(e,t,n){Je.length=0;let r=[],i=[];return e.forEach(e=>{let a={...e,children:[]},o=i[i.length-1];for(;o&&o.level>=a.level;)i.pop(),o=i[i.length-1];if(a.element.classList.contains(`ignore-header`)||o&&`shouldIgnore`in o){i.push({level:a.level,shouldIgnore:!0});return}a.level>n||a.level<t||(Je.push({element:a.element,link:a.link}),o?o.children.push(a):r.push(a),i.push(a))}),r}var X=f(!1);function nt(e){let t;pe(()=>{t=X.value?document.activeElement:void 0}),M(()=>{window.addEventListener(`keyup`,n)}),ae(()=>{window.removeEventListener(`keyup`,n)});function n(n){n.key===`Escape`&&X.value&&(e(),t==null||t.focus())}}function rt(){function e(){X.value=!0}function t(){X.value=!1}function n(){X.value?t():e()}return{isOpen:X,open:e,close:t,toggle:n}}function it(e){let t=I(),n=f(!1),r=U(()=>e.value.collapsed!=null),i=U(()=>!!e.value.link),a=f(!1),o=f(!1);function s(){if(e.value.link?a.value=C(t.data.relativePath,t.hash,e.value.link):a.value=!1,a.value){o.value=!0,L(()=>n.value=!1);return}if(!e.value.items){o.value=!1;return}o.value=We(t.data.relativePath,t.hash,e.value.items),o.value&&L(()=>n.value=!1)}y([e,t],s),M(s);let c=U(()=>!!(e.value.items&&e.value.items.length));pe(()=>{n.value=!!(r.value&&e.value.collapsed)});function l(){r.value&&(n.value=!n.value)}return{collapsed:n,collapsible:r,isLink:i,isActiveLink:a,hasActiveLink:o,hasChildren:c,toggle:l}}var at=J([]),ot=J([]),st=J(!1);function Z(){let{frontmatter:e,theme:t}=Y(),n=U(()=>{var t;return!!((t=e.value.isHome)==null?e.value.layout===`home`:t)}),r=U(()=>e.value.sidebar!==!1&&ot.value.length>0&&!n.value),i=U(()=>r.value&&st.value),a=U(()=>r.value?He(ot.value):[]),o=U(()=>n.value?!1:e.value.aside==null?t.value.aside!==!1:!!e.value.aside),s=U(()=>o.value?e.value.aside==null?t.value.aside===`left`:e.value.aside===`left`:!1),c=U(()=>at.value.length>0);return{isHome:n,sidebar:S(ot),sidebarGroups:a,hasSidebar:r,isSidebarEnabled:i,hasAside:o,leftAside:s,headers:S(at),hasLocalNav:c}}function ct({closeSidebar:e}){let{theme:t,page:n,frontmatter:r}=Y();y(()=>[n.value.relativePath,t.value.sidebar],([e,t])=>{let n=t?Ve(t,e):[];JSON.stringify(n)!==JSON.stringify(ot.value)&&(ot.value=n)},{immediate:!0,deep:!0,flush:`sync`}),ue(()=>{var e;at.value=Xe((e=r.value.outline)==null?t.value.outline:e)}),be&&(st.value=window.innerWidth>=960,window.addEventListener(`resize`,()=>{st.value=window.innerWidth>=960},{passive:!0}));let i=I();y(()=>i.path,e),y(st,e),nt(e)}var lt=Symbol(`layout-info`),ut={class:`VPDocAsideCarbonAds`},dt=W({__name:`VPDocAsideCarbonAds`,props:{carbonAds:{}},setup(e){let t=()=>null;return(n,r)=>(q(),A(`div`,ut,[j(O(t),{"carbon-ads":e.carbonAds},null,8,[`carbon-ads`])]))}}),ft=[`href`,`title`],pt=z(W({__name:`VPDocOutlineItem`,props:{headers:{},root:{type:Boolean}},setup(e){return(n,r)=>{let i=a(`VPDocOutlineItem`,!0);return q(),A(`ul`,{class:d([`VPDocOutlineItem`,e.root?`root`:`nested`])},[(q(!0),A(t,null,K(e.headers,({children:e,link:t,title:n})=>(q(),A(`li`,null,[R(`a`,{class:`outline-link`,href:t,title:n},k(n),9,ft),e!=null&&e.length?(q(),V(i,{key:0,headers:e},null,8,[`headers`])):N(``,!0)]))),256))],2)}}}),[[`__scopeId`,`data-v-6f4e6c90`]]),mt={class:`content`},ht={"aria-level":`2`,class:`outline-title`,id:`doc-outline-aria-label`,role:`heading`},gt=z(W({__name:`VPDocAsideOutline`,setup(e){let{theme:t}=Y(),n=f(),r=f(),{headers:i,hasLocalNav:a}=Z();return $e(n,r),(e,o)=>(q(),A(`nav`,{"aria-labelledby":`doc-outline-aria-label`,class:d([`VPDocAsideOutline`,{"has-outline":O(a)}]),ref_key:`container`,ref:n},[R(`div`,mt,[R(`div`,{class:`outline-marker`,ref_key:`marker`,ref:r},null,512),R(`div`,ht,k(O(Ye)(O(t))),1),j(pt,{headers:O(i),root:!0},null,8,[`headers`])])],2))}}),[[`__scopeId`,`data-v-a3e9bb7f`]]),_t={class:`VPDocAside`},vt=z(W({__name:`VPDocAside`,setup(e){let{theme:t}=Y();return(e,n)=>(q(),A(`div`,_t,[w(e.$slots,`aside-top`,{},void 0,!0),w(e.$slots,`aside-outline-before`,{},void 0,!0),j(gt),w(e.$slots,`aside-outline-after`,{},void 0,!0),n[0]||(n[0]=R(`div`,{class:`spacer`},null,-1)),w(e.$slots,`aside-ads-before`,{},void 0,!0),O(t).carbonAds?(q(),V(dt,{key:0,"carbon-ads":O(t).carbonAds},null,8,[`carbon-ads`])):N(``,!0),w(e.$slots,`aside-ads-after`,{},void 0,!0),w(e.$slots,`aside-bottom`,{},void 0,!0)]))}}),[[`__scopeId`,`data-v-4a3e28a8`]]);function yt(){let{theme:e,page:t}=Y();return U(()=>{let{text:n=`Edit this page`,pattern:r=``}=e.value.editLink||{},i;return i=typeof r==`function`?r(t.value):r.replace(/:path/g,t.value.filePath),{url:i,text:n}})}function bt(){let{theme:e,page:t,frontmatter:n}=Y();return U(()=>{var r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,ee,S,w;let T=Ae(Ue(Ve(e.value.sidebar,t.value.relativePath)),e=>te(e.link)),E=T.findIndex(e=>C(t.value.relativePath,``,e.link,!1,!0)),D=((r=e.value.docFooter)==null?void 0:r.prev)===!1&&!n.value.prev||n.value.prev===!1,O=((i=e.value.docFooter)==null?void 0:i.next)===!1&&!n.value.next||n.value.next===!1;return{prev:D?void 0:{text:(a=(o=typeof n.value.prev==`string`?n.value.prev:typeof n.value.prev==`object`?n.value.prev.text:void 0)==null?(s=T[E-1])==null?void 0:s.docFooterText:o)==null?(c=T[E-1])==null?void 0:c.text:a,link:(l=typeof n.value.prev==`object`?n.value.prev.link:void 0)==null?(u=T[E-1])==null?void 0:u.link:l,target:(d=typeof n.value.prev==`object`?n.value.prev.target:void 0)==null?(f=T[E-1])==null?void 0:f.target:d,rel:(p=typeof n.value.prev==`object`?n.value.prev.rel:void 0)==null?(m=T[E-1])==null?void 0:m.rel:p},next:O?void 0:{text:(h=(g=typeof n.value.next==`string`?n.value.next:typeof n.value.next==`object`?n.value.next.text:void 0)==null?(_=T[E+1])==null?void 0:_.docFooterText:g)==null?(v=T[E+1])==null?void 0:v.text:h,link:(y=typeof n.value.next==`object`?n.value.next.link:void 0)==null?(b=T[E+1])==null?void 0:b.link:y,target:(x=typeof n.value.next==`object`?n.value.next.target:void 0)==null?(ee=T[E+1])==null?void 0:ee.target:x,rel:(S=typeof n.value.next==`object`?n.value.next.rel:void 0)==null?(w=T[E+1])==null?void 0:w.rel:S}}})}var xt={class:`VPLastUpdated`},St=[`datetime`],Ct=z(W({__name:`VPDocFooterLastUpdated`,setup(e){let{theme:t,page:n,lang:r}=Y(),{language:i}=b(),a=o(`timeRef`),s=U(()=>new Date(n.value.lastUpdated)),c=U(()=>s.value.toISOString()),l=J(``);return M(()=>{pe(()=>{var e,n,o;let c=(e=t.value.lastUpdated)!=null&&(e=e.formatOptions)!=null&&e.forceLocale?r.value:i.value;if(l.value=new Intl.DateTimeFormat(c,(n=(o=t.value.lastUpdated)==null?void 0:o.formatOptions)==null?{dateStyle:`medium`,timeStyle:`medium`}:n).format(s.value),c&&r.value!==c){var u;(u=a.value)==null||u.setAttribute(`lang`,c)}else{var d;(d=a.value)==null||d.removeAttribute(`lang`)}})}),(e,n)=>{var r;return q(),A(`p`,xt,[H(k(((r=O(t).lastUpdated)==null?void 0:r.text)||`Last updated`)+`: `,1),R(`time`,{ref_key:`timeRef`,ref:a,datetime:c.value},k(l.value),9,St)])}}}),[[`__scopeId`,`data-v-d6a82ec9`]]),Q=W({__name:`VPLink`,props:{tag:{},href:{},noIcon:{type:Boolean},external:{type:Boolean,default:void 0},target:{},rel:{}},setup(e){let t=e,n=U(()=>{var e;return(e=t.tag)==null?t.href?`a`:`span`:e}),r=U(()=>Oe(t.href,t.target,t.external));return(t,i)=>{var a,o;return q(),V(G(n.value),{class:d([`VPLink`,{link:e.href,"vp-external-link-icon":r.value,"no-icon":e.noIcon}]),href:e.href?O(ke)(e.href):void 0,target:(a=e.target)==null?r.value?`_blank`:void 0:a,rel:(o=e.rel)==null?r.value?`noreferrer`:void 0:o},{default:F(()=>[w(t.$slots,`default`)]),_:3},8,[`class`,`href`,`target`,`rel`])}}}),wt={key:0,class:`VPDocFooter`},Tt={key:0,class:`edit-info`},Et={key:0,class:`edit-link`},Dt={key:1,class:`last-updated`},Ot={key:1,class:`prev-next`,"aria-labelledby":`doc-footer-aria-label`},kt={class:`pager`},At=[`innerHTML`],jt=[`innerHTML`],Mt={class:`pager`},Nt=[`innerHTML`],Pt=[`innerHTML`],Ft=z(W({__name:`VPDocFooter`,setup(e){let{theme:t,page:n,frontmatter:r}=Y(),i=yt(),a=bt(),o=U(()=>t.value.editLink&&r.value.editLink!==!1),s=U(()=>n.value.lastUpdated),c=U(()=>o.value||s.value||a.value.prev||a.value.next);return(e,n)=>{var r,l,u,d;return c.value?(q(),A(`footer`,wt,[w(e.$slots,`doc-footer-before`,{},void 0,!0),o.value||s.value?(q(),A(`div`,Tt,[o.value?(q(),A(`div`,Et,[j(Q,{class:`edit-link-button`,href:O(i).url,"no-icon":!0},{default:F(()=>[n[0]||(n[0]=R(`span`,{class:`vpi-square-pen edit-link-icon`},null,-1)),H(` `+k(O(i).text),1)]),_:1},8,[`href`])])):N(``,!0),s.value?(q(),A(`div`,Dt,[j(Ct)])):N(``,!0)])):N(``,!0),(r=O(a).prev)!=null&&r.link||(l=O(a).next)!=null&&l.link?(q(),A(`nav`,Ot,[n[1]||(n[1]=R(`span`,{class:`visually-hidden`,id:`doc-footer-aria-label`},`Pager`,-1)),R(`div`,kt,[(u=O(a).prev)!=null&&u.link?(q(),V(Q,{key:0,class:`pager-link prev`,href:O(a).prev.link,target:O(a).prev.target,rel:O(a).prev.rel},{default:F(()=>{var e;return[R(`span`,{class:`desc`,innerHTML:((e=O(t).docFooter)==null?void 0:e.prev)||`Previous page`},null,8,At),R(`span`,{class:`title`,innerHTML:O(a).prev.text},null,8,jt)]}),_:1},8,[`href`,`target`,`rel`])):N(``,!0)]),R(`div`,Mt,[(d=O(a).next)!=null&&d.link?(q(),V(Q,{key:0,class:`pager-link next`,href:O(a).next.link,target:O(a).next.target,rel:O(a).next.rel},{default:F(()=>{var e;return[R(`span`,{class:`desc`,innerHTML:((e=O(t).docFooter)==null?void 0:e.next)||`Next page`},null,8,Nt),R(`span`,{class:`title`,innerHTML:O(a).next.text},null,8,Pt)]}),_:1},8,[`href`,`target`,`rel`])):N(``,!0)])])):N(``,!0)])):N(``,!0)}}}),[[`__scopeId`,`data-v-3f4d543d`]]),It={class:`container`},Lt={class:`aside-container`},Rt={class:`aside-content`},zt={class:`content`},Bt={class:`content-container`},Vt={class:`main`},Ht=z(W({__name:`VPDoc`,setup(e){let{theme:t}=Y(),n=I(),{hasSidebar:r,hasAside:i,leftAside:o}=Z(),s=U(()=>n.path.replace(/[./]+/g,`_`).replace(/_html$/,``));return(e,n)=>{let c=a(`Content`);return q(),A(`div`,{class:d([`VPDoc`,{"has-sidebar":O(r),"has-aside":O(i)}])},[w(e.$slots,`doc-top`,{},void 0,!0),R(`div`,It,[O(i)?(q(),A(`div`,{key:0,class:d([`aside`,{"left-aside":O(o)}])},[n[0]||(n[0]=R(`div`,{class:`aside-curtain`},null,-1)),R(`div`,Lt,[R(`div`,Rt,[j(vt,null,{"aside-top":F(()=>[w(e.$slots,`aside-top`,{},void 0,!0)]),"aside-bottom":F(()=>[w(e.$slots,`aside-bottom`,{},void 0,!0)]),"aside-outline-before":F(()=>[w(e.$slots,`aside-outline-before`,{},void 0,!0)]),"aside-outline-after":F(()=>[w(e.$slots,`aside-outline-after`,{},void 0,!0)]),"aside-ads-before":F(()=>[w(e.$slots,`aside-ads-before`,{},void 0,!0)]),"aside-ads-after":F(()=>[w(e.$slots,`aside-ads-after`,{},void 0,!0)]),_:3})])])],2)):N(``,!0),R(`div`,zt,[R(`div`,Bt,[w(e.$slots,`doc-before`,{},void 0,!0),R(`main`,Vt,[j(c,{class:d([`vp-doc`,[s.value,O(t).externalLinkIcon&&`external-link-icon-enabled`]])},null,8,[`class`])]),j(Ft,null,{"doc-footer-before":F(()=>[w(e.$slots,`doc-footer-before`,{},void 0,!0)]),_:3}),w(e.$slots,`doc-after`,{},void 0,!0)])])]),w(e.$slots,`doc-bottom`,{},void 0,!0)],2)}}}),[[`__scopeId`,`data-v-09b66d3b`]]),Ut=z(W({__name:`VPHomeContent`,setup(e){let{width:t}=ee({initialWidth:0,includeScrollbar:!1});return(e,n)=>(q(),A(`div`,{class:`vp-doc container`,style:D(O(t)?{"--vp-offset":`calc(50% - ${O(t)/2}px)`}:{}),"data-allow-mismatch":`style`},[w(e.$slots,`default`,{},void 0,!0)],4))}}),[[`__scopeId`,`data-v-89ca360d`]]),Wt=[`src`,`alt`],Gt=z(W({inheritAttrs:!1,__name:`VPImage`,props:{image:{},alt:{}},setup(e){return(n,r)=>{var i;let o=a(`VPImage`,!0);return e.image?(q(),A(t,{key:0},[typeof e.image==`string`||`src`in e.image?(q(),A(`img`,B({key:0,class:`VPImage`},typeof e.image==`string`?n.$attrs:{...e.image,...n.$attrs},{src:O(he)(typeof e.image==`string`?e.image:e.image.src),alt:(i=e.alt)==null?typeof e.image==`string`?``:e.image.alt||``:i}),null,16,Wt)):(q(),A(t,{key:1},[j(o,B({class:`dark`,image:e.image.dark,alt:e.image.alt},n.$attrs),null,16,[`image`,`alt`]),j(o,B({class:`light`,image:e.image.light,alt:e.image.alt},n.$attrs),null,16,[`image`,`alt`])],64))],64)):N(``,!0)}}}),[[`__scopeId`,`data-v-bdf79f07`]]),Kt={class:`box`},qt={key:0,class:`icon`},Jt=[`innerHTML`],Yt=[`innerHTML`],Xt={key:3,class:`details`},Zt=[`innerHTML`],Qt=[`innerHTML`],$t={key:5,class:`link-text`},en={class:`link-text-value`},tn=z(W({__name:`VPFeature`,props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(n,r)=>(q(),V(Q,{class:`VPFeature`,href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?`a`:`div`},{default:F(()=>[R(`article`,Kt,[typeof e.icon==`object`&&e.icon.wrap?(q(),A(`div`,qt,[j(Gt,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,[`image`,`alt`,`height`,`width`])])):typeof e.icon==`object`?(q(),V(Gt,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,[`image`,`alt`,`height`,`width`])):e.icon?(q(),A(`div`,{key:2,class:`icon`,innerHTML:e.icon},null,8,Jt)):N(``,!0),R(`h2`,{class:`title`,innerHTML:e.title},null,8,Yt),Array.isArray(e.details)?(q(),A(`ul`,Xt,[(q(!0),A(t,null,K(e.details,e=>(q(),A(`li`,{key:e,innerHTML:e},null,8,Zt))),128))])):e.details?(q(),A(`p`,{key:4,class:`details`,innerHTML:e.details},null,8,Qt)):N(``,!0),e.linkText?(q(),A(`div`,$t,[R(`p`,en,[H(k(e.linkText)+` `,1),r[0]||(r[0]=R(`span`,{class:`vpi-arrow-right link-text-icon`},null,-1))])])):N(``,!0)])]),_:1},8,[`href`,`rel`,`target`,`tag`]))}}),[[`__scopeId`,`data-v-4537ea82`]]),nn={key:0,class:`VPFeatures`},rn={class:`container`},an={class:`items`},on=z(W({__name:`VPFeatures`,props:{features:{}},setup(e){let n=e,r=U(()=>{let e=n.features.length;if(e){if(e===2)return`grid-2`;if(e===3)return`grid-3`;if(e%3==0)return`grid-6`;if(e>3)return`grid-4`}});return(n,i)=>e.features?(q(),A(`div`,nn,[R(`div`,rn,[R(`ul`,an,[(q(!0),A(t,null,K(e.features,e=>(q(),A(`li`,{key:e.title,class:d([`item`,[r.value]])},[j(tn,{icon:e.icon,title:e.title,details:e.details,link:e.link,"link-text":e.linkText,rel:e.rel,target:e.target},null,8,[`icon`,`title`,`details`,`link`,`link-text`,`rel`,`target`])],2))),128))])])])):N(``,!0)}}),[[`__scopeId`,`data-v-243b21d2`]]),sn=W({__name:`VPHomeFeatures`,setup(e){let{frontmatter:t}=Y();return(e,n)=>O(t).features?(q(),V(on,{key:0,class:`VPHomeFeatures`,features:O(t).features},null,8,[`features`])):N(``,!0)}}),cn=z(W({__name:`VPButton`,props:{tag:{},size:{default:`medium`},theme:{default:`brand`},text:{},href:{},target:{},rel:{}},setup(e){let t=e,n=U(()=>t.href&&xe.test(t.href)),r=U(()=>t.tag||(t.href?`a`:`button`));return(i,a)=>{var o,s;return q(),V(G(r.value),{class:d([`VPButton`,[e.size,e.theme]]),href:e.href?O(ke)(e.href):void 0,target:(o=t.target)==null?n.value?`_blank`:void 0:o,rel:(s=t.rel)==null?n.value?`noreferrer`:void 0:s},{default:F(()=>[w(i.$slots,`default`,{},()=>[H(k(e.text),1)],!0)]),_:3},8,[`class`,`href`,`target`,`rel`])}}}),[[`__scopeId`,`data-v-c7b88fff`]]),ln={class:`container`},un={class:`main`},dn={class:`heading`},fn=[`innerHTML`],pn=[`innerHTML`],mn=[`innerHTML`],hn={key:0,class:`actions`},gn={key:0,class:`image`},_n={class:`image-container`},vn=z(W({__name:`VPHero`,props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){let{heroImageSlotExists:n}=de(lt,{heroImageSlotExists:U(()=>!1)});return(r,i)=>(q(),A(`div`,{class:d([`VPHero`,{"has-image":e.image||O(n)}])},[R(`div`,ln,[R(`div`,un,[w(r.$slots,`home-hero-info-before`,{},void 0,!0),w(r.$slots,`home-hero-info`,{},()=>[R(`h1`,dn,[e.name?(q(),A(`span`,{key:0,innerHTML:e.name,class:`name clip`},null,8,fn)):N(``,!0),e.text?(q(),A(`span`,{key:1,innerHTML:e.text,class:`text`},null,8,pn)):N(``,!0)]),e.tagline?(q(),A(`p`,{key:0,innerHTML:e.tagline,class:`tagline`},null,8,mn)):N(``,!0)],!0),w(r.$slots,`home-hero-info-after`,{},void 0,!0),e.actions?(q(),A(`div`,hn,[w(r.$slots,`home-hero-actions-before-actions`,{},void 0,!0),(q(!0),A(t,null,K(e.actions,e=>(q(),A(`div`,{key:e.link,class:`action`},[j(cn,{tag:`a`,size:`medium`,theme:e.theme,text:e.text,href:e.link,target:e.target,rel:e.rel},null,8,[`theme`,`text`,`href`,`target`,`rel`])]))),128))])):N(``,!0),w(r.$slots,`home-hero-actions-after`,{},void 0,!0)]),e.image||O(n)?(q(),A(`div`,gn,[R(`div`,_n,[i[0]||(i[0]=R(`div`,{class:`image-bg`},null,-1)),w(r.$slots,`home-hero-image`,{},()=>[e.image?(q(),V(Gt,{key:0,class:`image-src`,image:e.image},null,8,[`image`])):N(``,!0)],!0)])])):N(``,!0)])],2))}}),[[`__scopeId`,`data-v-e20fe220`]]),yn=W({__name:`VPHomeHero`,setup(e){let{frontmatter:t}=Y();return(e,n)=>O(t).hero?(q(),V(vn,{key:0,class:`VPHomeHero`,name:O(t).hero.name,text:O(t).hero.text,tagline:O(t).hero.tagline,image:O(t).hero.image,actions:O(t).hero.actions},{"home-hero-info-before":F(()=>[w(e.$slots,`home-hero-info-before`)]),"home-hero-info":F(()=>[w(e.$slots,`home-hero-info`)]),"home-hero-info-after":F(()=>[w(e.$slots,`home-hero-info-after`)]),"home-hero-actions-after":F(()=>[w(e.$slots,`home-hero-actions-after`)]),"home-hero-actions-before-actions":F(()=>[w(e.$slots,`home-hero-actions-before-actions`)]),"home-hero-image":F(()=>[w(e.$slots,`home-hero-image`)]),_:3},8,[`name`,`text`,`tagline`,`image`,`actions`])):N(``,!0)}}),bn=z(W({__name:`VPHome`,setup(e){let{frontmatter:t,theme:n}=Y();return(e,r)=>{let i=a(`Content`);return q(),A(`div`,{class:d([`VPHome`,{"external-link-icon-enabled":O(n).externalLinkIcon}])},[w(e.$slots,`home-hero-before`,{},void 0,!0),j(yn,null,{"home-hero-info-before":F(()=>[w(e.$slots,`home-hero-info-before`,{},void 0,!0)]),"home-hero-info":F(()=>[w(e.$slots,`home-hero-info`,{},void 0,!0)]),"home-hero-info-after":F(()=>[w(e.$slots,`home-hero-info-after`,{},void 0,!0)]),"home-hero-actions-after":F(()=>[w(e.$slots,`home-hero-actions-after`,{},void 0,!0)]),"home-hero-actions-before-actions":F(()=>[w(e.$slots,`home-hero-actions-before-actions`,{},void 0,!0)]),"home-hero-image":F(()=>[w(e.$slots,`home-hero-image`,{},void 0,!0)]),_:3}),w(e.$slots,`home-hero-after`,{},void 0,!0),w(e.$slots,`home-features-before`,{},void 0,!0),j(sn),w(e.$slots,`home-features-after`,{},void 0,!0),O(t).markdownStyles===!1?(q(),V(i,{key:1})):(q(),V(Ut,{key:0},{default:F(()=>[j(i)]),_:1}))],2)}}}),[[`__scopeId`,`data-v-4115d4b0`]]),xn={},Sn={class:`VPPage`};function Cn(e,t){let n=a(`Content`);return q(),A(`div`,Sn,[w(e.$slots,`page-top`),j(n),w(e.$slots,`page-bottom`)])}var wn=z(xn,[[`render`,Cn]]),Tn=z(W({__name:`VPContent`,setup(e){let{page:t,frontmatter:n}=Y(),{isHome:r,hasSidebar:i}=Z();function a(e){return typeof G(e)!=`string`}return(e,o)=>(q(),A(`div`,{class:d([`VPContent`,{"has-sidebar":O(i),"is-home":O(r)}]),id:`VPContent`},[O(t).isNotFound?w(e.$slots,`not-found`,{},()=>[j(Be)],!0,0):O(n).layout===`page`&&!a(`page`)?(q(),V(wn,{key:1},{"page-top":F(()=>[w(e.$slots,`page-top`,{},void 0,!0)]),"page-bottom":F(()=>[w(e.$slots,`page-bottom`,{},void 0,!0)]),_:3})):O(n).layout===`home`&&!a(`home`)?(q(),V(bn,{key:2},{"home-hero-before":F(()=>[w(e.$slots,`home-hero-before`,{},void 0,!0)]),"home-hero-info-before":F(()=>[w(e.$slots,`home-hero-info-before`,{},void 0,!0)]),"home-hero-info":F(()=>[w(e.$slots,`home-hero-info`,{},void 0,!0)]),"home-hero-info-after":F(()=>[w(e.$slots,`home-hero-info-after`,{},void 0,!0)]),"home-hero-actions-after":F(()=>[w(e.$slots,`home-hero-actions-after`,{},void 0,!0)]),"home-hero-actions-before-actions":F(()=>[w(e.$slots,`home-hero-actions-before-actions`,{},void 0,!0)]),"home-hero-image":F(()=>[w(e.$slots,`home-hero-image`,{},void 0,!0)]),"home-hero-after":F(()=>[w(e.$slots,`home-hero-after`,{},void 0,!0)]),"home-features-before":F(()=>[w(e.$slots,`home-features-before`,{},void 0,!0)]),"home-features-after":F(()=>[w(e.$slots,`home-features-after`,{},void 0,!0)]),_:3})):(!O(n).layout||O(n).layout===`doc`)&&!a(`doc`)?(q(),V(Ht,{key:3},{"doc-top":F(()=>[w(e.$slots,`doc-top`,{},void 0,!0)]),"doc-bottom":F(()=>[w(e.$slots,`doc-bottom`,{},void 0,!0)]),"doc-footer-before":F(()=>[w(e.$slots,`doc-footer-before`,{},void 0,!0)]),"doc-before":F(()=>[w(e.$slots,`doc-before`,{},void 0,!0)]),"doc-after":F(()=>[w(e.$slots,`doc-after`,{},void 0,!0)]),"aside-top":F(()=>[w(e.$slots,`aside-top`,{},void 0,!0)]),"aside-outline-before":F(()=>[w(e.$slots,`aside-outline-before`,{},void 0,!0)]),"aside-outline-after":F(()=>[w(e.$slots,`aside-outline-after`,{},void 0,!0)]),"aside-ads-before":F(()=>[w(e.$slots,`aside-ads-before`,{},void 0,!0)]),"aside-ads-after":F(()=>[w(e.$slots,`aside-ads-after`,{},void 0,!0)]),"aside-bottom":F(()=>[w(e.$slots,`aside-bottom`,{},void 0,!0)]),_:3})):(q(),V(G(O(n).layout||`doc`),{key:4}))],2))}}),[[`__scopeId`,`data-v-bae7cf19`]]),En={class:`container`},Dn=[`innerHTML`],On=[`innerHTML`],kn=z(W({__name:`VPFooter`,setup(e){let{theme:t,frontmatter:n}=Y(),{hasSidebar:r}=Z();return(e,i)=>O(t).footer&&O(n).footer!==!1?(q(),A(`footer`,{key:0,class:d([`VPFooter`,{"has-sidebar":O(r)}])},[R(`div`,En,[O(t).footer.message?(q(),A(`p`,{key:0,class:`message`,innerHTML:O(t).footer.message},null,8,Dn)):N(``,!0),O(t).footer.copyright?(q(),A(`p`,{key:1,class:`copyright`,innerHTML:O(t).footer.copyright},null,8,On)):N(``,!0)])],2)):N(``,!0)}}),[[`__scopeId`,`data-v-ca42a0f5`]]),An={class:`menu-text`},jn={class:`header`},Mn={class:`outline`},Nn=z(W({__name:`VPLocalNavOutlineDropdown`,props:{headers:{},navHeight:{}},setup(e){let t=e,{theme:n}=Y(),r=f(!1),i=f(0),a=f(),o=f();function s(e){var t;(t=a.value)!=null&&t.contains(e.target)||(r.value=!1)}y(r,e=>{if(e){document.addEventListener(`click`,s);return}document.removeEventListener(`click`,s)}),v(`Escape`,()=>{r.value=!1}),ue(()=>{r.value=!1});function c(){r.value=!r.value,i.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function l(e){e.target.classList.contains(`outline-link`)&&(o.value&&(o.value.style.transition=`none`),L(()=>{r.value=!1}))}function u(){r.value=!1,window.scrollTo({top:0,left:0,behavior:`smooth`})}return(t,s)=>(q(),A(`div`,{ref_key:`main`,ref:a,class:`VPLocalNavOutlineDropdown`,style:D({"--vp-vh":i.value+`px`}),"data-allow-mismatch":`style`},[e.headers.length>0?(q(),A(`button`,{key:0,onClick:c,class:d({open:r.value})},[R(`span`,An,k(O(Ye)(O(n))),1),s[0]||(s[0]=R(`span`,{class:`vpi-chevron-right icon`},null,-1))],2)):(q(),A(`button`,{key:1,onClick:u},k(O(n).returnToTopLabel||`Return to top`),1)),j(p,{name:`flyout`},{default:F(()=>[r.value?(q(),A(`div`,{key:0,ref_key:`items`,ref:o,class:`items`,onClick:l},[R(`div`,jn,[R(`a`,{class:`top-link`,href:`#`,onClick:u},k(O(n).returnToTopLabel||`Return to top`),1)]),R(`div`,Mn,[j(pt,{headers:e.headers},null,8,[`headers`])])],512)):N(``,!0)]),_:1})],4))}}),[[`__scopeId`,`data-v-73c24310`]]),Pn={class:`container`},Fn=[`aria-expanded`],In={class:`menu-text`},Ln=z(W({__name:`VPLocalNav`,props:{open:{type:Boolean}},emits:[`open-menu`],setup(e){let{theme:t}=Y(),{isHome:n,hasSidebar:r,headers:i,hasLocalNav:a}=Z(),{y:o}=m(),s=f(0);M(()=>{s.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue(`--vp-nav-height`))});let c=U(()=>({VPLocalNav:!0,"has-sidebar":r.value,empty:!a.value,fixed:!a.value&&!r.value}));return(l,u)=>!O(n)&&(O(a)||O(r)||O(o)>=s.value)?(q(),A(`div`,{key:0,class:d(c.value)},[R(`div`,Pn,[O(r)?(q(),A(`button`,{key:0,class:`menu`,"aria-expanded":e.open,"aria-controls":`VPSidebarNav`,onClick:u[0]||(u[0]=e=>l.$emit(`open-menu`))},[u[1]||(u[1]=R(`span`,{class:`vpi-align-left menu-icon`},null,-1)),R(`span`,In,k(O(t).sidebarMenuLabel||`Menu`),1)],8,Fn)):N(``,!0),j(Nn,{headers:O(i),navHeight:s.value},null,8,[`headers`,`navHeight`])])],2)):N(``,!0)}}),[[`__scopeId`,`data-v-9ac2f74c`]]);function Rn(){let e=f(!1);function t(){e.value=!0,window.addEventListener(`resize`,i)}function n(){e.value=!1,window.removeEventListener(`resize`,i)}function r(){e.value?n():t()}function i(){window.outerWidth>=768&&n()}let a=I();return y(()=>a.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:r}}var zn=Symbol(`nav`),Bn={},Vn={class:`VPSwitch`,type:`button`,role:`switch`},Hn={class:`check`},Un={key:0,class:`icon`};function Wn(e,t){return q(),A(`button`,Vn,[R(`span`,Hn,[e.$slots.default?(q(),A(`span`,Un,[w(e.$slots,`default`,{},void 0,!0)])):N(``,!0)])])}var Gn=z(Bn,[[`render`,Wn],[`__scopeId`,`data-v-abe87520`]]),Kn=z(W({__name:`VPSwitchAppearance`,setup(e){let{isDark:t,theme:n}=Y(),i=de(`toggle-appearance`,()=>{t.value=!t.value}),a=f(``);return r(()=>{a.value=t.value?n.value.lightModeSwitchTitle||`Switch to light theme`:n.value.darkModeSwitchTitle||`Switch to dark theme`}),(e,n)=>(q(),V(Gn,{title:a.value,class:`VPSwitchAppearance`,"aria-checked":O(t),onClick:O(i)},{default:F(()=>[...n[0]||(n[0]=[R(`span`,{class:`vpi-sun sun`},null,-1),R(`span`,{class:`vpi-moon moon`},null,-1)])]),_:1},8,[`title`,`aria-checked`,`onClick`]))}}),[[`__scopeId`,`data-v-3118776b`]]),qn={key:0,class:`VPNavBarAppearance`},Jn=z(W({__name:`VPNavBarAppearance`,setup(e){let{site:t}=Y();return(e,n)=>O(t).appearance&&O(t).appearance!==`force-dark`&&O(t).appearance!==`force-auto`?(q(),A(`div`,qn,[j(Kn)])):N(``,!0)}}),[[`__scopeId`,`data-v-19112ba7`]]),Yn=f(),Xn=!1,Zn=0;function Qn(e){let t=f(!1);if(be){!Xn&&$n(),Zn++;let n=y(Yn,n=>{var r;if(n===e.el.value||(r=e.el.value)!=null&&r.contains(n)){var i;t.value=!0,(i=e.onFocus)==null||i.call(e)}else{var a;t.value=!1,(a=e.onBlur)==null||a.call(e)}});ae(()=>{n(),Zn--,Zn||er()})}return u(t)}function $n(){document.addEventListener(`focusin`,tr),Xn=!0,Yn.value=document.activeElement}function er(){document.removeEventListener(`focusin`,tr)}function tr(){Yn.value=document.activeElement}var nr={class:`VPMenuLink`},rr=[`innerHTML`],ir=z(W({inheritAttrs:!1,__name:`VPMenuLink`,props:{item:{},rel:{}},setup(e){let t=e,n=I(),r=U(()=>typeof t.item.link==`function`?t.item.link(n.data):t.item.link),i=U(()=>C(n.data.relativePath,n.hash,t.item.activeMatch||r.value,!!t.item.activeMatch));return(n,a)=>{var o;return q(),A(`div`,nr,[j(Q,B(n.$attrs,{class:{active:i.value},href:r.value,target:e.item.target,rel:(o=t.rel)==null?e.item.rel:o,"no-icon":e.item.noIcon}),{default:F(()=>[R(`span`,{innerHTML:e.item.text},null,8,rr)]),_:1},16,[`class`,`href`,`target`,`rel`,`no-icon`])])}}}),[[`__scopeId`,`data-v-0bb72d78`]]),ar={class:`VPMenuGroup`},or={key:0,class:`title`},sr=z(W({__name:`VPMenuGroup`,props:{text:{},items:{}},setup(e){return(n,r)=>(q(),A(`div`,ar,[e.text?(q(),A(`p`,or,k(e.text),1)):N(``,!0),(q(!0),A(t,null,K(e.items,e=>(q(),A(t,{key:JSON.stringify(e)},[`link`in e?(q(),V(ir,{key:0,item:e},null,8,[`item`])):N(``,!0)],64))),128))]))}}),[[`__scopeId`,`data-v-240f4569`]]),cr={class:`VPMenu`},lr={key:0,class:`items`},ur=z(W({__name:`VPMenu`,props:{items:{}},setup(e){return(n,r)=>(q(),A(`div`,cr,[e.items?(q(),A(`ul`,lr,[(q(!0),A(t,null,K(e.items,e=>(q(),A(`li`,{key:JSON.stringify(e)},[`link`in e?(q(),V(ir,{key:0,item:e},null,8,[`item`])):`component`in e?(q(),V(G(e.component),B({key:1,ref_for:!0},e.props),null,16)):(q(),V(sr,{key:2,text:e.text,items:e.items},null,8,[`text`,`items`]))]))),128))])):N(``,!0),w(n.$slots,`default`,{},void 0,!0)]))}}),[[`__scopeId`,`data-v-4b77f24e`]]),dr=[`aria-expanded`,`aria-label`],fr={key:0,class:`text`},pr=[`innerHTML`],mr={key:1,class:`vpi-more-horizontal icon`},hr={class:`menu`},gr=z(W({__name:`VPFlyout`,props:{icon:{},button:{},label:{},items:{}},setup(e){let t=f(!1),n=f();Qn({el:n,onBlur:r});function r(){t.value=!1}return(r,i)=>(q(),A(`div`,{class:`VPFlyout`,ref_key:`el`,ref:n,onMouseenter:i[1]||(i[1]=e=>t.value=!0),onMouseleave:i[2]||(i[2]=e=>t.value=!1)},[R(`button`,{type:`button`,class:`button`,"aria-haspopup":`true`,"aria-expanded":t.value,"aria-label":e.label,onClick:i[0]||(i[0]=e=>t.value=!t.value)},[e.button||e.icon?(q(),A(`span`,fr,[e.icon?(q(),A(`span`,{key:0,class:d([e.icon,`option-icon`])},null,2)):N(``,!0),e.button?(q(),A(`span`,{key:1,innerHTML:e.button},null,8,pr)):N(``,!0),i[3]||(i[3]=R(`span`,{class:`vpi-chevron-down text-icon`},null,-1))])):(q(),A(`span`,mr))],8,dr),R(`div`,hr,[j(ur,{items:e.items},{default:F(()=>[w(r.$slots,`default`,{},void 0,!0)]),_:3},8,[`items`])])],544))}}),[[`__scopeId`,`data-v-4d8772ad`]]),_r=[`href`,`aria-label`,`target`,`rel`,`innerHTML`],vr=z(W({__name:`VPSocialLink`,props:{icon:{},link:{},ariaLabel:{},target:{},me:{type:Boolean}},setup(e){let t=e,n=f();M(async()=>{var e;await L();let r=(e=n.value)==null?void 0:e.children[0];r instanceof HTMLElement&&r.className.startsWith(`vpi-social-`)&&(getComputedStyle(r).maskImage||getComputedStyle(r).webkitMaskImage)===`none`&&r.style.setProperty(`--icon`,`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});let r=U(()=>typeof t.icon==`object`?t.icon.svg:`<span class="vpi-social-${t.icon}"></span>`);return(t,a)=>{var o,s;return q(),A(`a`,{ref_key:`el`,ref:n,class:`VPSocialLink no-icon`,href:e.link,"aria-label":(o=e.ariaLabel)==null?typeof e.icon==`string`?e.icon:``:o,target:(s=e.target)==null?O(i)(e.link)?`_blank`:void 0:s,rel:e.me?`me noopener`:`noopener`,innerHTML:r.value},null,8,_r)}}}),[[`__scopeId`,`data-v-30d3fe38`]]),yr={class:`VPSocialLinks`},br=z(W({__name:`VPSocialLinks`,props:{links:{},me:{type:Boolean,default:!0}},setup(e){return(n,r)=>(q(),A(`ul`,yr,[(q(!0),A(t,null,K(e.links,({link:t,icon:n,ariaLabel:r,target:i})=>(q(),A(`li`,{key:t,class:`item`},[j(vr,{icon:n,link:t,ariaLabel:r,target:i,me:e.me},null,8,[`icon`,`link`,`ariaLabel`,`target`,`me`])]))),128))]))}}),[[`__scopeId`,`data-v-9711edf3`]]),xr={key:0,class:`group translations`},Sr={class:`trans-title`},Cr={key:1,class:`group`},wr={class:`item appearance`},Tr={class:`label`},Er={class:`appearance-action`},Dr={key:2,class:`group`},Or={class:`item social-links`},kr=z(W({__name:`VPNavBarExtra`,setup(e){let{site:n,theme:r}=Y(),{localeLinks:i,currentLang:a}=je({linkToCorrespondingPage:!0}),o=U(()=>i.value.length&&a.value.label||n.value.appearance||r.value.socialLinks);return(e,s)=>o.value?(q(),V(gr,{key:0,class:`VPNavBarExtra`,label:`extra navigation`},{default:F(()=>[O(i).length&&O(a).label?(q(),A(`ul`,xr,[R(`li`,Sr,k(O(a).label),1),(q(!0),A(t,null,K(O(i),e=>(q(),A(`li`,{key:e.link},[j(ir,{item:e,external:!1,lang:e.lang,hreflang:e.lang,rel:`alternate`,dir:e.dir,"data-allow-mismatch":`attribute`},null,8,[`item`,`lang`,`hreflang`,`dir`])]))),128))])):N(``,!0),O(n).appearance&&O(n).appearance!==`force-dark`&&O(n).appearance!==`force-auto`?(q(),A(`div`,Cr,[R(`div`,wr,[R(`p`,Tr,k(O(r).darkModeSwitchLabel||`Appearance`),1),R(`div`,Er,[j(Kn)])])])):N(``,!0),O(r).socialLinks?(q(),A(`div`,Dr,[R(`div`,Or,[j(br,{class:`social-links-list`,links:O(r).socialLinks},null,8,[`links`])])])):N(``,!0)]),_:1})):N(``,!0)}}),[[`__scopeId`,`data-v-59bbb10b`]]),Ar=[`aria-expanded`],jr=z(W({__name:`VPNavBarHamburger`,props:{active:{type:Boolean}},emits:[`click`],setup(e){return(t,n)=>(q(),A(`button`,{type:`button`,class:d([`VPNavBarHamburger`,{active:e.active}]),"aria-label":`mobile navigation`,"aria-expanded":e.active,"aria-controls":`VPNavScreen`,onClick:n[0]||(n[0]=e=>t.$emit(`click`))},[...n[1]||(n[1]=[R(`span`,{class:`container`},[R(`span`,{class:`top`}),R(`span`,{class:`middle`}),R(`span`,{class:`bottom`})],-1)])],10,Ar))}}),[[`__scopeId`,`data-v-6edcecdf`]]),Mr=W({__name:`VPNavBarMenuGroup`,props:{item:{}},setup(e){let t=e,n=I(),r=U(()=>t.item.activeMatch?C(n.data.relativePath,n.hash,t.item.activeMatch,!0):i(t.item));function i(e){if(`component`in e)return!1;if(`link`in e){let t=typeof e.link==`function`?e.link(n.data):e.link;return C(n.data.relativePath,n.hash,e.activeMatch||t,!!e.activeMatch)}return e.items.some(i)}return(t,n)=>(q(),V(gr,{class:d({VPNavBarMenuGroup:!0,active:r.value}),button:e.item.text,items:e.item.items},null,8,[`class`,`button`,`items`]))}}),Nr=[`innerHTML`],Pr=z(W({__name:`VPNavBarMenuLink`,props:{item:{}},setup(e){let t=e,n=I(),r=U(()=>typeof t.item.link==`function`?t.item.link(n.data):t.item.link),i=U(()=>C(n.data.relativePath,n.hash,t.item.activeMatch||r.value,!!t.item.activeMatch));return(t,n)=>(q(),V(Q,{class:d({VPNavBarMenuLink:!0,active:i.value}),href:r.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:`0`},{default:F(()=>[R(`span`,{innerHTML:e.item.text},null,8,Nr)]),_:1},8,[`class`,`href`,`target`,`rel`,`no-icon`]))}}),[[`__scopeId`,`data-v-ba488d77`]]),Fr={key:0,"aria-labelledby":`main-nav-aria-label`,class:`VPNavBarMenu`},Ir={class:`list`},Lr=z(W({__name:`VPNavBarMenu`,setup(e){let{theme:n}=Y();return(e,r)=>O(n).nav?(q(),A(`nav`,Fr,[r[0]||(r[0]=R(`span`,{id:`main-nav-aria-label`,class:`visually-hidden`},` Main Navigation `,-1)),R(`ul`,Ir,[(q(!0),A(t,null,K(O(n).nav,e=>(q(),A(`li`,{key:JSON.stringify(e)},[`link`in e?(q(),V(Pr,{key:0,item:e},null,8,[`item`])):`component`in e?(q(),V(G(e.component),B({key:1,ref_for:!0},e.props),null,16)):(q(),V(Mr,{key:2,item:e},null,8,[`item`]))]))),128))])])):N(``,!0)}}),[[`__scopeId`,`data-v-9603ce15`]]);function Rr(e){var t;let n=(t=e.mode)==null?`auto`:t,r=zr(e),i=e.askAi,a=!!(i&&typeof i==`object`&&i.sidePanel);switch(n){case`sidePanel`:return{mode:n,showKeywordSearch:!1,useSidePanel:!0};case`hybrid`:return r||console.error(`[vitepress] mode: "hybrid" requires keyword search credentials (appId, apiKey, indexName).`),{mode:n,showKeywordSearch:r,useSidePanel:!0};case`modal`:return{mode:n,showKeywordSearch:r,useSidePanel:!1};default:return{mode:`auto`,showKeywordSearch:r,useSidePanel:a}}}function zr(e){return!!(e.appId&&e.apiKey&&e.indexName)}function Br(e,t){return[...(Array.isArray(e)?e:e?[e]:[]).map(e=>Array.isArray(e)?e.filter(e=>typeof e==`string`&&!e.startsWith(`lang:`)):e).filter(e=>typeof e==`string`?!e.startsWith(`lang:`):Array.isArray(e)&&e.length>0),`lang:${t}`]}function Vr(e,t,n){var r,i;let a=typeof e==`string`,o=!a&&e.searchParameters?{...e.searchParameters}:void 0,s=!a&&e.agentStudio===!0,c=Br((r=o==null?void 0:o.facetFilters)==null?(i=t.searchParameters)==null?void 0:i.facetFilters:r,n),l=s?o:{...o,facetFilters:c.length?c:void 0},u={...a?{}:e,indexName:a?t.indexName:e.indexName,apiKey:a?t.apiKey:e.apiKey,appId:a?t.appId:e.appId,assistantId:a?e:e.assistantId};return l&&Object.values(l).some(e=>e!=null)&&(u.searchParameters=l),u}function Hr(e,t,n){var r,i;e=Ur(e,((r=e.locales)==null?void 0:r[t])||{});let a=Br((i=e.searchParameters)==null?void 0:i.facetFilters,n),o=e.askAi?Vr(e.askAi,e,n):void 0;return{...e,searchParameters:{...e.searchParameters,facetFilters:a},askAi:o}}function Ur(e,t){let n={...e};for(let e in t){let r=t[e];if(r!==void 0){if(e===`searchParameters`){n[e]=r;continue}n[e]=ye(r)&&ye(n[e])?Ur(n[e],r):r}}return delete n.locales,n}function Wr(e,t=(e,t)=>JSON.stringify(e)===JSON.stringify(t)){return U(n=>{let r=e();return n===void 0||!t(r,n)?r:n})}var Gr={},Kr={type:`button`,class:`VPNavBarAskAiButton`};function qr(e,t){return q(),A(`button`,Kr,[...t[0]||(t[0]=[R(`span`,{class:`vpi-sparkles`,"aria-hidden":`true`},null,-1)])])}var Jr=z(Gr,[[`render`,qr],[`__scopeId`,`data-v-31e32b68`]]),Yr={type:`button`,class:`VPNavBarSearchButton`},Xr={class:`text`},Zr=z(W({__name:`VPNavBarSearchButton`,props:{text:{}},setup(e){return(t,n)=>(q(),A(`button`,Yr,[n[0]||(n[0]=R(`span`,{class:`vpi-search`,"aria-hidden":`true`},null,-1)),R(`span`,Xr,k(e.text),1),n[1]||(n[1]=R(`span`,{class:`keys`,"aria-hidden":`true`},[R(`kbd`,{class:`key-cmd`},`⌘`),R(`kbd`,{class:`key-ctrl`},`Ctrl`),R(`kbd`,null,`K`)],-1))]))}}),[[`__scopeId`,`data-v-8eb6b216`]]),Qr={class:`VPNavBarSearch`},$r=z(W({__name:`VPNavBarSearch`,setup(e){let n=me(()=>oe(()=>import(((u)=>{if(u.startsWith('/')){return"https://registry.npmmirror.com/@gkd-kit/docs/0.0.1788031478448/files/.vitepress/dist"+u}return u})(`./VPLocalSearchBox.cfebC-xP.js`)),[])),r=()=>null,{theme:i,localeIndex:a,lang:o}=Y(),s=`local`,c=Wr(()=>{var e;return Hr(((e=i.value.search)==null?void 0:e.options)||{},a.value,o.value)}),l=U(()=>Rr(c.value)),u=U(()=>{if(!l.value.useSidePanel)return null;let e=c.value.askAi;return!e||typeof e==`string`||!e.sidePanel?null:e.sidePanel===!0?{}:e.sidePanel}),d=U(()=>{var e;return((e=u.value)==null||(e=e.keyboardShortcuts)==null?void 0:e[`Ctrl/Cmd+I`])!==!1}),p=f(null),m=0,h=f(!1),g=f(!1);M(()=>{});function _(e){h.value||(h.value=!0),p.value={target:e,nonce:++m}}let y=f(!1);v(`k`,e=>{(e.ctrlKey||e.metaKey)&&(e.preventDefault(),y.value=!0)}),v(`/`,e=>{b(e)||(e.preventDefault(),y.value=!0)});function b(e){let t=e.target,n=t.tagName;return t.isContentEditable||n===`INPUT`||n===`SELECT`||n===`TEXTAREA`}return(e,i)=>{var a,o,f,m,v;return q(),A(`div`,Qr,[O(s)===`algolia`?(q(),A(t,{key:0},[l.value.showKeywordSearch?(q(),V(Zr,{key:0,text:((a=O(c).translations)==null||(a=a.button)==null?void 0:a.buttonText)||`Search`,"aria-label":((o=O(c).translations)==null||(o=o.button)==null?void 0:o.buttonAriaLabel)||`Search`,"aria-keyshortcuts":`/ control+k meta+k`,onClick:i[0]||(i[0]=e=>_(`search`))},null,8,[`text`,`aria-label`])):N(``,!0),u.value?(q(),V(Jr,{key:1,"aria-label":((f=u.value.button)==null||(f=f.translations)==null?void 0:f.buttonAriaLabel)||`Ask AI`,"aria-keyshortcuts":d.value?`control+i meta+i`:void 0,onClick:i[1]||(i[1]=e=>g.value?_(`toggleAskAi`):_(`askAi`))},null,8,[`aria-label`,`aria-keyshortcuts`])):N(``,!0),h.value?(q(),V(O(r),{key:2,"algolia-options":O(c),"open-request":p.value,onVnodeBeforeMount:i[2]||(i[2]=e=>g.value=!0)},null,8,[`algolia-options`,`open-request`])):N(``,!0)],64)):O(s)===`local`?(q(),A(t,{key:1},[j(Zr,{text:((m=O(c).translations)==null||(m=m.button)==null?void 0:m.buttonText)||`Search`,"aria-label":((v=O(c).translations)==null||(v=v.button)==null?void 0:v.buttonAriaLabel)||`Search`,"aria-keyshortcuts":`/ control+k meta+k`,onClick:i[3]||(i[3]=e=>y.value=!0)},null,8,[`text`,`aria-label`]),y.value?(q(),V(O(n),{key:0,onClose:i[4]||(i[4]=e=>y.value=!1)})):N(``,!0)],64)):N(``,!0)])}}}),[[`__scopeId`,`data-v-974e65f4`]]),ei=z(W({__name:`VPNavBarSocialLinks`,setup(e){let{theme:t}=Y();return(e,n)=>O(t).socialLinks?(q(),V(br,{key:0,class:`VPNavBarSocialLinks`,links:O(t).socialLinks},null,8,[`links`])):N(``,!0)}}),[[`__scopeId`,`data-v-74bc09ac`]]),ti=[`href`,`rel`,`target`],ni=[`innerHTML`],ri={key:2},ii=z(W({__name:`VPNavBarTitle`,setup(e){let{site:t,theme:n}=Y(),{hasSidebar:r}=Z(),{currentLang:i}=je(),a=U(()=>{var e;return typeof n.value.logoLink==`string`?n.value.logoLink:(e=n.value.logoLink)==null?void 0:e.link}),o=U(()=>{var e;return typeof n.value.logoLink==`string`||(e=n.value.logoLink)==null?void 0:e.rel}),s=U(()=>{var e;return typeof n.value.logoLink==`string`||(e=n.value.logoLink)==null?void 0:e.target});return(e,c)=>{var l;return q(),A(`div`,{class:d([`VPNavBarTitle`,{"has-sidebar":O(r)}])},[R(`a`,{class:`title`,href:(l=a.value)==null?O(ke)(O(i).link):l,rel:o.value,target:s.value},[w(e.$slots,`nav-bar-title-before`,{},void 0,!0),O(n).logo?(q(),V(Gt,{key:0,class:`logo`,image:O(n).logo},null,8,[`image`])):N(``,!0),O(n).siteTitle?(q(),A(`span`,{key:1,innerHTML:O(n).siteTitle},null,8,ni)):O(n).siteTitle===void 0?(q(),A(`span`,ri,k(O(t).title),1)):N(``,!0),w(e.$slots,`nav-bar-title-after`,{},void 0,!0)],8,ti)],2)}}}),[[`__scopeId`,`data-v-cad311b4`]]),ai={class:`items`},oi={class:`title`},si=z(W({__name:`VPNavBarTranslations`,setup(e){let{theme:n}=Y(),{localeLinks:r,currentLang:i}=je({linkToCorrespondingPage:!0});return(e,a)=>O(r).length&&O(i).label?(q(),V(gr,{key:0,class:`VPNavBarTranslations`,icon:`vpi-languages`,label:O(n).langMenuLabel||`Change language`},{default:F(()=>[R(`ul`,ai,[R(`li`,oi,k(O(i).label),1),(q(!0),A(t,null,K(O(r),e=>(q(),A(`li`,{key:e.link},[j(ir,{item:e,external:!1,lang:e.lang,hreflang:e.lang,rel:`alternate`,dir:e.dir,"data-allow-mismatch":`attribute`},null,8,[`item`,`lang`,`hreflang`,`dir`])]))),128))])]),_:1},8,[`label`])):N(``,!0)}}),[[`__scopeId`,`data-v-dd38d2e8`]]),ci={class:`wrapper`},li={class:`container`},ui={class:`title`},di={class:`content`},fi={class:`content-body`},pi=z(W({__name:`VPNavBar`,props:{isScreenOpen:{type:Boolean}},emits:[`toggle-screen`],setup(e){let{y:t}=m(),{isHome:n,hasSidebar:r}=Z();return(i,a)=>(q(),A(`div`,{class:d([`VPNavBar`,{"has-sidebar":O(r),home:O(n),top:O(t)===0,"screen-open":e.isScreenOpen}])},[R(`div`,ci,[R(`div`,li,[R(`div`,ui,[j(ii,null,{"nav-bar-title-before":F(()=>[w(i.$slots,`nav-bar-title-before`,{},void 0,!0)]),"nav-bar-title-after":F(()=>[w(i.$slots,`nav-bar-title-after`,{},void 0,!0)]),_:3})]),R(`div`,di,[R(`div`,fi,[w(i.$slots,`nav-bar-content-before`,{},void 0,!0),j($r,{class:`search`}),j(Lr,{class:`menu`}),j(si,{class:`translations`}),j(Jn,{class:`appearance`}),j(ei,{class:`social-links`}),j(kr,{class:`extra`}),w(i.$slots,`nav-bar-content-after`,{},void 0,!0),j(jr,{class:`hamburger`,active:e.isScreenOpen,onClick:a[0]||(a[0]=e=>i.$emit(`toggle-screen`))},null,8,[`active`])])])])]),a[1]||(a[1]=R(`div`,{class:`divider`},[R(`div`,{class:`divider-line`})],-1))],2))}}),[[`__scopeId`,`data-v-e72917cf`]]),mi={key:0,class:`VPNavScreenAppearance`},hi={class:`text`},gi=z(W({__name:`VPNavScreenAppearance`,setup(e){let{site:t,theme:n}=Y();return(e,r)=>O(t).appearance&&O(t).appearance!==`force-dark`&&O(t).appearance!==`force-auto`?(q(),A(`div`,mi,[R(`p`,hi,k(O(n).darkModeSwitchLabel||`Appearance`),1),j(Kn)])):N(``,!0)}}),[[`__scopeId`,`data-v-42629761`]]),_i=[`innerHTML`],vi=z(W({__name:`VPNavScreenMenuGroupLink`,props:{item:{}},setup(e){let t=e,n=I(),r=U(()=>typeof t.item.link==`function`?t.item.link(n.data):t.item.link),i=U(()=>C(n.data.relativePath,n.hash,t.item.activeMatch||r.value,!!t.item.activeMatch)),{closeScreen:a}=de(zn);return(t,n)=>(q(),V(Q,{class:d({VPNavScreenMenuGroupLink:!0,active:i.value}),href:r.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:O(a)},{default:F(()=>[R(`span`,{innerHTML:e.item.text},null,8,_i)]),_:1},8,[`class`,`href`,`target`,`rel`,`no-icon`,`onClick`]))}}),[[`__scopeId`,`data-v-e58074cb`]]),yi={class:`VPNavScreenMenuGroupSection`},bi={key:0,class:`title`},xi=z(W({__name:`VPNavScreenMenuGroupSection`,props:{text:{},items:{}},setup(e){return(n,r)=>(q(),A(`div`,yi,[e.text?(q(),A(`p`,bi,k(e.text),1)):N(``,!0),R(`ul`,null,[(q(!0),A(t,null,K(e.items,e=>(q(),A(`li`,{key:e.text},[j(vi,{item:e},null,8,[`item`])]))),128))])]))}}),[[`__scopeId`,`data-v-4ceed151`]]),Si=[`aria-controls`,`aria-expanded`],Ci=[`innerHTML`],wi=[`id`],Ti={key:0,class:`item`},Ei={key:1,class:`item`},Di={key:2,class:`group`},Oi=z(W({__name:`VPNavScreenMenuGroup`,props:{text:{},items:{}},setup(e){let n=e,r=f(!1),i=U(()=>`NavScreenGroup-${n.text.replace(` `,`-`).toLowerCase()}`);function a(){r.value=!r.value}return(n,o)=>(q(),A(`div`,{class:d([`VPNavScreenMenuGroup`,{open:r.value}])},[R(`button`,{class:`button`,"aria-controls":i.value,"aria-expanded":r.value,onClick:a},[R(`span`,{class:`button-text`,innerHTML:e.text},null,8,Ci),o[0]||(o[0]=R(`span`,{class:`vpi-plus button-icon`},null,-1))],8,Si),R(`ul`,{id:i.value,class:`items`},[(q(!0),A(t,null,K(e.items,e=>(q(),A(`li`,{key:JSON.stringify(e)},[`link`in e?(q(),A(`div`,Ti,[j(vi,{item:e},null,8,[`item`])])):`component`in e?(q(),A(`div`,Ei,[(q(),V(G(e.component),B({ref_for:!0},e.props,{"screen-menu":``}),null,16))])):(q(),A(`div`,Di,[j(xi,{text:e.text,items:e.items},null,8,[`text`,`items`])]))]))),128))],8,wi)],2))}}),[[`__scopeId`,`data-v-4462584c`]]),ki=[`innerHTML`],Ai=z(W({__name:`VPNavScreenMenuLink`,props:{item:{}},setup(e){let t=e,n=I(),r=U(()=>typeof t.item.link==`function`?t.item.link(n.data):t.item.link),i=U(()=>C(n.data.relativePath,n.hash,t.item.activeMatch||r.value,!!t.item.activeMatch)),{closeScreen:a}=de(zn);return(t,n)=>(q(),V(Q,{class:d({VPNavScreenMenuLink:!0,active:i.value}),href:r.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:O(a)},{default:F(()=>[R(`span`,{innerHTML:e.item.text},null,8,ki)]),_:1},8,[`class`,`href`,`target`,`rel`,`no-icon`,`onClick`]))}}),[[`__scopeId`,`data-v-2765dc0f`]]),ji={key:0,class:`VPNavScreenMenu`},Mi=W({__name:`VPNavScreenMenu`,setup(e){let{theme:n}=Y();return(e,r)=>O(n).nav?(q(),A(`nav`,ji,[R(`ul`,null,[(q(!0),A(t,null,K(O(n).nav,e=>(q(),A(`li`,{key:JSON.stringify(e)},[`link`in e?(q(),V(Ai,{key:0,item:e},null,8,[`item`])):`component`in e?(q(),V(G(e.component),B({key:1,ref_for:!0},e.props,{"screen-menu":``}),null,16)):(q(),V(Oi,{key:2,text:e.text||``,items:e.items},null,8,[`text`,`items`]))]))),128))])])):N(``,!0)}}),Ni=W({__name:`VPNavScreenSocialLinks`,setup(e){let{theme:t}=Y();return(e,n)=>O(t).socialLinks?(q(),V(br,{key:0,class:`VPNavScreenSocialLinks`,links:O(t).socialLinks},null,8,[`links`])):N(``,!0)}}),Pi={class:`list`},Fi=z(W({__name:`VPNavScreenTranslations`,setup(e){let{localeLinks:n,currentLang:r}=je({linkToCorrespondingPage:!0}),i=f(!1);function a(){i.value=!i.value}return(e,o)=>O(n).length&&O(r).label?(q(),A(`div`,{key:0,class:d([`VPNavScreenTranslations`,{open:i.value}])},[R(`button`,{class:`title`,onClick:a},[o[0]||(o[0]=R(`span`,{class:`vpi-languages icon lang`},null,-1)),H(` `+k(O(r).label)+` `,1),o[1]||(o[1]=R(`span`,{class:`vpi-chevron-down icon chevron`},null,-1))]),R(`ul`,Pi,[(q(!0),A(t,null,K(O(n),e=>(q(),A(`li`,{key:e.link,class:`item`},[j(Q,{class:`link`,href:e.link,external:!1,lang:e.lang,hreflang:e.lang,rel:`alternate`,dir:e.dir,"data-allow-mismatch":`attribute`},{default:F(()=>[H(k(e.text),1)]),_:2},1032,[`href`,`lang`,`hreflang`,`dir`])]))),128))])],2)):N(``,!0)}}),[[`__scopeId`,`data-v-57ba8ef9`]]),Ii={key:0,class:`VPNavScreen`,id:`VPNavScreen`},Li={class:`container`},Ri=z(W({__name:`VPNavScreen`,props:{open:{type:Boolean}},setup(e){let t=l(be?document.body:null);return(n,r)=>(q(),V(p,{name:`fade`,onEnter:r[0]||(r[0]=e=>t.value=!0),onAfterLeave:r[1]||(r[1]=e=>t.value=!1)},{default:F(()=>[e.open?(q(),A(`div`,Ii,[R(`div`,Li,[w(n.$slots,`nav-screen-content-before`,{},void 0,!0),j(Mi,{class:`menu`}),j(Fi,{class:`translations`}),j(gi,{class:`appearance`}),j(Ni,{class:`social-links`}),w(n.$slots,`nav-screen-content-after`,{},void 0,!0)])])):N(``,!0)]),_:3}))}}),[[`__scopeId`,`data-v-6880fbab`]]),zi={key:0,class:`VPNav`},Bi=z(W({__name:`VPNav`,setup(e){let{isScreenOpen:t,closeScreen:n,toggleScreen:r}=Rn(),{frontmatter:i}=Y(),a=U(()=>i.value.navbar!==!1);return se(zn,{closeScreen:n}),pe(()=>{be&&document.documentElement.classList.toggle(`hide-nav`,!a.value)}),(e,n)=>a.value?(q(),A(`header`,zi,[j(pi,{"is-screen-open":O(t),onToggleScreen:O(r)},{"nav-bar-title-before":F(()=>[w(e.$slots,`nav-bar-title-before`,{},void 0,!0)]),"nav-bar-title-after":F(()=>[w(e.$slots,`nav-bar-title-after`,{},void 0,!0)]),"nav-bar-content-before":F(()=>[w(e.$slots,`nav-bar-content-before`,{},void 0,!0)]),"nav-bar-content-after":F(()=>[w(e.$slots,`nav-bar-content-after`,{},void 0,!0)]),_:3},8,[`is-screen-open`,`onToggleScreen`]),j(Ri,{open:O(t)},{"nav-screen-content-before":F(()=>[w(e.$slots,`nav-screen-content-before`,{},void 0,!0)]),"nav-screen-content-after":F(()=>[w(e.$slots,`nav-screen-content-after`,{},void 0,!0)]),_:3},8,[`open`])])):N(``,!0)}}),[[`__scopeId`,`data-v-eb987941`]]),Vi=[`role`,`tabindex`],Hi={key:1,class:`items`},Ui={key:0},Wi=z(W({__name:`VPSidebarItem`,props:{item:{},depth:{}},setup(e){let n=e,{collapsed:r,collapsible:i,isLink:o,isActiveLink:s,hasActiveLink:c,hasChildren:l,toggle:u}=it(U(()=>n.item)),f=U(()=>l.value?`section`:`div`),p=U(()=>o.value?`a`:`div`),m=U(()=>l.value?n.depth+2===7?`p`:`h${n.depth+2}`:`p`),h=U(()=>o.value?void 0:`button`),g=U(()=>[[`level-${n.depth}`],{collapsible:i.value},{collapsed:r.value},{"is-link":o.value},{"is-active":s.value},{"has-active":c.value}]);function _(e){`key`in e&&e.key!==`Enter`||!n.item.link&&u()}function v(){n.item.link&&u()}return(n,r)=>{let i=a(`VPSidebarItem`,!0);return q(),V(G(f.value),{class:d([`VPSidebarItem`,g.value])},{default:F(()=>[e.item.text?(q(),A(`div`,B({key:0,class:`item`,role:h.value},T(e.item.items?{click:_,keydown:_}:{},!0),{tabindex:e.item.items&&0}),[r[1]||(r[1]=R(`div`,{class:`indicator`},null,-1)),e.item.link?(q(),V(Q,{key:0,tag:p.value,class:`link`,href:e.item.link,rel:e.item.rel,target:e.item.target},{default:F(()=>[(q(),V(G(m.value),{class:`text`,innerHTML:e.item.text},null,8,[`innerHTML`]))]),_:1},8,[`tag`,`href`,`rel`,`target`])):(q(),V(G(m.value),{key:1,class:`text`,innerHTML:e.item.text},null,8,[`innerHTML`])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(q(),A(`div`,{key:2,class:`caret`,role:`button`,"aria-label":`toggle section`,onClick:v,onKeydown:ie(v,[`enter`]),tabindex:`0`},[...r[0]||(r[0]=[R(`span`,{class:`vpi-chevron-right caret-icon`},null,-1)])],32)):N(``,!0)],16,Vi)):N(``,!0),e.item.items&&e.item.items.length?(q(),A(`ul`,Hi,[e.depth<5?(q(),A(`li`,Ui,[(q(!0),A(t,null,K(e.item.items,t=>(q(),V(i,{key:t.text,item:t,depth:e.depth+1},null,8,[`item`,`depth`]))),128))])):N(``,!0)])):N(``,!0)]),_:1},8,[`class`])}}}),[[`__scopeId`,`data-v-ceec78bf`]]),Gi=z(W({__name:`VPSidebarGroup`,props:{items:{}},setup(e){let n=f(!0),r=null;return M(()=>{r=setTimeout(()=>{r=null,n.value=!1},300)}),fe(()=>{r!=null&&(clearTimeout(r),r=null)}),(r,i)=>(q(!0),A(t,null,K(e.items,e=>(q(),A(`div`,{key:e.text,class:d([`group`,{"no-transition":n.value}])},[j(Wi,{item:e,depth:0},null,8,[`item`])],2))),128))}}),[[`__scopeId`,`data-v-d3787c75`]]),Ki={class:`nav`,id:`VPSidebarNav`,"aria-labelledby":`sidebar-aria-label`,tabindex:`-1`},qi=z(W({__name:`VPSidebar`,props:{open:{type:Boolean}},setup(e){let{sidebarGroups:t,hasSidebar:n}=Z(),r=e,i=f(null),a=l(be?document.body:null);y([r,i],()=>{if(r.open){var e;a.value=!0,(e=i.value)==null||e.focus()}else a.value=!1},{immediate:!0,flush:`post`});let o=f(0);return y(t,()=>{o.value+=1},{deep:!0}),(r,a)=>O(n)?(q(),A(`aside`,{key:0,class:d([`VPSidebar`,{open:e.open}]),ref_key:`navEl`,ref:i,onClick:a[0]||(a[0]=x(()=>{},[`stop`]))},[a[2]||(a[2]=R(`div`,{class:`curtain`},null,-1)),R(`nav`,Ki,[a[1]||(a[1]=R(`span`,{class:`visually-hidden`,id:`sidebar-aria-label`},` Sidebar Navigation `,-1)),w(r.$slots,`sidebar-nav-before`,{},void 0,!0),(q(),V(Gi,{items:O(t),key:o.value},null,8,[`items`])),w(r.$slots,`sidebar-nav-after`,{},void 0,!0)])],2)):N(``,!0)}}),[[`__scopeId`,`data-v-8a2ab808`]]),Ji={href:`#VPContent`,class:`VPSkipLink visually-hidden`},Yi=z(W({__name:`VPSkipLink`,setup(e){let{theme:n}=Y(),r=I(),i=f();return y(()=>r.path,()=>i.value.focus()),(e,r)=>(q(),A(t,null,[R(`span`,{ref_key:`backToTop`,ref:i,tabindex:`-1`},null,512),R(`a`,Ji,k(O(n).skipToContentLabel||`Skip to content`),1)],64))}}),[[`__scopeId`,`data-v-9cbb6ad9`]]),Xi={Layout:z(W({__name:`Layout`,setup(e){let{isOpen:t,open:n,close:r}=rt();ct({closeSidebar:r});let{frontmatter:i}=Y(),o=c(),s=U(()=>!!o[`home-hero-image`]);return se(lt,{heroImageSlotExists:s}),(e,o)=>{let s=a(`Content`);return O(i).layout===!1?(q(),V(s,{key:1})):(q(),A(`div`,{key:0,class:d([`Layout`,O(i).pageClass])},[w(e.$slots,`layout-top`,{},void 0,!0),j(Yi),j(Te,{class:`backdrop`,show:O(t),onClick:O(r)},null,8,[`show`,`onClick`]),j(Bi,null,{"nav-bar-title-before":F(()=>[w(e.$slots,`nav-bar-title-before`,{},void 0,!0)]),"nav-bar-title-after":F(()=>[w(e.$slots,`nav-bar-title-after`,{},void 0,!0)]),"nav-bar-content-before":F(()=>[w(e.$slots,`nav-bar-content-before`,{},void 0,!0)]),"nav-bar-content-after":F(()=>[w(e.$slots,`nav-bar-content-after`,{},void 0,!0)]),"nav-screen-content-before":F(()=>[w(e.$slots,`nav-screen-content-before`,{},void 0,!0)]),"nav-screen-content-after":F(()=>[w(e.$slots,`nav-screen-content-after`,{},void 0,!0)]),_:3}),j(Ln,{open:O(t),onOpenMenu:O(n)},null,8,[`open`,`onOpenMenu`]),j(qi,{open:O(t)},{"sidebar-nav-before":F(()=>[w(e.$slots,`sidebar-nav-before`,{},void 0,!0)]),"sidebar-nav-after":F(()=>[w(e.$slots,`sidebar-nav-after`,{},void 0,!0)]),_:3},8,[`open`]),j(Tn,null,{"page-top":F(()=>[w(e.$slots,`page-top`,{},void 0,!0)]),"page-bottom":F(()=>[w(e.$slots,`page-bottom`,{},void 0,!0)]),"not-found":F(()=>[w(e.$slots,`not-found`,{},void 0,!0)]),"home-hero-before":F(()=>[w(e.$slots,`home-hero-before`,{},void 0,!0)]),"home-hero-info-before":F(()=>[w(e.$slots,`home-hero-info-before`,{},void 0,!0)]),"home-hero-info":F(()=>[w(e.$slots,`home-hero-info`,{},void 0,!0)]),"home-hero-info-after":F(()=>[w(e.$slots,`home-hero-info-after`,{},void 0,!0)]),"home-hero-actions-after":F(()=>[w(e.$slots,`home-hero-actions-after`,{},void 0,!0)]),"home-hero-actions-before-actions":F(()=>[w(e.$slots,`home-hero-actions-before-actions`,{},void 0,!0)]),"home-hero-image":F(()=>[w(e.$slots,`home-hero-image`,{},void 0,!0)]),"home-hero-after":F(()=>[w(e.$slots,`home-hero-after`,{},void 0,!0)]),"home-features-before":F(()=>[w(e.$slots,`home-features-before`,{},void 0,!0)]),"home-features-after":F(()=>[w(e.$slots,`home-features-after`,{},void 0,!0)]),"doc-footer-before":F(()=>[w(e.$slots,`doc-footer-before`,{},void 0,!0)]),"doc-before":F(()=>[w(e.$slots,`doc-before`,{},void 0,!0)]),"doc-after":F(()=>[w(e.$slots,`doc-after`,{},void 0,!0)]),"doc-top":F(()=>[w(e.$slots,`doc-top`,{},void 0,!0)]),"doc-bottom":F(()=>[w(e.$slots,`doc-bottom`,{},void 0,!0)]),"aside-top":F(()=>[w(e.$slots,`aside-top`,{},void 0,!0)]),"aside-bottom":F(()=>[w(e.$slots,`aside-bottom`,{},void 0,!0)]),"aside-outline-before":F(()=>[w(e.$slots,`aside-outline-before`,{},void 0,!0)]),"aside-outline-after":F(()=>[w(e.$slots,`aside-outline-after`,{},void 0,!0)]),"aside-ads-before":F(()=>[w(e.$slots,`aside-ads-before`,{},void 0,!0)]),"aside-ads-after":F(()=>[w(e.$slots,`aside-ads-after`,{},void 0,!0)]),_:3}),j(kn),w(e.$slots,`layout-bottom`,{},void 0,!0)],2))}}}),[[`__scopeId`,`data-v-956cf687`]]),enhanceApp:({app:e})=>{e.component(`Badge`,Ce)}},Zi={fixed:``,"z-100":``,class:`GkBodyScrollbar`},Qi=2,$i=W({__name:`GkBodyScrollbar`,setup(e){let t=J(0),r=J(0),i=e=>{window.scroll({left:e})},a=e=>{window.scroll({top:e})};P(`scroll`,()=>{t.value=window.scrollX,r.value=window.scrollY});let{height:o,width:s}=ee(),c=n(document.body),l=U(()=>c.height.value>o.value+Qi),u=U(()=>{let e=c.height.value;return o.value/e*o.value}),f=U(()=>{let e=c.height.value,t=u.value;return r.value/(e-o.value)*(o.value-t)}),p=U(()=>l.value?{transform:`translateY(${f.value}px)`,height:`${u.value}px`}:{}),m=async e=>{let t=u.value*.9*(e.clientY<u.value+f.value?-1:1),n=c.height.value,i=n,s=o.value/i*o.value;a(r.value+t/(o.value-s)*(n-o.value))},h=J(!1),_,v=e=>{_=e,h.value=!0};P(`pointermove`,e=>{if(!_)return;let t=e.clientY-_.clientY;_=e;let n=c.height.value,i=n,s=o.value/i*o.value;a(r.value+t/(o.value-s)*(n-o.value))}),P(`pointerup`,()=>{_=void 0,h.value=!1});let y=U(()=>c.width.value>s.value+Qi),b=U(()=>{let e=c.width.value;return s.value/e*s.value}),S=U(()=>{let e=c.width.value,n=b.value;return t.value/(e-s.value)*(s.value-n)}),C=U(()=>y.value?{transform:`translateX(${S.value}px)`,width:`${b.value}px`}:{}),w=e=>{let n=b.value*.9*(e.clientX<b.value+S.value?-1:1),r=c.width.value,a=r,o=s.value/a*s.value,l=t.value+n/(s.value-o)*(r-s.value);i(l)},te=J(!1),T,E=e=>{T=e,te.value=!0};return P(`pointermove`,e=>{if(!T)return;let n=e.clientX-T.clientX;T=e;let r=c.width.value,a=r,o=s.value/a*s.value,l=t.value+n/(s.value-o)*(r-s.value);i(l)}),P(`pointerup`,()=>{T=void 0,te.value=!1}),P(`selectstart`,e=>{(T||_)&&e.preventDefault()}),(e,t)=>(q(),A(`div`,Zi,[g(R(`div`,{"scrollbar-y":``,fixed:``,"right-2px":``,"top-0":``,"bottom-0":``,"w-8px":``,onPointerdown:v,onClick:m},[R(`div`,{onClick:t[0]||(t[0]=x(()=>{},[`stop`])),"w-full":``,bg:`#909399`,"opacity-30":``,"hover:opacity":`50`,style:D(p.value),class:d({"opacity-50":h.value})},null,6)],544),[[ne,l.value]]),y.value?(q(),A(`div`,{key:0,"scrollbar-x":``,fixed:``,"bottom-2px":``,"left-0":``,"right-0":``,"h-8px":``,onPointerdown:E,onClick:w},[R(`div`,{onClick:t[1]||(t[1]=x(()=>{},[`stop`])),"h-full":``,bg:`#909399`,"opacity-30":``,"hover:opacity":`50`,style:D(C.value),class:d({"opacity-50":te.value})},null,6)],32)):N(``,!0)]))}}),ea=[`data-href`],ta={key:0,"pointer-events-none":``,absolute:``,left:`1/1`,"top-0":``,"bottom-0":``,flex:``,"items-center":``,"pl-4px":``},na=W({__name:`GkDownloadText`,props:{href:{},name:{},type:{default:`application/vnd.android.package-archive`}},setup(t){let n=t,r=J(!1),i=async()=>{if(r.value)return;r.value=!0,oe(()=>import(((u)=>{if(u.startsWith('/')){return"https://registry.npmmirror.com/@gkd-kit/docs/0.0.1788031478448/files/.vitepress/dist"+u}return u})(`./FileSaver.min.mmHyTxhb.js`)).then(t=>e(t.default,1)),[]);let t=`gkd-${n.name}`;try{let r=await fetch(n.href).then(e=>e.arrayBuffer()).then(e=>new File([e],t,{type:n.type})),{saveAs:i}=await oe(async()=>{let{saveAs:t}=await import(((u)=>{if(u.startsWith('/')){return"https://registry.npmmirror.com/@gkd-kit/docs/0.0.1788031478448/files/.vitepress/dist"+u}return u})(`./FileSaver.min.mmHyTxhb.js`)).then(t=>e(t.default,1));return{saveAs:t}},[]);i(r,t)}finally{r.value=!1}};return(e,n)=>(q(),A(`a`,{relative:``,class:d({"cursor-progress":r.value,"cursor-pointer":!r.value}),onClick:i,"data-href":t.href},[R(`span`,{class:d({"opacity-50":r.value})},k(t.name),3),r.value?(q(),A(`div`,ta,[...n[0]||(n[0]=[R(`svg`,{"animate-spin":``,"size-16px":``,viewBox:`0 0 16 16`,fill:`none`},[R(`circle`,{cx:`8`,cy:`8`,r:`7`,stroke:`currentColor`,"stroke-opacity":`0.25`,"stroke-width":`2`,"vector-effect":`non-scaling-stroke`}),R(`path`,{d:`M15 8a7.002 7.002 0 00-7-7`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"vector-effect":`non-scaling-stroke`})],-1)])])):N(``,!0)],10,ea))}}),ra=10,ia=async(e,t)=>{let n=ra;for(;;)try{return await fetch(e,t)}catch(e){if(n--,n<=0)throw e;await new Promise(e=>setTimeout(e,500))}},aa=e=>e<1024?e+`B`:e<1048576?(e/1024).toFixed(2)+`KB`:e<1073741824?(e/1048576).toFixed(2)+`MB`:(e/1073741824).toFixed(2)+`GB`,oa=async e=>{let t=await ia(e),n=await t.json();return{name:n.versionName,href:new URL(n.downloadUrl,t.url).href,date:n.date,filename:`v`+n.versionName+`.apk`,fileSizeDesc:aa(n.fileSize)}},sa=async e=>oa(e?`https://registry.npmmirror.com/@gkd-kit/app/latest/files/index.json`:`https://registry.npmmirror.com/@gkd-kit/app-beta/latest/files/index.json`),ca=await sa(!0),la=await sa(!1),$=J(ca),ua=J(la),da=!1,fa=async()=>{da||(da=!0,await Promise.all([sa(!0).then(e=>{$.value=e}),sa(!1).then(e=>{ua.value=e})]))},pa={key:0},ma=W({__name:`GkApkTable`,setup(e){return M(fa),(e,t)=>(q(),A(`table`,null,[t[4]||(t[4]=R(`thead`,null,[R(`tr`,null,[R(`th`,null,`版本`),R(`th`,null,`下载`),R(`th`,null,`大小`),R(`th`,null,`日期`),R(`th`,null,`备注`)])],-1)),R(`tbody`,null,[R(`tr`,null,[t[0]||(t[0]=R(`td`,null,`正式版`,-1)),R(`td`,null,[j(na,{href:O($).href,name:O($).filename},null,8,[`href`,`name`])]),R(`td`,null,k(O($).fileSizeDesc),1),R(`td`,null,k(O($).date),1),t[1]||(t[1]=R(`td`,null,`稳定版`,-1))]),O(ua).filename===O($).filename?N(``,!0):(q(),A(`tr`,pa,[t[2]||(t[2]=R(`td`,null,`测试版`,-1)),R(`td`,null,[j(na,{href:O(ua).href,name:O(ua).filename},null,8,[`href`,`name`])]),R(`td`,null,k(O(ua).fileSizeDesc),1),R(`td`,null,k(O(ua).date),1),t[3]||(t[3]=R(`td`,null,`更新快不稳定`,-1))]))])]))}}),ha=W({__name:`GkIdentifierField`,setup(e){let t=J(``),n=/^[_a-zA-Z][a-zA-Z0-9_]*$/,r=E(t,300),i=U(()=>r.value!==`null`&&r.value!==`true`&&r.value!==`false`&&n.test(r.value));return(e,n)=>(q(),A(`div`,null,[g(R(`input`,{placeholder:`请输入标识符测试是否合法`,type:`text`,"onUpdate:modelValue":n[0]||(n[0]=e=>t.value=e),class:`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50`},null,512),[[re,t.value]]),R(`div`,{"mt-4px":``,class:d({"color-red":!i.value,"opacity-0":!O(r)||!t.value})},k(i.value?`合法标识符✅`:`非法标识符❌`),3)]))}}),ga=`https://registry.npmmirror.com/@gkd-kit/assets/${await(async e=>ia(`https://registry.npmmirror.com/${e}/latest`).then(e=>e.json().then(e=>e.version)))(`@gkd-kit/assets`)}/files/assets/`,_a=await fetch(ga+`image-size.json`).then(e=>e.json()),va=e=>e.startsWith(`https:`)?e:ga+e,ya=[`src`,`alt`],ba={class:`image-preview-overlay__toolbar`},xa={key:0,class:`image-preview-overlay__counter`},Sa=W({__name:`GkImagePreviewOverlay`,props:{controller:{}},setup(e){let{items:t,zoom:n,rotation:r,overlay:i,currentIndex:a,currentItem:o,close:s,move:c,setZoom:l,rotateClockwise:u,handleKeydown:d,handleWheel:f}=e.controller,p=U(()=>({transform:`scale(${n.value}) rotate(${r.value}deg)`})),m=U(()=>`${Math.round(n.value*100)}%`);return(e,r)=>O(!1)?N(``,!0):(q(),V(le,{key:0,to:`body`},[O(o)?(q(),A(`div`,{key:0,ref_key:`overlay`,ref:i,class:`image-preview-overlay`,role:`dialog`,"aria-modal":`true`,"aria-label":`图片预览`,tabindex:`-1`,onKeydown:r[10]||(r[10]=(...e)=>O(d)&&O(d)(...e))},[R(`button`,{type:`button`,class:`image-preview-overlay__close`,title:`关闭`,"aria-label":`关闭图片预览`,onClick:r[0]||(r[0]=(...e)=>O(s)&&O(s)(...e))},` × `),R(`div`,{class:`image-preview-overlay__stage`,onClick:r[4]||(r[4]=(...e)=>O(s)&&O(s)(...e)),onWheel:r[5]||(r[5]=x((...e)=>O(f)&&O(f)(...e),[`prevent`]))},[O(t).length>1?(q(),A(`button`,{key:0,type:`button`,class:`image-preview-overlay__nav image-preview-overlay__nav--prev`,title:`上一张`,"aria-label":`上一张图片`,onClick:r[1]||(r[1]=x(e=>O(c)(-1),[`stop`]))},[...r[11]||(r[11]=[R(`svg`,{class:`image-preview-overlay__nav-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`},[R(`path`,{d:`M15 18 9 12l6-6`})],-1)])])):N(``,!0),R(`img`,{class:`image-preview-overlay__image`,src:O(o).getSrc(),alt:O(o).getAlt(),style:D(p.value),draggable:`false`,onClick:r[2]||(r[2]=x(()=>{},[`stop`]))},null,12,ya),O(t).length>1?(q(),A(`button`,{key:1,type:`button`,class:`image-preview-overlay__nav image-preview-overlay__nav--next`,title:`下一张`,"aria-label":`下一张图片`,onClick:r[3]||(r[3]=x(e=>O(c)(1),[`stop`]))},[...r[12]||(r[12]=[R(`svg`,{class:`image-preview-overlay__nav-icon image-preview-overlay__nav-icon--next`,viewBox:`0 0 24 24`,"aria-hidden":`true`},[R(`path`,{d:`M15 18 9 12l6-6`})],-1)])])):N(``,!0)],32),R(`div`,ba,[O(t).length>1?(q(),A(`span`,xa,k(O(a)+1)+` / `+k(O(t).length),1)):N(``,!0),R(`button`,{type:`button`,class:`image-preview-overlay__tool`,title:`缩小`,"aria-label":`缩小`,onClick:r[6]||(r[6]=e=>O(l)(O(n)-.25))},` − `),R(`button`,{type:`button`,class:`image-preview-overlay__tool`,title:`恢复 100% 缩放`,"aria-label":`恢复 100% 缩放`,onClick:r[7]||(r[7]=e=>O(l)(1))},k(m.value),1),R(`button`,{type:`button`,class:`image-preview-overlay__tool`,title:`放大`,"aria-label":`放大`,onClick:r[8]||(r[8]=e=>O(l)(O(n)+.25))},` + `),R(`button`,{type:`button`,class:`image-preview-overlay__tool`,title:`向右旋转`,"aria-label":`向右旋转`,onClick:r[9]||(r[9]=(...e)=>O(u)&&O(u)(...e))},` ↷ `)])],544)):N(``,!0)]))}}),Ca=(e,t,n)=>Math.min(Math.max(e,t),n),wa=()=>{let e=h([]),t=J(),n=f(1),r=f(0),i=J(),a=``,o=U(()=>e.findIndex(e=>e.id===t.value)),s=U(()=>e[o.value]),c=()=>{n.value=1,r.value=0},l=()=>{t.value=void 0},u=e=>{t.value=e,c(),L(()=>{var e;return(e=i.value)==null?void 0:e.focus()})},d=n=>{if(e.length<2)return;let r=(o.value+n+e.length)%e.length;t.value=e[r].id,c()},p=e=>{n.value=Ca(e,.25,5)};return y(t,(e,t)=>{e&&!t?(a=document.documentElement.style.overflow,document.documentElement.style.overflow=`hidden`):!e&&t&&(document.documentElement.style.overflow=a)}),fe(()=>{t.value&&(document.documentElement.style.overflow=a)}),{items:e,zoom:n,rotation:r,overlay:i,currentIndex:o,currentItem:s,close:l,open:u,move:d,setZoom:p,rotateClockwise:()=>{r.value=(r.value+90)%360},register:n=>(e.push(n),()=>{let r=e.indexOf(n);r>=0&&e.splice(r,1),t.value===n.id&&l()}),handleKeydown:e=>{if(e.key===`Escape`)l();else if(e.key===`ArrowLeft`)d(-1);else if(e.key===`ArrowRight`)d(1);else if(e.key===`+`||e.key===`=`)p(n.value+.25);else if(e.key===`-`)p(n.value-.25);else if(e.key===`0`)c();else return;e.preventDefault()},handleWheel:e=>{p(n.value+(e.deltaY<0?.25:-.25))}}},[Ta,Ea]=Se(wa),Da=[`role`,`aria-label`,`tabindex`],Oa=[`src`,`alt`,`width`,`height`,`loading`],ka=W({inheritAttrs:!1,__name:`GkImagePreview`,props:{src:{},previewSrc:{default:void 0},alt:{default:``},width:{default:void 0},height:{default:void 0},objectFit:{default:void 0},lazy:{type:Boolean,default:!1},previewDisabled:{type:Boolean,default:!1}},setup(e){let n=e,r=Ea(),i=r==null?wa():r,a=Symbol(),o=i.register({id:a,getSrc:()=>n.previewSrc||n.src,getAlt:()=>n.alt});fe(o);let s=U(()=>n.previewDisabled?void 0:n.alt?`预览图片:${n.alt}`:`预览图片`),c=()=>{n.previewDisabled||i.open(a)},l=e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),c())};return(n,a)=>(q(),A(t,null,[R(`span`,B(n.$attrs,{class:[`image-preview`,{"image-preview--disabled":e.previewDisabled}],role:e.previewDisabled?void 0:`button`,"aria-label":s.value,tabindex:e.previewDisabled?void 0:0,onClick:c,onKeydown:l}),[R(`img`,{class:`image-preview__image`,src:e.src,alt:e.alt,width:e.width,height:e.height,loading:e.lazy?`lazy`:void 0,style:D({objectFit:e.objectFit})},null,12,Oa)],16,Da),O(r)?N(``,!0):(q(),V(Sa,{key:0,controller:O(i)},null,8,[`controller`]))],64))}}),Aa=W({inheritAttrs:!1,__name:`GkImage`,props:{src:{}},setup(e){let t=e,n=U(()=>va(t.src)),r=U(()=>_a.find(e=>n.value.endsWith(e.name)));return(e,t)=>{var i,a;return q(),V(ka,B(e.$attrs,{src:n.value,width:(i=r.value)==null?void 0:i.width,height:(a=r.value)==null?void 0:a.height}),null,16,[`src`,`width`,`height`])}}}),ja=W({__name:`GkImagePreviewGroup`,setup(e){let n=Ta();return(e,r)=>(q(),A(t,null,[w(e.$slots,`default`),j(Sa,{controller:O(n)},null,8,[`controller`])],64))}}),Ma=W({__name:`GkImageTable`,props:{images:{}},setup(e){return(n,r)=>(q(),A(`table`,null,[R(`tbody`,null,[j(ja,null,{default:F(()=>[(q(!0),A(t,null,K(e.images,(e,n)=>(q(),A(`tr`,{key:n},[(q(!0),A(t,null,K(e,e=>(q(),A(`td`,{key:e},[j(Aa,{src:O(va)(e)},null,8,[`src`])]))),128))]))),128))]),_:1})])]))}}),Na=W({__name:`GkInAppOnly`,setup(e){let t=()=>Reflect.get(globalThis,`gkd`);return(e,n)=>{let r=a(`ClientOnly`);return q(),V(r,null,{default:F(()=>[t()?w(e.$slots,`default`,{},void 0,void 0,0):N(``,!0)]),_:3})}}}),Pa=W({__name:`GkMobileOnly`,setup(e){let t=()=>globalThis.document&&`ontouchstart`in globalThis.document.documentElement;return(e,n)=>{let r=a(`ClientOnly`);return q(),V(r,null,{default:F(()=>[t()?w(e.$slots,`default`,{},void 0,void 0,0):N(``,!0)]),_:3})}}}),Fa=e=>{e.component(`GkApkTable`,ma),e.component(`GkIdentifierField`,ha),e.component(`GkImage`,Aa),e.component(`GkImagePreviewGroup`,ja),e.component(`GkImageTable`,Ma),e.component(`GkInAppOnly`,Na),e.component(`GkMobileOnly`,Pa)},Ia=W(()=>{let e=J(!1);return M(()=>{let t=`ontouchstart`in document.documentElement;e.value=!t,t&&(document.body.classList.add(`mobile`),document.documentElement.classList.add(`mobile`))}),()=>e.value?ce(le,{to:document.body},ce($i)):void 0}),La=e=>{let t=e.getBoundingClientRect(),n=window.innerHeight*.15;return t.top-n>=0&&t.bottom+n<=window.innerHeight},Ra=()=>{let e=document.images;for(let t=0;t<e.length;t++)if(!e[t].complete)return!1;return!0},za=(e=0)=>new Promise(t=>setTimeout(t,e)),Ba=void 0,Va=!0;setTimeout(()=>{Va=!1},1e3);var Ha=async e=>{if(location.hash&&(e!=null||(e=document.querySelector(location.hash)||void 0)),!e)return;let t=`animate-hash-hint`;Ba&&Ba.classList.remove(t),e.classList.contains(t)&&(e.classList.remove(t),await za(25)),e.classList.add(t),Ba=e;let n=1e3*(Va?5:2);Va=!1,await za(n),e.classList.remove(t),Ba===e&&(Ba=void 0)},Ua=()=>new URLSearchParams(location.search).get(`r`)||``,Wa=()=>{let e=document.getElementById(`hidden-layout-style`);if(e){var t;(t=e.parentElement)==null||t.removeChild(e)}},Ga=async e=>{let t=location.href.substring(location.origin.length),n=async t=>{history.replaceState(null,``,t),await e.go(t)};if(location.pathname.startsWith(`/selector/`))location.pathname.at(-1)===`/`?n(`/guide/selector`):n(location.pathname.replace(`/selector/`,`/guide/`));else if(location.pathname===`/subscription/`||location.pathname===`/subscription`)await n(`/guide/subscription`);else if(location.pathname===`/`){let t=Ua(),n=async t=>{await e.go(t),Wa()};t===`1`?n(`/guide/snapshot#how-to-upload`):t===`2`?n(`/guide/faq#restriction`):t===`3`?n(`/guide/faq#adb_failed`):t===`4`?n(`/guide/faq#shizuku`):t===`5`?n(`/guide/subscription`):t===`6`?n(`/guide/faq#power`):t===`7`?n(`/guide/faq#exact-activity`):t===`8`?n(`/guide/faq#forced-tap`):t===`9`?n(`/guide/faq#work-profile`):t===`10`?n(`/guide/sponsor`):t===`11`?n(`/guide/privacy`):t===`12`?n(`/guide/terms`):t===`13`?n(`/guide/#install`):t===`14`?n(`/guide/faq#shizuku`):t===`15`?n(`/guide/snapshot#by-screenshot`):Wa()}else t===`/guide/faq#fail_setting_secure_settings`&&(location.hash=`adb_failed`);if(await L(),location.hash){let e=await(async()=>{let e=location.href,t=0;for(;t<25;){if(e!==location.href)return;let n=document.querySelector(location.hash);if(n)return n;t++,await za(100)}})();if(e){if(!La(e)){let t=0;for(;t<25&&!Ra();)await new Promise(e=>setTimeout(e,100)),t++;let n=document.querySelector(`a.header-anchor[href="${location.hash}"]`);n?n.click():e.scrollIntoView({behavior:`smooth`,block:`center`})}Ha(e)}}};window.addEventListener(`hashchange`,async()=>{Ha()});var Ka=W(()=>{let e=ge();return M(()=>{Ga(e),e.onAfterPageLoad=()=>{L().then(async()=>{await za(100),Ha()})}}),()=>{}}),qa={extends:Xi,Layout(){return ce(t,null,[ce(Xi.Layout),ce(Ia),ce(Ka)])},enhanceApp({app:e}){Fa(e)}};export{Y as n,qa as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{at as e,o as t,ot as n,yt as r}from"./chunks/framework.bo_0njjP.js";var i=JSON.parse(`{"title":"选择示例","description":"","frontmatter":{},"headers":[],"relativePath":"guide/example.md","filePath":"guide/example.md","lastUpdated":1788031436000}`),a={name:`guide/example.md`};function o(t,i,a,o,s,c){return r(),e(`div`,null,[...i[0]||(i[0]=[n(`<h1 id="title" tabindex="-1">选择示例 <a class="header-anchor" href="#title" aria-label="Permalink to “选择示例”"></a></h1><p>一些选择器及其相关作用说明</p><h2 id="e-1" tabindex="-1">选择根节点 <a class="header-anchor" href="#e-1" aria-label="Permalink to “选择根节点”"></a></h2><ul><li><code>[parent=null]</code></li><li><code>[depth=0]</code></li></ul><h2 id="e-2" tabindex="-1">选择子节点 <a class="header-anchor" href="#e-2" aria-label="Permalink to “选择子节点”"></a></h2><p>选择一个 <code>ImageView</code> 节点, 并要求其父节点是 <code>LinearLayout</code></p><p><a href="https://i.gkd.li/i/16076188?gkd=TGluZWFyTGF5b3V0ID4gSW1hZ2VWaWV3" target="_blank" rel="noreferrer"><code>LinearLayout > ImageView</code></a></p><p>选择一个 <code>ImageView</code> 节点, 并要求其父节点的父节点是 <code>ViewGroup[vid="avatar_layout"]</code></p><p><a href="https://i.gkd.li/i/16076188?gkd=Vmlld0dyb3VwW3ZpZD0iYXZhdGFyX2xheW91dCJdID4yIEltYWdlVmlldw" target="_blank" rel="noreferrer"><code>ViewGroup[vid="avatar_layout"] >2 ImageView</code></a></p><p>选择一个 <code>ImageView[vid="search_icon"]</code> 节点, 并要求祖先节点是 <code>FrameLayout[vid="content_layout"]</code>, <code>n</code>可以是任意正整数, 下同</p><p><a href="https://i.gkd.li/i/16076188?gkd=RnJhbWVMYXlvdXRbdmlkPSJjb250ZW50X2xheW91dCJdIEltYWdlVmlld1t2aWQ9InNlYXJjaF9pY29uIl0" target="_blank" rel="noreferrer"><code>FrameLayout[vid="content_layout"] >n ImageView[vid="search_icon"]</code></a></p><h2 id="e-3" tabindex="-1">末尾子节点 <a class="header-anchor" href="#e-3" aria-label="Permalink to “末尾子节点”"></a></h2><p>选择一个 <code>ImageView</code> 节点, 并要求是其父节点是最后一个子节点</p><p><a href="https://i.gkd.li/i/16076188?gkd=SW1hZ2VWaWV3W2luZGV4PXBhcmVudC5jaGlsZENvdW50Lm1pbnVzKDEpXQ" target="_blank" rel="noreferrer"><code>ImageView[index=parent.childCount.minus(1)]</code></a></p><h2 id="e-4" tabindex="-1">选择兄弟节点 <a class="header-anchor" href="#e-4" aria-label="Permalink to “选择兄弟节点”"></a></h2><p>选择一个 <code>LinearLayout[desc="搜索栏,按钮"]</code> 节点, 并要求其兄弟节点是 <code>ViewGroup[desc="个人主页,按钮"]</code></p><ul><li><a href="https://i.gkd.li/i/16076188?gkd=Vmlld0dyb3VwW2Rlc2M9IuS4quS6uuS4u-mhte-8jOaMiemSriJdICsgTGluZWFyTGF5b3V0W2Rlc2M9IuaQnOe0ouagj--8jOaMiemSriJd" target="_blank" rel="noreferrer"><code>ViewGroup[desc="个人主页,按钮"] + LinearLayout[desc="搜索栏,按钮"]</code></a></li><li><a href="https://i.gkd.li/i/16076188?gkd=QExpbmVhckxheW91dFtkZXNjPSLmkJzntKLmoI_vvIzmjInpkq4iXSAtIFZpZXdHcm91cFtkZXNjPSLkuKrkurrkuLvpobXvvIzmjInpkq4iXQ" target="_blank" rel="noreferrer"><code>@LinearLayout[desc="搜索栏,按钮"] - ViewGroup[desc="个人主页,按钮"]</code></a></li></ul><p>选择一个 <code>[text$="顶级入耳"]</code> 节点, 并要求其兄弟节点是 <code>[vid="cover_layout"]</code></p><ul><li><a href="https://i.gkd.li/i/16076188?gkd=W3ZpZD0iY292ZXJfbGF5b3V0Il0gK24gW3RleHQkPSLpobbnuqflhaXogLMiXQ" target="_blank" rel="noreferrer"><code>[vid="cover_layout"] +n [text$="顶级入耳"]</code></a></li><li><a href="https://i.gkd.li/i/16076188?gkd=QFt0ZXh0JD0i6aG257qn5YWl6ICzIl0gLW4gW3ZpZD0iY292ZXJfbGF5b3V0Il0" target="_blank" rel="noreferrer"><code>@[text$="顶级入耳"] -n [vid="cover_layout"]</code></a></li></ul><h2 id="e-5" tabindex="-1">选择父节点 <a class="header-anchor" href="#e-5" aria-label="Permalink to “选择父节点”"></a></h2><p>选择一个 <code>ViewGroup[desc^="直播"]</code> 节点, 并要求其子节点是 <code>FrameLayout[vid="cover_layout"]</code> 或 <code>ViewGroup[vid="live_text_container"]</code> 或 <code>TextView[vid="title_v2"]</code></p><ul><li><a href="https://i.gkd.li/i/16076188?gkd=RnJhbWVMYXlvdXRbdmlkPSJjb3Zlcl9sYXlvdXQiXSA8IFZpZXdHcm91cFtkZXNjXj0i55u05pKtIl0" target="_blank" rel="noreferrer"><code>FrameLayout[vid="cover_layout"] < ViewGroup[desc^="直播"]</code></a></li><li><a href="https://i.gkd.li/i/16076188?gkd=Vmlld0dyb3VwW3ZpZD0ibGl2ZV90ZXh0X2NvbnRhaW5lciJdIDwzIFZpZXdHcm91cFtkZXNjXj0i55u05pKtIl0" target="_blank" rel="noreferrer"><code>ViewGroup[vid="live_text_container"] <3 ViewGroup[desc^="直播"]</code></a></li><li><a href="https://i.gkd.li/i/16076188?gkd=VGV4dFZpZXdbdmlkPSJ0aXRsZV92MiJdIDxuIFZpZXdHcm91cFtkZXNjXj0i55u05pKtIl0" target="_blank" rel="noreferrer"><code>TextView[vid="title_v2"] <n ViewGroup[desc^="直播"]</code></a></li></ul><h2 id="e-6" tabindex="-1">在指定节点的子节点内查找指定选择器 <a class="header-anchor" href="#e-6" aria-label="Permalink to “在指定节点的子节点内查找指定选择器”"></a></h2><p>一般在末尾节点支持 <a href="/guide/optimize#fast-query">快速查询</a> 的情况下使用</p><p>在节点 <code>ViewGroup[vid="live_text_container"]</code> 的子节点内查找 <code>[text="直播"]</code></p><p><a href="https://i.gkd.li/i/16076188?gkd=QFt0ZXh0PSLnm7Tmkq0iXSA8PG4gVmlld0dyb3VwW3ZpZD0ibGl2ZV90ZXh0X2NvbnRhaW5lciJd" target="_blank" rel="noreferrer"><code>@[text="直播"] <<n ViewGroup[vid="live_text_container"]</code></a></p><p>在节点 <code>FrameLayout[vid="swipe_layout"]</code> 的子节点内查找 <code>LinearLayout > @[text="直播"]</code></p><p><a href="https://i.gkd.li/i/16076188?gkd=TGluZWFyTGF5b3V0ID4gQFt0ZXh0PSLnm7Tmkq0iXSA8PG4gW3ZpZD0ic3dpcGVfbGF5b3V0Il0" target="_blank" rel="noreferrer"><code>LinearLayout > @[text="直播"] <<n [vid="swipe_layout"]</code></a></p><h2 id="e-7" tabindex="-1">组合使用 <a class="header-anchor" href="#e-7" aria-label="Permalink to “组合使用”"></a></h2><p><a href="https://i.gkd.li/i/16076188?gkd=SW1hZ2VWaWV3IDwgRnJhbWVMYXlvdXQgPG4gVmlld0dyb3VwW2Rlc2NePSLnm7Tmkq0iXSAtIFZpZXdHcm91cCA-NCBGcmFtZUxheW91dFtpbmRleD0wXSArMiBGcmFtZUxheW91dCA-IEBUZXh0Vmlld1tpbmRleD1wYXJlbnQuY2hpbGRDb3VudC5taW51cygxKV0gPDxuIEZyYW1lTGF5b3V0W3ZpZD0iY29udGVudCJd" target="_blank" rel="noreferrer"><code>ImageView < FrameLayout <n ViewGroup[desc^="直播"] - ViewGroup >4 FrameLayout[index=0] +2 FrameLayout > @TextView[index=parent.childCount.minus(1)] <<n FrameLayout[vid="content"]</code></a></p><h2 id="e-8" tabindex="-1">一些方法用例 <a class="header-anchor" href="#e-8" aria-label="Permalink to “一些方法用例”"></a></h2><h3 id="node类型的getchild" tabindex="-1"><a href="/guide/node#node">node</a>类型的<code>getChild()</code> <a class="header-anchor" href="#node类型的getchild" aria-label="Permalink to “node类型的getChild()”"></a></h3><p>选择一个 <code>ViewGroup[desc^="直播"]</code> 节点, 并要求其<strong>第1位子节点</strong>的<code>vid</code>等于 <code>cover_layout</code></p><ul><li><a href="https://i.gkd.li/i/16076188?gkd=Vmlld0dyb3VwW2Rlc2NePSLnm7Tmkq0iXVtnZXRDaGlsZCgwKS52aWQ9ImNvdmVyX2xheW91dCJd" target="_blank" rel="noreferrer"><code>ViewGroup[desc^="直播"][getChild(0).vid="cover_layout"]</code></a></li></ul><p>选择一个 <code>ViewGroup[desc^="直播"]</code> 节点, 并要求其<strong>第3位子节点内的第1位子节点</strong>类型为 <code>TextView</code></p><ul><li><a href="https://i.gkd.li/i/16076188?gkd=Vmlld0dyb3VwW2Rlc2NePSLnm7Tmkq0iXVtnZXRDaGlsZCgyKS5nZXRDaGlsZCgwKS5uYW1lJD0iVGV4dFZpZXciXQ" target="_blank" rel="noreferrer"><code>ViewGroup[desc^="直播"][getChild(2).getChild(0).name$="TextView"]</code></a></li></ul><p>选择一个 <code>ViewGroup[desc^="直播"]</code> 节点, 并要求其<strong>末尾子节点</strong>的<code>vid</code>等于 <code>more</code></p><ul><li><a href="https://i.gkd.li/i/16076188?gkd=Vmlld0dyb3VwW2Rlc2NePSLnm7Tmkq0iXVtnZXRDaGlsZChjaGlsZENvdW50Lm1pbnVzKDEpKS52aWQ9Im1vcmUiXQ" target="_blank" rel="noreferrer"><code>ViewGroup[desc^="直播"][getChild(childCount.minus(1)).vid="more"]</code></a></li></ul><h3 id="context类型的getprev" tabindex="-1"><a href="/guide/node#context">context</a>类型的<code>getPrev()</code> <a class="header-anchor" href="#context类型的getprev" aria-label="Permalink to “context类型的getPrev()”"></a></h3><p>已知符合选择器 <a href="https://i.gkd.li/i/16076188?gkd=QFtjbGlja2FibGU9dHJ1ZV0gPigxLDIpIFt2aWQ9ImNvdmVyIl0" target="_blank" rel="noreferrer">@[clickable=true] >(1,2) [vid="cover"]</a> 的节点有6个,现要求根据屏幕分辨率对节点位置作出限制。</p><blockquote><p>思路:从右侧根节点处获取屏幕宽高,通过<code>getPrev()</code>传到左侧目标节点,随后根据要求做限制</p><p>另外由于使用了<code><<n [parent=null]</code>,所以结果仅显示第一个,具体缘由请看<a href="/guide/optimize#enforce">主动查询</a></p></blockquote><p>限制在左半屏:</p><ul><li><a href="https://i.gkd.li/i/16076188?gkd=QFtjbGlja2FibGU9dHJ1ZV1bcmlnaHQ8Z2V0UHJldigxKS53aWR0aC5kaXYoMildID4oMSwyKSBbdmlkPSJjb3ZlciJdIDw8biBbcGFyZW50PW51bGxd" target="_blank" rel="noreferrer"><code>@[clickable=true][right<getPrev(1).width.div(2)] >(1,2) [vid="cover"] <<n [parent=null]</code></a></li></ul><p>限制在右下(1/4)屏:</p><ul><li><a href="https://i.gkd.li/i/16076188?gkd=QFtjbGlja2FibGU9dHJ1ZV1bbGVmdD5nZXRQcmV2KDEpLndpZHRoLmRpdigyKV1bdG9wPmdldFByZXYoMSkuaGVpZ2h0LmRpdigyKV0gPigxLDIpIFt2aWQ9ImNvdmVyIl0gPDxuIFtwYXJlbnQ9bnVsbF0" target="_blank" rel="noreferrer"><code>@[clickable=true][left>getPrev(1).width.div(2)][top>getPrev(1).height.div(2)] >(1,2) [vid="cover"] <<n [parent=null]</code></a></li></ul>`,45)])])}var s=t(a,[[`render`,o]]);export{i as __pageData,s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{at as e,o as t,ot as n,yt as r}from"./chunks/framework.bo_0njjP.js";var i=JSON.parse(`{"title":"选择示例","description":"","frontmatter":{},"headers":[],"relativePath":"guide/example.md","filePath":"guide/example.md","lastUpdated":1788031436000}`),a={name:`guide/example.md`};function o(t,i,a,o,s,c){return r(),e(`div`,null,[...i[0]||(i[0]=[n("",45)])])}var s=t(a,[[`render`,o]]);export{i as __pageData,s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{at as e,o as t,ot as n,yt as r}from"./chunks/framework.bo_0njjP.js";var i=JSON.parse(`{"title":"外部交互","description":"","frontmatter":{},"headers":[],"relativePath":"guide/external.md","filePath":"guide/external.md","lastUpdated":1788031436000}`),a={name:`guide/external.md`};function o(t,i,a,o,s,c){return r(),e(`div`,null,[...i[0]||(i[0]=[n(`<h1 id="title" tabindex="-1">外部交互 <a class="header-anchor" href="#title" aria-label="Permalink to “外部交互”"></a></h1><p>一些无法在应用内界面上直接使用的功能</p><h2 id="app-icon" tabindex="-1">应用图标 <a class="header-anchor" href="#app-icon" aria-label="Permalink to “应用图标”"></a></h2><p>GKD 有两种应用图标</p><ul><li>默认图标</li><li>深色模式下的图标</li></ul><p>一般来说, 第一次显示的图标取决于安装时的系统深色模式设置</p><p>而且系统貌似不会在切换深色模式自动切换图标, 你可以通过以下方式切换</p><ul><li>到 系统主题-图标包 切换其他后再切换回来</li><li>重启手机</li><li>同版本覆盖安装 GKD, 无需卸载</li></ul><h2 id="scheme" tabindex="-1">跳转应用 <a class="header-anchor" href="#scheme" aria-label="Permalink to “跳转应用”"></a></h2><p>可以在浏览器或其他应用打开特定链接来跳转到应用内页面</p><table tabindex="0"><thead><tr><th>页面</th><th>链接</th></tr></thead><tbody><tr><td>首页</td><td><code>gkd://page</code></td></tr><tr><td>高级设置</td><td><code>gkd://page/1</code></td></tr><tr><td>快照记录</td><td><code>gkd://page/2</code></td></tr></tbody></table><h2 id="shortcut" tabindex="-1">快捷开关 <a class="header-anchor" href="#shortcut" aria-label="Permalink to “快捷开关”"></a></h2><p>GKD 在通知栏面板声明了一些快捷开关, 可快捷使用一些功能</p><table tabindex="0"><thead><tr><th>名称</th><th>功能</th></tr></thead><tbody><tr><td>GKD</td><td>打开或关闭无障碍权限</td></tr><tr><td>HTTP服务</td><td>打开或关闭HTTP服务</td></tr><tr><td>悬浮按钮</td><td>打开或关闭悬浮按钮, 点击出现的按钮可捕获快照</td></tr><tr><td>捕获快照</td><td>点击后捕获当前应用界面快照</td></tr></tbody></table><h2 id="import-data" tabindex="-1">导入数据 <a class="header-anchor" href="#import-data" aria-label="Permalink to “导入数据”"></a></h2><p>你可以在 主页-订阅-右上角菜单-导入数据 中导入订阅规则数据</p><p>但是这样需要在打开的文件管理器中手动选择路径不太方便</p><p>另一个更方便的迁移数据的方式是</p><ul><li><p>旧设备: 导出数据 - 选择分享到 QQ 发送给自己</p></li><li><p>新设备: 在 QQ 中打开分享的文件 - 用其他应用打开 - 选择 GKD 导入数据</p></li></ul><p>上面的 QQ 也可以是其他传送软件, 只要支持用其他应用打开的时候有 GKD 即可</p>`,20)])])}var s=t(a,[[`render`,o]]);export{i as __pageData,s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{at as e,o as t,ot as n,yt as r}from"./chunks/framework.bo_0njjP.js";var i=JSON.parse(`{"title":"外部交互","description":"","frontmatter":{},"headers":[],"relativePath":"guide/external.md","filePath":"guide/external.md","lastUpdated":1788031436000}`),a={name:`guide/external.md`};function o(t,i,a,o,s,c){return r(),e(`div`,null,[...i[0]||(i[0]=[n("",20)])])}var s=t(a,[[`render`,o]]);export{i as __pageData,s as default};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import{Ct as e,at as t,ct as n,jt as r,nt as i,o as a,ot as o,st as s,yt as c}from"./chunks/framework.bo_0njjP.js";var l=JSON.parse(`{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/faq.md","filePath":"guide/faq.md","lastUpdated":1788031436000}`),u={name:`guide/faq.md`};function d(a,l,u,d,f,p){let m=e(`GkImage`),h=e(`GkImageTable`),g=e(`GkImagePreviewGroup`);return c(),t(`div`,null,[l[4]||(l[4]=o(`<h1 id="title" tabindex="-1">常见问题 <a class="header-anchor" href="#title" aria-label="Permalink to “常见问题”"></a></h1><p>一些可能影响使用体验的问题和对应解决方案, 某些方案可能并不适用您的机型系统</p><p>如您有更好的方案或想对现有方案进行补充, 请点击底部 <code>为此页提供修改建议</code></p><h2 id="play-diff" tabindex="-1">渠道区别 <a class="header-anchor" href="#play-diff" aria-label="Permalink to “渠道区别”"></a></h2><p>目前有两个渠道在使用,它们可互相安装覆盖,但存在区别</p><table tabindex="0"><thead><tr><th style="text-align:center;">渠道</th><th style="text-align:center;">下载方式</th><th style="text-align:center;">自更新逻辑</th><th style="text-align:center;"><a href="#restriction">受限制的设置</a></th><th style="text-align:center;">无障碍工具声明</th></tr></thead><tbody><tr><td style="text-align:center;">gkd</td><td style="text-align:center;"><a href="/guide/">官网/GitHub</a></td><td style="text-align:center;">弹窗更新(镜像加速)</td><td style="text-align:center;">可能受限</td><td style="text-align:center;">有</td></tr><tr><td style="text-align:center;">play</td><td style="text-align:center;"><a href="https://play.google.com/store/apps/details?id=li.songe.gkd" target="_blank" rel="noreferrer">Google Play</a></td><td style="text-align:center;">无(必须Google Play)</td><td style="text-align:center;">不会</td><td style="text-align:center;">无</td></tr></tbody></table><p>根据 <a href="https://support.google.com/googleplay/android-developer/answer/10964491?hl=zh-Hans" target="_blank" rel="noreferrer">Google Play 政策</a>,必须以 <strong>支持残障人士为主要用途</strong> 才能使用 <strong>无障碍工具声明</strong></p><p>如果没有这个声明,系统会隔段时间显示通知(<a href="https://github.com/orgs/gkd-kit/discussions/744" target="_blank" rel="noreferrer">discussions#744</a>),内容如下</p><p><code>查看权限设置(GKD可以查看和控制您的屏幕。点按即可查看。)</code></p><p>如果你无法忍受这个通知,切换到 gkd 渠道即可</p><h2 id="power" tabindex="-1">耗电说明 <a class="header-anchor" href="#power" aria-label="Permalink to “耗电说明”"></a></h2><p>首先 GKD 默认情况下并不耗电,有的人以为关闭更新检测,关闭日志就能减少耗电,并不正确</p><p>真正的耗电在于 启用的规则 和 当前应用界面无障碍节点数量及无障碍事件刷新频率</p><p>如果想追求低耗电,那应该开启少量的规则,由于之前的默认规则数量有 1300+,很多人喜欢无脑开启规则</p><p>甚至有的用户同时开启多个订阅, 而这些订阅基本都 fork 自默认订阅, 这相当于同时开启多个重复规则</p><p>开启这么多规则,并且在这些规则匹配的界面使用手机,不耗电是不可能的</p><p>此外,某些软件如抖音的无障碍节点数量比较多,并且产生无障碍事件频率也比较高</p><p>长时间下使用此类软件的规则会比较耗电,请自行考虑后再启用</p><h2 id="shizuku" tabindex="-1">shizuku <a class="header-anchor" href="#shizuku" aria-label="Permalink to “shizuku”"></a></h2><p>shizuku 是一个能让普通应用通过 ADB 或 Root 权限直接调用 Android 系统 API 的框架</p><p>简而言之, <strong>授权 shizuku 后 GKD 可以调用更多系统 API 获取更多状态,启用更多优化</strong></p><p>官方原版 <a href="https://github.com/RikkaApps/Shizuku" target="_blank" rel="noreferrer">RikkaApps/Shizuku</a> 已很久未有维护记录,issue/pr 也被垃圾机器人淹没</p><p>此外在某些设备上原版 shizuku 只能部分工作,此时 GKD 会提示 <code>服务连接部分失败</code></p><p>目前建议使用另一位开发者的分支项目 <a href="https://github.com/thedjchi/Shizuku" target="_blank" rel="noreferrer">thedjchi/Shizuku</a>,或<a href="https://github.com/thedjchi/Shizuku/releases/latest" target="_blank" rel="noreferrer">点击前往下载</a></p><h2 id="persistent" tabindex="-1">后台运行 <a class="header-anchor" href="#persistent" aria-label="Permalink to “后台运行”"></a></h2><p>如何尽量保持后台运行不被系统暂停/杀死</p><ul><li>任务切换界面给 GKD 应用卡片加锁即可</li></ul><p>一般情况下, 使用此项即可正常后台运行, 如果不行请使用下面的步骤</p><ul><li>打开 GKD 首页, 开启 <code>常驻通知</code></li><li>允许后台活动, 关闭省电策略, 或者设置 GKD 的省电策略为无限制</li><li>允许 GKD 自启动</li></ul><p>某些系统如 MagicOS9 需要打开 <code>允许后台活动</code>, 否则 GKD 在后台时会被系统暂停执行</p>`,30)),n(m,{src:`0038.jpg`}),l[5]||(l[5]=i(`h2`,{id:`restriction`,tabindex:`-1`},[s(`受限制的设置 `),i(`a`,{class:`header-anchor`,href:`#restriction`,"aria-label":`Permalink to “受限制的设置”`},``)],-1)),l[6]||(l[6]=i(`p`,null,`无障碍列表界面提示`,-1)),l[7]||(l[7]=i(`blockquote`,null,[i(`p`,null,`受限制的设置(出于安全考虑,此设置目前不可用)`)],-1)),l[8]||(l[8]=i(`p`,null,`或提示`,-1)),l[9]||(l[9]=i(`blockquote`,null,[i(`p`,null,`系统已拒绝向此应用授予访问权限`)],-1)),n(h,{images:[[`0014.png`,`0039.jpg`]]}),l[10]||(l[10]=i(`p`,null,`这是因为某些系统对于 不在应用商店等可信任来源安装的 不能直接开启无障碍权限`,-1)),l[11]||(l[11]=i(`p`,null,`解除步骤: GKD 应用信息 - 允许受限制的设置, 注意某些设备位置不太一样`,-1)),i(`table`,null,[l[0]||(l[0]=i(`thead`,null,[i(`tr`,null,[i(`th`,{class:`text-center!`},[s(`原生系统 `),i(`br`),s(` 应用信息 - 右上角 - 允许受限制的设置`)]),i(`th`,{class:`text-center!`},[s(`小米系统 `),i(`br`),s(` 应用信息 - 高级设置 - 允许受限制的设置`)])])],-1)),i(`tbody`,null,[n(g,null,{default:r(()=>[i(`tr`,null,[i(`td`,null,[n(m,{src:`0016.png`})]),i(`td`,null,[n(m,{src:`0040.jpg`})])])]),_:1})])]),l[12]||(l[12]=o(`<p>如果按步骤开启后 无障碍列表 仍然提示不可用, 可尝试 <strong>重启设备</strong></p><p>如果应用信息右上角没有 <code>允许受限制的设置</code> 选项, 请参考下一节方案</p><h2 id="unable_open_a11y" tabindex="-1">无法开启无障碍 <a class="header-anchor" href="#unable_open_a11y" aria-label="Permalink to “无法开启无障碍”"></a></h2><p>某些系统如 ColorOS 有更严格的无障碍限制</p><p>如果你是其他来源安装或 GKD 内部更新后也会无法开启无障碍, 表现以下行为</p><ul><li>提示 受限制的设置, 但是没有找到 允许受限制的设置 的选项</li><li>不提示 受限制的设置, 无障碍开启按钮可点击, 但点击后没有响应, 无法开启</li></ul><p>可以通过以下方式解决, 可在 设置 - 关于 - 分享应用 获取 APK 文件</p>`,7)),i(`ul`,null,[l[2]||(l[2]=i(`li`,null,[i(`p`,null,`使用系统信任的方式进行安装, 例如在系统文件管理中查看 APK 文件后点击安装, 是覆盖安装无需卸载`)],-1)),l[3]||(l[3]=i(`li`,null,[i(`p`,null,[s(`如果使用系统安装器, 但是在冻结了应用安装器 `),i(`code`,null,`com.oplus.appdetail`),s(` 状态下安装的 APK, 需解冻后重新安装`)])],-1)),i(`li`,null,[l[1]||(l[1]=i(`p`,null,[s(`使用 `),i(`a`,{href:`https://appops.rikka.app/`,target:`_blank`,rel:`noreferrer`},`App Ops`),s(` 在权限管理中手动授予 ACCESS_RESTRICTED_SETTINGS 权限`)],-1)),n(m,{src:`0037.png`})])]),l[13]||(l[13]=i(`h2`,{id:`close_warn_dialog`,tabindex:`-1`},[s(`关闭无障碍警告弹窗 `),i(`a`,{class:`header-anchor`,href:`#close_warn_dialog`,"aria-label":`Permalink to “关闭无障碍警告弹窗”`},``)],-1)),l[14]||(l[14]=i(`div`,{class:`tip custom-block github-alert`},[i(`p`,{class:`custom-block-title`},`建议`),i(`p`,null,[s(`授予 `),i(`code`,null,`写入安全设置权限`),s(` 后可自行开启无障碍, 而无需设置此项`)])],-1)),l[15]||(l[15]=i(`p`,null,`这个方案不一定适用所有机型`,-1)),l[16]||(l[16]=i(`p`,null,`大多数设备开启无障碍时都会出现 10s 的无障碍警告弹窗`,-1)),l[17]||(l[17]=i(`p`,null,`若是只需要开启一次则无所谓但是如果开启次数比较多每次都有这个警告等待就很烦人了`,-1)),n(h,{images:[[`0004.png`,`0005.png`]]}),l[18]||(l[18]=i(`p`,null,[s(`你可能已经看到这个界面还有一个开关, 也就是下方的 `),i(`code`,null,`快捷方式`),s(` 开关`)],-1)),l[19]||(l[19]=i(`p`,null,`打开一次下面这个快捷方式开关后, 上面的的开启按钮就不会出现警告弹窗了, 但是你会发现屏幕侧边出现了一个应用小图标, 多数情况下我们并不需要这个图标`,-1)),l[20]||(l[20]=i(`p`,null,`到无障碍界面-"无障碍"按钮-使用按钮或手势-点击切换为手势即可隐藏`,-1)),l[21]||(l[21]=i(`p`,null,`以 Xiaomi HyperOS 为例子, 下面是完整的关闭弹窗流程截图`,-1)),n(h,{images:[[`0009.png`,`0010.png`,`0011.png`,`0012.png`]]}),l[22]||(l[22]=o(`<h2 id="adb_failed" tabindex="-1">adb 授权失败 <a class="header-anchor" href="#adb_failed" aria-label="Permalink to “adb 授权失败”"></a></h2><p>在使用 adb 手动授予 <code>写入安全设置权限</code> 时可能会提示权限不够,具体报错如下:</p><div class="language-text"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span>adb shell pm grant li.songe.gkd android.permission.WRITE_SECURE_SETTINGS</span></span>
|
|
2
|
+
<span class="line"><span></span></span>
|
|
3
|
+
<span class="line"><span>Exception occurred while executing 'grant':</span></span>
|
|
4
|
+
<span class="line"><span>java.lang.SecurityException: grantRuntimePermission: Neither user 2000 nor current process has android.permission.GRANT_RUNTIME_PERMISSIONS.</span></span>
|
|
5
|
+
<span class="line"><span> at android.app.ContextImpl.enforce(ContextImpl.java:2384)</span></span>
|
|
6
|
+
<span class="line"><span> at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:2412)</span></span>
|
|
7
|
+
<span class="line"><span> at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermissionInternal(PermissionManagerServiceImpl.java:1383)</span></span>
|
|
8
|
+
<span class="line"><span> at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermission(PermissionManagerServiceImpl.java:1365)</span></span>
|
|
9
|
+
<span class="line"><span> at com.android.server.pm.permission.PermissionManagerService.grantRuntimePermission(PermissionManagerService.java:573)</span></span>
|
|
10
|
+
<span class="line"><span> at android.permission.PermissionManager.grantRuntimePermission(PermissionManager.java:610)</span></span>
|
|
11
|
+
<span class="line"><span> at com.android.server.pm.PackageManagerShellCommand.runGrantRevokePermission(PackageManagerShellCommand.java:2717)</span></span>
|
|
12
|
+
<span class="line"><span> at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:301)</span></span>
|
|
13
|
+
<span class="line"><span> at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)</span></span>
|
|
14
|
+
<span class="line"><span> at android.os.ShellCommand.exec(ShellCommand.java:38)</span></span>
|
|
15
|
+
<span class="line"><span> at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onShellCommand(PackageManagerService.java:6840)</span></span>
|
|
16
|
+
<span class="line"><span> at android.os.Binder.shellCommand(Binder.java:1092)</span></span>
|
|
17
|
+
<span class="line"><span> at android.os.Binder.onTransact(Binder.java:912)</span></span>
|
|
18
|
+
<span class="line"><span> at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4352)</span></span>
|
|
19
|
+
<span class="line"><span> at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:6824)</span></span>
|
|
20
|
+
<span class="line"><span> at android.os.Binder.execTransactInternal(Binder.java:1392)</span></span>
|
|
21
|
+
<span class="line"><span> at android.os.Binder.execTransact(Binder.java:1299)</span></span></code></pre></div><p>下面参考 <a href="https://shizuku.rikka.app/guide/setup/#faq" target="_blank" rel="noreferrer">shizuku 文档</a> 的解决方案</p><ul><li><p>HyperOS/MIUI(小米、POCO)<br> 在 <code>开发者选项</code> 中开启 <code>USB 调试(安全设置)</code>,注意不是 <code>USB 调试</code><br> 如果开启 <code>USB 调试(安全设置)</code>后继续报错,可以尝试在 adb 命令前添加 sudo <br> 提升权限后再执行 adb 命令</p></li><li><p>ColorOS(OPPO & OnePlus)<br> 在 <code>开发者选项</code> 中关闭 <code>权限监控</code> 或打开 <code>禁止权限监控</code></p></li><li><p>Flyme(魅族)<br> 在 <code>开发者选项</code> 中关闭 <code>Flyme 支付保护</code></p></li></ul><p>关闭限制后重新运行命令即可</p>`,6))])}var f=a(u,[[`render`,d]]);export{l as __pageData,f as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Ct as e,at as t,ct as n,jt as r,nt as i,o as a,ot as o,st as s,yt as c}from"./chunks/framework.bo_0njjP.js";var l=JSON.parse(`{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/faq.md","filePath":"guide/faq.md","lastUpdated":1788031436000}`),u={name:`guide/faq.md`};function d(a,l,u,d,f,p){let m=e(`GkImage`),h=e(`GkImageTable`),g=e(`GkImagePreviewGroup`);return c(),t(`div`,null,[l[4]||(l[4]=o("",30)),n(m,{src:`0038.jpg`}),l[5]||(l[5]=i(`h2`,{id:`restriction`,tabindex:`-1`},[s(`受限制的设置 `),i(`a`,{class:`header-anchor`,href:`#restriction`,"aria-label":`Permalink to “受限制的设置”`},``)],-1)),l[6]||(l[6]=i(`p`,null,`无障碍列表界面提示`,-1)),l[7]||(l[7]=i(`blockquote`,null,[i(`p`,null,`受限制的设置(出于安全考虑,此设置目前不可用)`)],-1)),l[8]||(l[8]=i(`p`,null,`或提示`,-1)),l[9]||(l[9]=i(`blockquote`,null,[i(`p`,null,`系统已拒绝向此应用授予访问权限`)],-1)),n(h,{images:[[`0014.png`,`0039.jpg`]]}),l[10]||(l[10]=i(`p`,null,`这是因为某些系统对于 不在应用商店等可信任来源安装的 不能直接开启无障碍权限`,-1)),l[11]||(l[11]=i(`p`,null,`解除步骤: GKD 应用信息 - 允许受限制的设置, 注意某些设备位置不太一样`,-1)),i(`table`,null,[l[0]||(l[0]=i(`thead`,null,[i(`tr`,null,[i(`th`,{class:`text-center!`},[s(`原生系统 `),i(`br`),s(` 应用信息 - 右上角 - 允许受限制的设置`)]),i(`th`,{class:`text-center!`},[s(`小米系统 `),i(`br`),s(` 应用信息 - 高级设置 - 允许受限制的设置`)])])],-1)),i(`tbody`,null,[n(g,null,{default:r(()=>[i(`tr`,null,[i(`td`,null,[n(m,{src:`0016.png`})]),i(`td`,null,[n(m,{src:`0040.jpg`})])])]),_:1})])]),l[12]||(l[12]=o("",7)),i(`ul`,null,[l[2]||(l[2]=i(`li`,null,[i(`p`,null,`使用系统信任的方式进行安装, 例如在系统文件管理中查看 APK 文件后点击安装, 是覆盖安装无需卸载`)],-1)),l[3]||(l[3]=i(`li`,null,[i(`p`,null,[s(`如果使用系统安装器, 但是在冻结了应用安装器 `),i(`code`,null,`com.oplus.appdetail`),s(` 状态下安装的 APK, 需解冻后重新安装`)])],-1)),i(`li`,null,[l[1]||(l[1]=i(`p`,null,[s(`使用 `),i(`a`,{href:`https://appops.rikka.app/`,target:`_blank`,rel:`noreferrer`},`App Ops`),s(` 在权限管理中手动授予 ACCESS_RESTRICTED_SETTINGS 权限`)],-1)),n(m,{src:`0037.png`})])]),l[13]||(l[13]=i(`h2`,{id:`close_warn_dialog`,tabindex:`-1`},[s(`关闭无障碍警告弹窗 `),i(`a`,{class:`header-anchor`,href:`#close_warn_dialog`,"aria-label":`Permalink to “关闭无障碍警告弹窗”`},``)],-1)),l[14]||(l[14]=i(`div`,{class:`tip custom-block github-alert`},[i(`p`,{class:`custom-block-title`},`建议`),i(`p`,null,[s(`授予 `),i(`code`,null,`写入安全设置权限`),s(` 后可自行开启无障碍, 而无需设置此项`)])],-1)),l[15]||(l[15]=i(`p`,null,`这个方案不一定适用所有机型`,-1)),l[16]||(l[16]=i(`p`,null,`大多数设备开启无障碍时都会出现 10s 的无障碍警告弹窗`,-1)),l[17]||(l[17]=i(`p`,null,`若是只需要开启一次则无所谓但是如果开启次数比较多每次都有这个警告等待就很烦人了`,-1)),n(h,{images:[[`0004.png`,`0005.png`]]}),l[18]||(l[18]=i(`p`,null,[s(`你可能已经看到这个界面还有一个开关, 也就是下方的 `),i(`code`,null,`快捷方式`),s(` 开关`)],-1)),l[19]||(l[19]=i(`p`,null,`打开一次下面这个快捷方式开关后, 上面的的开启按钮就不会出现警告弹窗了, 但是你会发现屏幕侧边出现了一个应用小图标, 多数情况下我们并不需要这个图标`,-1)),l[20]||(l[20]=i(`p`,null,`到无障碍界面-"无障碍"按钮-使用按钮或手势-点击切换为手势即可隐藏`,-1)),l[21]||(l[21]=i(`p`,null,`以 Xiaomi HyperOS 为例子, 下面是完整的关闭弹窗流程截图`,-1)),n(h,{images:[[`0009.png`,`0010.png`,`0011.png`,`0012.png`]]}),l[22]||(l[22]=o("",6))])}var f=a(u,[[`render`,d]]);export{l as __pageData,f as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Ct as e,at as t,ct as n,jt as r,nt as i,o as a,ot as o,st as s,yt as c}from"./chunks/framework.bo_0njjP.js";var l=JSON.parse(`{"title":"开始使用","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1788031436000}`),u={name:`guide/index.md`};function d(a,l,u,d,f,p){let m=e(`GkInAppOnly`),h=e(`GkApkTable`),g=e(`GkImageTable`);return c(),t(`div`,null,[l[1]||(l[1]=i(`h1`,{id:`title`,tabindex:`-1`},[s(`开始使用 `),i(`a`,{class:`header-anchor`,href:`#title`,"aria-label":`Permalink to “开始使用”`},``)],-1)),l[2]||(l[2]=i(`h2`,{id:`install`,tabindex:`-1`},[s(`安装 `),i(`a`,{class:`header-anchor`,href:`#install`,"aria-label":`Permalink to “安装”`},``)],-1)),n(m,null,{default:r(()=>[...l[0]||(l[0]=[i(`div`,{class:`tip custom-block github-alert`},[i(`p`,{class:`custom-block-title`},`下载提示`),i(`p`,null,`检测到您在应用内无法下载 APK,请点击右上角-外部打开后下载`)],-1)])]),_:1}),n(h),l[3]||(l[3]=o(`<details class="details custom-block"><summary>手机浏览器下载失败?</summary><p>某些手机浏览器存在自定义拦截会导致下载失败, 建议使用 <a href="https://viayoo.com" target="_blank" rel="noreferrer">Via</a> 浏览器下载</p></details><p>其它下载方式</p><ul><li><a href="https://play.google.com/store/apps/details?id=li.songe.gkd" target="_blank" rel="noreferrer">Google Play</a> \xA0 <a href="./faq#play-diff">区别</a></li><li><a href="https://github.com/gkd-kit/gkd/releases" target="_blank" rel="noreferrer">Github Releases</a></li></ul><p>下载完毕后, 在您的 Android 手机上安装并打开</p><h2 id="usage" tabindex="-1">使用 <a class="header-anchor" href="#usage" aria-label="Permalink to “使用”"></a></h2><p>打开后进入 GKD 的首页, 要想 GKD 正常工作需要授权无障碍权限</p><p>点击无障碍权限右侧的 <code>授权</code> 按钮即可前往设置的无障碍界面授权</p><p>以 Xiaomi HyperOS 为例, 下面为完整的授权流程截图</p>`,8)),n(g,{images:[[`0001.png`,`0002.png`,`0003.png`,`0004.png`],[`0005.png`,`0006.png`,`0007.png`,`0008.png`]]}),l[4]||(l[4]=i(`p`,null,[s(`如遇到问题可在 `),i(`a`,{href:`/guide/faq`},`常见问题`),s(` 查阅解决方案`)],-1))])}var f=a(u,[[`render`,d]]);export{l as __pageData,f as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Ct as e,at as t,ct as n,jt as r,nt as i,o as a,ot as o,st as s,yt as c}from"./chunks/framework.bo_0njjP.js";var l=JSON.parse(`{"title":"开始使用","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1788031436000}`),u={name:`guide/index.md`};function d(a,l,u,d,f,p){let m=e(`GkInAppOnly`),h=e(`GkApkTable`),g=e(`GkImageTable`);return c(),t(`div`,null,[l[1]||(l[1]=i(`h1`,{id:`title`,tabindex:`-1`},[s(`开始使用 `),i(`a`,{class:`header-anchor`,href:`#title`,"aria-label":`Permalink to “开始使用”`},``)],-1)),l[2]||(l[2]=i(`h2`,{id:`install`,tabindex:`-1`},[s(`安装 `),i(`a`,{class:`header-anchor`,href:`#install`,"aria-label":`Permalink to “安装”`},``)],-1)),n(m,null,{default:r(()=>[...l[0]||(l[0]=[i(`div`,{class:`tip custom-block github-alert`},[i(`p`,{class:`custom-block-title`},`下载提示`),i(`p`,null,`检测到您在应用内无法下载 APK,请点击右上角-外部打开后下载`)],-1)])]),_:1}),n(h),l[3]||(l[3]=o("",8)),n(g,{images:[[`0001.png`,`0002.png`,`0003.png`,`0004.png`],[`0005.png`,`0006.png`,`0007.png`,`0008.png`]]}),l[4]||(l[4]=i(`p`,null,[s(`如遇到问题可在 `),i(`a`,{href:`/guide/faq`},`常见问题`),s(` 查阅解决方案`)],-1))])}var f=a(u,[[`render`,d]]);export{l as __pageData,f as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{at as e,o as t,ot as n,yt as r}from"./chunks/framework.bo_0njjP.js";var i=JSON.parse(`{"title":"属性方法","description":"","frontmatter":{},"headers":[],"relativePath":"guide/node.md","filePath":"guide/node.md","lastUpdated":1788031436000}`),a={name:`guide/node.md`};function o(t,i,a,o,s,c){return r(),e(`div`,null,[...i[0]||(i[0]=[n(`<h1 id="title" tabindex="-1">属性方法 <a class="header-anchor" href="#title" aria-label="Permalink to “属性方法”"></a></h1><p>此章节介绍各个类型可用的属性及其方法</p><h2 id="null" tabindex="-1">null <a class="header-anchor" href="#null" aria-label="Permalink to “null”"></a></h2><div class="note custom-block github-alert"><p class="custom-block-title">提示</p><p><code>null</code> 无任何属性方法, 并且在无特殊说明时, 属性方法当调用者或者参数是 <code>null</code> 时, 均返回 <code>null</code></p></div><p>当 <code>name</code> 是 <code>null</code> 时, <code>name.length</code> 为 <code>null</code></p><p>当 <code>parent</code> 是 <code>null</code> 时, <code>parent.getChild(0)</code> 为 <code>null</code></p><p>当 <code>index</code> 是 <code>null</code> 时, <code>parent.getChild(index)</code> 为 <code>null</code></p><h2 id="boolean" tabindex="-1">boolean <a class="header-anchor" href="#boolean" aria-label="Permalink to “boolean”"></a></h2><table tabindex="0"><thead><tr><th>方法名</th><th>参数</th><th>返回类型</th><th>描述</th></tr></thead><tbody><tr><td>toInt</td><td></td><td><code>int</code></td><td>转为 0 或 1</td></tr><tr><td>or</td><td><code>boolean</code></td><td><code>boolean</code></td><td>a || b</td></tr><tr><td>and</td><td><code>boolean</code></td><td><code>boolean</code></td><td>a && b</td></tr><tr><td>not</td><td></td><td><code>boolean</code></td><td>!a</td></tr><tr><td>ifElse</td><td><code>T</code>, <code>T</code></td><td><code>T</code></td><td>if(a) T else T <br> T 是任意类型, 两个参数均支持为 null</td></tr></tbody></table><h2 id="int" tabindex="-1">int <a class="header-anchor" href="#int" aria-label="Permalink to “int”"></a></h2><table tabindex="0"><thead><tr><th>方法名</th><th>参数</th><th>返回类型</th><th>描述</th></tr></thead><tbody><tr><td>toString</td><td></td><td><a href="#string"><code>string</code></a></td><td>转为10进制字符串</td></tr><tr><td>toString</td><td><code>int</code></td><td><code>string</code></td><td>转为对应进制的字符串</td></tr><tr><td>plus</td><td><code>int</code></td><td><code>string</code></td><td>加上</td></tr><tr><td>minus</td><td><code>int</code></td><td><code>string</code></td><td>减去</td></tr><tr><td>times</td><td><code>int</code></td><td><code>string</code></td><td>乘以</td></tr><tr><td>div</td><td><code>int</code></td><td><code>string</code></td><td>除以</td></tr><tr><td>rem</td><td><code>int</code></td><td><code>string</code></td><td>取余</td></tr><tr><td>more</td><td><code>int</code></td><td><a href="#boolean"><code>boolean</code></a></td><td>a > b</td></tr><tr><td>moreEqual</td><td><code>int</code></td><td><code>boolean</code></td><td>a >= b</td></tr><tr><td>less</td><td><code>int</code></td><td><code>boolean</code></td><td>a < b</td></tr><tr><td>lessEqual</td><td><code>int</code></td><td><code>boolean</code></td><td>a <= b</td></tr></tbody></table><h2 id="string" tabindex="-1">string <a class="header-anchor" href="#string" aria-label="Permalink to “string”"></a></h2><table tabindex="0"><thead><tr><th>标识符</th><th>属性类型</th><th>描述</th></tr></thead><tbody><tr><td>length</td><td><a href="#int"><code>int</code></a></td><td>字符串长度</td></tr></tbody></table><table tabindex="0"><thead><tr><th>方法名</th><th>参数</th><th>返回类型</th><th>描述</th></tr></thead><tbody><tr><td>get</td><td><a href="#int"><code>int</code></a></td><td><code>string</code></td><td>获取对应索引字符串</td></tr><tr><td>at</td><td><code>int</code></td><td><code>string</code></td><td>同上,但是参数传负数时从最后一个字符取</td></tr><tr><td>substring</td><td><code>int</code></td><td><code>string</code></td><td>截取指定索引到结尾字符串</td></tr><tr><td>substring</td><td><code>int</code>,<code>int</code></td><td><code>string</code></td><td>截取指定间隔字符串</td></tr><tr><td>toInt</td><td></td><td><code>int</code></td><td>转为10进制数字</td></tr><tr><td>toInt</td><td><code>int</code></td><td><code>int</code></td><td>转为指定进制的数字</td></tr><tr><td>indexOf</td><td><code>string</code></td><td><code>int</code></td><td>查找指定字符串的索引</td></tr><tr><td>indexOf</td><td><code>string</code>,<code>int</code></td><td><code>int</code></td><td>从指定索引开始查找指定字符串的索引</td></tr></tbody></table><h2 id="node" tabindex="-1">node <a class="header-anchor" href="#node" aria-label="Permalink to “node”"></a></h2><div class="important custom-block github-alert"><p class="custom-block-title">重要提示</p><p>此类型下以 _ 开头的属性只能在网页快照调试工具上使用, 真机不可用</p></div><table tabindex="0"><thead><tr><th>标识符</th><th>属性类型</th><th>描述</th></tr></thead><tbody><tr><td>_id</td><td><a href="#int"><code>int</code></a></td><td></td></tr><tr><td>_pid</td><td><code>int</code></td><td></td></tr><tr><td>id</td><td><a href="#string"><code>string</code></a></td><td></td></tr><tr><td>vid</td><td><code>string</code></td><td></td></tr><tr><td>name</td><td><code>string</code></td><td></td></tr><tr><td>text</td><td><code>string</code></td><td></td></tr><tr><td>desc</td><td><code>string</code></td><td></td></tr><tr><td>clickable</td><td><code>boolean</code></td><td></td></tr><tr><td>focusable</td><td><code>boolean</code></td><td></td></tr><tr><td>checkable</td><td><code>boolean</code></td><td></td></tr><tr><td>checked</td><td><code>boolean</code></td><td></td></tr><tr><td>editable</td><td><code>boolean</code></td><td></td></tr><tr><td>longClickable</td><td><code>boolean</code></td><td></td></tr><tr><td>visibleToUser</td><td><code>boolean</code></td><td></td></tr><tr><td>left</td><td><code>int</code></td><td></td></tr><tr><td>top</td><td><code>int</code></td><td></td></tr><tr><td>right</td><td><code>int</code></td><td></td></tr><tr><td>bottom</td><td><code>int</code></td><td></td></tr><tr><td>width</td><td><code>int</code></td><td></td></tr><tr><td>height</td><td><code>int</code></td><td></td></tr><tr><td>childCount</td><td><code>int</code></td><td></td></tr><tr><td>index</td><td><code>int</code></td><td></td></tr><tr><td>depth</td><td><code>int</code></td><td></td></tr><tr><td>parent</td><td><a href="#node"><code>node</code></a></td><td>获取父节点</td></tr></tbody></table><table tabindex="0"><thead><tr><th>方法名</th><th>参数</th><th>返回类型</th><th>描述</th></tr></thead><tbody><tr><td>getChild</td><td><code>int</code></td><td><a href="#node"><code>node</code></a></td><td>获取指定索引的子节点</td></tr></tbody></table><h2 id="context" tabindex="-1">context <a class="header-anchor" href="#context" aria-label="Permalink to “context”"></a></h2><p>context 具有 <a href="#node">node</a> 的所有属性方法, 下面只介绍额外属性方法</p><table tabindex="0"><thead><tr><th>标识符</th><th>属性类型</th><th>描述</th></tr></thead><tbody><tr><td>prev</td><td><a href="#context"><code>context</code></a></td><td>右侧属性选择器的节点上下文 <br> 最右侧的 prev=null</td></tr><tr><td>current</td><td><a href="#node"><code>node</code></a></td><td>当前节点 <br> current.id=id</td></tr></tbody></table><p>示例</p><div class="language-text"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span>FrameLayout[prev.name$='ImageView'] > ImageView[current.name=name]</span></span></code></pre></div><p>中的 prev 就是 FrameLayout 右侧的 ImageView, current 就是 ImageView</p><table tabindex="0"><thead><tr><th>方法名</th><th>参数</th><th>返回类型</th><th>描述</th></tr></thead><tbody><tr><td>getPrev</td><td>int</td><td><a href="#context"><code>context</code></a></td><td>快捷获取深层 prev <br> getPrev(0) -> prev <br> getPrev(1) -> prev.prev <br> getPrev(2) -> prev.prev.prev</td></tr></tbody></table><h2 id="global" tabindex="-1">global <a class="header-anchor" href="#global" aria-label="Permalink to “global”"></a></h2><p>global 具有 <a href="#context">context</a> 的所有属性方法, 并且没有任何属性方法能获取 global 的引用, 下面只介绍额外属性方法</p><table tabindex="0"><thead><tr><th>方法名</th><th>参数</th><th>返回类型</th><th>描述</th></tr></thead><tbody><tr><td>equal</td><td><code>T</code>, <code>T</code></td><td><a href="#boolean"><code>boolean</code></a></td><td>a==b <br> T 是任意类型, a,b 允许 null</td></tr><tr><td>notEqual</td><td><code>T</code>, <code>T</code></td><td><code>boolean</code></td><td>a!=b</td></tr></tbody></table><p>示例</p><div class="language-text"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span>[name=''][prev.name=''][current.name=''][parent.name='']</span></span></code></pre></div><ul><li>第一个 <code>name</code> 来自 <a href="#global">global</a>, 实际上任何 <code>xxx</code>/<code>xxx()</code> 都来自 global</li><li>第二个 <code>prev.name</code> 来自 <a href="#context">context</a></li><li>后续的 <code>current.name</code>/<code>parent.name</code> 都来自 <a href="#node">node</a></li></ul>`,31)])])}var s=t(a,[[`render`,o]]);export{i as __pageData,s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{at as e,o as t,ot as n,yt as r}from"./chunks/framework.bo_0njjP.js";var i=JSON.parse(`{"title":"属性方法","description":"","frontmatter":{},"headers":[],"relativePath":"guide/node.md","filePath":"guide/node.md","lastUpdated":1788031436000}`),a={name:`guide/node.md`};function o(t,i,a,o,s,c){return r(),e(`div`,null,[...i[0]||(i[0]=[n("",31)])])}var s=t(a,[[`render`,o]]);export{i as __pageData,s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{at as e,o as t,ot as n,yt as r}from"./chunks/framework.bo_0njjP.js";var i=JSON.parse(`{"title":"查询优化","description":"","frontmatter":{},"headers":[],"relativePath":"guide/optimize.md","filePath":"guide/optimize.md","lastUpdated":1788031436000}`),a={name:`guide/optimize.md`};function o(t,i,a,o,s,c){return r(),e(`div`,null,[...i[0]||(i[0]=[n(`<h1 id="title" tabindex="-1">查询优化 <a class="header-anchor" href="#title" aria-label="Permalink to “查询优化”"></a></h1><p>一些关于查询优化的说明</p><h2 id="query-root" tabindex="-1">查找根节点 <a class="header-anchor" href="#query-root" aria-label="Permalink to “查找根节点”"></a></h2><p>选择器通过满足下列格式的属性选择器标识根节点</p><ul><li><code>[parent=null]</code></li><li><code>A[id='xxx'][parent=null][text='xxx']</code></li></ul><p>即只需存在一个 <code>[parent=null]</code> 就满足条件, 以下是对此的优化</p><h3 id="enforce" tabindex="-1">主动查询 <a class="header-anchor" href="#enforce" aria-label="Permalink to “主动查询”"></a></h3><p>一般的选择器如 <code>LinearLayout > TextView</code>, 选择器需要从 根节点/事件节点 使用深度先序顺序遍历子孙节点并判断是否满足条件</p><p>如果屏幕上有 n 个节点, 判断逻辑需要运行 n 次</p><p>但是如果选择器是类似 <code>TextView <3 LinearLayout <2 [parent=null]</code>, 由于在右侧标明了从根节点查找</p><p>因此上面的 <code>深度先序顺序遍历子孙节点</code> 将省略, 只进行一次判断, 不需要判断 n 次</p><p>但是如果你在子查询里使用 <code><<n</code>, 例如 <code>TextView <<n [parent=null]</code></p><p>根据上面说明的优化, 虽然也只有一次判断, 但是由于 <code><<n</code> 导致内部的子判断也是 n 次, 实际上没有优化判断次数</p><div class="tip custom-block github-alert"><p class="custom-block-title">提示</p><p>实际上从根节点开始匹配并且目标不是根节点的选择器如 <code>A > B</code> 都可等价为 <code>A > @B <<n [parent=null]</code></p></div><h3 id="ancestor" tabindex="-1">祖先节点 <a class="header-anchor" href="#ancestor" aria-label="Permalink to “祖先节点”"></a></h3><p>在示例 <code>A <3 [parent=null] >n TextView</code> 中, 选择器找到 <code>TextView</code> 后, 根据 <code>>n</code> 表示任意祖先节点</p><p>在默认情况下, 如果 <code>TextView</code> 的层级很深, 那必然需要多次调用 获取父节点 才能最终匹配</p><p>但是如果左侧的选择器是 <code>[parent=null] >n</code>, 这表示找到根节点, 选择器此时不会去执行多次调用 获取父节点</p><p>在 GKD 内部, 根节点可以直接通过 API 获取, 因此 <code>[parent=null] >n</code> 只需要调用一次方法</p><h2 id="fast-query" tabindex="-1">快速查询 <a class="header-anchor" href="#fast-query" aria-label="Permalink to “快速查询”"></a></h2><div class="note custom-block github-alert"><p class="custom-block-title">注意</p><p>此优化需要设置 <a href="/api/interfaces/RawCommonProps#fastquery">fastQuery</a> 来启用<br> 并且节点在快照面板被标识 <code>可快速查找</code>, 否则查找不到</p></div><h3 id="query-scene" tabindex="-1">查询场景 <a class="header-anchor" href="#query-scene" aria-label="Permalink to “查询场景”"></a></h3><p>一般情况下, 选择器 <code>[vid="name"]</code> 需要从 根节点/事件节点 使用深度先序顺序遍历子孙节点并判断是否满足条件</p><p>但是 Android 提供了如下两个快速获取节点的 Api</p><ul><li><a href="https://developer.android.google.cn/reference/android/view/accessibility/AccessibilityNodeInfo#findAccessibilityNodeInfosByViewId(java.lang.String)" target="_blank" rel="noreferrer">findAccessibilityNodeInfosByViewId</a></li><li><a href="https://developer.android.google.cn/reference/android/view/accessibility/AccessibilityNodeInfo#findAccessibilityNodeInfosByText(java.lang.String)" target="_blank" rel="noreferrer">findAccessibilityNodeInfosByText</a></li></ul><p>这使得可以通过 <code>id</code>/<code>vid</code>/<code>text</code> 直接获取子孙节点</p><p>对此我们需要规定符合特定条件的选择器来调用这些 Api 从而跳过手动遍历子孙节点</p><h3 id="rule-format" tabindex="-1">规定格式 <a class="header-anchor" href="#rule-format" aria-label="Permalink to “规定格式”"></a></h3><p>所有 <code>末尾属性选择器</code>的<code>第一个属性选择表达式</code>符合下面的结构之一</p><ul><li><code>[id='abc']</code></li><li><code>[vid='abc']</code></li><li><code>[text='abc']</code></li><li><code>[text^='abc']</code></li><li><code>[text*='abc']</code></li><li><code>[text$='abc']</code></li></ul><p>或者使用 <code>||</code> 将它们连接形成的逻辑表达式也符合条件, 即如下格式</p><ul><li><code>[id='abc' || id='abc2']</code></li><li><code>[id='abc' || vid='abc' || text='abc' || text^='abc' || text*='abc' || text$='abc']</code></li></ul><p>这些规定的格式都是为了提取 <code>id</code>/<code>vid</code>/<code>text</code> 来调用上面的两个 Android Api</p><p>下面给出实际示例: ✅ 表示符合格式, ❎ 表示不符合格式</p><ul><li><code>A > B + C[id='x'][childCount=2]</code> ✅</li><li><code>A > B + C[childCount=2][id='x']</code> ❎</li><li><code>A > B + C[id='x' || text='manbaout' || text*='ikun'][childCount=2]</code> ✅</li><li><code>A > B + C[childCount=2][id='x' || text='manbaout' || text*='ikun']</code> ❎</li></ul><p>这样一个选择器只能在右侧使用快速查询, 为了在中间的子选择器也能使用</p><p>额外规定如果属性选择器如果符合上面格式并且右侧是 <code><<n</code>, 也能在局部使用快速查找</p><p>示例 <code>A > B + C[id='x'][childCount=2] <<n D</code> 中的 <code>C[id='x'][childCount=2] <<n</code> 可以使用局部快速查找</p><p>下面给出满足局部查询优化的示例: ✅ 表示符合格式, ❎ 表示不符合格式</p><ul><li><code>A > B + C[id='x'][childCount=2] <<n D</code> ✅</li><li><code>A > B + C[childCount=2][id='x'] <<n D</code> ❎</li></ul><p>上面介绍的是只有一个局部选择器的情况, 下面给出多个局部快速查找的的示例</p><p>如 <code>A > C[id='x'] <<n D[id='y'] <<n E</code>, 其中的 <code>C[id='x'] <<n</code> 和 <code>D[id='y'] <<n</code> 都可以使用局部快速查找</p><p>如果使用 <code>||</code>, <code>&&</code> 连接多个选择器时, 快速查询为它们的并集</p><p>如果选择器被 <code>!(xxx)</code> 包裹, 则不符合快速查询格式, 也就是 <code>!</code> 会取消其内部所有的快速查询</p><ul><li><code>(A + B[id='b']) || (C + D[id='d'])</code> 的快速查询为 <code>id='b'</code>, <code>id='d'</code></li><li><code>(A + B[id='b']) && (C + D[id='d'])</code> 的快速查询为 <code>id='b'</code>, <code>id='d'</code></li><li><code>(A + B[id='b']) && !(C + D[id='d'])</code> 的快速查询为 <code>id='b'</code></li></ul><p>需要注意的是它们内部的 局部快速查找 仍然独立成立</p><ul><li><code>(X[id='x'] <<n A + B[id='b']) && !(Y[id='y'] <<n C + D[id='d'])</code> 的快速查询为 <code>id='b'</code>, 局部快速查询分别是 <code>id='x'</code>, <code>id='y'</code></li></ul><div class="note custom-block github-alert"><p class="custom-block-title">注意</p><p>如果选择器不存在满足快速查找的格式, fastQuery 是否开启都不影响查询复杂度</p></div><h3 id="optimize-example" tabindex="-1">优化示例 <a class="header-anchor" href="#optimize-example" aria-label="Permalink to “优化示例”"></a></h3><p>以 <a href="https://i.gkd.li/i/16201605?gkd=W3ZpZD0iaW1hZ2UiXSA8PG4gW3ZpZD0icmVjeWNsZXJWaWV3Il0gPDxuIFt2aWQ9ImNvbnRlbnRfbGF5b3V0Il0" target="_blank" rel="noreferrer"><code>[vid="image"] <<n [vid="recyclerView"] <<n [vid="content_layout"]</code></a> 为例</p><p>上面的选择器存在 3 个快速查找优化</p><ul><li><code>[vid="content_layout"]</code> 从 根节点 优化查询找到 <code>content_layout</code></li><li><code>[vid="recyclerView"]</code> 从 <code>content_layout</code> 优化查询找到 <code>recyclerView</code></li><li><code>[vid="image"]</code> 从 <code>recyclerView</code> 优化查询找到 <code>image</code></li></ul><p>也就是只需要调用 <code>findAccessibilityNodeInfosByViewId</code> 3 次即可得到目标节点</p><p>如果是从根节点开始查询, 根据快照内的 选择器路径视图</p><ul><li><code>[vid="content_layout"]</code> 从 根节点 需要 7 次找到 <code>content_layout</code></li><li><code>[vid="recyclerView"]</code> 从 <code>content_layout</code> 需要 48 次找到 <code>recyclerView</code></li><li><code>[vid="image"]</code> 从 <code>recyclerView</code> 需要 44 次找到 <code>image</code></li></ul>`,55)])])}var s=t(a,[[`render`,o]]);export{i as __pageData,s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{at as e,o as t,ot as n,yt as r}from"./chunks/framework.bo_0njjP.js";var i=JSON.parse(`{"title":"查询优化","description":"","frontmatter":{},"headers":[],"relativePath":"guide/optimize.md","filePath":"guide/optimize.md","lastUpdated":1788031436000}`),a={name:`guide/optimize.md`};function o(t,i,a,o,s,c){return r(),e(`div`,null,[...i[0]||(i[0]=[n("",55)])])}var s=t(a,[[`render`,o]]);export{i as __pageData,s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{at as e,o as t,ot as n,yt as r}from"./chunks/framework.bo_0njjP.js";var i=JSON.parse(`{"title":"隐私政策","description":"","frontmatter":{},"headers":[],"relativePath":"guide/privacy.md","filePath":"guide/privacy.md","lastUpdated":1788031436000}`),a={name:`guide/privacy.md`};function o(t,i,a,o,s,c){return r(),e(`div`,null,[...i[0]||(i[0]=[n(`<h1 id="title" tabindex="-1">隐私政策 <a class="header-anchor" href="#title" aria-label="Permalink to “隐私政策”"></a></h1><p><strong>版本号:1.0</strong><br><strong>生效日期:以应用版本发布日期为准</strong></p><p>本隐私政策旨在说明我们如何处理您的数据。</p><p>GKD 应用秉持 “本地优先、最小权限、完全离线” 原则。</p><p><strong>我们不会收集、存储或上传任何用户隐私数据</strong>。</p><h2 id="p1" tabindex="-1">一、我们如何处理您的数据 <a class="header-anchor" href="#p1" aria-label="Permalink to “一、我们如何处理您的数据”"></a></h2><table tabindex="0"><thead><tr><th>数据类型</th><th>使用目的</th><th>是否上传</th><th>存储位置</th></tr></thead><tbody><tr><td>本地规则与配置</td><td>用户自定义自动化行为</td><td>否</td><td>本地</td></tr><tr><td>屏幕截图(仅调试)</td><td>用户调试辅助功能</td><td>否</td><td>本地</td></tr><tr><td>屏幕文本信息</td><td>文本识别以实现查询功能</td><td>否</td><td>本地</td></tr><tr><td>本地日志</td><td>保存运行或报错信息供调试</td><td>否</td><td>本地</td></tr><tr><td>数据导出(配置/规则)</td><td>用户自行备份与迁移</td><td>否</td><td>本地或自行分享</td></tr></tbody></table><h2 id="p2" tabindex="-1">二、权限使用说明 <a class="header-anchor" href="#p2" aria-label="Permalink to “二、权限使用说明”"></a></h2><table tabindex="0"><thead><tr><th>权限</th><th>是否必须</th><th>用途说明</th></tr></thead><tbody><tr><td>无障碍服务</td><td>❌ 否</td><td>用于模拟点击和界面读取(选用功能)</td></tr><tr><td>屏幕截图权限</td><td>❌ 否</td><td>调试界面内容(选用功能)</td></tr><tr><td>网络权限</td><td>❌ 否</td><td>检测更新或导入订阅或网络调试(选用功能)</td></tr><tr><td>外部存储写权限</td><td>❌ 否</td><td>部分旧设备导出文件时使用(选用功能)</td></tr></tbody></table><h2 id="p3" tabindex="-1">三、数据导入与导出说明 <a class="header-anchor" href="#p3" aria-label="Permalink to “三、数据导入与导出说明”"></a></h2><ul><li>所有规则、配置、日志等数据仅保存在用户本地;</li><li>用户可通过系统分享功能导出文件,无需申请权限;</li><li>部分旧设备或旧系统中,普通版导出文件可能会申请写入下载目录权限,且用途仅限导出功能。</li></ul><h2 id="p4" tabindex="-1">四、第三方库说明 <a class="header-anchor" href="#p4" aria-label="Permalink to “四、第三方库说明”"></a></h2><p>本应用所使用的第三方库均为开源项目,不包含任何用户跟踪、统计或联网行为。完整依赖列表可在项目开源仓库中查看。</p><h2 id="p5" tabindex="-1">五、用户权利 <a class="header-anchor" href="#p5" aria-label="Permalink to “五、用户权利”"></a></h2><p>您有权:</p><ul><li>拒绝授予任何权限</li><li>随时导出、编辑或删除本地数据</li><li>卸载应用以终止使用</li></ul><h2 id="p6" tabindex="-1">六、隐私政策变更 <a class="header-anchor" href="#p6" aria-label="Permalink to “六、隐私政策变更”"></a></h2><p>如隐私政策有更新,将随应用更新发布。您可在官网或应用内查阅最新版,继续使用即视为接受变更。</p>`,18)])])}var s=t(a,[[`render`,o]]);export{i as __pageData,s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{at as e,o as t,ot as n,yt as r}from"./chunks/framework.bo_0njjP.js";var i=JSON.parse(`{"title":"隐私政策","description":"","frontmatter":{},"headers":[],"relativePath":"guide/privacy.md","filePath":"guide/privacy.md","lastUpdated":1788031436000}`),a={name:`guide/privacy.md`};function o(t,i,a,o,s,c){return r(),e(`div`,null,[...i[0]||(i[0]=[n("",18)])])}var s=t(a,[[`render`,o]]);export{i as __pageData,s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Ct as e,at as t,ct as n,jt as r,nt as i,o as a,ot as o,yt as s}from"./chunks/framework.bo_0njjP.js";var c=JSON.parse(`{"title":"选择器","description":"","frontmatter":{},"headers":[],"relativePath":"guide/selector.md","filePath":"guide/selector.md","lastUpdated":1788031436000}`),l={name:`guide/selector.md`},u={class:`vp-raw`},d={tabindex:`0`},f={style:{"text-align":`center`}},p={style:{"text-align":`center`}},m={style:{"text-align":`center`}},h={style:{"text-align":`center`}},g={style:{"text-align":`center`}};function _(a,c,l,_,v,y){let b=e(`GkIdentifierField`),x=e(`GkImage`),S=e(`GkImagePreviewGroup`);return s(),t(`div`,null,[c[16]||(c[16]=o(`<h1 id="title" tabindex="-1">选择器 <a class="header-anchor" href="#title" aria-label="Permalink to “选择器”"></a></h1><p>一个类似 CSS 选择器的选择器, 能联系节点上下文信息, 更容易也更精确找到目标节点</p><h2 id="why" tabindex="-1">为什么需要选择器 <a class="header-anchor" href="#why" aria-label="Permalink to “为什么需要选择器”"></a></h2><p>我们的目的是查询获取屏幕上的某个节点, 最简单的情况下, 目标节点已经有唯一的 id/text 标识</p><p>这时只需要配置 id/text 就能简单执行点击, 但实际情况很多节点都缺失了这些信息, 无法简单查询获取</p><p>节点还存在很多额外信息没有被利用到, 节点所有属性可以在 <a href="https://i.gkd.li/i/14045424" target="_blank" rel="noreferrer">快照-14045424</a> 的属性面板看到</p><p>另一种常见的情况是节点没有有效属性, 这时我们需要根据周围的节点去定位</p><p>选择器就是为了解决这些问题而开发的, 下面是对选择器语法的详细介绍</p><div class="tip custom-block github-alert"><p class="custom-block-title">提示</p><p>本文是从 <strong>抽象语法树(AST)</strong> 的角度去完备地介绍选择器结构<br> 如果你是初学者, 建议你直接看 <a href="./example">选择器-示例</a></p></div><h2 id="syntax" tabindex="-1">语法 <a class="header-anchor" href="#syntax" aria-label="Permalink to “语法”"></a></h2><p>与 CSS 类似, 一个选择器由 属性选择器 和 关系选择器 交叉组成, 并且开头末尾必须是 属性选择器</p><p>示例 <code>div > img</code> 的结构是 <code>属性选择器 关系选择器 属性选择器</code>, 它表示选择父节点是 <code>div</code> 的 <code>img</code> 节点, 这与 <a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/Child_combinator" target="_blank" rel="noreferrer">相同 CSS 语法</a> 语义一致</p><p>另外 属性选择器 和 关系选择器 之间必须<strong>强制</strong>用 空白字符(空格/换行/回车/制表) 隔开</p><p>即 <code>div>img</code> 非法, 必须写成 <code>div > img</code></p><p>下面分别介绍 <a href="#attr">属性选择器</a> 和 <a href="#connect">关系选择器</a></p><h2 id="attr" tabindex="-1">属性选择 <a class="header-anchor" href="#attr" aria-label="Permalink to “属性选择”"></a></h2><p>它和 CSS 语法的 属性选择器很相似, 但更强大, 如下是一个示例</p><p><code>@TextView[a=1][b^='2'][c*='a'||d.length>7&&e=false][!(f=true)][g.plus(1)>0]</code></p><p><code>@</code> 表示选择此节点, 一条规则最后属性选择器 <code>@</code> 生效, 如果没有 <code>@</code>, 取最后一个属性选择器</p><p><code>TextView</code> 代表节点的 name 属性, 而且与 CSS 相似, <code>*</code> 表示匹配任意属性</p><p>由于该选择器主要用于 Android 平台, 节点的 name 都是 java 类如 android.text.TextView 这种形式</p><p>为了方便书写规则, 上述 <code>TextView</code> 等价 <code>[name='TextView'||name$='.TextView']</code></p><p><code>[]</code> 内部是一个 逻辑表达式/布尔表达式/取反表达式</p><ul><li>逻辑表达式 -> <code>name='TextView'||name$='.TextView'</code></li><li>布尔表达式 -> <code>name='TextView'</code></li><li>取反表达式 -> <code>!(name$='TextView')</code>, <code>!(name='TextView'||name$='.TextView')</code></li></ul><p>注意 取反表达式中的 <code>!</code> 后面必须是 <code>(...)</code>, <code>!!(...)</code> 是非法的</p><p>逻辑表达式 有两个操作符 <code>||</code> 和 <code>&&</code>. <code>&&</code> 优先级更高</p><p>即 <code>[a>1||b>1&&c>1||d>1]</code> 等价于 <code>[a>1||(b>1&&c>1)||d>1]</code></p><p>并列的 <code>[]</code> 视为使用 <code>&&</code> 的逻辑表达式, 即 <code>[a=1][b=1]</code> 等价于 <code>[a=1&&b=1]</code></p><p>布尔表达式 由 <code>左值 操作符 右值</code> 构成, 左值/右值 是一个 值表达式</p><p>下面分别介绍 <a href="#value-exp">值表达式</a> 和 <a href="#attr-operator">操作符</a></p><h2 id="value-exp" tabindex="-1">值表达式 <a class="header-anchor" href="#value-exp" aria-label="Permalink to “值表达式”"></a></h2><p>值表达式分两类: 变量 和 字面量, 下图是关系表格</p>`,32)),c[17]||(c[17]=i(`table`,null,[i(`thead`,null,[i(`tr`,null,[i(`th`,{colspan:`2`},[i(`div`,{"text-center":``},`值表达式`)]),i(`th`,null,`示例`)])]),i(`tbody`,null,[i(`tr`,null,[i(`td`,{rowspan:`3`},`变量`),i(`td`,null,`标识符`),i(`td`,null,[i(`code`,null,` a `)])]),i(`tr`,null,[i(`td`,null,`成员表达式`),i(`td`,null,[i(`code`,null,`a.b`)])]),i(`tr`,null,[i(`td`,null,`调用表达式`),i(`td`,null,[i(`code`,null,`a(b,c)`)])]),i(`tr`,null,[i(`td`,{rowspan:`4`},`字面量`),i(`td`,null,`null`),i(`td`,null,[i(`code`,null,`null`)])]),i(`tr`,null,[i(`td`,null,`boolean`),i(`td`,null,[i(`code`,null,`false`)])]),i(`tr`,null,[i(`td`,null,`int`),i(`td`,null,[i(`code`,null,`114514`)])]),i(`tr`,null,[i(`td`,null,`string`),i(`td`,null,[i(`code`,null,`'ikun'`)])])])],-1)),c[18]||(c[18]=o(`<p>每个值表达式都有其类型, 可细分为两类</p><p>基础类型: <code>null</code> <code>boolean</code> <code>int</code> <code>string</code></p><p>对象类型: <code>object</code></p><p>对象类型可细分为 <code>context</code> 和 <code>node</code> 两种类型</p><p>比如选择器 <code>[parent=null]</code> 代表选择一个父节点是 null 的节点, 即根节点</p><p>上面的 <code>parent</code> 属于 值表达式/变量/标识符, 类型是 <code>node</code></p><p><code>context</code> 类型指代当前节点的上下文, 当想使用不属于 <code>node</code> 上的属性方法时就需要 <code>context</code></p><p>你可以在 <a href="./node">选择器-属性方法</a> 查看所有类型和对应属性方法</p><h3 id="var" tabindex="-1">变量 <a class="header-anchor" href="#var" aria-label="Permalink to “变量”"></a></h3><p>首先需要了解 <strong>标识符</strong>: 正则匹配 <code>^[_a-zA-Z][a-zA-Z0-9_]*$</code> 并且不是 <code>null</code>/<code>true</code>/<code>false</code> 的字符串</p><p>示例合法变量名: <code>a</code> <code>ikun</code> <code>manbaout</code>, 下面可输入字符测试否是合法</p>`,11)),i(`div`,u,[n(b)]),c[19]||(c[19]=o('<hr><p>接下来了解 <strong>成员表达式</strong> <code>a.b</code>, 它被 <code>.</code> 分为两个部分, 前部分是另一个变量, 后部分是一个标识符作为属性</p><p>同理 <code>a.b.c</code> 也是一个 成员表达式, 其中 <code>a.b</code> 是它的变量部分, <code>c</code> 是一个合法的标识符作为属性</p><p>根据上面标识符的规则, <code>a.1</code>, <code>a.null</code>, <code>a.true</code> 都是非法成员表达式</p><hr><p>最后了解 <strong>调用表达式</strong> <code>a(b,c)</code>, 它由两个部分构成, <code>(</code> 的左侧 <code>a</code> 是一个变量作为 调用者</p><p><code>(b,c)</code> 作为调用参数(值类型), 调用参数数量可以是 0 或任意个, 即 <code>a()</code> 也是合法的</p><p>合法的其它例子: <code>a.b(c,d).e(f).g(1,2,true)</code></p><p>需要注意调用者不能是 调用表达式, 即 <code>a()()</code> 非法</p><h3 id="literal" tabindex="-1">字面量 <a class="header-anchor" href="#literal" aria-label="Permalink to “字面量”"></a></h3><p>根据上面的表格, 字面量有 4 种: <code>null</code>, <code>boolean</code>, <code>int</code>, <code>string</code></p><ul><li>null</li><li>boolean 使用 <code>true</code>/<code>false</code></li><li>int 匹配 <code>^-?[0-9]$</code>, 即十进制整数, 示例 <code>-1</code>,<code>0</code>,<code>1</code>, 不支持 <code>+1</code> 这种写法</li><li>string 使用 ' ` " 之一成对包裹, 内部字符转义使用 <code>\\</code><br> 所有的转义字符示例 <code>\\\\</code>, <code>\\'</code>, <code>\\"</code>, <code>\\`</code>, <code>\\n</code>, <code>\\r</code>, <code>\\t</code>, <code>\\b</code>, <code>\\xfF</code>, <code>\\uffFF</code><br> 不支持多行字符, 处于 <code>[0, 0x1F]</code> 的控制字符必须使用转义字符表示</li></ul><p>此外使用 string 时需要了解 <a href="#nest-escape">嵌套转义字符</a> 以避免出现错误</p><h2 id="attr-operator" tabindex="-1">操作符 <a class="header-anchor" href="#attr-operator" aria-label="Permalink to “操作符”"></a></h2><p>操作符 用于连接两个 值表达式</p><table tabindex="0"><thead><tr><th style="text-align:center;">操作符</th><th style="text-align:center;">名称</th><th style="text-align:center;">说明</th></tr></thead><tbody><tr><td style="text-align:center;">=</td><td style="text-align:center;">equal</td><td style="text-align:center;">等于</td></tr><tr><td style="text-align:center;">!=</td><td style="text-align:center;">notEqual</td><td style="text-align:center;">不等于</td></tr><tr><td style="text-align:center;">></td><td style="text-align:center;">more</td><td style="text-align:center;">大于</td></tr><tr><td style="text-align:center;">>=</td><td style="text-align:center;">moreEqual</td><td style="text-align:center;">大于或等于</td></tr><tr><td style="text-align:center;"><</td><td style="text-align:center;">less</td><td style="text-align:center;">小于</td></tr><tr><td style="text-align:center;"><=</td><td style="text-align:center;">lessEqual</td><td style="text-align:center;">小于或等于</td></tr><tr><td style="text-align:center;">^=</td><td style="text-align:center;">startsWith</td><td style="text-align:center;">以...开头</td></tr><tr><td style="text-align:center;">!^=</td><td style="text-align:center;">notStartsWith</td><td style="text-align:center;">不以...开头</td></tr><tr><td style="text-align:center;">*=</td><td style="text-align:center;">contains</td><td style="text-align:center;">包含...</td></tr><tr><td style="text-align:center;">!*=</td><td style="text-align:center;">notContains</td><td style="text-align:center;">不包含...</td></tr><tr><td style="text-align:center;">$=</td><td style="text-align:center;">endsWith</td><td style="text-align:center;">以...结尾</td></tr><tr><td style="text-align:center;">!$=</td><td style="text-align:center;">notEndsWith</td><td style="text-align:center;">不以...结尾</td></tr><tr><td style="text-align:center;">~=</td><td style="text-align:center;">matches</td><td style="text-align:center;">正则匹配...</td></tr><tr><td style="text-align:center;">!~=</td><td style="text-align:center;">notMatches</td><td style="text-align:center;">正则不匹配...</td></tr></tbody></table><p>附加说明: <code>matches</code>/<code>notMatches</code> 要求值必须是当前运行平台支持的 <a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.text/-regex/" target="_blank" rel="noreferrer">Kotlin 正则表达式</a>, 否则提示语法错误。跨平台差异见下文的<a href="#regex-multiplatform">正则表达式一致性</a></p><p>并且 <code>matches</code>/<code>notMatches</code> 右侧的值只能是 字面量/字符串</p><p>操作符只能使用在对应的类型的值, 比如 <code>a>''</code> 类型不匹配, 将提示 <code>非法类型</code></p><p>下面表格中 <code>-</code> 表示类型不匹配</p><table tabindex="0"><thead><tr><th style="text-align:center;"></th><th style="text-align:center;">null</th><th style="text-align:center;">boolean</th><th style="text-align:center;">int</th><th style="text-align:center;">string</th></tr></thead><tbody><tr><td style="text-align:center;">=</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!=</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">></td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;">>=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;"><</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;"><=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;">^=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!^=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">*=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!*=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">$=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!$=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">~=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!~=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr></tbody></table><p>除 <code>=</code>/<code>!=</code> 以外的操作符, 当节点属性是 null 时表达式为 <code>false</code></p><ul><li>a > 233</li><li>a >= 233</li><li>a < 233</li><li>a <= 233</li><li>a ^= 'xxx'</li><li>a !^= 'xxx'</li><li>a *= 'xxx'</li><li>a !* 'xxx'</li><li>a $= 'xxx'</li><li>a !$= 'xxx'</li><li>a ~= 'xxx'</li><li>a !~= 'xxx'</li></ul><p>即当 a 是 <code>null</code> 时以上表达式为 <code>false</code></p><p>你可能会对 <code>a !$= 'xxx'</code> 在 a 是 <code>null</code> 表达式为 <code>false</code> 感到奇怪</p><p>那你可以换一种写法使用 <code>a=null || a!$='xxx'</code> 或 <code>!(a$='xxx')</code></p><h2 id="connect" tabindex="-1">关系选择 <a class="header-anchor" href="#connect" aria-label="Permalink to “关系选择”"></a></h2><p>关系选择器 由 关系操作符 和 关系表达式 构成, 用于连接两个属性选择器</p><p>简单示例: <code>div > a</code>, 它 表示/约束 两个节点之间的关系, 下面介绍 <a href="#connect-operator">关系操作符</a> 和 <a href="#connect-exp">关系表达式</a></p><h3 id="connect-exp" tabindex="-1">关系表达式 <a class="header-anchor" href="#connect-exp" aria-label="Permalink to “关系表达式”"></a></h3><p>关系表达式 表示查找节点的范围, 有两种</p><ul><li>元组表达式 <code>(a1,a2,a3,a_n)</code>, 其中 a1, a2, a3, a_n 是常量有序递增正整数, 示例 <code>(1)</code>, <code>(2,3,5)</code></li><li>多项式表达式 <code>(an+b)</code>, 其中 a 和 b 是常量整数, 它是元组表达式的另一种表示, 这个元组的数满足集合 <code>{an+b|an+b>=1,n>=1}</code> 如果集合为空集则表达式非法<br> 当 a<=0 时, 它具有等价的元组表达式<br> 示例 <code>(-n+4)</code> 等价于 <code>(1,2,3)</code><br> 示例 <code>(-3n+10)</code> 等价于 <code>(1,4,7)</code><br> 当 a>0 时, 它表示无限的元组表达式<br> 示例 <code>(n)</code>, 它表示 <code>(1,2,3,...)</code> 一个无限的元组<br> 示例 <code>(2n-1)</code>, 它表示 <code>(1,3,5,...)</code> 一个无限的元组</li></ul><h3 id="connect-operator" tabindex="-1">关系操作符 <a class="header-anchor" href="#connect-operator" aria-label="Permalink to “关系操作符”"></a></h3><p>关系操作符 表示查找节点的方向, 有 6 种关系操作符</p><ul><li>前 5 种为 <code>+</code>, <code>-</code>, <code>></code>, <code><</code>, <code><<</code>, 表示节点的相对位置</li></ul>',35)),n(S,null,{default:r(()=>[i(`table`,d,[c[15]||(c[15]=i(`thead`,null,[i(`tr`,null,[i(`th`,{style:{"text-align":`center`}},`操作符`),i(`th`,{style:{"text-align":`center`}},`名称`),i(`th`,{style:{"text-align":`center`}},`图例`),i(`th`,{style:{"text-align":`center`}},`选择器`)])],-1)),i(`tbody`,null,[i(`tr`,null,[c[0]||(c[0]=i(`td`,{style:{"text-align":`center`}},`+`,-1)),c[1]||(c[1]=i(`td`,{style:{"text-align":`center`}},`前置兄弟节点`,-1)),i(`td`,f,[n(x,{src:`0020.png`,"w-250px":``})]),c[2]||(c[2]=i(`td`,{style:{"text-align":`center`}},[i(`a`,{href:`https://i.gkd.li/i/14045424?gkd=KiArIFtfaWQ9MzNd`,target:`_blank`,rel:`noreferrer`},`* + [_id=33]`)],-1))]),i(`tr`,null,[c[3]||(c[3]=i(`td`,{style:{"text-align":`center`}},`-`,-1)),c[4]||(c[4]=i(`td`,{style:{"text-align":`center`}},`后置兄弟节点`,-1)),i(`td`,p,[n(x,{src:`0021.png`,"w-250px":``})]),c[5]||(c[5]=i(`td`,{style:{"text-align":`center`}},[i(`a`,{href:`https://i.gkd.li/i/14045424?gkd=KiAtIFtfaWQ9MzJd`,target:`_blank`,rel:`noreferrer`},`* - [_id=32]`)],-1))]),i(`tr`,null,[c[6]||(c[6]=i(`td`,{style:{"text-align":`center`}},`>`,-1)),c[7]||(c[7]=i(`td`,{style:{"text-align":`center`}},`祖先节点`,-1)),i(`td`,m,[n(x,{src:`0022.png`,"w-250px":``})]),c[8]||(c[8]=i(`td`,{style:{"text-align":`center`}},[i(`a`,{href:`https://i.gkd.li/i/14045424?gkd=KiA-IFtfaWQ9OTBd`,target:`_blank`,rel:`noreferrer`},`* > [_id=90]`)],-1))]),i(`tr`,null,[c[9]||(c[9]=i(`td`,{style:{"text-align":`center`}},`<`,-1)),c[10]||(c[10]=i(`td`,{style:{"text-align":`center`}},`直接子节点`,-1)),i(`td`,h,[n(x,{src:`0023.png`,"w-250px":``})]),c[11]||(c[11]=i(`td`,{style:{"text-align":`center`}},[i(`a`,{href:`https://i.gkd.li/i/14045424?gkd=KiA8IFtfaWQ9ODld`,target:`_blank`,rel:`noreferrer`},`* < [_id=89]`)],-1))]),i(`tr`,null,[c[12]||(c[12]=i(`td`,{style:{"text-align":`center`}},`<<`,-1)),c[13]||(c[13]=i(`td`,{style:{"text-align":`center`}},`子孙节点(深度先序)`,-1)),i(`td`,g,[n(x,{src:`0024.png`,"w-250px":``})]),c[14]||(c[14]=i(`td`,{style:{"text-align":`center`}},[i(`a`,{href:`https://i.gkd.li/i/14045424?gkd=KiA8PDIgW19pZD0yOV0`,target:`_blank`,rel:`noreferrer`},`* <<2 [_id=29]`)],-1))])])])]),_:1}),c[20]||(c[20]=o('<ul><li>另外一种为 <code>-></code>, 用于查询过程中, 表示当前节点的之前节点</li></ul><p>比如 <code>C ->1 B > A</code>, 由 A 找到 B 后, 此时的 C 就是 B 的之前节点即 A, 这适合想快速去之前节点重新查询关系的场景</p><p>将 关系操作符 和 关系表达式 连接起来就得到了 关系选择器</p><p><code>A +(a1,a2,a3,a_n) B</code> : A 是 B 的前置兄弟节点, 并且 A.index 满足 B.index-(a_m), 其中 a_m 是元组的任意一个数字</p><p><code>A -(a1,a2,a3,a_n) B</code> : A 是 B 的后置兄弟节点, 并且 A.index 满足 B.index+(a_m)</p><p><code>A >(a1,a2,a3,a_n) B</code> : A 是 B 的祖先节点, 并且 A.depth 满足 B.depth-(a_m), 根节点的 depth=0</p><p><code>A <(a1,a2,a3,a_n) B</code> : A 是 B 的直接子节点, 并且 A.index 满足 a_m-1</p><p><code>A <<(a1,a2,a3,a_n) B</code> : A 是 B 的子孙节点, 并且 A.order 满足 a_m-1, A.order 是深度优先先序遍历的索引</p><p><code>N ->(a1,a2,a3,a_n) B > A</code>, N 是 B 的之前(右侧)的已查询节点, 并且 N.index 满足 B.index-(a_m), index 顺序为 (n,n-1,...,2,1,0)</p><h3 id="connect-shortcut" tabindex="-1">表达式简写 <a class="header-anchor" href="#connect-shortcut" aria-label="Permalink to “表达式简写”"></a></h3><p>一般情况下, 并不需要写严格完整的表达式, 使用简化写法更方便快捷</p><p>下面是一些特殊情况下的简写表示</p><p>当 a=0 或 b=0 时, 括号可以省略, 以 <code>+</code> 为例</p><ul><li><code>A +(3n+0) B</code> -> <code>A +(3n) B</code> -> <code>A +3n B</code></li><li><code>A +(0n+3) B</code> -> <code>A +(+3) B</code> -> <code>A +3 B</code></li></ul><p>当 a=0 且 b=1 时, an+b 可以省略, 以 <code>+</code> 为例</p><ul><li><code>A +(0n+1) B</code> -> <code>A + B</code></li></ul><p>此外 <code>A + B</code>,<code>A > B</code> 都与等价的 CSS 语法语义相同</p><p>当 a=1 且 b=0 且操作符是 <code>></code>, 可以进一步简写, 比如</p><ul><li><code>A >(1n+0) B</code> -> <code>A >n B</code> -> <code>A B</code></li></ul><p>这与等价的 CSS 语法语义相同</p><h2 id="advanced" tabindex="-1">进阶 <a class="header-anchor" href="#advanced" aria-label="Permalink to “进阶”"></a></h2><p>正如上述的 <a href="#attr">属性选择</a> 一样, 选择器也可以组合为 逻辑表达式/取反表达式</p><p>只有一个格式要求: 单个选择器必须强制使用 <code>()</code> 包裹</p><ul><li><p>一般选择器 -> <code>A + B</code> 或 <code>(A + B)</code></p></li><li><p>逻辑或表达式 -> <code>(A + B) || (M > N)</code>, 表示匹配节点满足 <code>A + B</code> 或 <code>M > N</code></p><p>匹配结果遵循 <code>||</code> 的短路原则, 优先判断左侧的 <code>A + B</code>, 如果满足 <code>A + B</code> 那就是 <code>B</code>. 不满足 <code>A + B</code> 时, 判断右侧表达式, 如果满足 <code>M > N</code> 那就是 <code>N</code>, 当然也可以在内部使用 <code>@</code> 自定义目标节点</p></li><li><p>逻辑且表达式 -> <code>(A + B) && (M > N)</code>, 表示匹配节点满足 <code>A + B</code> 和 <code>M > N</code>, 结果取右侧表达式结果, 结果为 <code>N</code>, 当然也可以在内部使用 <code>@</code> 自定义目标节点</p></li><li><p>取反表达式 -> <code>!(A + B)</code>, 表示匹配节点应不满足 <code>A + B</code>, 需要注意的是 <code>!(@A + B)</code> 中的 <code>@</code> 是无效的, 它的匹配结果只能是末尾节点 <code>B</code></p></li></ul><p>此外 逻辑且表达式 的优先级更高, 即 <code>(A + B) || (C + B) && (M > N)</code> 等价于 <code>(A + B) || ((C + B) && (M > N))</code></p><h2 id="example" tabindex="-1">示例 <a class="header-anchor" href="#example" aria-label="Permalink to “示例”"></a></h2><div class="language-txt"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span>@LinearLayout > TextView[id=`com.byted.pangle:id/tt_item_tv`][text=`不感兴趣`]</span></span></code></pre></div><p>选择器从末尾开始查找, 首先找到 id=`com.byted.pangle:id/tt_item_tv` 和 text=`不感兴趣` 的 TextView, 并且父节点是 LinearLayout 的节点</p><p>此时我们得到两个节点 [LinearLayout, TextView] 根据 <code>@</code> 知道目标节点是 LinearLayout</p><p>实际上它与</p><div class="language-txt"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span>TextView[id=`com.byted.pangle:id/tt_item_tv`][text=`不感兴趣`] <n LinearLayout</span></span></code></pre></div><p>的目标匹配节点是等价的, 但是在查询算法时间复杂度上, 后者更慢</p><p>如下是网页无障碍快照审查工具, 使用它的搜索框的选择器查询可以实时测试编写的选择器</p><ul><li><a href="https://i.gkd.li/i/14045424" target="_blank" rel="noreferrer">快照-14045424</a></li><li><a href="https://i.gkd.li/i/14034770" target="_blank" rel="noreferrer">快照-14034770</a></li><li><a href="https://i.gkd.li/i/14031920" target="_blank" rel="noreferrer">快照-14031920</a></li><li><a href="https://i.gkd.li/i/14018243" target="_blank" rel="noreferrer">快照-14018243</a></li><li><a href="https://i.gkd.li/i/14011298" target="_blank" rel="noreferrer">快照-14011298</a></li><li><a href="https://i.gkd.li/i/13999908" target="_blank" rel="noreferrer">快照-13999908</a></li></ul><h2 id="note" tabindex="-1">一些注意 <a class="header-anchor" href="#note" aria-label="Permalink to “一些注意”"></a></h2><h3 id="match-order" tabindex="-1">匹配顺序 <a class="header-anchor" href="#match-order" aria-label="Permalink to “匹配顺序”"></a></h3><p>选择器的匹配顺序是 <strong>从右往左匹配</strong></p><p>例如 <code>FrameLayout > TextView</code>, 它是先从 根节点/事件节点 找到 <code>TextView</code>, 然后再判断 parent 是不是 <code>FrameLayout</code></p><p>并不是先找到 <code>FrameLayout</code> 然后再判断 child 是否有 <code>TextView</code></p><p>同时在 <a href="https://i.gkd.li/i/15747758?gkd=RnJhbWVMYXlvdXQgPiBUZXh0Vmlldw" target="_blank" rel="noreferrer">选择器路径视图</a> 也会标明匹配顺序和查找方向</p><h3 id="regex-optimization" tabindex="-1">正则表达式优化 <a class="header-anchor" href="#regex-optimization" aria-label="Permalink to “正则表达式优化”"></a></h3><p>对 <code>matches</code>/<code>notMatches</code> 的优化:如果正则表达式满足下面的条件,选择器将使用内置的简单函数匹配,不再运行正则表达式</p><ul><li><code>[text~="(?is)abc.*"]</code> -> <code>startsWith('abc', ignoreCase = true)</code></li><li><code>[text~="(?is).*abc.*"]</code> -> <code>contains('abc', ignoreCase = true)</code></li><li><code>[text~="(?is).*abc"]</code> -> <code>endsWith('abc', ignoreCase = true)</code></li><li><code>[text!~="(?is)abc.*"]</code> -> <code>notStartsWith('abc', ignoreCase = true)</code></li><li><code>[text!~="(?is).*abc.*"]</code> -> <code>notContains('abc', ignoreCase = true)</code></li><li><code>[text!~="(?is).*abc"]</code> -> <code>notEndsWith('abc', ignoreCase = true)</code></li></ul><p>上面的 <code>abc</code> 指代不包含 <code>\\^$.?*|+()[]{}</code> 这类特殊正则字符的任意字符串,如 <code>ikun</code> 符合,<code>ikun?</code> 不符合。<code>ignoreCase = true</code> 表示忽略大小写</p><p>如果只需要忽略大小写并进行简单的开头、包含或结尾匹配,可以直接使用上面的格式</p><h3 id="regex-multiplatform" tabindex="-1">正则表达式一致性 <a class="header-anchor" href="#regex-multiplatform" aria-label="Permalink to “正则表达式一致性”"></a></h3><p>除上一节列出的简单模式外,Android/JVM 使用 Kotlin <code>Regex</code>(Java <code>Pattern</code>),浏览器和 Node.js 使用 <a href="https://www.npmjs.com/package/regex-wasm" target="_blank" rel="noreferrer"><code>regex-wasm</code></a> 提供的 Kotlin/Wasm <code>Regex</code>。JS 端不会回退到 JavaScript <code>RegExp</code>。</p><p>JVM 与 Wasm 对少数 JVM 专用字符类、Unicode 字符类和边界行为的支持可能不同。跨平台规则应避免 JVM 专用语法,并在两端分别验证。</p><div class="important custom-block github-alert"><p class="custom-block-title">运行环境要求</p><p>浏览器必须使用支持 <a href="https://developer.chrome.com/blog/wasmgc?hl=zh-cn" target="_blank" rel="noreferrer">WasmGC</a> 的新版本,Node.js 必须使用 22 或更高版本。旧版浏览器和 Node.js 不受支持,也不会回退到 JavaScript 正则实现。</p></div><h3 id="nest-escape" tabindex="-1">嵌套转义字符 <a class="header-anchor" href="#nest-escape" aria-label="Permalink to “嵌套转义字符”"></a></h3><p>转义字符一般用于表示不能直接显示具体特殊意义的字符</p><p>对于 GKD 的选择器而言, 转义字符使用示例如下</p><div class="language-txt"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span>TextView[text="\\\\\\n"]</span></span></code></pre></div><p>这表示选择一个 TextView, 它的 text 长度为 2, 开头是 <code>\\</code>, 末尾是换行</p><p>这和平常写的代码里面的 string 声明用法一模一样</p><p>但是选择器最终放在规则的字段里面, 也就是这个选择器字符串处于 JSON 的 string 内</p><p>如果你想当然地直接手动复制插入到编辑器里出现下面这种规则</p><div class="language-json5"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>\n<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'TextView[text="</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>由于 JSON 也有自己的转义, 规则与 GKD 的转义基本一致, 因此你的实际选择器实际变成了</p><div class="language-txt"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span>TextView[text="\\</span></span>\n<span class="line"><span>"]</span></span></code></pre></div><p>这明显是一个非法的选择器</p><p>解决方式也很简单, 手动插入的时候将你的 <code>\\</code> 变成 <code>\\\\</code>, 正确的规则如下</p><div class="language-json5"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>\n<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'TextView[text="</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">n"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>这是普通字符串的情况, 如果你使用 <code>~=</code>/<code>!~=</code>, 则还需要多转义一次, 因为正则表达式也有自己的转义字符</p><p>比如我们想匹配一个 TextView 并且 text 是任意一个数字, 我们想当然地用 <code>\\d</code>, 所以你可能会写</p><div class="language-txt"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span>TextView[text~="\\d"]</span></span></code></pre></div><p>但是你在网页审查工具输入并回车搜索会提示 非法选择器, 这是因为 <code>\\d</code> 处于 GKD 的 string 内, 会被转义一次, 正确的用法是写 <code>\\\\d</code></p><div class="language-txt"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span>TextView[text~="\\\\d"]</span></span></code></pre></div><p>实际上这部分等价的 Kotlin/Java 代码可以简单是</p><div class="language-txt"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span>Regex("\\\\d").matches(text)</span></span></code></pre></div><p>接下来把选择器放到规则里面, 根据上面的描述, 规则应该是</p><div class="language-json5"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>\n<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'TextView[text~="</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">d"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>如果想用正则匹配一个 <code>\\</code> 字符, 最终规则应该写成</p><div class="language-json5"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>\n<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'TextView[text~="</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>实现和上面相同的结果, 即用 <code>=</code> 匹配一个 <code>\\</code> 字符, 最终规则应该写成</p><div class="language-json5"><button title="Copy code" data-copied="Copied" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>\n<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'TextView[text="</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>类似的问题 <a href="https://github.com/gkd-kit/gkd/issues/603" target="_blank" rel="noreferrer">gkd-kit/gkd#603</a></p>',77))])}var v=a(l,[[`render`,_]]);export{c as __pageData,v as default};
|