@touchvue/ui 1.0.0-beta.50 → 1.0.0-beta.52

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 (136) hide show
  1. package/es/components/form/src/form.vue.d.ts +0 -3
  2. package/es/components/index.d.ts +3 -1
  3. package/es/components/input/src/input.vue.d.ts +1 -10
  4. package/es/components/rate/index.d.ts +4 -0
  5. package/es/components/rate/src/instance.d.ts +2 -0
  6. package/es/components/rate/src/rate.vue.d.ts +77 -0
  7. package/es/components/select/src/select.d.ts +0 -8
  8. package/es/components/select/src/select.vue.d.ts +0 -9
  9. package/es/components/switch/src/switch.vue.d.ts +3 -3
  10. package/es/components/tab/src/tab.d.ts +1 -1
  11. package/es/components/tab/src/tab.vue.d.ts +17 -4
  12. package/es/index.d.mjs +1 -0
  13. package/es/index.d.mjs.map +1 -1
  14. package/es/index.mjs +1 -0
  15. package/es/index.mjs.map +1 -1
  16. package/es/packages/components/cascader/src/cascader.vue2.mjs +1 -1
  17. package/es/packages/components/cascader/src/cascader.vue2.mjs.map +1 -1
  18. package/es/packages/components/checkbox/src/Checkbox.vue2.mjs +1 -1
  19. package/es/packages/components/checkbox/src/Checkbox.vue2.mjs.map +1 -1
  20. package/es/packages/components/checkboxes/src/Checkboxes.vue2.mjs.map +1 -1
  21. package/es/packages/components/datepicker/src/DatePicker.vue2.mjs +2 -3
  22. package/es/packages/components/datepicker/src/DatePicker.vue2.mjs.map +1 -1
  23. package/es/packages/components/daterange/src/date-range.vue2.mjs +18 -6
  24. package/es/packages/components/daterange/src/date-range.vue2.mjs.map +1 -1
  25. package/es/packages/components/form/src/form.vue2.mjs +1 -2
  26. package/es/packages/components/form/src/form.vue2.mjs.map +1 -1
  27. package/es/packages/components/index.d.mjs +1 -0
  28. package/es/packages/components/index.d.mjs.map +1 -1
  29. package/es/packages/components/index.mjs +1 -0
  30. package/es/packages/components/index.mjs.map +1 -1
  31. package/es/packages/components/input/src/input.vue2.mjs +63 -62
  32. package/es/packages/components/input/src/input.vue2.mjs.map +1 -1
  33. package/es/packages/components/page/src/page.vue2.mjs +9 -4
  34. package/es/packages/components/page/src/page.vue2.mjs.map +1 -1
  35. package/es/packages/components/rate/index.d.mjs +2 -0
  36. package/es/packages/components/rate/index.d.mjs.map +1 -0
  37. package/es/packages/components/rate/index.mjs +7 -0
  38. package/es/packages/components/rate/index.mjs.map +1 -0
  39. package/es/packages/components/rate/src/instance.d.mjs +2 -0
  40. package/es/packages/components/rate/src/instance.d.mjs.map +1 -0
  41. package/es/packages/components/rate/src/instance.mjs +2 -0
  42. package/es/packages/components/rate/src/instance.mjs.map +1 -0
  43. package/es/packages/components/rate/src/rate.vue.mjs +7 -0
  44. package/es/packages/components/rate/src/rate.vue.mjs.map +1 -0
  45. package/es/packages/components/rate/src/rate.vue2.mjs +153 -0
  46. package/es/packages/components/rate/src/rate.vue2.mjs.map +1 -0
  47. package/es/packages/components/segment/src/segment.vue.mjs +1 -4
  48. package/es/packages/components/segment/src/segment.vue.mjs.map +1 -1
  49. package/es/packages/components/select/src/hooks/use-select-class-style.mjs +1 -1
  50. package/es/packages/components/select/src/hooks/use-select-class-style.mjs.map +1 -1
  51. package/es/packages/components/select/src/select.mjs +0 -8
  52. package/es/packages/components/select/src/select.mjs.map +1 -1
  53. package/es/packages/components/select/src/select.vue2.mjs +11 -2
  54. package/es/packages/components/select/src/select.vue2.mjs.map +1 -1
  55. package/es/packages/components/switch/src/switch.vue2.mjs +4 -4
  56. package/es/packages/components/switch/src/switch.vue2.mjs.map +1 -1
  57. package/es/packages/components/tab/src/tab.vue2.mjs +378 -47
  58. package/es/packages/components/tab/src/tab.vue2.mjs.map +1 -1
  59. package/es/packages/components/transfer/src/transfer.vue2.mjs.map +1 -1
  60. package/es/packages/components/upload/src/upload.vue2.mjs +2 -2
  61. package/es/packages/components/upload/src/upload.vue2.mjs.map +1 -1
  62. package/es/packages/utils/disabledArea.mjs +2 -2
  63. package/es/packages/utils/disabledArea.mjs.map +1 -1
  64. package/es/packages/utils/validate.mjs +18 -11
  65. package/es/packages/utils/validate.mjs.map +1 -1
  66. package/global.d.ts +1 -0
  67. package/lib/components/form/src/form.vue.d.ts +0 -3
  68. package/lib/components/index.d.ts +3 -1
  69. package/lib/components/input/src/input.vue.d.ts +1 -10
  70. package/lib/components/rate/index.d.ts +4 -0
  71. package/lib/components/rate/src/instance.d.ts +2 -0
  72. package/lib/components/rate/src/rate.vue.d.ts +77 -0
  73. package/lib/components/select/src/select.d.ts +0 -8
  74. package/lib/components/select/src/select.vue.d.ts +0 -9
  75. package/lib/components/switch/src/switch.vue.d.ts +3 -3
  76. package/lib/components/tab/src/tab.d.ts +1 -1
  77. package/lib/components/tab/src/tab.vue.d.ts +17 -4
  78. package/lib/index.d.js +8 -6
  79. package/lib/index.d.js.map +1 -1
  80. package/lib/index.js +13 -11
  81. package/lib/index.js.map +1 -1
  82. package/lib/packages/components/cascader/src/cascader.vue2.js +1 -1
  83. package/lib/packages/components/cascader/src/cascader.vue2.js.map +1 -1
  84. package/lib/packages/components/checkbox/src/Checkbox.vue2.js +1 -1
  85. package/lib/packages/components/checkbox/src/Checkbox.vue2.js.map +1 -1
  86. package/lib/packages/components/checkboxes/src/Checkboxes.vue2.js.map +1 -1
  87. package/lib/packages/components/datepicker/src/DatePicker.vue2.js +2 -3
  88. package/lib/packages/components/datepicker/src/DatePicker.vue2.js.map +1 -1
  89. package/lib/packages/components/daterange/src/date-range.vue2.js +18 -6
  90. package/lib/packages/components/daterange/src/date-range.vue2.js.map +1 -1
  91. package/lib/packages/components/form/src/form.vue2.js +1 -2
  92. package/lib/packages/components/form/src/form.vue2.js.map +1 -1
  93. package/lib/packages/components/index.d.js +2 -0
  94. package/lib/packages/components/index.d.js.map +1 -1
  95. package/lib/packages/components/index.js +2 -0
  96. package/lib/packages/components/index.js.map +1 -1
  97. package/lib/packages/components/input/src/input.vue2.js +63 -62
  98. package/lib/packages/components/input/src/input.vue2.js.map +1 -1
  99. package/lib/packages/components/page/src/page.vue2.js +9 -4
  100. package/lib/packages/components/page/src/page.vue2.js.map +1 -1
  101. package/lib/packages/components/rate/index.d.js +3 -0
  102. package/lib/packages/components/rate/index.d.js.map +1 -0
  103. package/lib/packages/components/rate/index.js +9 -0
  104. package/lib/packages/components/rate/index.js.map +1 -0
  105. package/lib/packages/components/rate/src/instance.d.js +3 -0
  106. package/lib/packages/components/rate/src/instance.d.js.map +1 -0
  107. package/lib/packages/components/rate/src/instance.js +3 -0
  108. package/lib/packages/components/rate/src/instance.js.map +1 -0
  109. package/lib/packages/components/rate/src/rate.vue.js +11 -0
  110. package/lib/packages/components/rate/src/rate.vue.js.map +1 -0
  111. package/lib/packages/components/rate/src/rate.vue2.js +157 -0
  112. package/lib/packages/components/rate/src/rate.vue2.js.map +1 -0
  113. package/lib/packages/components/segment/src/segment.vue.js +1 -4
  114. package/lib/packages/components/segment/src/segment.vue.js.map +1 -1
  115. package/lib/packages/components/select/src/hooks/use-select-class-style.js +1 -1
  116. package/lib/packages/components/select/src/hooks/use-select-class-style.js.map +1 -1
  117. package/lib/packages/components/select/src/select.js +0 -8
  118. package/lib/packages/components/select/src/select.js.map +1 -1
  119. package/lib/packages/components/select/src/select.vue2.js +11 -2
  120. package/lib/packages/components/select/src/select.vue2.js.map +1 -1
  121. package/lib/packages/components/switch/src/switch.vue2.js +4 -4
  122. package/lib/packages/components/switch/src/switch.vue2.js.map +1 -1
  123. package/lib/packages/components/tab/src/tab.vue2.js +377 -46
  124. package/lib/packages/components/tab/src/tab.vue2.js.map +1 -1
  125. package/lib/packages/components/transfer/src/transfer.vue2.js.map +1 -1
  126. package/lib/packages/components/upload/src/upload.vue2.js +2 -2
  127. package/lib/packages/components/upload/src/upload.vue2.js.map +1 -1
  128. package/lib/packages/utils/disabledArea.js +2 -2
  129. package/lib/packages/utils/disabledArea.js.map +1 -1
  130. package/lib/packages/utils/validate.js +24 -17
  131. package/lib/packages/utils/validate.js.map +1 -1
  132. package/package.json +1 -1
  133. package/theme/components/index.css +326 -122
  134. package/theme/index.css +326 -122
  135. package/theme/skin/default.css +326 -122
  136. package/types/global.d.ts +1 -0
