persagy-vant 0.0.44 → 0.0.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/es/blue-mark/BlueMarkHeader.d.ts +3 -12
  2. package/es/blue-mark/BlueMarkHeader.mjs +2 -2
  3. package/es/blue-mark/index.d.ts +2 -8
  4. package/es/cell/index.css +1 -1
  5. package/es/cell/index.less +8 -0
  6. package/es/index.d.ts +1 -1
  7. package/es/index.mjs +1 -1
  8. package/es/location-select/LocationSelect.d.ts +19 -1
  9. package/es/location-select/LocationSelect.mjs +123 -19
  10. package/es/location-select/index.css +1 -1
  11. package/es/location-select/index.d.ts +14 -1
  12. package/es/location-select/index.less +1 -0
  13. package/es/location-select/style/index.mjs +1 -0
  14. package/es/location-select/style/less.mjs +1 -0
  15. package/es/location-select/types.d.ts +2 -0
  16. package/es/location-select/types.mjs +0 -0
  17. package/es/material-add/MaterialAdd.d.ts +19 -2
  18. package/es/material-add/MaterialAdd.mjs +99 -8
  19. package/es/material-add/index.css +1 -1
  20. package/es/material-add/index.d.ts +14 -2
  21. package/es/material-add/index.less +1 -1
  22. package/es/material-add/style/index.mjs +1 -0
  23. package/es/material-add/style/less.mjs +1 -0
  24. package/es/material-add/types.d.ts +7 -6
  25. package/es/object-select/ObjectSelect.d.ts +19 -2
  26. package/es/object-select/ObjectSelect.mjs +142 -21
  27. package/es/object-select/index.css +1 -1
  28. package/es/object-select/index.d.ts +14 -2
  29. package/es/object-select/index.less +1 -0
  30. package/es/object-select/style/index.mjs +1 -0
  31. package/es/object-select/style/less.mjs +1 -0
  32. package/es/object-select/types.d.ts +1 -0
  33. package/es/video-preview/VideoPreview.mjs +30 -15
  34. package/es/video-preview/index.css +1 -1
  35. package/es/video-preview/index.less +21 -0
  36. package/lib/blue-mark/BlueMarkHeader.d.ts +3 -12
  37. package/lib/blue-mark/BlueMarkHeader.js +1 -1
  38. package/lib/blue-mark/index.d.ts +2 -8
  39. package/lib/cell/index.css +1 -1
  40. package/lib/cell/index.less +8 -0
  41. package/lib/index.css +1 -1
  42. package/lib/index.d.ts +1 -1
  43. package/lib/index.js +1 -1
  44. package/lib/index.less +2 -2
  45. package/lib/location-select/LocationSelect.d.ts +19 -1
  46. package/lib/location-select/LocationSelect.js +121 -17
  47. package/lib/location-select/index.css +1 -1
  48. package/lib/location-select/index.d.ts +14 -1
  49. package/lib/location-select/index.less +1 -0
  50. package/lib/location-select/style/index.js +1 -0
  51. package/lib/location-select/style/less.js +1 -0
  52. package/lib/location-select/types.d.ts +2 -0
  53. package/lib/location-select/types.js +15 -0
  54. package/lib/material-add/MaterialAdd.d.ts +19 -2
  55. package/lib/material-add/MaterialAdd.js +97 -6
  56. package/lib/material-add/index.css +1 -1
  57. package/lib/material-add/index.d.ts +14 -2
  58. package/lib/material-add/index.less +1 -1
  59. package/lib/material-add/style/index.js +1 -0
  60. package/lib/material-add/style/less.js +1 -0
  61. package/lib/material-add/types.d.ts +7 -6
  62. package/lib/object-select/ObjectSelect.d.ts +19 -2
  63. package/lib/object-select/ObjectSelect.js +140 -19
  64. package/lib/object-select/index.css +1 -1
  65. package/lib/object-select/index.d.ts +14 -2
  66. package/lib/object-select/index.less +1 -0
  67. package/lib/object-select/style/index.js +1 -0
  68. package/lib/object-select/style/less.js +1 -0
  69. package/lib/object-select/types.d.ts +1 -0
  70. package/lib/vant.cjs.js +386 -61
  71. package/lib/vant.es.js +386 -61
  72. package/lib/vant.js +386 -61
  73. package/lib/vant.min.js +1 -1
  74. package/lib/video-preview/VideoPreview.js +30 -15
  75. package/lib/video-preview/index.css +1 -1
  76. package/lib/video-preview/index.less +21 -0
  77. package/lib/web-types.json +1 -1
  78. package/package.json +1 -1
  79. package/skills/use-persagy-vant/SKILL.md +6 -0
  80. package/skills/use-persagy-vant/references/business-component-catalog.md +6 -3
  81. package/skills/use-persagy-vant/references/component-catalog.md +4 -3
  82. package/skills/use-persagy-vant/references/component-variant-selection.md +9 -4
  83. package/skills/use-persagy-vant/references/design-interaction-baseline.md +1 -1
  84. package/skills/use-persagy-vant/references/dynamic-panel-policy.md +46 -0
  85. package/skills/use-persagy-vant/references/element-component-matching.md +3 -1
  86. package/skills/use-persagy-vant/references/page-recipes.md +3 -3
  87. package/skills/use-persagy-vant/references/reuse-policy.md +5 -1
  88. package/skills/use-persagy-vant/references/usage-patterns.md +2 -2
