vue-layout-gitcode 1.12.19 → 1.12.21

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.
@@ -9121,8 +9121,8 @@ const currentHelpDocsAiCommunityUrl = () => {
9121
9121
  const _hoisted_1$B = { class: "home-nav-right" };
9122
9122
  const _hoisted_2$q = { class: "home-nav-item" };
9123
9123
  const _hoisted_3$p = { class: "tooltip-sign" };
9124
- const _hoisted_4$k = { class: "home-nav-tooltip-wrapper" };
9125
- const _hoisted_5$g = { class: "home-nav-text" };
9124
+ const _hoisted_4$j = { class: "home-nav-tooltip-wrapper" };
9125
+ const _hoisted_5$f = { class: "home-nav-text" };
9126
9126
  const _hoisted_6$d = { class: "home-nav-tooltip-wrapper" };
9127
9127
  const _hoisted_7$a = { class: "home-nav-text" };
9128
9128
  const _hoisted_8$9 = {
@@ -9421,8 +9421,8 @@ const _sfc_main$I = /* @__PURE__ */ defineComponent({
9421
9421
  "overlay-class": "tools-tag-tooltip"
9422
9422
  }, {
9423
9423
  content: withCtx(() => [
9424
- createElementVNode("div", _hoisted_4$k, [
9425
- createElementVNode("div", _hoisted_5$g, toDisplayString$1(unref(t2)("gitCodeLayout.growthCenter.invite")), 1)
9424
+ createElementVNode("div", _hoisted_4$j, [
9425
+ createElementVNode("div", _hoisted_5$f, toDisplayString$1(unref(t2)("gitCodeLayout.growthCenter.invite")), 1)
9426
9426
  ])
9427
9427
  ]),
9428
9428
  default: withCtx(() => [
@@ -11374,8 +11374,8 @@ const _hoisted_1$y = {
11374
11374
  };
11375
11375
  const _hoisted_2$p = { class: "org-layout-toolbar-title flex-1 ellipsis-two-line" };
11376
11376
  const _hoisted_3$o = { class: "text-xs" };
11377
- const _hoisted_4$j = { class: "flex items-center w-full g-repo-breadcrumb-custom" };
11378
- const _hoisted_5$f = {
11377
+ const _hoisted_4$i = { class: "flex items-center w-full g-repo-breadcrumb-custom" };
11378
+ const _hoisted_5$e = {
11379
11379
  key: 1,
11380
11380
  class: "flex items-center min-w-[30px]"
11381
11381
  };
@@ -11600,7 +11600,7 @@ const _sfc_main$E = /* @__PURE__ */ defineComponent({
11600
11600
  default: withCtx(() => {
11601
11601
  var _a2, _b2, _c2, _d, _e, _f, _g;
11602
11602
  return [
11603
- createElementVNode("h2", _hoisted_4$j, [
11603
+ createElementVNode("h2", _hoisted_4$i, [
11604
11604
  createVNode(GLink, {
11605
11605
  href: (_a2 = unref(breadcrumb)[0]) == null ? void 0 : _a2.path,
11606
11606
  class: "pr-[12px]"
@@ -11616,7 +11616,7 @@ const _sfc_main$E = /* @__PURE__ */ defineComponent({
11616
11616
  width: 28,
11617
11617
  height: 28,
11618
11618
  is_round: !isOrg.value
11619
- }, null, 8, ["class", "src", "name", "is_round"])) : (openBlock(), createElementBlock("div", _hoisted_5$f, [
11619
+ }, null, 8, ["class", "src", "name", "is_round"])) : (openBlock(), createElementBlock("div", _hoisted_5$e, [
11620
11620
  unref(isPhone)() ? (openBlock(), createElementBlock("img", _hoisted_6$c)) : (openBlock(), createElementBlock("img", _hoisted_7$9))
11621
11621
  ]))
11622
11622
  ];
@@ -14585,8 +14585,8 @@ const GText = /* @__PURE__ */ _export_sfc(_sfc_main$y, [["__scopeId", "data-v-vu
14585
14585
  const _hoisted_1$t = { class: "message-item flex" };
14586
14586
  const _hoisted_2$o = { class: "message-item-footer" };
14587
14587
  const _hoisted_3$n = ["title"];
14588
- const _hoisted_4$i = ["href"];
14589
- const _hoisted_5$e = { class: "message-item-info-content flex-auto flex items-center justify-between" };
14588
+ const _hoisted_4$h = ["href"];
14589
+ const _hoisted_5$d = { class: "message-item-info-content flex-auto flex items-center justify-between" };
14590
14590
  const _hoisted_6$b = { class: "flex message-item-body flex-1" };
14591
14591
  const _hoisted_7$8 = ["title", "innerHTML"];
14592
14592
  const _hoisted_8$7 = ["title"];
@@ -14621,10 +14621,10 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
14621
14621
  width: 32,
14622
14622
  height: 32
14623
14623
  }, null, 8, ["name", "src"])
14624
- ], 8, _hoisted_4$i)
14624
+ ], 8, _hoisted_4$h)
14625
14625
  ], 8, _hoisted_3$n)
14626
14626
  ]),
14627
- createElementVNode("div", _hoisted_5$e, [
14627
+ createElementVNode("div", _hoisted_5$d, [
14628
14628
  createElementVNode("div", _hoisted_6$b, [
14629
14629
  createVNode(GLink, {
14630
14630
  href: unref(transformUrl)(__props.data.url),
@@ -14682,11 +14682,11 @@ const _hoisted_3$m = {
14682
14682
  key: 1,
14683
14683
  class: "g-number"
14684
14684
  };
14685
- const _hoisted_4$h = {
14685
+ const _hoisted_4$g = {
14686
14686
  key: 0,
14687
14687
  class: "g-number ml-[8px]"
14688
14688
  };
14689
- const _hoisted_5$d = { class: "message-content-cover" };
14689
+ const _hoisted_5$c = { class: "message-content-cover" };
14690
14690
  const _hoisted_6$a = {
14691
14691
  key: 0,
14692
14692
  class: "message-content-header"
@@ -15026,7 +15026,7 @@ const _sfc_main$w = /* @__PURE__ */ defineComponent({
15026
15026
  onClick: _cache[1] || (_cache[1] = ($event) => toPage("unread"))
15027
15027
  }, [
15028
15028
  createTextVNode(toDisplayString$1(unref(t2)("gitCodeLayout.notice.msg.allUnread")), 1),
15029
- msgCount.value > 0 ? (openBlock(), createElementBlock("span", _hoisted_4$h, toDisplayString$1(msgCount.value), 1)) : createCommentVNode("", true)
15029
+ msgCount.value > 0 ? (openBlock(), createElementBlock("span", _hoisted_4$g, toDisplayString$1(msgCount.value), 1)) : createCommentVNode("", true)
15030
15030
  ])
15031
15031
  ]),
15032
15032
  createElementVNode("div", {
@@ -15034,7 +15034,7 @@ const _sfc_main$w = /* @__PURE__ */ defineComponent({
15034
15034
  ref: scrollContainer,
15035
15035
  class: "message-content"
15036
15036
  }, [
15037
- withDirectives((openBlock(), createElementBlock("div", _hoisted_5$d, [
15037
+ withDirectives((openBlock(), createElementBlock("div", _hoisted_5$c, [
15038
15038
  currentType.value === "mention" ? (openBlock(), createElementBlock("div", _hoisted_6$a, [
15039
15039
  createElementVNode("div", {
15040
15040
  class: normalizeClass(["message-content-header-item mr-[8px]", { active: mentionSubTab.value === "project" }]),
@@ -15264,8 +15264,8 @@ const _hoisted_1$q = {
15264
15264
  };
15265
15265
  const _hoisted_2$l = { class: "flex items-center font-medium gap-[4px]" };
15266
15266
  const _hoisted_3$k = ["src"];
15267
- const _hoisted_4$g = { class: "level-name" };
15268
- const _hoisted_5$c = { class: "level-icon" };
15267
+ const _hoisted_4$f = { class: "level-name" };
15268
+ const _hoisted_5$b = { class: "level-icon" };
15269
15269
  const _hoisted_6$9 = ["src"];
15270
15270
  const _hoisted_7$6 = { class: "custom-btn" };
15271
15271
  const _hoisted_8$5 = { class: "flex items-center justify-center" };
@@ -15328,9 +15328,9 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
15328
15328
  src: levelInfo.value.avatar,
15329
15329
  alt: ""
15330
15330
  }, null, 8, _hoisted_3$k),
15331
- createElementVNode("div", _hoisted_4$g, [
15331
+ createElementVNode("div", _hoisted_4$f, [
15332
15332
  createElementVNode("div", null, toDisplayString$1(levelInfo.value.name), 1),
15333
- createElementVNode("div", _hoisted_5$c, [
15333
+ createElementVNode("div", _hoisted_5$b, [
15334
15334
  createElementVNode("img", {
15335
15335
  src: levelInfo.value.level,
15336
15336
  alt: ""
@@ -15349,8 +15349,8 @@ const UserLevel = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["__scopeId", "data-
15349
15349
  const _hoisted_1$p = { class: "g-user-drawer-info-list pl-[16px]" };
15350
15350
  const _hoisted_2$k = { class: "max-w-[200px]" };
15351
15351
  const _hoisted_3$j = ["title"];
15352
- const _hoisted_4$f = ["title"];
15353
- const _hoisted_5$b = {
15352
+ const _hoisted_4$e = ["title"];
15353
+ const _hoisted_5$a = {
15354
15354
  key: 0,
15355
15355
  class: "g-user-drawer-lang-row"
15356
15356
  };
@@ -15586,7 +15586,7 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
15586
15586
  createElementVNode("p", {
15587
15587
  class: "g-user-drawer-info-list-id ellipsis",
15588
15588
  title: __props.accountInfo.username
15589
- }, "@" + toDisplayString$1(__props.accountInfo.username), 9, _hoisted_4$f)
15589
+ }, "@" + toDisplayString$1(__props.accountInfo.username), 9, _hoisted_4$e)
15590
15590
  ]),
15591
15591
  createVNode(GIcon, {
15592
15592
  name: "gt-line-right",
@@ -15606,7 +15606,7 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
15606
15606
  key: index2
15607
15607
  }, [
15608
15608
  block.component ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
15609
- block.avatarLangRow ? (openBlock(), createElementBlock("div", _hoisted_5$b, [
15609
+ block.avatarLangRow ? (openBlock(), createElementBlock("div", _hoisted_5$a, [
15610
15610
  (openBlock(), createBlock(resolveDynamicComponent(block.component), {
15611
15611
  key: block.id
15612
15612
  }))
@@ -15644,11 +15644,11 @@ const _hoisted_2$j = {
15644
15644
  class: "g-user-avatar__badge"
15645
15645
  };
15646
15646
  const _hoisted_3$i = { class: "g-user-avatar flex-center ml-1" };
15647
- const _hoisted_4$e = {
15647
+ const _hoisted_4$d = {
15648
15648
  key: 0,
15649
15649
  class: "g-user-avatar__badge"
15650
15650
  };
15651
- const _hoisted_5$a = { class: "g-user-drawer" };
15651
+ const _hoisted_5$9 = { class: "g-user-drawer" };
15652
15652
  const _hoisted_6$8 = { class: "p-[16px] pt-[8px] pb-0 flex justify-end items-center h-[48px]" };
15653
15653
  const _sfc_main$r = /* @__PURE__ */ defineComponent({
15654
15654
  ...{
@@ -15807,7 +15807,7 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
15807
15807
  onToggle: handleToggle
15808
15808
  }, {
15809
15809
  menu: withCtx(() => [
15810
- createElementVNode("div", _hoisted_5$a, [
15810
+ createElementVNode("div", _hoisted_5$9, [
15811
15811
  createVNode(UserAvatarMenu, {
15812
15812
  independence: __props.independence,
15813
15813
  loginOutFinish: __props.loginOutFinish,
@@ -15826,7 +15826,7 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
15826
15826
  name: accountInfo.value.nickname,
15827
15827
  src: unref(transformUrl)(accountInfo.value.avatar)
15828
15828
  }, null, 8, ["name", "src"]),
15829
- accountInfo.value.need_tips && !haveVisited.value ? (openBlock(), createElementBlock("div", _hoisted_4$e, [..._cache[5] || (_cache[5] = [
15829
+ accountInfo.value.need_tips && !haveVisited.value ? (openBlock(), createElementBlock("div", _hoisted_4$d, [..._cache[5] || (_cache[5] = [
15830
15830
  createElementVNode("div", null, null, -1)
15831
15831
  ])])) : createCommentVNode("", true)
15832
15832
  ])
@@ -15935,16 +15935,19 @@ const setlocalVistHistory = (data, localType) => {
15935
15935
  try {
15936
15936
  cur = JSON.parse(localData);
15937
15937
  if (localType) {
15938
- const target = cur.find(
15939
- (ele) => (ele === data.q || ele.q === data.q) && ele.repo === data.repo && ele.namespace === data.namespace
15940
- );
15941
- if (!target) {
15942
- cur.unshift({ ...data, count: 1 });
15943
- } else {
15944
- target.count = (target.count || 1) + 1;
15945
- data.type && (target.type = data.type);
15946
- cur.splice(cur.indexOf(target), 1);
15947
- cur.unshift(target);
15938
+ cur = cur.filter((ele) => typeof ele === "string" ? !!ele : !!(ele == null ? void 0 : ele.q));
15939
+ if (data.q) {
15940
+ const target = cur.find(
15941
+ (ele) => (ele === data.q || ele.q === data.q) && ele.repo === data.repo && ele.org === data.org && ele.user === data.user && ele.namespace === data.namespace
15942
+ );
15943
+ if (!target) {
15944
+ cur.unshift({ ...data, count: 1 });
15945
+ } else {
15946
+ target.count = (target.count || 1) + 1;
15947
+ data.type && (target.type = data.type);
15948
+ cur.splice(cur.indexOf(target), 1);
15949
+ cur.unshift(target);
15950
+ }
15948
15951
  }
15949
15952
  }
15950
15953
  } catch (e) {
@@ -15961,14 +15964,35 @@ const setlocalVistHistory = (data, localType) => {
15961
15964
  const KEY_ALIAS = {
15962
15965
  repo: "repo",
15963
15966
  user: "user",
15964
- namespace: "group",
15967
+ org: "group",
15965
15968
  language: "language",
15966
15969
  lang: "language",
15967
15970
  symbol: "symbol",
15968
15971
  path: "path"
15969
15972
  };
15970
- const SUPPORTED_KEYS = ["repo", "language", "lang", "symbol", "path", "user", "namespace"];
15973
+ const SUPPORTED_KEYS = ["repo", "language", "lang", "symbol", "path", "user", "org"];
15971
15974
  const QUALIFIER_RE = new RegExp(`^(${SUPPORTED_KEYS.join("|")}):(\\S*)$`, "i");
15975
+ const slotOfKey = (key) => {
15976
+ if (key === "repo" || key === "user" || key === "group") {
15977
+ return "scope";
15978
+ }
15979
+ return key ?? "";
15980
+ };
15981
+ const markOverriddenQualifiers = (tokens) => {
15982
+ const seenSlots = /* @__PURE__ */ new Set();
15983
+ for (let i = tokens.length - 1; i >= 0; i--) {
15984
+ const token = tokens[i];
15985
+ if (token.type !== "qualifier" || !token.value) {
15986
+ continue;
15987
+ }
15988
+ const slot = slotOfKey(token.key);
15989
+ if (seenSlots.has(slot)) {
15990
+ token.overridden = true;
15991
+ } else {
15992
+ seenSlots.add(slot);
15993
+ }
15994
+ }
15995
+ };
15972
15996
  const tokenizeSearchInput = (input) => {
15973
15997
  const tokens = [];
15974
15998
  if (!input) {
@@ -15997,6 +16021,7 @@ const tokenizeSearchInput = (input) => {
15997
16021
  }
15998
16022
  tokens.push({ type: "text", raw: seg });
15999
16023
  }
16024
+ markOverriddenQualifiers(tokens);
16000
16025
  return tokens;
16001
16026
  };
16002
16027
  const parseSearchInput = (input) => {
@@ -16010,6 +16035,9 @@ const parseSearchInput = (input) => {
16010
16035
  }
16011
16036
  continue;
16012
16037
  }
16038
+ if (token.overridden) {
16039
+ continue;
16040
+ }
16013
16041
  switch (token.key) {
16014
16042
  case "repo":
16015
16043
  params.scope = "repo";
@@ -16046,7 +16074,7 @@ const buildQualifierPrefix = (info) => {
16046
16074
  const keyMap = {
16047
16075
  repo: "repo",
16048
16076
  user: "user",
16049
- group: "namespace"
16077
+ group: "org"
16050
16078
  };
16051
16079
  const key = keyMap[info.searchScope];
16052
16080
  if (!key) {
@@ -16058,10 +16086,8 @@ const _hoisted_1$n = {
16058
16086
  key: 0,
16059
16087
  class: "devui-input-slot__prefix"
16060
16088
  };
16061
- const _hoisted_2$i = { class: "hl-token-key" };
16062
- const _hoisted_3$h = { class: "hl-token-value" };
16063
- const _hoisted_4$d = ["value"];
16064
- const _hoisted_5$9 = {
16089
+ const _hoisted_2$i = ["value"];
16090
+ const _hoisted_3$h = {
16065
16091
  key: 1,
16066
16092
  class: "devui-input-slot__suffix"
16067
16093
  };
@@ -16085,7 +16111,22 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
16085
16111
  const { class: _cls, style: _style, ...rest } = attrs;
16086
16112
  return rest;
16087
16113
  });
16088
- const tokens = computed(() => tokenizeSearchInput(props.modelValue));
16114
+ const segments = computed(() => {
16115
+ const list = [];
16116
+ for (const token of tokenizeSearchInput(props.modelValue)) {
16117
+ if (token.type === "qualifier") {
16118
+ if (token.overridden) {
16119
+ list.push({ text: token.raw, cls: "hl-token-text" });
16120
+ continue;
16121
+ }
16122
+ list.push({ text: `${token.rawKey}:`, cls: "hl-token-key" });
16123
+ list.push({ text: token.value ?? "", cls: "hl-token-value" });
16124
+ continue;
16125
+ }
16126
+ list.push({ text: token.raw, cls: token.type === "text" ? "hl-token-text" : "hl-token-space" });
16127
+ }
16128
+ return list;
16129
+ });
16089
16130
  const nativeRef = ref(null);
16090
16131
  const backdropRef = ref(null);
16091
16132
  const controlRef = ref(null);
@@ -16232,16 +16273,11 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
16232
16273
  ref: backdropRef,
16233
16274
  "aria-hidden": "true"
16234
16275
  }, [
16235
- (openBlock(true), createElementBlock(Fragment, null, renderList(tokens.value, (token, index2) => {
16236
- return openBlock(), createElementBlock(Fragment, { key: index2 }, [
16237
- token.type === "qualifier" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
16238
- createElementVNode("span", _hoisted_2$i, toDisplayString$1(token.rawKey) + ":", 1),
16239
- createElementVNode("span", _hoisted_3$h, toDisplayString$1(token.value), 1)
16240
- ], 64)) : (openBlock(), createElementBlock("span", {
16241
- key: 1,
16242
- class: normalizeClass(token.type === "text" ? "hl-token-text" : "hl-token-space")
16243
- }, toDisplayString$1(token.raw), 3))
16244
- ], 64);
16276
+ (openBlock(true), createElementBlock(Fragment, null, renderList(segments.value, (seg, index2) => {
16277
+ return openBlock(), createElementBlock("span", {
16278
+ key: index2,
16279
+ class: normalizeClass(seg.cls)
16280
+ }, toDisplayString$1(seg.text), 3);
16245
16281
  }), 128))
16246
16282
  ], 512),
16247
16283
  createElementVNode("input", mergeProps({
@@ -16249,9 +16285,9 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
16249
16285
  ref: nativeRef,
16250
16286
  class: "devui-input__inner hl-search-input__native",
16251
16287
  value: __props.modelValue
16252
- }, inputAttrs.value, { onInput }), null, 16, _hoisted_4$d)
16288
+ }, inputAttrs.value, { onInput }), null, 16, _hoisted_2$i)
16253
16289
  ], 512),
16254
- _ctx.$slots.suffix ? (openBlock(), createElementBlock("div", _hoisted_5$9, [
16290
+ _ctx.$slots.suffix ? (openBlock(), createElementBlock("div", _hoisted_3$h, [
16255
16291
  renderSlot(_ctx.$slots, "suffix", {}, void 0, true)
16256
16292
  ])) : createCommentVNode("", true)
16257
16293
  ], 6);
@@ -16268,6 +16304,8 @@ const _hoisted_6$7 = {
16268
16304
  key: 1,
16269
16305
  class: "aireposearch flex-1"
16270
16306
  };
16307
+ const RECOMMEND_RESERVE = 60;
16308
+ const HISTORY_DISPLAY_COUNT = 3;
16271
16309
  const _sfc_main$p = /* @__PURE__ */ defineComponent({
16272
16310
  __name: "index",
16273
16311
  props: {
@@ -16278,12 +16316,12 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16278
16316
  setup(__props) {
16279
16317
  const layoutConfig2 = useLayoutConfig();
16280
16318
  const { t: $t } = i18n.global;
16281
- const ProjectSearch = defineAsyncComponent(() => import("./ProjectSearch-BgKi904x.js"));
16282
- const UserSearch = defineAsyncComponent(() => import("./UserSearch-BqmpvYTW.js"));
16283
- const GloabarSearch = defineAsyncComponent(() => import("./GloabarSearch-CJbO3Dlr.js"));
16284
- const SearchHistoryList = defineAsyncComponent(() => import("./SearchHistoryList-XOISenza.js"));
16285
- const SearchScopeList = defineAsyncComponent(() => import("./SearchScopeList-Doe_n1kj.js"));
16286
- const SearchRecommed = defineAsyncComponent(() => import("./SearchRecommed-CM8sDSQF.js"));
16319
+ const ProjectSearch = defineAsyncComponent(() => import("./ProjectSearch-Cy7U1D-2.js"));
16320
+ const UserSearch = defineAsyncComponent(() => import("./UserSearch-BBsO5pWl.js"));
16321
+ const GloabarSearch = defineAsyncComponent(() => import("./GloabarSearch-_Wh028vu.js"));
16322
+ const SearchHistoryList = defineAsyncComponent(() => import("./SearchHistoryList-B1Cg8vfv.js"));
16323
+ const SearchScopeList = defineAsyncComponent(() => import("./SearchScopeList-8SMZ14yR.js"));
16324
+ const SearchRecommed = defineAsyncComponent(() => import("./SearchRecommed-CnOEcCAp.js"));
16287
16325
  const props = __props;
16288
16326
  const repoInfo = inject("repoInfo");
16289
16327
  const orgInfo = inject("orgInfo");
@@ -16337,13 +16375,17 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16337
16375
  const parts = [];
16338
16376
  if (params.scope === "repo" && params.repo) {
16339
16377
  parts.push(`repo:${decodeURIComponent(params.repo)}`);
16340
- } else if (params.scope === "user" && params.namespace) {
16341
- parts.push(`user:${decodeURIComponent(params.namespace)}`);
16342
- } else if (params.scope === "group" && params.namespace) {
16343
- parts.push(`namespace:${decodeURIComponent(params.namespace)}`);
16378
+ } else {
16379
+ const userVal = params.user || (params.scope === "user" ? params.namespace : "");
16380
+ const orgVal = params.org || (params.scope === "user" ? "" : params.namespace);
16381
+ if (userVal) {
16382
+ parts.push(`user:${decodeURIComponent(userVal)}`);
16383
+ } else if (orgVal) {
16384
+ parts.push(`org:${decodeURIComponent(orgVal)}`);
16385
+ }
16344
16386
  }
16345
16387
  if (params.l) {
16346
- parts.push(`language:${params.l}`);
16388
+ parts.push(`lang:${params.l}`);
16347
16389
  }
16348
16390
  if (params.path) {
16349
16391
  parts.push(`path:${decodeURIComponent(params.path)}`);
@@ -16356,7 +16398,7 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16356
16398
  }
16357
16399
  return parts.join(" ");
16358
16400
  };
16359
- const SEARCH_QUERY_KEYS = ["q", "repo", "namespace", "scope", "l", "path", "symbol"];
16401
+ const SEARCH_QUERY_KEYS = ["q", "repo", "org", "user", "namespace", "scope", "l", "path", "symbol"];
16360
16402
  const initSearchStrFromQuery = () => {
16361
16403
  const query = route == null ? void 0 : route.query;
16362
16404
  if (!query) {
@@ -16368,6 +16410,24 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16368
16410
  const searchStr = ref(initSearchStrFromQuery());
16369
16411
  const parsedResult = computed(() => parseSearchInput(searchStr.value));
16370
16412
  const keyword = computed(() => parsedResult.value.params.q);
16413
+ const isScopeOnly = computed(() => {
16414
+ const p = parsedResult.value.params;
16415
+ return (p.scope === "group" || p.scope === "repo") && !p.q && !p.l && !p.path && !p.symbol;
16416
+ });
16417
+ const SCOPE_KEYS = ["repo", "user", "group"];
16418
+ const keywordRest = computed(() => {
16419
+ const parts = [];
16420
+ for (const token of parsedResult.value.tokens) {
16421
+ if (token.type === "space") {
16422
+ continue;
16423
+ }
16424
+ if (token.type === "qualifier" && SCOPE_KEYS.includes(token.key)) {
16425
+ continue;
16426
+ }
16427
+ parts.push(token.raw);
16428
+ }
16429
+ return parts.join(" ");
16430
+ });
16371
16431
  const derivedSearchInfo = computed(() => {
16372
16432
  const p = parsedResult.value.params;
16373
16433
  if (!p.scope) {
@@ -16385,9 +16445,51 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16385
16445
  return info;
16386
16446
  });
16387
16447
  const showRecommendSearch = computed(() => {
16388
- return !searchStr.value && !inputIng.value;
16448
+ return (!searchStr.value || isScopeOnly.value) && !inputIng.value;
16389
16449
  });
16450
+ const recommendOffset = ref(0);
16451
+ const recommendHasRoom = ref(true);
16452
+ const recommendMaxWidth = ref(0);
16453
+ let measureCanvas = null;
16454
+ const measureRecommendOffset = () => {
16455
+ if (typeof document === "undefined" || typeof window === "undefined") {
16456
+ return;
16457
+ }
16458
+ if (!isScopeOnly.value || !searchStr.value) {
16459
+ recommendOffset.value = 0;
16460
+ recommendHasRoom.value = true;
16461
+ return;
16462
+ }
16463
+ const input = document.querySelector("#golbalSearch");
16464
+ if (!input) {
16465
+ recommendOffset.value = 0;
16466
+ recommendHasRoom.value = true;
16467
+ return;
16468
+ }
16469
+ const cs = window.getComputedStyle(input);
16470
+ measureCanvas = measureCanvas || document.createElement("canvas");
16471
+ const ctx = measureCanvas.getContext("2d");
16472
+ if (!ctx) {
16473
+ recommendOffset.value = 0;
16474
+ recommendHasRoom.value = true;
16475
+ return;
16476
+ }
16477
+ ctx.font = `${cs.fontStyle} ${cs.fontWeight} ${cs.fontSize} ${cs.fontFamily}`;
16478
+ const width2 = Math.ceil(ctx.measureText(`${searchStr.value} `).width);
16479
+ recommendOffset.value = width2;
16480
+ const room = input.clientWidth - width2;
16481
+ recommendMaxWidth.value = Math.max(room, 0);
16482
+ recommendHasRoom.value = room >= RECOMMEND_RESERVE;
16483
+ };
16484
+ watch(
16485
+ [() => searchStr.value, isScopeOnly, () => isFocus.value],
16486
+ () => {
16487
+ nextTick(measureRecommendOffset);
16488
+ },
16489
+ { immediate: true }
16490
+ );
16390
16491
  const scrollRecommend = () => {
16492
+ interval.value && clearInterval(interval.value);
16391
16493
  interval.value = setInterval(() => {
16392
16494
  if (!searchHotWords.value.length) {
16393
16495
  return;
@@ -16452,7 +16554,9 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16452
16554
  let localSearchText = localStorage$2.getItem("localSearchText");
16453
16555
  if (localSearchText) {
16454
16556
  try {
16455
- localSearchText = JSON.parse(localSearchText).splice(0, 3);
16557
+ localSearchText = JSON.parse(localSearchText).filter(
16558
+ (ele) => typeof ele === "string" ? !!ele : !!(ele == null ? void 0 : ele.q)
16559
+ );
16456
16560
  } catch (e) {
16457
16561
  console.error(e);
16458
16562
  }
@@ -16467,6 +16571,7 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16467
16571
  }
16468
16572
  const searchHistoryList = ref(localSearchText || []);
16469
16573
  const visitHistoryList = ref(localVistList || []);
16574
+ const displayHistoryList = computed(() => searchHistoryList.value.slice(0, HISTORY_DISPLAY_COUNT));
16470
16575
  const activeIndex = ref(-1);
16471
16576
  const onCaptureClose = () => {
16472
16577
  isFocus.value = false;
@@ -16474,10 +16579,10 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16474
16579
  };
16475
16580
  const onScopeSearch = (data = {}) => {
16476
16581
  if ((data == null ? void 0 : data.enLabel) && (data == null ? void 0 : data.value)) {
16477
- const keyMap = { repo: "repo", user: "user", group: "namespace" };
16582
+ const keyMap = { repo: "repo", user: "user", group: "org" };
16478
16583
  const prefixKey = keyMap[data.enLabel];
16479
16584
  if (prefixKey) {
16480
- searchStr.value = `${prefixKey}:${data.value} ${keyword.value}`.trim();
16585
+ searchStr.value = `${prefixKey}:${data.value} ${keywordRest.value}`.trim();
16481
16586
  }
16482
16587
  }
16483
16588
  onSearch();
@@ -16486,7 +16591,7 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16486
16591
  e.stopPropagation();
16487
16592
  if (e.keyCode === 13) {
16488
16593
  if (activeIndex.value !== -1 && !keyword.value) {
16489
- searchHistory(searchHistoryList.value[activeIndex.value]);
16594
+ searchHistory(displayHistoryList.value[activeIndex.value]);
16490
16595
  } else {
16491
16596
  onSearch();
16492
16597
  }
@@ -16535,13 +16640,9 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16535
16640
  (_a = inputRef.value) == null ? void 0 : _a.blur();
16536
16641
  searchDropDownVisible.value = false;
16537
16642
  const { params } = parseSearchInput(searchStr.value);
16538
- if (!params.q && params.scope && typeof document !== "undefined" && document.querySelector) {
16539
- (_b = document.querySelector("#golbalSearch")) == null ? void 0 : _b.blur();
16540
- pendingType.value = "";
16541
- return;
16542
- }
16643
+ const scopeOnly = (params.scope === "group" || params.scope === "repo") && !params.q && !params.l && !params.path && !params.symbol;
16543
16644
  const targetHotWord = searchHotWords.value[activeSearchKey.value];
16544
- if (!searchStr.value && (targetHotWord == null ? void 0 : targetHotWord.url) && !isSearchHistory.value) {
16645
+ if ((!searchStr.value || scopeOnly) && (targetHotWord == null ? void 0 : targetHotWord.url) && !isSearchHistory.value) {
16545
16646
  let hotUrl = targetHotWord.url;
16546
16647
  const urlObj = new URL(targetHotWord.url);
16547
16648
  if (urlObj.search.length > 1) {
@@ -16554,14 +16655,22 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16554
16655
  return;
16555
16656
  }
16556
16657
  isSearchHistory.value = false;
16557
- const queryKey = params.q || (targetHotWord == null ? void 0 : targetHotWord.content) || "";
16658
+ const queryKey = params.q || (searchStr.value ? "" : targetHotWord == null ? void 0 : targetHotWord.content) || "";
16659
+ const hasSearchable = Boolean(queryKey || params.l || params.path || params.symbol);
16660
+ if (!hasSearchable && typeof document !== "undefined" && document.querySelector) {
16661
+ (_b = document.querySelector("#golbalSearch")) == null ? void 0 : _b.blur();
16662
+ pendingType.value = "";
16663
+ return;
16664
+ }
16558
16665
  const type = resolveSearchType(params);
16559
16666
  pendingType.value = "";
16560
16667
  const query = {
16561
16668
  q: queryKey,
16562
16669
  scope: params.scope,
16563
16670
  repo: params.repo,
16564
- namespace: params.namespace,
16671
+ // 范围值按 scope 写入对应参数:组织 -> org,用户 -> user(不再输出 namespace
16672
+ org: params.scope === "group" ? params.namespace : void 0,
16673
+ user: params.scope === "user" ? params.namespace : void 0,
16565
16674
  l: params.l,
16566
16675
  path: params.path,
16567
16676
  symbol: params.symbol,
@@ -16587,20 +16696,20 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16587
16696
  } else {
16588
16697
  activeIndex.value = activeIndex.value - 1;
16589
16698
  }
16590
- if (activeIndex.value === searchHistoryList.value.length) {
16699
+ if (activeIndex.value === displayHistoryList.value.length) {
16591
16700
  activeIndex.value = 0;
16592
16701
  }
16593
16702
  if (activeIndex.value < 0) {
16594
- activeIndex.value = searchHistoryList.value.length - 1;
16703
+ activeIndex.value = displayHistoryList.value.length - 1;
16595
16704
  }
16596
16705
  };
16597
16706
  watch(
16598
- [() => searchStr.value, () => isFocus.value],
16707
+ [() => searchStr.value, () => isFocus.value, isScopeOnly],
16599
16708
  () => {
16600
- if (isFocus.value || searchStr.value) {
16601
- interval.value && clearInterval(interval.value);
16602
- } else {
16709
+ if (!isFocus.value && (!searchStr.value || isScopeOnly.value)) {
16603
16710
  scrollRecommend();
16711
+ } else {
16712
+ interval.value && clearInterval(interval.value);
16604
16713
  }
16605
16714
  },
16606
16715
  {
@@ -16678,10 +16787,18 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16678
16787
  e.preventDefault();
16679
16788
  }
16680
16789
  });
16790
+ const MOCK_HOT_WORDS = [
16791
+ { content: "DeepSeek-R1", url: "https://gitcode.com/search?q=DeepSeek-R1&type=repo" },
16792
+ { content: "openEuler", url: "https://gitcode.com/search?q=openEuler&type=repo" },
16793
+ { content: "HarmonyOS", url: "https://gitcode.com/search?q=HarmonyOS&type=repo" },
16794
+ { content: "昇腾 CANN", url: "https://gitcode.com/search?q=CANN&type=repo" },
16795
+ { content: "Qwen2.5", url: "https://gitcode.com/search?q=Qwen2.5&type=model" }
16796
+ ];
16681
16797
  const getSearchHot = async () => {
16798
+ var _a;
16682
16799
  try {
16683
16800
  const res = await API.getSearchHot();
16684
- searchHotWords.value = res == null ? void 0 : res.data;
16801
+ searchHotWords.value = ((_a = res == null ? void 0 : res.data) == null ? void 0 : _a.length) ? res.data : false ? MOCK_HOT_WORDS : [];
16685
16802
  } catch (error) {
16686
16803
  searchHotWords.value = [];
16687
16804
  }
@@ -16760,9 +16877,8 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16760
16877
  withDirectives(createElementVNode("div", _hoisted_5$8, [
16761
16878
  createVNode(unref(SearchScopeList), {
16762
16879
  searchScopeList: searchScopeList.value,
16763
- searchStr: keyword.value,
16764
16880
  onScopeSearch
16765
- }, null, 8, ["searchScopeList", "searchStr"]),
16881
+ }, null, 8, ["searchScopeList"]),
16766
16882
  derivedSearchInfo.value.searchScope === "repo" ? (openBlock(), createBlock(unref(ProjectSearch), {
16767
16883
  key: 0,
16768
16884
  searchStr: keyword.value,
@@ -16785,7 +16901,7 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16785
16901
  [vShow, searchStr.value]
16786
16902
  ]),
16787
16903
  withDirectives(createVNode(unref(SearchHistoryList), {
16788
- searchHistoryList: searchHistoryList.value,
16904
+ searchHistoryList: displayHistoryList.value,
16789
16905
  visitHistoryList: visitHistoryList.value,
16790
16906
  activeIndex: activeIndex.value,
16791
16907
  onClearHistoryData: clearHistoryData,
@@ -16834,7 +16950,8 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16834
16950
  ]),
16835
16951
  showRecommendSearch.value && searchHotWords.value.length ? (openBlock(), createElementBlock("div", {
16836
16952
  key: 0,
16837
- class: normalizeClass(["g-header-search-recommend-placeholder z-[-1] absolute top-0 left-[44px] w-full h-full leading-[100%] text-[var(--theme-placeholder)]", { default: !isFocus.value, focus: isFocus.value }])
16953
+ class: normalizeClass(["g-header-search-recommend-placeholder", { default: !isFocus.value, focus: isFocus.value, "recommend-hidden": !recommendHasRoom.value }]),
16954
+ style: normalizeStyle(recommendOffset.value ? { left: `calc(44px + ${recommendOffset.value}px)`, width: `${recommendMaxWidth.value}px`, overflow: "hidden" } : void 0)
16838
16955
  }, [
16839
16956
  _cache[8] || (_cache[8] = createElementVNode("div", { class: "absolute top-0 left-0 h-full flex items-center" }, "🔥", -1)),
16840
16957
  (openBlock(true), createElementBlock(Fragment, null, renderList(searchHotWords.value, (item, index2) => {
@@ -16843,7 +16960,7 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
16843
16960
  key: item
16844
16961
  }, toDisplayString$1(item.content), 3);
16845
16962
  }), 128))
16846
- ], 2)) : withDirectives((openBlock(), createElementBlock("span", {
16963
+ ], 6)) : withDirectives((openBlock(), createElementBlock("span", {
16847
16964
  key: 1,
16848
16965
  class: "quick-tips",
16849
16966
  innerHTML: unref(quickTips),
@@ -17033,7 +17150,7 @@ const autoAvokeLogin = ({ isLogin, loginFunc, openHarmonyGuide, loginSuccess, lo
17033
17150
  loginFunc({ type: "login", triggerType: "", loginTriggerSource: "router_login_auth", ...loginFuncOpts }, loginSuccess, openHarmonyGuide);
17034
17151
  }
17035
17152
  };
17036
- const NoticeModal = defineAsyncComponent(() => import("./notice-CQA5vMhT.js"));
17153
+ const NoticeModal = defineAsyncComponent(() => import("./notice-BcZ5aUrG.js"));
17037
17154
  function clearNotice() {
17038
17155
  if (localStorage$2.getItem("validator_email")) {
17039
17156
  localStorage$2.removeItem("validator_email");
@@ -18221,9 +18338,9 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
18221
18338
  const layoutConfig2 = useLayoutConfig();
18222
18339
  const { t: t2 } = i18n.global;
18223
18340
  const route = useRoute();
18224
- const MenuItem = defineAsyncComponent(() => import("./MenuItem-DpsVRNI1.js"));
18225
- const ProjectMenuListV2 = defineAsyncComponent(() => import("./ProjectMenuListV2--kwTN0w7.js"));
18226
- const ProjectMenuList = defineAsyncComponent(() => import("./ProjectMenuList-ydGg0k8T.js"));
18341
+ const MenuItem = defineAsyncComponent(() => import("./MenuItem-C22P316u.js"));
18342
+ const ProjectMenuListV2 = defineAsyncComponent(() => import("./ProjectMenuListV2-nh9tF_Qg.js"));
18343
+ const ProjectMenuList = defineAsyncComponent(() => import("./ProjectMenuList-Bae76G6p.js"));
18227
18344
  const props = __props;
18228
18345
  const useReport2 = inject("useReport");
18229
18346
  const userInfo = inject("userInfo");
@@ -24677,7 +24794,7 @@ const _SlidCaptchaManager = class _SlidCaptchaManager {
24677
24794
  __publicField(_SlidCaptchaManager, "instance");
24678
24795
  let SlidCaptchaManager = _SlidCaptchaManager;
24679
24796
  const slidCaptchaManager = SlidCaptchaManager.getInstance();
24680
- const SlidCaptcha = defineAsyncComponent(() => import("./index-D9y-KLIZ.js"));
24797
+ const SlidCaptcha = defineAsyncComponent(() => import("./index-BWHCgX3Q.js"));
24681
24798
  const useSlidCaptcha = () => {
24682
24799
  const { mount, unMount, isMounted } = usePopup("slid-captcha-popup");
24683
24800
  const open = (config) => {
@@ -24707,7 +24824,7 @@ const useSlidCaptcha = () => {
24707
24824
  close
24708
24825
  };
24709
24826
  };
24710
- const YunpianCaptcha = defineAsyncComponent(() => import("./index-BeIBXUJq.js"));
24827
+ const YunpianCaptcha = defineAsyncComponent(() => import("./index-DX17nYdD.js"));
24711
24828
  const useYunpianCaptcha = () => {
24712
24829
  const { mount, unMount } = usePopup("yunpian-captcha-popup");
24713
24830
  const open = (config) => {