@@ -8,7 +8,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
8
8
  ...__default__,
9
9
  props: {
10
10
  flex: Boolean,
11
- readonly: Boolean,
11
+ disabled: Boolean,
12
12
  modelValue: {
13
13
  type: [Boolean, String, Number],
14
14
  default: false
@@ -73,7 +73,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
73
73
  const props = __props;
74
74
  const emit = __emit;
75
75
  const ivalue = ref(props.modelValue);
76
- const disabled = ref(props.readonly);
76
+ const disabled = ref(props.disabled);
77
77
  watch(
78
78
  () => props.modelValue,
79
79
  (val) => {
@@ -82,13 +82,13 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
82
82
  { immediate: true }
83
83
  );
84
84
  watch(
85
- () => props.readonly,
85
+ () => props.disabled,
86
86
  (val) => {
87
87
  disabled.value = val;
88
88
  }
89
89
  );
90
90
  const setClass = computed(() => {
91
- const arr = ["to-form-readonly"];
91
+ const arr = ["to-disable-target"];
92
92
  if (ivalue.value === props.onValue) {
93
93
  arr.push(`is-on`);
94
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"switch.vue2.mjs","sources":["../../../../../../packages/components/switch/src/switch.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n\tname: 'ToSwitch'\n});\n</script>\n<template>\n\t<div v-dis.opacity=\"disabled\" v-tip=\"changed ? t('to.switch.changed') : ''\" :flex=\"flex ? flex : null\" class=\"to-switch\" :style=\"setStyle\" :class=\"setClass\" @click=\"toggle\">\n\t\t<div class=\"to-switch-on\">\n\t\t\t<div v-if=\"onText\" class=\"to-switch-on-text\">{{ onText }}</div>\n\t\t\t<to-icon v-if=\"onIcon\" class=\"to-switch-on-icon\" :value=\"onIcon\"></to-icon>\n\t\t</div>\n\t\t<div class=\"to-switch-off\">\n\t\t\t<div v-if=\"offText\" class=\"to-switch-off-text\">{{ offText }}</div>\n\t\t\t<to-icon v-if=\"offIcon\" class=\"to-switch-off-icon\" :value=\"offIcon\"></to-icon>\n\t\t</div>\n\t\t<div class=\"to-switch-slider\"></div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { CSSProperties, computed, ref, watch, inject } from 'vue'\nimport { t } from '@touchvue/locale'\n\n\n\nconst ToForm = inject<{ comparable?: boolean }>('ToForm')\n\nconst valueStore = ref([])\n\nconst props = defineProps({\n\tflex: Boolean,\n\treadonly: Boolean,\n\tmodelValue: {\n\t\ttype: [Boolean, String, Number],\n\t\tdefault: false\n\t},\n\tonValue: {\n\t\ttype: [Boolean, String, Number],\n\t\tdefault: true\n\t},\n\toffValue: {\n\t\ttype: [Boolean, String, Number],\n\t\tdefault: false\n\t},\n\tonColor: {\n\t\ttype: String,\n\t\tdefault: 'primary'\n\t},\n\toffColor: {\n\t\ttype: String,\n\t\tdefault: 'info'\n\t},\n\tonText: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\toffText: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\tonIcon: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\toffIcon: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\tcolor: {\n\t\ttype: String,\n\t\tdefault: 'default'\n\t},\n\tmode: {\n\t\ttype: String,\n\t\tdefault: 'default'\n\t},\n\tbeforeChange: {\n\t\ttype: [Function, String, Boolean],\n\t\tdefault: ''\n\t},\n\tcomparable: {\n\t\ttype: Boolean,\n\t\tdefault: false\n\t},\n\twidth: {\n\t\ttype: [String, Number],\n\t\tdefault: ''\n\t}\n})\n\nconst emit = defineEmits(['update:modelValue', 'change'])\n\nconst ivalue = ref(props.modelValue)\nconst disabled = ref(props.readonly)\n\nwatch(\n\t() => props.modelValue,\n\tval => {\n\t\tivalue.value = val\n\t},\n\t{ immediate: true }\n)\n\nwatch(\n\t() => props.readonly,\n\tval => {\n\t\tdisabled.value = val\n\t}\n)\n\nconst setClass = computed(() => {\n\tconst arr = ['to-form-readonly']\n\tif (ivalue.value === props.onValue) {\n\t\tarr.push(`is-on`)\n\t}\n\tif (props.color) {\n\t\tarr.push(`color-${props.color}`)\n\t}\n\tif (props.mode) {\n\t\tarr.push(`mode-${props.mode}`)\n\t}\n\tif (ToForm?.comparable || props.comparable) {\n\t\tarr.push('to-compare')\n\t}\n\tif (changed.value) {\n\t\tarr.push('to-switch-changed')\n\t}\n\treturn arr\n})\n\nconst setStyle = computed(() => {\n\tconst obj: CSSProperties = {}\n\tif (props.width) {\n\t\tobj['--width'] = props.width + 'em'\n\t}\n\treturn obj\n})\n\nconst changed = computed(() => {\n\tif ((props.comparable || ToForm?.comparable) && valueStore.value.length > 0 && ivalue.value !== valueStore.value[0]) {\n\t\treturn true\n\t} else {\n\t\treturn false\n\t}\n})\n\nasync function toggle() {\n\tif (disabled.value) return\n\tlet flag = true\n\tif (typeof props.beforeChange === 'boolean') {\n\t\tflag = props.beforeChange\n\t} else {\n\t\tif (props.beforeChange) {\n\t\t\tif (typeof props.beforeChange === 'function') {\n\t\t\t\tif (typeof props.beforeChange().then === 'function') {\n\t\t\t\t\tflag = await props.beforeChange()\n\t\t\t\t} else {\n\t\t\t\t\tflag = props.beforeChange()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tflag = !!props.beforeChange\n\t\t\t}\n\t\t}\n\t}\n\tif (!flag) return false\n\tivalue.value = ivalue.value === props.onValue ? props.offValue : props.onValue\n\temit('update:modelValue', ivalue.value)\n\temit('change', ivalue.value)\n}\n\nconst compare = () => {\n\tvalueStore.value.unshift(ivalue.value)\n}\n// 撤销\nconst restore = () => {\n\tivalue.value = valueStore.value[0]\n\tvalueStore.value.splice(0, 1)\n}\n\nconst setDisabled = (f: boolean) => {\n\tdisabled.value = f\n}\ndefineExpose({\n\tcompare,\n\trestore,\n\tchanged,\n\tsetDisabled\n})\n</script>\n"],"names":["DO_defineComponent","_createElementBlock","_normalizeClass","_createElementVNode","_createBlock","_unref"],"mappings":"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"}
1
+ {"version":3,"file":"switch.vue2.mjs","sources":["../../../../../../packages/components/switch/src/switch.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n\tname: 'ToSwitch'\n});\n</script>\n<template>\n\t<div v-dis.opacity=\"disabled\" v-tip=\"changed ? t('to.switch.changed') : ''\" :flex=\"flex ? flex : null\" class=\"to-switch\" :style=\"setStyle\" :class=\"setClass\" @click=\"toggle\">\n\t\t<div class=\"to-switch-on\">\n\t\t\t<div v-if=\"onText\" class=\"to-switch-on-text\">{{ onText }}</div>\n\t\t\t<to-icon v-if=\"onIcon\" class=\"to-switch-on-icon\" :value=\"onIcon\"></to-icon>\n\t\t</div>\n\t\t<div class=\"to-switch-off\">\n\t\t\t<div v-if=\"offText\" class=\"to-switch-off-text\">{{ offText }}</div>\n\t\t\t<to-icon v-if=\"offIcon\" class=\"to-switch-off-icon\" :value=\"offIcon\"></to-icon>\n\t\t</div>\n\t\t<div class=\"to-switch-slider\"></div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { CSSProperties, computed, ref, watch, inject } from 'vue'\nimport { t } from '@touchvue/locale'\n\n\n\nconst ToForm = inject<{ comparable?: boolean }>('ToForm')\n\nconst valueStore = ref([])\n\nconst props = defineProps({\n\tflex: Boolean,\n\tdisabled: Boolean,\n\tmodelValue: {\n\t\ttype: [Boolean, String, Number],\n\t\tdefault: false\n\t},\n\tonValue: {\n\t\ttype: [Boolean, String, Number],\n\t\tdefault: true\n\t},\n\toffValue: {\n\t\ttype: [Boolean, String, Number],\n\t\tdefault: false\n\t},\n\tonColor: {\n\t\ttype: String,\n\t\tdefault: 'primary'\n\t},\n\toffColor: {\n\t\ttype: String,\n\t\tdefault: 'info'\n\t},\n\tonText: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\toffText: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\tonIcon: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\toffIcon: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\tcolor: {\n\t\ttype: String,\n\t\tdefault: 'default'\n\t},\n\tmode: {\n\t\ttype: String,\n\t\tdefault: 'default'\n\t},\n\tbeforeChange: {\n\t\ttype: [Function, String, Boolean],\n\t\tdefault: ''\n\t},\n\tcomparable: {\n\t\ttype: Boolean,\n\t\tdefault: false\n\t},\n\twidth: {\n\t\ttype: [String, Number],\n\t\tdefault: ''\n\t}\n})\n\nconst emit = defineEmits(['update:modelValue', 'change'])\n\nconst ivalue = ref(props.modelValue)\nconst disabled = ref(props.disabled)\n\nwatch(\n\t() => props.modelValue,\n\tval => {\n\t\tivalue.value = val\n\t},\n\t{ immediate: true }\n)\n\nwatch(\n\t() => props.disabled,\n\tval => {\n\t\tdisabled.value = val\n\t}\n)\n\nconst setClass = computed(() => {\n\tconst arr = ['to-disable-target']\n\tif (ivalue.value === props.onValue) {\n\t\tarr.push(`is-on`)\n\t}\n\tif (props.color) {\n\t\tarr.push(`color-${props.color}`)\n\t}\n\tif (props.mode) {\n\t\tarr.push(`mode-${props.mode}`)\n\t}\n\tif (ToForm?.comparable || props.comparable) {\n\t\tarr.push('to-compare')\n\t}\n\tif (changed.value) {\n\t\tarr.push('to-switch-changed')\n\t}\n\treturn arr\n})\n\nconst setStyle = computed(() => {\n\tconst obj: CSSProperties = {}\n\tif (props.width) {\n\t\tobj['--width'] = props.width + 'em'\n\t}\n\treturn obj\n})\n\nconst changed = computed(() => {\n\tif ((props.comparable || ToForm?.comparable) && valueStore.value.length > 0 && ivalue.value !== valueStore.value[0]) {\n\t\treturn true\n\t} else {\n\t\treturn false\n\t}\n})\n\nasync function toggle() {\n\tif (disabled.value) return\n\tlet flag = true\n\tif (typeof props.beforeChange === 'boolean') {\n\t\tflag = props.beforeChange\n\t} else {\n\t\tif (props.beforeChange) {\n\t\t\tif (typeof props.beforeChange === 'function') {\n\t\t\t\tif (typeof props.beforeChange().then === 'function') {\n\t\t\t\t\tflag = await props.beforeChange()\n\t\t\t\t} else {\n\t\t\t\t\tflag = props.beforeChange()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tflag = !!props.beforeChange\n\t\t\t}\n\t\t}\n\t}\n\tif (!flag) return false\n\tivalue.value = ivalue.value === props.onValue ? props.offValue : props.onValue\n\temit('update:modelValue', ivalue.value)\n\temit('change', ivalue.value)\n}\n\nconst compare = () => {\n\tvalueStore.value.unshift(ivalue.value)\n}\n// 撤销\nconst restore = () => {\n\tivalue.value = valueStore.value[0]\n\tvalueStore.value.splice(0, 1)\n}\n\nconst setDisabled = (f: boolean) => {\n\tdisabled.value = f\n}\ndefineExpose({\n\tcompare,\n\trestore,\n\tchanged,\n\tsetDisabled\n})\n</script>\n"],"names":["DO_defineComponent","_createElementBlock","_normalizeClass","_createElementVNode","_createBlock","_unref"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { defineComponent, ref, useSlots, watch, onMounted, nextTick, computed, provide, resolveComponent, openBlock, createElementBlock, unref, normalizeClass, normalizeStyle, createElementVNode, renderSlot, createTextVNode, toDisplayString, createCommentVNode, Fragment, renderList, createBlock, createVNode, mergeProps, withModifiers, withCtx } from 'vue';
1
+ import { defineComponent, ref, computed, useSlots, watch, onMounted, onBeforeUnmount, nextTick, provide, resolveComponent, openBlock, createElementBlock, unref, normalizeClass, normalizeStyle, createElementVNode, renderSlot, createTextVNode, toDisplayString, createCommentVNode, Fragment, renderList, createBlock, mergeProps, withModifiers, Teleport, createVNode, withCtx } from 'vue';
2
2
  import { ToIcon } from '../../icon/index.mjs';
3
3
  import { ToFloat } from '../../float/index.mjs';
4
4
  import { langKey } from '../../../locale/index.mjs';
5
+ import { useDevice } from '../../../hooks/useDevice.mjs';
5
6
 
6
7
  const __default__ = defineComponent({
7
8
  name: "ToTab"
@@ -17,7 +18,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
17
18
  removable: { type: Boolean, default: false },
18
19
  position: { default: "" },
19
20
  itemDir: { default: "" },
20
- over: { default: "control" },
21
+ over: { default: "" },
21
22
  event: { default: "click" },
22
23
  contentType: { default: "" },
23
24
  title: { default: "" },
@@ -34,12 +35,31 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
34
35
  const selectValue = ref("");
35
36
  const _data = ref([]);
36
37
  const floatRef = ref(null);
38
+ const overflowFloatRef = ref(null);
39
+ const overflowIconRef = ref(null);
40
+ const overflowTabs = ref([]);
41
+ const overflowFloatShow = computed(() => props.over === "float" && overflowTabs.value.length > 0);
37
42
  const ul = ref(null);
38
43
  const list = ref(null);
44
+ const tabScrollRef = ref(null);
45
+ const tabScrollWidth = ref(0);
46
+ const tabScrollLeft = ref(0);
47
+ const tabScrollable = ref(false);
48
+ const tabScrollDragging = ref(false);
49
+ const activeOver = ref("");
39
50
  let scrollTimer = null;
40
51
  const controlShow = ref(false);
41
52
  let stopChange = false;
53
+ let activeOverVersion = 0;
42
54
  const slot = useSlots();
55
+ const { isPc } = useDevice();
56
+ const tabScrollShow = computed(() => isPc.value && tabScrollable.value);
57
+ const tabScrollStyle = computed(() => {
58
+ return {
59
+ width: `${tabScrollWidth.value}px`,
60
+ left: `${tabScrollLeft.value}px`
61
+ };
62
+ });
43
63
  watch(
44
64
  () => props.modelValue,
45
65
  (val, old) => {
@@ -60,8 +80,26 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
60
80
  },
61
81
  { deep: true }
62
82
  );
83
+ watch(
84
+ () => isPc.value,
85
+ () => {
86
+ updateTabLayout();
87
+ }
88
+ );
89
+ watch(
90
+ () => props.over,
91
+ () => {
92
+ updateTabLayout();
93
+ }
94
+ );
63
95
  onMounted(() => {
64
96
  initData();
97
+ window.addEventListener("resize", updateTabLayout);
98
+ });
99
+ onBeforeUnmount(() => {
100
+ window.removeEventListener("resize", updateTabLayout);
101
+ stopTabScrollDrag();
102
+ scrollStop();
65
103
  });
66
104
  function initData() {
67
105
  if (props.data && props.data.length) {
@@ -82,6 +120,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
82
120
  setLayout();
83
121
  });
84
122
  }
123
+ if (props.over === "float") {
124
+ updateOverflowTabs();
125
+ }
126
+ updateTabScroll();
127
+ updateActiveOver();
85
128
  }
86
129
  const setTabStyle = computed(() => {
87
130
  let obj = {};
@@ -118,12 +161,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
118
161
  if (props.align) {
119
162
  arr.push(`align-${props.align}`);
120
163
  }
121
- return arr;
122
- });
123
- const setUlClass = computed(() => {
124
- let arr = [];
125
- if (props.over) {
126
- arr.push(`over-${props.over}`);
164
+ if (activeOver.value) {
165
+ arr.push(`over-${activeOver.value}`);
127
166
  }
128
167
  return arr;
129
168
  });
@@ -138,8 +177,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
138
177
  }
139
178
  return obj;
140
179
  });
141
- async function changeTab(item, index, event) {
142
- if (props.event !== event)
180
+ async function changeTab(item, index, event, force = false) {
181
+ if (!force && props.event !== event)
143
182
  return false;
144
183
  if (item.disabled)
145
184
  return false;
@@ -166,6 +205,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
166
205
  setTimeout(() => {
167
206
  stopChange = false;
168
207
  }, 10);
208
+ return true;
169
209
  }
170
210
  async function removePTab(item, idx) {
171
211
  let flag = true;
@@ -194,6 +234,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
194
234
  if (props.over === "control") {
195
235
  setLayout();
196
236
  }
237
+ if (props.over === "float") {
238
+ updateOverflowTabs();
239
+ }
240
+ updateTabScroll();
241
+ updateActiveOver();
197
242
  emit("remove", item.value, item, idx);
198
243
  setTimeout(() => {
199
244
  stopChange = false;
@@ -217,6 +262,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
217
262
  setLayout();
218
263
  });
219
264
  }
265
+ if (props.over === "float") {
266
+ updateOverflowTabs();
267
+ }
268
+ updateTabScroll();
269
+ updateActiveOver();
220
270
  }
221
271
  setTimeout(() => {
222
272
  stopChange = false;
@@ -226,6 +276,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
226
276
  let idx = _data.value.findIndex((item) => item.label === oldLabel);
227
277
  if (idx !== -1) {
228
278
  _data.value[idx].label = label;
279
+ updateTabLayout();
229
280
  }
230
281
  }
231
282
  function getPicOn(pic) {
@@ -251,31 +302,208 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
251
302
  function contextmenu(item, idx) {
252
303
  emit("contextmenu", item.value, item, idx);
253
304
  }
305
+ function updateTabLayout() {
306
+ if (props.over === "control") {
307
+ setLayout();
308
+ }
309
+ updateActiveOver();
310
+ updateOverflowTabs();
311
+ updateTabScroll();
312
+ }
313
+ function handleListScroll() {
314
+ setOverflowTabs();
315
+ setTabScroll();
316
+ }
317
+ function updateOverflowTabs() {
318
+ nextTick(() => {
319
+ setOverflowTabs();
320
+ });
321
+ }
322
+ function setOverflowTabs() {
323
+ if (props.over !== "float" || !list.value || !ul.value) {
324
+ overflowTabs.value = [];
325
+ return;
326
+ }
327
+ const listRect = list.value.getBoundingClientRect();
328
+ if (!listRect.width || !listRect.height) {
329
+ overflowTabs.value = [];
330
+ return;
331
+ }
332
+ const hiddenIndexes = /* @__PURE__ */ new Set();
333
+ const itemNodes = Array.from(ul.value.querySelectorAll(".to-tab-item"));
334
+ itemNodes.forEach((node) => {
335
+ const index = Number(node.dataset.tabIndex);
336
+ if (Number.isNaN(index))
337
+ return;
338
+ const rect = node.getBoundingClientRect();
339
+ const isHidden = rect.left < listRect.left - 1 || rect.right > listRect.right + 1 || rect.top < listRect.top - 1 || rect.bottom > listRect.bottom + 1;
340
+ if (isHidden) {
341
+ hiddenIndexes.add(index);
342
+ }
343
+ });
344
+ const oldShow = overflowTabs.value.length > 0;
345
+ overflowTabs.value = _data.value.map((item, index) => ({ item, index })).filter((tab) => hiddenIndexes.has(tab.index));
346
+ if (oldShow !== overflowTabs.value.length > 0) {
347
+ updateOverflowTabs();
348
+ }
349
+ }
350
+ function updateTabScroll() {
351
+ nextTick(() => {
352
+ setTabScroll();
353
+ });
354
+ }
355
+ function setTabScroll() {
356
+ if (!isPc.value || !list.value || !ul.value) {
357
+ tabScrollable.value = false;
358
+ return;
359
+ }
360
+ const listWidth = list.value.clientWidth;
361
+ const scrollWidth = ul.value.scrollWidth;
362
+ const scrollRange = scrollWidth - listWidth;
363
+ if (listWidth <= 0 || scrollRange <= 1) {
364
+ tabScrollable.value = false;
365
+ tabScrollWidth.value = 0;
366
+ tabScrollLeft.value = 0;
367
+ return;
368
+ }
369
+ tabScrollable.value = true;
370
+ tabScrollWidth.value = Math.max(listWidth * listWidth / scrollWidth, 16);
371
+ const trackRange = Math.max(listWidth - tabScrollWidth.value, 0);
372
+ const scrollRatio = list.value.scrollLeft / scrollRange;
373
+ tabScrollLeft.value = list.value.scrollLeft + scrollRatio * trackRange;
374
+ }
375
+ function getTabScrollRange() {
376
+ if (!list.value || !ul.value)
377
+ return 0;
378
+ return Math.max(ul.value.scrollWidth - list.value.clientWidth, 0);
379
+ }
380
+ async function updateActiveOver() {
381
+ const version = ++activeOverVersion;
382
+ const over = props.over;
383
+ if (over !== "avg" && over !== "wrap") {
384
+ activeOver.value = over;
385
+ return;
386
+ }
387
+ activeOver.value = "";
388
+ await nextTick();
389
+ if (version !== activeOverVersion || props.over !== over || !list.value || !ul.value)
390
+ return;
391
+ activeOver.value = getTabScrollRange() > 1 ? over : "";
392
+ await nextTick();
393
+ if (version !== activeOverVersion)
394
+ return;
395
+ setTabScroll();
396
+ }
397
+ function setTabScrollLeft(scrollLeft) {
398
+ if (!list.value)
399
+ return;
400
+ const scrollRange = getTabScrollRange();
401
+ list.value.scrollLeft = Math.max(0, Math.min(scrollRange, scrollLeft));
402
+ setTabScroll();
403
+ setOverflowTabs();
404
+ }
405
+ function startTabScrollDrag(event) {
406
+ if (!tabScrollShow.value || !list.value || !ul.value)
407
+ return;
408
+ event.preventDefault();
409
+ tabScrollDragging.value = true;
410
+ const startX = event.clientX;
411
+ const startScrollLeft = list.value.scrollLeft;
412
+ const listWidth = list.value.clientWidth;
413
+ const scrollRange = getTabScrollRange();
414
+ const trackRange = Math.max(listWidth - tabScrollWidth.value, 1);
415
+ const move = (moveEvent) => {
416
+ moveEvent.preventDefault();
417
+ const nextScrollLeft = startScrollLeft + (moveEvent.clientX - startX) / trackRange * scrollRange;
418
+ setTabScrollLeft(nextScrollLeft);
419
+ };
420
+ const up = () => {
421
+ stopTabScrollDrag();
422
+ };
423
+ window.addEventListener("mousemove", move);
424
+ window.addEventListener("mouseup", up, { once: true });
425
+ tabScrollMove = move;
426
+ tabScrollUp = up;
427
+ }
428
+ let tabScrollMove = null;
429
+ let tabScrollUp = null;
430
+ function stopTabScrollDrag() {
431
+ tabScrollDragging.value = false;
432
+ if (tabScrollMove) {
433
+ window.removeEventListener("mousemove", tabScrollMove);
434
+ tabScrollMove = null;
435
+ }
436
+ if (tabScrollUp) {
437
+ window.removeEventListener("mouseup", tabScrollUp);
438
+ tabScrollUp = null;
439
+ }
440
+ }
441
+ async function toggleOverflowFloat() {
442
+ var _a, _b, _c, _d;
443
+ updateOverflowTabs();
444
+ await nextTick();
445
+ if (overflowTabs.value.length) {
446
+ (_b = (_a = overflowFloatRef.value) == null ? void 0 : _a.toggle) == null ? void 0 : _b.call(_a, overflowIconRef.value);
447
+ } else {
448
+ (_d = (_c = overflowFloatRef.value) == null ? void 0 : _c.close) == null ? void 0 : _d.call(_c);
449
+ }
450
+ }
451
+ async function changeOverflowTab(tab) {
452
+ var _a, _b;
453
+ const changed = await changeTab(tab.item, tab.index, "click", true);
454
+ if (changed !== false) {
455
+ (_b = (_a = overflowFloatRef.value) == null ? void 0 : _a.close) == null ? void 0 : _b.call(_a);
456
+ scrollTabIntoView(tab.index);
457
+ }
458
+ }
459
+ async function removeOverflowTab(tab) {
460
+ var _a, _b;
461
+ await removePTab(tab.item, tab.index);
462
+ updateOverflowTabs();
463
+ await nextTick();
464
+ if (!overflowTabs.value.length) {
465
+ (_b = (_a = overflowFloatRef.value) == null ? void 0 : _a.close) == null ? void 0 : _b.call(_a);
466
+ }
467
+ }
468
+ function scrollTabIntoView(index) {
469
+ nextTick(() => {
470
+ var _a;
471
+ const node = (_a = ul.value) == null ? void 0 : _a.querySelector(`.to-tab-item[data-tab-index="${index}"]`);
472
+ node == null ? void 0 : node.scrollIntoView({ block: "nearest", inline: "nearest" });
473
+ updateOverflowTabs();
474
+ updateTabScroll();
475
+ });
476
+ }
254
477
  function controlLeftScroll() {
255
478
  scrollTimer = setInterval(() => {
256
- ul.value.scrollTo({
257
- left: ul.value.scrollLeft - 3
258
- // behavior: 'smooth' // 平滑滚动效果
259
- });
479
+ var _a;
480
+ setTabScrollLeft((((_a = list.value) == null ? void 0 : _a.scrollLeft) || 0) - 3);
260
481
  }, 1);
261
482
  }
262
483
  function controlRightScroll() {
263
484
  scrollTimer = setInterval(() => {
264
- ul.value.scrollTo({
265
- left: ul.value.scrollLeft + 3
266
- // behavior: 'smooth' // 平滑滚动效果
267
- });
485
+ var _a;
486
+ setTabScrollLeft((((_a = list.value) == null ? void 0 : _a.scrollLeft) || 0) + 3);
268
487
  }, 1);
269
488
  }
270
489
  function scrollStop() {
271
- clearInterval(scrollTimer);
490
+ if (scrollTimer) {
491
+ clearInterval(scrollTimer);
492
+ scrollTimer = null;
493
+ }
272
494
  }
273
495
  function setLayout() {
274
- if (ul.value.clientWidth < ul.value.scrollWidth) {
275
- controlShow.value = true;
276
- } else {
277
- controlShow.value = false;
278
- }
496
+ nextTick(() => {
497
+ if (!list.value || !ul.value) {
498
+ controlShow.value = false;
499
+ return;
500
+ }
501
+ controlShow.value = getTabScrollRange() > 1;
502
+ if (!controlShow.value) {
503
+ list.value.scrollLeft = 0;
504
+ }
505
+ setTabScroll();
506
+ });
279
507
  }
280
508
  provide("TabProvide", {
281
509
  addTab,
@@ -285,6 +513,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
285
513
  });
286
514
  return (_ctx, _cache) => {
287
515
  const _component_to_pic = resolveComponent("to-pic");
516
+ const _component_to_scroll = resolveComponent("to-scroll");
288
517
  return openBlock(), createElementBlock("div", {
289
518
  key: unref(langKey),
290
519
  class: normalizeClass(["to-tab", setClass.value]),
@@ -311,7 +540,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
311
540
  {
312
541
  ref_key: "list",
313
542
  ref: list,
314
- class: "to-tab-list"
543
+ class: "to-tab-list",
544
+ onScroll: handleListScroll
315
545
  },
316
546
  [
317
547
  createElementVNode(
@@ -319,7 +549,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
319
549
  {
320
550
  ref_key: "ul",
321
551
  ref: ul,
322
- class: normalizeClass(["to-tab-wrapper", setUlClass.value])
552
+ class: "to-tab-wrapper"
323
553
  },
324
554
  [
325
555
  (openBlock(true), createElementBlock(
@@ -335,6 +565,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
335
565
  ])) : (openBlock(), createElementBlock("div", {
336
566
  key: 1,
337
567
  class: normalizeClass(["to-tab-item", { "is-on": item.value === selectValue.value, "is-disabled": item.disabled }]),
568
+ "data-tab-index": index,
338
569
  style: normalizeStyle(setTabStyle.value),
339
570
  onClick: ($event) => changeTab(item, index, "click"),
340
571
  onMouseover: ($event) => changeTab(item, index, "hover"),
@@ -352,16 +583,13 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
352
583
  class: "to-tab-item-pic",
353
584
  src: item.value === selectValue.value ? getPicOn(item.pic) : item.pic
354
585
  }, null, 8, ["src"])) : createCommentVNode("v-if", true),
355
- item.icon ? (openBlock(), createElementBlock("span", {
586
+ item.icon ? (openBlock(), createBlock(unref(ToIcon), {
356
587
  key: 1,
357
- class: "to-tab-item-icon"
358
- }, [
359
- createVNode(unref(ToIcon), {
360
- value: item.icon,
361
- type: item.value === selectValue.value ? "fill" : "",
362
- mode: "tab-icon"
363
- }, null, 8, ["value", "type"])
364
- ])) : createCommentVNode("v-if", true),
588
+ value: item.icon,
589
+ class: "to-tab-item-icon",
590
+ type: item.value === selectValue.value ? "fill" : "",
591
+ mode: "tab-icon"
592
+ }, null, 8, ["value", "type"])) : createCommentVNode("v-if", true),
365
593
  createElementVNode("div", { class: "to-tab-item-label" }, [
366
594
  renderSlot(_ctx.$slots, "label", mergeProps({ ref_for: true }, item), () => [
367
595
  createTextVNode(
@@ -383,7 +611,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
383
611
  ]),
384
612
  createElementVNode("div", { class: "to-tab-indicator" })
385
613
  ])
386
- ], 46, ["onClick", "onMouseover", "onContextmenu"]))
614
+ ], 46, ["data-tab-index", "onClick", "onMouseover", "onContextmenu"]))
387
615
  ],
388
616
  64
389
617
  /* STABLE_FRAGMENT */
@@ -393,14 +621,30 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
393
621
  /* KEYED_FRAGMENT */
394
622
  ))
395
623
  ],
396
- 2
397
- /* CLASS */
398
- )
624
+ 512
625
+ /* NEED_PATCH */
626
+ ),
627
+ tabScrollShow.value ? (openBlock(), createElementBlock(
628
+ "div",
629
+ {
630
+ key: 0,
631
+ ref_key: "tabScrollRef",
632
+ ref: tabScrollRef,
633
+ class: normalizeClass(["to-tab-list-scroll", { "is-dragging": tabScrollDragging.value }]),
634
+ style: normalizeStyle(tabScrollStyle.value),
635
+ onMousedown: startTabScrollDrag
636
+ },
637
+ [
638
+ createElementVNode("div", { class: "to-tab-list-scroll-bar" })
639
+ ],
640
+ 38
641
+ /* CLASS, STYLE, NEED_HYDRATION */
642
+ )) : createCommentVNode("v-if", true)
399
643
  ],