package/lib/vant.es.js CHANGED
@@ -5549,7 +5549,7 @@ const blueMarkHeaderProps = {
5549
5549
  required: Boolean,
5550
5550
  actionText: String,
5551
5551
  expandable: Boolean,
5552
- showExpandIcon: truthProp,
5552
+ showExpandIcon: Boolean,
5553
5553
  modelValue: Boolean,
5554
5554
  expandText: String,
5555
5555
  collapseText: String
@@ -13032,7 +13032,7 @@ var stdin_default$K = defineComponent({
13032
13032
  }
13033
13033
  });
13034
13034
  const InfoCard = withInstall(stdin_default$K);
13035
- var __async$2 = (__this, __arguments, generator) => {
13035
+ var __async$5 = (__this, __arguments, generator) => {
13036
13036
  return new Promise((resolve, reject) => {
13037
13037
  var fulfilled = (value) => {
13038
13038
  try {
@@ -13136,7 +13136,7 @@ var stdin_default$J = defineComponent({
13136
13136
  emit("update:expandedKeys", next);
13137
13137
  emit("expand", id, expanded);
13138
13138
  };
13139
- const toggleExpanded = (item) => __async$2(this, null, function* () {
13139
+ const toggleExpanded = (item) => __async$5(this, null, function* () {
13140
13140
  const {
13141
13141
  id
13142
13142
  } = item;
@@ -13269,6 +13269,26 @@ var stdin_default$J = defineComponent({
13269
13269
  });
13270
13270
  const TreeSelect = withInstall(stdin_default$J);
13271
13271
  var stdin_default$I = TreeSelect;
13272
+ var __async$4 = (__this, __arguments, generator) => {
13273
+ return new Promise((resolve, reject) => {
13274
+ var fulfilled = (value) => {
13275
+ try {
13276
+ step(generator.next(value));
13277
+ } catch (e) {
13278
+ reject(e);
13279
+ }
13280
+ };
13281
+ var rejected = (value) => {
13282
+ try {
13283
+ step(generator.throw(value));
13284
+ } catch (e) {
13285
+ reject(e);
13286
+ }
13287
+ };
13288
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
13289
+ step((generator = generator.apply(__this, __arguments)).next());
13290
+ });
13291
+ };
13272
13292
  const [name$A, bem$A] = createNamespace("location-select");
13273
13293
  const locations = [[{
13274
13294
  id: "basement",
@@ -13403,12 +13423,14 @@ const props$1 = {
13403
13423
  type: Array,
13404
13424
  default: () => locations
13405
13425
  },
13406
- tabTitles: makeArrayProp()
13426
+ tabTitles: makeArrayProp(),
13427
+ search: Function,
13428
+ searchDebounce: makeNumericProp(300)
13407
13429
  };
13408
13430
  var stdin_default$H = defineComponent({
13409
13431
  name: name$A,
13410
13432
  props: props$1,
13411
- emits: ["update:show", "update:modelValue", "change"],
13433
+ emits: ["update:show", "update:modelValue", "change", "search-error"],
13412
13434
  setup(props2, {
13413
13435
  emit
13414
13436
  }) {
@@ -13418,6 +13440,12 @@ var stdin_default$H = defineComponent({
13418
13440
  const customValue = ref("");
13419
13441
  const expandedKeys = ref(["basement", "b3"]);
13420
13442
  const query = ref("");
13443
+ const asyncSearchResults = ref([]);
13444
+ const searchLoading = ref(false);
13445
+ const searchFailed = ref(false);
13446
+ const searchedItems = shallowReactive(/* @__PURE__ */ new Map());
13447
+ let searchTimer;
13448
+ let searchRequestId = 0;
13421
13449
  const titles = computed(() => props2.tabTitles.length ? props2.tabTitles : ["ABC座地下室", "A座", "B座", "C座", "D座"]);
13422
13450
  const allItems = computed(() => props2.items.flatMap(flatten));
13423
13451
  const currentRoot = computed(() => {
@@ -13428,7 +13456,48 @@ var stdin_default$H = defineComponent({
13428
13456
  var _a;
13429
13457
  return ((_a = currentRoot.value) == null ? void 0 : _a.children) || [];
13430
13458
  });
13431
- const searchResults = computed(() => query.value ? allItems.value.filter((item) => item.text.includes(query.value)) : []);
13459
+ const searchResults = computed(() => {
13460
+ if (!query.value.trim())
13461
+ return [];
13462
+ if (props2.search)
13463
+ return asyncSearchResults.value;
13464
+ return allItems.value.filter((item) => item.text.includes(query.value));
13465
+ });
13466
+ const runSearch = (..._0) => __async$4(this, [..._0], function* (keyword = query.value.trim()) {
13467
+ if (!props2.search || !keyword)
13468
+ return;
13469
+ const requestId = ++searchRequestId;
13470
+ searchLoading.value = true;
13471
+ searchFailed.value = false;
13472
+ try {
13473
+ const results = yield props2.search(keyword);
13474
+ if (requestId !== searchRequestId)
13475
+ return;
13476
+ asyncSearchResults.value = results;
13477
+ results.forEach((item) => searchedItems.set(item.id, item));
13478
+ } catch (error) {
13479
+ if (requestId !== searchRequestId)
13480
+ return;
13481
+ asyncSearchResults.value = [];
13482
+ searchFailed.value = true;
13483
+ emit("search-error", keyword, error);
13484
+ } finally {
13485
+ if (requestId === searchRequestId)
13486
+ searchLoading.value = false;
13487
+ }
13488
+ });
13489
+ const scheduleSearch = () => {
13490
+ if (searchTimer)
13491
+ clearTimeout(searchTimer);
13492
+ searchRequestId += 1;
13493
+ searchLoading.value = false;
13494
+ searchFailed.value = false;
13495
+ asyncSearchResults.value = [];
13496
+ if (props2.search && query.value.trim()) {
13497
+ searchTimer = setTimeout(runSearch, Number(props2.searchDebounce));
13498
+ }
13499
+ };
13500
+ watch([query, () => props2.search], scheduleSearch);
13432
13501
  watch(() => props2.show, (show) => {
13433
13502
  if (show) {
13434
13503
  active.value = 0;
@@ -13436,11 +13505,16 @@ var stdin_default$H = defineComponent({
13436
13505
  expandedKeys.value = ["basement", "b3"];
13437
13506
  }
13438
13507
  });
13508
+ onBeforeUnmount(() => {
13509
+ searchRequestId += 1;
13510
+ if (searchTimer)
13511
+ clearTimeout(searchTimer);
13512
+ });
13439
13513
  const close = () => emit("update:show", false);
13440
13514
  const select = (value) => {
13441
13515
  const selected = value[0];
13442
13516
  if (selected !== void 0) {
13443
- const selectedItem = allItems.value.find((item) => item.id === selected);
13517
+ const selectedItem = allItems.value.find((item) => item.id === selected) || searchedItems.get(selected);
13444
13518
  emit("update:modelValue", selected);
13445
13519
  emit("change", selected, selectedItem == null ? void 0 : selectedItem.text);
13446
13520
  close();
@@ -13455,6 +13529,37 @@ var stdin_default$H = defineComponent({
13455
13529
  showCustom.value = false;
13456
13530
  close();
13457
13531
  };
13532
+ const renderSearchContent = () => {
13533
+ if (searchLoading.value)
13534
+ return createVNode("div", {
13535
+ "class": bem$A("search-state")
13536
+ }, [createVNode(Loading, {
13537
+ "vertical": true
13538
+ }, {
13539
+ default: () => [createTextVNode("加载中...")]
13540
+ })]);
13541
+ if (searchFailed.value)
13542
+ return createVNode(Empty, {
13543
+ "image": "network",
13544
+ "description": "搜索失败,请重试"
13545
+ }, null);
13546
+ if (!searchResults.value.length)
13547
+ return createVNode(Empty, {
13548
+ "description": "暂无搜索结果"
13549
+ }, null);
13550
+ return createVNode("div", {
13551
+ "class": bem$A("card")
13552
+ }, [searchResults.value.map((item, index) => createVNode(Cell, {
13553
+ "key": item.id,
13554
+ "title": item.text,
13555
+ "rightSelect": props2.modelValue === item.id,
13556
+ "selectType": "radio",
13557
+ "border": index < searchResults.value.length - 1,
13558
+ "clickable": true,
13559
+ "onClick": () => select([item.id]),
13560
+ "onUpdate:rightSelect": () => select([item.id])
13561
+ }, null))]);
13562
+ };
13458
13563
  return () => createVNode(ActionSheet, {
13459
13564
  "show": props2.show,
13460
13565
  "class": bem$A(),
@@ -13485,23 +13590,20 @@ var stdin_default$H = defineComponent({
13485
13590
  "modelValue": query.value,
13486
13591
  "onUpdate:modelValue": ($event) => query.value = $event,
13487
13592
  "class": bem$A("search"),
13593
+ "variant": "pure",
13488
13594
  "shape": "round",
13489
13595
  "inputAlign": "left",
13490
- "placeholder": "请输入搜索关键词"
13596
+ "placeholder": "请输入搜索关键词",
13597
+ "onSearch": () => {
13598
+ if (props2.search) {
13599
+ if (searchTimer)
13600
+ clearTimeout(searchTimer);
13601
+ runSearch();
13602
+ }
13603
+ }
13491
13604
  }, null), query.value ? createVNode("div", {
13492
13605
  "class": bem$A("body")
13493
- }, [createVNode("div", {
13494
- "class": bem$A("card")
13495
- }, [searchResults.value.map((item) => createVNode(Cell, {
13496
- "key": item.id,
13497
- "title": item.text,
13498
- "rightSelect": props2.modelValue === item.id,
13499
- "selectType": "radio",
13500
- "border": true,
13501
- "clickable": true,
13502
- "onClick": () => select([item.id]),
13503
- "onUpdate:rightSelect": () => select([item.id])
13504
- }, null))])]) : createVNode(Fragment, null, [createVNode(Tabs, {
13606
+ }, [renderSearchContent()]) : createVNode(Fragment, null, [createVNode(Tabs, {
13505
13607
  "active": active.value,
13506
13608
  "onUpdate:active": ($event) => active.value = $event,
13507
13609
  "showMore": showMore.value,
@@ -14169,6 +14271,26 @@ var stdin_default$D = defineComponent({
14169
14271
  });
14170
14272
  const MaterialDetail = withInstall(stdin_default$D);
14171
14273
  var stdin_default$C = MaterialDetail;
14274
+ var __async$3 = (__this, __arguments, generator) => {
14275
+ return new Promise((resolve, reject) => {
14276
+ var fulfilled = (value) => {
14277
+ try {
14278
+ step(generator.next(value));
14279
+ } catch (e) {
14280
+ reject(e);
14281
+ }
14282
+ };
14283
+ var rejected = (value) => {
14284
+ try {
14285
+ step(generator.throw(value));
14286
+ } catch (e) {
14287
+ reject(e);
14288
+ }
14289
+ };
14290
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
14291
+ step((generator = generator.apply(__this, __arguments)).next());
14292
+ });
14293
+ };
14172
14294
  const [name$w, bem$w] = createNamespace("material-add");
14173
14295
  const defaultItems = [{
14174
14296
  id: "refrigerant",
@@ -14476,12 +14598,14 @@ const materialAddProps = {
14476
14598
  commonTabText: makeStringProp("常用物料"),
14477
14599
  allTabText: makeStringProp("全部物料"),
14478
14600
  materialTabText: makeStringProp("物资"),
14479
- toolTabText: makeStringProp("工具")
14601
+ toolTabText: makeStringProp("工具"),
14602
+ search: Function,
14603
+ searchDebounce: makeNumericProp(300)
14480
14604
  };
14481
14605
  var stdin_default$B = defineComponent({
14482
14606
  name: name$w,
14483
14607
  props: materialAddProps,
14484
- emits: ["update:show", "update:modelValue", "change", "confirm"],
14608
+ emits: ["update:show", "update:modelValue", "change", "confirm", "search-error"],
14485
14609
  setup(props2, {
14486
14610
  emit
14487
14611
  }) {
@@ -14497,6 +14621,10 @@ var stdin_default$B = defineComponent({
14497
14621
  const activeKind = ref(getDefaultKind());
14498
14622
  const keyword = ref("");
14499
14623
  const searching = ref(false);
14624
+ const searchLoading = ref(false);
14625
+ const searchFailed = ref(false);
14626
+ let searchTimer;
14627
+ let searchRequestId = 0;
14500
14628
  const expandedKeys = ref([]);
14501
14629
  const expandedSelected = ref(false);
14502
14630
  const detailItem = ref();
@@ -14568,6 +14696,11 @@ var stdin_default$B = defineComponent({
14568
14696
  activeTab.value = getDefaultTab();
14569
14697
  activeKind.value = getDefaultKind();
14570
14698
  keyword.value = "";
14699
+ searchLoading.value = false;
14700
+ searchFailed.value = false;
14701
+ searchRequestId += 1;
14702
+ if (searchTimer)
14703
+ clearTimeout(searchTimer);
14571
14704
  searching.value = false;
14572
14705
  expandedKeys.value = getDefaultExpandedKeys();
14573
14706
  expandedSelected.value = false;
@@ -14585,6 +14718,40 @@ var stdin_default$B = defineComponent({
14585
14718
  expandedKeys.value = getDefaultExpandedKeys();
14586
14719
  }
14587
14720
  });
14721
+ const runSearch = (..._0) => __async$3(this, [..._0], function* (query = keyword.value.trim()) {
14722
+ if (!props2.search || !query)
14723
+ return;
14724
+ const requestId = ++searchRequestId;
14725
+ searchLoading.value = true;
14726
+ searchFailed.value = false;
14727
+ try {
14728
+ yield props2.search(query);
14729
+ } catch (error) {
14730
+ if (requestId !== searchRequestId)
14731
+ return;
14732
+ searchFailed.value = true;
14733
+ emit("search-error", query, error);
14734
+ } finally {
14735
+ if (requestId === searchRequestId)
14736
+ searchLoading.value = false;
14737
+ }
14738
+ });
14739
+ const scheduleSearch = () => {
14740
+ if (searchTimer)
14741
+ clearTimeout(searchTimer);
14742
+ searchRequestId += 1;
14743
+ searchLoading.value = false;
14744
+ searchFailed.value = false;
14745
+ if (props2.search && keyword.value.trim()) {
14746
+ searchTimer = setTimeout(runSearch, Number(props2.searchDebounce));
14747
+ }
14748
+ };
14749
+ watch([keyword, () => props2.search], scheduleSearch);
14750
+ onBeforeUnmount(() => {
14751
+ searchRequestId += 1;
14752
+ if (searchTimer)
14753
+ clearTimeout(searchTimer);
14754
+ });
14588
14755
  const setActiveTab = (tab) => {
14589
14756
  activeTab.value = tab;
14590
14757
  if (tab === "all") {
@@ -14651,9 +14818,25 @@ var stdin_default$B = defineComponent({
14651
14818
  }, null);
14652
14819
  const renderList = () => createVNode("div", {
14653
14820
  "class": bem$w("material-list")
14654
- }, [visibleItems.value.length ? visibleItems.value.map((item) => renderMaterialCell(item, props2.items.indexOf(item))) : createVNode("div", {
14655
- "class": bem$w("empty")
14656
- }, [createTextVNode("暂无匹配物料")])]);
14821
+ }, [visibleItems.value.length ? visibleItems.value.map((item) => renderMaterialCell(item, props2.items.indexOf(item))) : createVNode(Empty, {
14822
+ "description": "暂无匹配物料"
14823
+ }, null)]);
14824
+ const renderSearchContent = () => {
14825
+ if (searchLoading.value)
14826
+ return createVNode("div", {
14827
+ "class": bem$w("search-state")
14828
+ }, [createVNode(Loading, {
14829
+ "vertical": true
14830
+ }, {
14831
+ default: () => [createTextVNode("加载中...")]
14832
+ })]);
14833
+ if (searchFailed.value)
14834
+ return createVNode(Empty, {
14835
+ "image": "network",
14836
+ "description": "搜索失败,请重试"
14837
+ }, null);
14838
+ return renderList();
14839
+ };
14657
14840
  const renderCatalog = () => {
14658
14841
  const catalogItems = getCatalogItems();
14659
14842
  const defaultExpandedKeys = getDefaultExpandedKeys();
@@ -14710,11 +14893,19 @@ var stdin_default$B = defineComponent({
14710
14893
  "modelValue": keyword.value,
14711
14894
  "onUpdate:modelValue": ($event) => keyword.value = $event,
14712
14895
  "class": bem$w("search"),
14896
+ "variant": "pure",
14713
14897
  "shape": "round",
14714
14898
  "inputAlign": "left",
14715
14899
  "autofocus": true,
14716
14900
  "showAction": true,
14717
14901
  "placeholder": "搜索物资/工具名称",
14902
+ "onSearch": () => {
14903
+ if (props2.search) {
14904
+ if (searchTimer)
14905
+ clearTimeout(searchTimer);
14906
+ runSearch();
14907
+ }
14908
+ },
14718
14909
  "onCancel": () => {
14719
14910
  searching.value = false;
14720
14911
  keyword.value = "";
@@ -14768,7 +14959,7 @@ var stdin_default$B = defineComponent({
14768
14959
  default: () => [props2.toolTabText]
14769
14960
  })])]), createVNode("div", {
14770
14961
  "class": bem$w("body")
14771
- }, [searching.value && !keyword.value.trim() ? null : searching.value || activeTab.value === "common" ? renderList() : renderCatalog()]), createVNode("div", {
14962
+ }, [searching.value && !keyword.value.trim() ? null : searching.value ? renderSearchContent() : activeTab.value === "common" ? renderList() : renderCatalog()]), createVNode("div", {
14772
14963
  "class": bem$w("footer")
14773
14964
  }, [renderSelectPanel(), createVNode(BottomActionBar, {
14774
14965
  "fixed": false,
@@ -15864,6 +16055,26 @@ var stdin_default$u = defineComponent({
15864
16055
  }
15865
16056
  });
15866
16057
  const NumberKeyboard = withInstall(stdin_default$u);
16058
+ var __async$2 = (__this, __arguments, generator) => {
16059
+ return new Promise((resolve, reject) => {
16060
+ var fulfilled = (value) => {
16061
+ try {
16062
+ step(generator.next(value));
16063
+ } catch (e) {
16064
+ reject(e);
16065
+ }
16066
+ };
16067
+ var rejected = (value) => {
16068
+ try {
16069
+ step(generator.throw(value));
16070
+ } catch (e) {
16071
+ reject(e);
16072
+ }
16073
+ };
16074
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
16075
+ step((generator = generator.apply(__this, __arguments)).next());
16076
+ });
16077
+ };
15867
16078
  const [name$o, bem$o] = createNamespace("object-select");
15868
16079
  const spaceItems = [{
15869
16080
  id: "shenzhen-hq",
@@ -16220,13 +16431,15 @@ const objectSelectProps = {
16220
16431
  type: Array,
16221
16432
  default: () => specialties
16222
16433
  },
16223
- loadChildren: Function
16434
+ loadChildren: Function,
16435
+ search: Function,
16436
+ searchDebounce: makeNumericProp(300)
16224
16437
  };
16225
16438
  const flattenItems$1 = (items) => items.flatMap((item) => [item, ...item.children ? flattenItems$1(item.children) : []]);
16226
16439
  var stdin_default$t = defineComponent({
16227
16440
  name: name$o,
16228
16441
  props: objectSelectProps,
16229
- emits: ["update:show", "update:modelValue", "change", "confirm", "load", "load-error"],
16442
+ emits: ["update:show", "update:modelValue", "change", "confirm", "load", "load-error", "search-error"],
16230
16443
  setup(props2, {
16231
16444
  emit
16232
16445
  }) {
@@ -16239,6 +16452,12 @@ var stdin_default$t = defineComponent({
16239
16452
  const expandedSelected = ref(false);
16240
16453
  const searching = ref(false);
16241
16454
  const keyword = ref("");
16455
+ const asyncSearchResults = ref([]);
16456
+ const searchLoading = ref(false);
16457
+ const searchFailed = ref(false);
16458
+ const searchedItems = shallowReactive(/* @__PURE__ */ new Map());
16459
+ let searchTimer;
16460
+ let searchRequestId = 0;
16242
16461
  const loadedChildren = shallowReactive(/* @__PURE__ */ new Map());
16243
16462
  const getChildren = (item) => loadedChildren.get(item.id) || item.children || [];
16244
16463
  const hydrateItems = (items) => items.map((item) => {
@@ -16260,6 +16479,12 @@ var stdin_default$t = defineComponent({
16260
16479
  view.value = 0;
16261
16480
  specialtyType.value = 0;
16262
16481
  keyword.value = "";
16482
+ asyncSearchResults.value = [];
16483
+ searchLoading.value = false;
16484
+ searchFailed.value = false;
16485
+ searchRequestId += 1;
16486
+ if (searchTimer)
16487
+ clearTimeout(searchTimer);
16263
16488
  searching.value = false;
16264
16489
  expandedSelected.value = false;
16265
16490
  expandedSpecialties.value = {
@@ -16272,13 +16497,64 @@ var stdin_default$t = defineComponent({
16272
16497
  });
16273
16498
  const selected = computed(() => props2.modelValue);
16274
16499
  const allItems = computed(() => flattenItems$1(hydrateItems([...props2.spaceItems, ...props2.specialties.flatMap((specialty) => [...specialty.deviceItems, ...specialty.systemItems])])));
16275
- const selectedItems = computed(() => allItems.value.filter((item) => selected.value.includes(item.id)));
16500
+ const selectedItems = computed(() => {
16501
+ const items = /* @__PURE__ */ new Map();
16502
+ allItems.value.forEach((item) => items.set(item.id, item));
16503
+ searchedItems.forEach((item) => items.set(item.id, item));
16504
+ return selected.value.flatMap((id) => {
16505
+ const item = items.get(id);
16506
+ return item ? [item] : [];
16507
+ });
16508
+ });
16276
16509
  const searchResults = computed(() => {
16277
16510
  const query = keyword.value.trim().toLowerCase();
16278
16511
  if (!query)
16279
16512
  return [];
16513
+ if (props2.search)
16514
+ return asyncSearchResults.value;
16280
16515
  return allItems.value.filter((item) => item.text.toLowerCase().includes(query));
16281
16516
  });
16517
+ const runSearch = (..._0) => __async$2(this, [..._0], function* (query = keyword.value.trim()) {
16518
+ if (!props2.search || !query)
16519
+ return;
16520
+ const requestId = ++searchRequestId;
16521
+ searchLoading.value = true;
16522
+ searchFailed.value = false;
16523
+ try {
16524
+ const results = yield props2.search(query);
16525
+ if (requestId !== searchRequestId)
16526
+ return;
16527
+ asyncSearchResults.value = results;
16528
+ results.forEach((item) => searchedItems.set(item.id, item));
16529
+ } catch (error) {
16530
+ if (requestId !== searchRequestId)
16531
+ return;
16532
+ asyncSearchResults.value = [];
16533
+ searchFailed.value = true;
16534
+ emit("search-error", query, error);
16535
+ } finally {
16536
+ if (requestId === searchRequestId)
16537
+ searchLoading.value = false;
16538
+ }
16539
+ });
16540
+ const scheduleSearch = () => {
16541
+ if (searchTimer)
16542
+ clearTimeout(searchTimer);
16543
+ searchRequestId += 1;
16544
+ searchLoading.value = false;
16545
+ searchFailed.value = false;
16546
+ asyncSearchResults.value = [];
16547
+ const query = keyword.value.trim();
16548
+ if (!props2.search || !query)
16549
+ return;
16550
+ searchTimer = setTimeout(runSearch, Number(props2.searchDebounce));
16551
+ };
16552
+ watch([keyword, () => props2.search], scheduleSearch);
16553
+ onBeforeUnmount(() => {
16554
+ searchRequestId += 1;
16555
+ if (searchTimer)
16556
+ clearTimeout(searchTimer);
16557
+ });
16282
16558
  const renderHighlightedText = (text) => {
16283
16559
  const query = keyword.value.trim();
16284
16560
  if (!query)
@@ -16359,6 +16635,45 @@ var stdin_default$t = defineComponent({
16359
16635
  }, null), expanded && renderTree(items)]);
16360
16636
  };
16361
16637
  const close = () => emit("update:show", false);
16638
+ const renderSearchContent = () => {
16639
+ if (!keyword.value.trim())
16640
+ return;
16641
+ if (searchLoading.value) {
16642
+ return createVNode("div", {
16643
+ "class": bem$o("search-state")
16644
+ }, [createVNode(Loading, {
16645
+ "vertical": true
16646
+ }, {
16647
+ default: () => [createTextVNode("加载中...")]
16648
+ })]);
16649
+ }
16650
+ if (searchFailed.value) {
16651
+ return createVNode(Empty, {
16652
+ "image": "network",
16653
+ "description": "搜索失败,请重试"
16654
+ }, null);
16655
+ }
16656
+ if (!searchResults.value.length) {
16657
+ return createVNode(Empty, {
16658
+ "description": "暂无搜索结果"
16659
+ }, null);
16660
+ }
16661
+ return createVNode("div", {
16662
+ "class": bem$o("tree-card", {
16663
+ search: true
16664
+ })
16665
+ }, [searchResults.value.map((item) => createVNode(Cell, {
16666
+ "key": item.id,
16667
+ "rightSelect": selected.value.includes(item.id),
16668
+ "selectType": "checkbox",
16669
+ "border": true,
16670
+ "clickable": true,
16671
+ "onClick": () => toggleSearchItem(item),
16672
+ "onUpdate:rightSelect": () => toggleSearchItem(item)
16673
+ }, {
16674
+ title: () => renderHighlightedText(item.text)
16675
+ }))]);
16676
+ };
16362
16677
  return () => createVNode(ActionSheet, {
16363
16678
  "show": props2.show,
16364
16679
  "class": bem$o(),
@@ -16369,10 +16684,18 @@ var stdin_default$t = defineComponent({
16369
16684
  "modelValue": keyword.value,
16370
16685
  "onUpdate:modelValue": ($event) => keyword.value = $event,
16371
16686
  "class": bem$o("search"),
16687
+ "variant": "pure",
16372
16688
  "shape": "round",
16373
16689
  "inputAlign": "left",
16374
16690
  "autofocus": true,
16375
16691
  "placeholder": "搜索对象",
16692
+ "onSearch": () => {
16693
+ if (props2.search) {
16694
+ if (searchTimer)
16695
+ clearTimeout(searchTimer);
16696
+ runSearch();
16697
+ }
16698
+ },
16376
16699
  "onCancel": () => {
16377
16700
  searching.value = false;
16378
16701
  keyword.value = "";
@@ -16380,7 +16703,8 @@ var stdin_default$t = defineComponent({
16380
16703
  "showAction": true
16381
16704
  }, null) : createVNode(Fragment, null, [createVNode(NavBar, {
16382
16705
  "title": props2.title,
16383
- "class": bem$o("nav")
16706
+ "class": bem$o("nav"),
16707
+ "border": false
16384
16708
  }, {
16385
16709
  left: () => createVNode(Icon, {
16386
16710
  "name": "cross",
@@ -16411,21 +16735,7 @@ var stdin_default$t = defineComponent({
16411
16735
  }, null)]
16412
16736
  })]), createVNode("div", {
16413
16737
  "class": bem$o("body")
16414
- }, [searching.value ? keyword.value && createVNode("div", {
16415
- "class": bem$o("tree-card", {
16416
- search: true
16417
- })
16418
- }, [searchResults.value.map((item) => createVNode(Cell, {
16419
- "key": item.id,
16420
- "rightSelect": selected.value.includes(item.id),
16421
- "selectType": "checkbox",
16422
- "border": true,
16423
- "clickable": true,
16424
- "onClick": () => toggleSearchItem(item),
16425
- "onUpdate:rightSelect": () => toggleSearchItem(item)
16426
- }, {
16427
- title: () => renderHighlightedText(item.text)
16428
- }))]) : view.value === 0 ? renderTree(props2.spaceItems) : createVNode(Fragment, null, [createVNode("div", {
16738
+ }, [searching.value ? renderSearchContent() : view.value === 0 ? renderTree(props2.spaceItems) : createVNode(Fragment, null, [createVNode("div", {
16429
16739
  "class": bem$o("type-tabs")
16430
16740
  }, [createVNode(FilterTag, {
16431
16741
  "selected": specialtyType.value === 0,
@@ -19638,24 +19948,37 @@ var stdin_default$6 = defineComponent({
19638
19948
  setup(props2, {
19639
19949
  emit
19640
19950
  }) {
19641
- const videoRef = ref();
19951
+ const playerHost = ref();
19952
+ let video;
19642
19953
  const mediaEvents = ["play", "pause", "ended", "timeupdate", "error"];
19643
19954
  let player;
19644
19955
  const updateShow = (show) => emit("update:show", show);
19645
19956
  const close = () => updateShow(false);
19646
19957
  const emitMediaEvent = (event) => emit(event.type, event);
19647
19958
  const destroyPlayer = () => {
19648
- const video = videoRef.value;
19959
+ var _a;
19649
19960
  if (video) {
19650
- mediaEvents.forEach((event) => video.removeEventListener(event, emitMediaEvent));
19961
+ mediaEvents.forEach((event) => video == null ? void 0 : video.removeEventListener(event, emitMediaEvent));
19651
19962
  }
19652
19963
  player == null ? void 0 : player.destroy();
19653
19964
  player = void 0;
19965
+ video = void 0;
19966
+ (_a = playerHost.value) == null ? void 0 : _a.replaceChildren();
19654
19967
  };
19655
19968
  const createPlayer = () => {
19656
- const video = videoRef.value;
19657
- if (!video || player)
19969
+ const host = playerHost.value;
19970
+ if (!host || player || !props2.show)
19658
19971
  return;
19972
+ video = document.createElement("video");
19973
+ video.className = `${name$2}__video ${name$2}__video--${props2.fit}`;
19974
+ video.src = props2.src;
19975
+ if (props2.poster)
19976
+ video.poster = props2.poster;
19977
+ video.autoplay = props2.autoplay;
19978
+ video.muted = props2.muted;
19979
+ video.loop = props2.loop;
19980
+ video.playsInline = true;
19981
+ host.replaceChildren(video);
19659
19982
  player = new Plyr(video, {
19660
19983
  controls: props2.controls ? ["play", "progress", "current-time", "mute", "volume", "settings", "fullscreen"] : [],
19661
19984
  settings: ["speed"],
@@ -19669,7 +19992,7 @@ var stdin_default$6 = defineComponent({
19669
19992
  active: props2.loop
19670
19993
  }
19671
19994
  });
19672
- mediaEvents.forEach((event) => video.addEventListener(event, emitMediaEvent));
19995
+ mediaEvents.forEach((event) => video == null ? void 0 : video.addEventListener(event, emitMediaEvent));
19673
19996
  };
19674
19997
  const play = () => player == null ? void 0 : player.play();
19675
19998
  const pause = () => player == null ? void 0 : player.pause();
@@ -19680,6 +20003,12 @@ var stdin_default$6 = defineComponent({
19680
20003
  close,
19681
20004
  toggleFullscreen
19682
20005
  });
20006
+ watch(playerHost, () => {
20007
+ destroyPlayer();
20008
+ createPlayer();
20009
+ }, {
20010
+ flush: "post"
20011
+ });
19683
20012
  watch(() => props2.show, (show) => __async(this, null, function* () {
19684
20013
  if (show) {
19685
20014
  yield nextTick();
@@ -19713,15 +20042,11 @@ var stdin_default$6 = defineComponent({
19713
20042
  default: () => [createVNode("div", {
19714
20043
  "class": bem$2("backdrop"),
19715
20044
  "onClick": close
19716
- }, null), createVNode("video", {
19717
- "ref": videoRef,
19718
- "class": bem$2("video", props2.fit),
19719
- "src": props2.src,
19720
- "poster": props2.poster,
19721
- "autoplay": props2.autoplay,
19722
- "muted": props2.muted,
19723
- "loop": props2.loop,
19724
- "playsinline": true
20045
+ }, null), createVNode("div", {
20046
+ "ref": playerHost,
20047
+ "style": {
20048
+ width: "100%"
20049
+ }
19725
20050
  }, null)]
19726
20051
  });
19727
20052
  }
@@ -21463,7 +21788,7 @@ const Lazyload = {
21463
21788
  });
21464
21789
  }
21465
21790
  };
21466
- const version = "0.0.44";
21791
+ const version = "0.0.46";
21467
21792
  function install(app) {
21468
21793
  const components = [
21469
21794
  ActionBar,