400
- 512
401
- /* NEED_PATCH */
644
+ 544
645
+ /* NEED_HYDRATION, NEED_PATCH */
402
646
  ),
403
- controlShow.value || _ctx.over === "float" || unref(slot).fn ? (openBlock(), createElementBlock("div", {
647
+ controlShow.value || overflowFloatShow.value || unref(slot).fn ? (openBlock(), createElementBlock("div", {
404
648
  key: 1,
405
649
  class: "to-tab-fn"
406
650
  }, [
@@ -423,11 +667,98 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
423
667
  onMouseleave: scrollStop
424
668
  })) : createCommentVNode("v-if", true),
425
669
  renderSlot(_ctx.$slots, "fn"),
426
- _ctx.over === "float" ? (openBlock(), createBlock(unref(ToIcon), {
427
- key: 2,
428
- value: "menu",
429
- link: ""
430
- })) : createCommentVNode("v-if", true)
670
+ overflowFloatShow.value ? (openBlock(), createBlock(
671
+ unref(ToIcon),
672
+ {
673
+ key: 2,
674
+ ref_key: "overflowIconRef",
675
+ ref: overflowIconRef,
676
+ value: "more",
677
+ link: "",
678
+ onClick: toggleOverflowFloat
679
+ },
680
+ null,
681
+ 512
682
+ /* NEED_PATCH */
683
+ )) : createCommentVNode("v-if", true),
684
+ overflowFloatShow.value ? (openBlock(), createBlock(Teleport, {
685
+ key: 3,
686
+ to: "body"
687
+ }, [
688
+ createElementVNode("div", { class: "to-tab" }, [
689
+ createVNode(
690
+ unref(ToFloat),
691
+ {
692
+ ref_key: "overflowFloatRef",
693
+ ref: overflowFloatRef,
694
+ align: "right",
695
+ global: false,
696
+ class: "to-tab-over-float",
697
+ lazy: false,
698
+ width: "12"
699
+ },
700
+ {
701
+ default: withCtx(() => [
702
+ createVNode(_component_to_scroll, { class: "to-tab-over-scroll" }, {
703
+ default: withCtx(() => [
704
+ createElementVNode("div", { class: "to-tab-over-list" }, [
705
+ (openBlock(true), createElementBlock(
706
+ Fragment,
707
+ null,
708
+ renderList(overflowTabs.value, (tab) => {
709
+ return openBlock(), createElementBlock("div", {
710
+ key: tab.index,
711
+ class: normalizeClass(["to-tab-over-item", { "is-on": tab.item.value === selectValue.value, "is-disabled": tab.item.disabled }]),
712
+ onClick: ($event) => changeOverflowTab(tab),
713
+ onContextmenu: ($event) => contextmenu(tab.item, tab.index)
714
+ }, [
715
+ tab.item.pic ? (openBlock(), createBlock(_component_to_pic, {
716
+ key: 0,
717
+ class: "to-tab-over-item-pic",
718
+ src: tab.item.value === selectValue.value ? getPicOn(tab.item.pic) : tab.item.pic
719
+ }, null, 8, ["src"])) : createCommentVNode("v-if", true),
720
+ tab.item.icon ? (openBlock(), createBlock(unref(ToIcon), {
721
+ key: 1,
722
+ value: tab.item.icon,
723
+ class: "to-tab-over-item-icon",
724
+ type: tab.item.value === selectValue.value ? "fill" : "",
725
+ mode: "tab-icon"
726
+ }, null, 8, ["value", "type"])) : createCommentVNode("v-if", true),
727
+ createElementVNode("div", { class: "to-tab-over-item-label" }, [
728
+ renderSlot(_ctx.$slots, "label", mergeProps({ ref_for: true }, tab.item), () => [
729
+ createTextVNode(
730
+ toDisplayString(tab.item.label),
731
+ 1
732
+ /* TEXT */
733
+ )
734
+ ])
735
+ ]),
736
+ _ctx.removable ? (openBlock(), createBlock(unref(ToIcon), {
737
+ key: 2,
738
+ value: "close",
739
+ link: "",
740
+ class: "to-tab-over-item-remove",
741
+ onClick: withModifiers(($event) => removeOverflowTab(tab), ["stop"])
742
+ }, null, 8, ["onClick"])) : createCommentVNode("v-if", true)
743
+ ], 42, ["onClick", "onContextmenu"]);
744
+ }),
745
+ 128
746
+ /* KEYED_FRAGMENT */
747
+ ))
748
+ ])
749
+ ]),
750
+ _: 3
751
+ /* FORWARDED */
752
+ })
753
+ ]),
754
+ _: 3
755
+ /* FORWARDED */
756
+ },
757
+ 512
758
+ /* NEED_PATCH */
759
+ )
760
+ ])
761
+ ])) : createCommentVNode("v-if", true)
431
762
  ])) : createCommentVNode("v-if", true),
432
763
  createElementVNode("div", { class: "to-tab-divider" })
433
764
  ]),