@varlet/ui 3.1.0-alpha.1709717246484 → 3.1.0

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.
@@ -6,7 +6,7 @@ import { computed, defineComponent, ref } from "vue";
6
6
  import { props } from "./props.mjs";
7
7
  import { createNamespace, formatElevation } from "../utils/components.mjs";
8
8
  import { useButtonGroup } from "./provide.mjs";
9
- import { isArray, call } from "@varlet/shared";
9
+ import { call, normalizeToArray } from "@varlet/shared";
10
10
  const { name, n, classes } = createNamespace("button");
11
11
  import { resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, createElementVNode as _createElementVNode, createVNode as _createVNode, normalizeStyle as _normalizeStyle, resolveDirective as _resolveDirective, createElementBlock as _createElementBlock, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from "vue";
12
12
  const _withScopeId = (n2) => (_pushScopeId(""), n2 = n2(), _popScopeId(), n2);
@@ -51,7 +51,7 @@ function __render__(_ctx, _cache) {
51
51
  "var-button-cover": "",
52
52
  color: _ctx.loadingColor,
53
53
  type: _ctx.loadingType,
54
- size: _ctx.loadingSize,
54
+ size: _ctx.loadingSize || _ctx.states.size,
55
55
  radius: _ctx.loadingRadius
56
56
  }, null, 8, ["class", "color", "type", "size", "radius"])) : _createCommentVNode("v-if", true),
57
57
  _createElementVNode(
@@ -88,11 +88,12 @@ const __sfc__ = defineComponent({
88
88
  const { buttonGroup } = useButtonGroup();
89
89
  const { hovering, handleHovering } = useHoverOverlay();
90
90
  const states = computed(() => {
91
+ var _a, _b, _c, _d, _e, _f;
91
92
  if (!buttonGroup) {
92
93
  return {
93
94
  elevation: formatElevation(props2.elevation, 2),
94
- type: props2.type != null ? props2.type : "default",
95
- size: props2.size != null ? props2.size : "normal",
95
+ type: (_a = props2.type) != null ? _a : "default",
96
+ size: (_b = props2.size) != null ? _b : "normal",
96
97
  color: props2.color,
97
98
  text: props2.text,
98
99
  textColor: props2.textColor,
@@ -103,10 +104,10 @@ const __sfc__ = defineComponent({
103
104
  const { type, size, color, textColor, mode } = buttonGroup;
104
105
  return {
105
106
  elevation: "",
106
- type: props2.type != null ? props2.type : type.value,
107
- size: props2.size != null ? props2.size : size.value,
108
- color: props2.color != null ? props2.color : color.value,
109
- textColor: props2.textColor != null ? props2.textColor : textColor.value,
107
+ type: (_c = props2.type) != null ? _c : type.value,
108
+ size: (_d = props2.size) != null ? _d : size.value,
109
+ color: (_e = props2.color) != null ? _e : color.value,
110
+ textColor: (_f = props2.textColor) != null ? _f : textColor.value,
110
111
  text: mode.value === "text" || mode.value === "outline",
111
112
  outline: mode.value === "outline",
112
113
  iconContainer: mode.value === "icon-container"
@@ -115,8 +116,7 @@ const __sfc__ = defineComponent({
115
116
  function attemptAutoLoading(result) {
116
117
  if (props2.autoLoading) {
117
118
  pending.value = true;
118
- result = isArray(result) ? result : [result];
119
- Promise.all(result).then(() => {
119
+ Promise.all(normalizeToArray(result)).then(() => {
120
120
  pending.value = false;
121
121
  }).catch(() => {
122
122
  pending.value = false;
@@ -46,7 +46,9 @@ const props = {
46
46
  },
47
47
  loadingRadius: [Number, String],
48
48
  loadingType: pickProps(loadingProps, "type"),
49
- loadingSize: pickProps(loadingProps, "size"),
49
+ loadingSize: __spreadProps(__spreadValues({}, pickProps(loadingProps, "size")), {
50
+ default: void 0
51
+ }),
50
52
  loadingColor: __spreadProps(__spreadValues({}, pickProps(loadingProps, "color")), {
51
53
  default: "currentColor"
52
54
  }),
@@ -1 +1 @@
1
- :root { --date-picker-border-radius: 4px; --date-picker-font-size: var(--font-size-md); --date-picker-min-width: 290px; --date-picker-main-color: rgba(0, 0, 0, 0.87); --date-picker-title-hint-color: #fff; --date-picker-title-hint-font-size: var(--font-size-md); --date-picker-title-height: 105px; --date-picker-title-padding: 16px; --date-picker-title-background: var(--color-primary); --date-picker-title-color: #fff; --date-picker-title-year-font-size: var(--font-size-md); --date-picker-title-year-font-weight: 500; --date-picker-title-year-margin-bottom: 8px; --date-picker-title-date-height: 48px; --date-picker-title-date-font-size: 34px; --date-picker-title-date-font-weight: 500; --date-picker-title-date-range-font-size: 20px; --date-picker-body-background-color: #fff; --date-picker-body-height: 280px; --date-picker-body-padding: 0; --date-picker-header-padding: 4px 16px; --date-picker-header-color: #555; --date-picker-actions-padding: 0 8px 12px 8px; --date-picker-header-arrow-filter: opacity(0.54); --month-picker-padding: 0 12px; --month-picker-item-width: 33%; --month-picker-item-height: 56px; --month-picker-item-button-max-width: 140px; --year-picker-padding: 0 12px; --year-picker-item-width: 33%; --year-picker-item-height: 56px; --year-picker-item-button-max-width: 140px; --day-picker-content-item-width: 14.28%; --day-picker-content-item-font-size: var(--font-size-sm); --day-picker-content-item-padding: 2px 0; --day-picker-content-item-button-width: 32px; --day-picker-content-item-button-height: 32px; --day-picker-content-item-button-font-size: var(--font-size-sm); --day-picker-head-item-color: rgba(0, 0, 0, 0.38); --day-picker-head-item-padding: 8px 0; --day-picker-head-item-font-weight: 600;}.var-date-picker { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); border-radius: var(--date-picker-border-radius); contain: layout style; display: flex; width: 100%; flex-direction: column; font-size: var(--date-picker-font-size); position: relative; min-width: var(--date-picker-min-width); overflow: hidden;}.var-date-picker ul { list-style: none; margin: 0; padding: 0;}.var-date-picker__title { min-height: var(--date-picker-title-height); padding: var(--date-picker-title-padding); color: var(--date-picker-title-color); background: var(--date-picker-title-background); display: flex; justify-content: space-between; flex-direction: column; flex-wrap: wrap;}.var-date-picker__title-select { display: inline-flex; align-items: center; justify-content: space-between; margin-bottom: var(--date-picker-title-year-margin-bottom);}.var-date-picker__title-hint { color: var(--date-picker-title-hint-color); font-size: var(--date-picker-title-hint-font-size);}.var-date-picker__title-year { cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); font-size: var(--date-picker-title-year-font-size); font-weight: var(--date-picker-title-year-font-weight); transition: 0.3s var(--cubic-bezier); margin-bottom: 0;}.var-date-picker__title-year--active { opacity: 1;}.var-date-picker__title-date { height: var(--date-picker-title-date-height); overflow: hidden; font-size: var(--date-picker-title-date-font-size); text-align: left; font-weight: var(--date-picker-title-date-font-weight); position: relative; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); display: flex; align-items: center; opacity: 0.6; transition: 0.3s var(--cubic-bezier);}.var-date-picker__title-date--active { opacity: 1;}.var-date-picker__title-date--range { font-size: var(--date-picker-title-date-range-font-size);}.var-date-picker__body { position: relative; overflow: auto; height: var(--date-picker-body-height); background-color: var(--date-picker-body-background-color); padding: var(--date-picker-body-padding);}.var-date-picker__body::-webkit-scrollbar { display: none; width: 0; background: transparent;}.var-date-picker__actions { background-color: var(--date-picker-body-background-color); padding: var(--date-picker-actions-padding); display: flex; justify-content: flex-end;}.var-date-picker-header { padding: var(--date-picker-header-padding); align-items: center; display: flex; justify-content: space-between; position: relative; color: var(--date-picker-header-color); background-color: var(--date-picker-body-background-color);}.var-date-picker-header__value { flex: 1; text-align: center; position: relative; overflow: hidden; font-weight: 700; cursor: pointer; user-select: none;}.var-date-picker-header__value div { width: 100%;}.var-date-picker-header__arrow[var-date-picker-header-cover] { filter: var(--date-picker-header-arrow-filter);}.var-date-picker .var-month-picker__content { padding: var(--month-picker-padding);}.var-date-picker .var-month-picker__content ul { display: flex; flex-wrap: wrap; justify-content: space-between;}.var-date-picker .var-month-picker__content ul li { width: var(--month-picker-item-width); display: flex; height: var(--month-picker-item-height); align-items: center; justify-content: center;}.var-date-picker .var-month-picker__button[var-month-picker-cover] { width: 100%; max-width: var(--month-picker-item-button-max-width);}.var-date-picker .var-month-picker__button[var-date-picker-color-cover='true'] { color: var(--date-picker-main-color);}.var-date-picker .var-month-picker__button--disabled { color: var(--color-text-disabled) !important; cursor: not-allowed;}.var-date-picker .var-year-picker { padding: var(--year-picker-padding); display: flex; flex-wrap: wrap; justify-content: space-between;}.var-date-picker .var-year-picker li { width: var(--year-picker-item-width); display: flex; height: var(--year-picker-item-height); align-items: center; justify-content: center;}.var-date-picker .var-year-picker__button[var-year-picker-cover] { width: 100%; max-width: var(--year-picker-item-button-max-width);}.var-date-picker .var-year-picker__button[var-date-picker-color-cover='true'] { color: var(--date-picker-main-color);}.var-date-picker .var-year-picker__button--disabled { color: var(--color-text-disabled) !important; cursor: not-allowed;}.var-date-picker .var-day-picker__content ul { display: flex; flex-wrap: wrap;}.var-date-picker .var-day-picker__content ul li { position: relative; display: flex; justify-content: center; width: var(--day-picker-content-item-width); font-size: var(--day-picker-content-item-font-size); padding: var(--day-picker-content-item-padding);}.var-date-picker .var-day-picker__head li { color: var(--day-picker-head-item-color); padding: var(--day-picker-head-item-padding); font-weight: var(--day-picker-head-item-font-weight);}.var-date-picker .var-day-picker__button[var-day-picker-cover] { width: var(--day-picker-content-item-button-width); height: var(--day-picker-content-item-button-height); font-size: var(--day-picker-content-item-button-font-size);}.var-date-picker .var-day-picker__button:not(.var-day-picker__button--usable) { cursor: unset;}.var-date-picker .var-day-picker__button[var-date-picker-color-cover='true'] { color: var(--date-picker-main-color);}.var-date-picker .var-day-picker__button--disabled { color: var(--color-text-disabled) !important; cursor: not-allowed;}.var-date-picker-translatey-enter-from { opacity: 0; transform: translateY(100%);}.var-date-picker-translatey-enter-active,.var-date-picker-reverse-translatey-enter-active { transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatey-leave-active,.var-date-picker-reverse-translatey-leave-active { position: absolute; transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatey-leave-to { opacity: 0; transform: translateY(-100%);}.var-date-picker-reverse-translatey-enter-from { opacity: 0; transform: translateY(-100%);}.var-date-picker-reverse-translatey-leave-to { opacity: 0; transform: translateY(100%);}.var-date-picker-panel-fade-enter-from,.var-date-picker-panel-fade-leave-to { transition: 0.3s var(--cubic-bezier); opacity: 0;}.var-date-picker-panel-fade-leave-active { position: absolute;}.var-date-picker-translatex-enter-from { opacity: 0; transform: translateX(100%);}.var-date-picker-reverse-translatex-enter-from { opacity: 0; transform: translateX(-100%);}.var-date-picker-translatex-enter-active,.var-date-picker-reverse-translatex-enter-active { transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatex-leave-active,.var-date-picker-reverse-translatex-leave-active { position: absolute; transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatex-leave-to { opacity: 0; transform: translateX(-100%);}.var-date-picker-reverse-translatex-leave-to { opacity: 0; transform: translateX(100%);}
1
+ :root { --date-picker-border-radius: 4px; --date-picker-font-size: var(--font-size-md); --date-picker-min-width: 290px; --date-picker-main-color: rgba(0, 0, 0, 0.87); --date-picker-title-hint-color: #fff; --date-picker-title-hint-font-size: var(--font-size-md); --date-picker-title-height: 105px; --date-picker-title-padding: 16px; --date-picker-title-background: var(--color-primary); --date-picker-title-color: #fff; --date-picker-title-year-font-size: var(--font-size-md); --date-picker-title-year-font-weight: 500; --date-picker-title-year-margin-bottom: 8px; --date-picker-title-date-height: 48px; --date-picker-title-date-font-size: 34px; --date-picker-title-date-font-weight: 500; --date-picker-title-date-range-font-size: 20px; --date-picker-title-date-justify-content: normal; --date-picker-body-background-color: #fff; --date-picker-body-height: 280px; --date-picker-body-padding: 0; --date-picker-header-padding: 4px 16px; --date-picker-header-color: #555; --date-picker-actions-padding: 0 8px 12px 8px; --date-picker-header-arrow-filter: opacity(0.54); --month-picker-padding: 0 12px; --month-picker-item-width: 33%; --month-picker-item-height: 56px; --month-picker-item-button-max-width: 140px; --year-picker-padding: 0 12px; --year-picker-item-width: 33%; --year-picker-item-height: 56px; --year-picker-item-button-max-width: 140px; --day-picker-content-item-width: 14.28%; --day-picker-content-item-font-size: var(--font-size-sm); --day-picker-content-item-padding: 2px 0; --day-picker-content-item-button-width: 32px; --day-picker-content-item-button-height: 32px; --day-picker-content-item-button-font-size: var(--font-size-sm); --day-picker-head-item-color: rgba(0, 0, 0, 0.38); --day-picker-head-item-padding: 8px 0; --day-picker-head-item-font-weight: 600;}.var-date-picker { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); border-radius: var(--date-picker-border-radius); contain: layout style; display: flex; width: 100%; flex-direction: column; font-size: var(--date-picker-font-size); position: relative; min-width: var(--date-picker-min-width); overflow: hidden;}.var-date-picker ul { list-style: none; margin: 0; padding: 0;}.var-date-picker__title { min-height: var(--date-picker-title-height); padding: var(--date-picker-title-padding); color: var(--date-picker-title-color); background: var(--date-picker-title-background); display: flex; justify-content: space-between; flex-direction: column; flex-wrap: wrap;}.var-date-picker__title-select { display: inline-flex; align-items: center; justify-content: space-between; margin-bottom: var(--date-picker-title-year-margin-bottom);}.var-date-picker__title-hint { color: var(--date-picker-title-hint-color); font-size: var(--date-picker-title-hint-font-size);}.var-date-picker__title-year { cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); font-size: var(--date-picker-title-year-font-size); font-weight: var(--date-picker-title-year-font-weight); transition: 0.3s var(--cubic-bezier); margin-bottom: 0;}.var-date-picker__title-year--active { opacity: 1;}.var-date-picker__title-date { height: var(--date-picker-title-date-height); overflow: hidden; font-size: var(--date-picker-title-date-font-size); text-align: left; font-weight: var(--date-picker-title-date-font-weight); position: relative; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); display: flex; align-items: center; justify-content: var(--date-picker-title-date-justify-content); opacity: 0.6; transition: 0.3s var(--cubic-bezier);}.var-date-picker__title-date--active { opacity: 1;}.var-date-picker__title-date--range { font-size: var(--date-picker-title-date-range-font-size);}.var-date-picker__body { position: relative; overflow: auto; height: var(--date-picker-body-height); background-color: var(--date-picker-body-background-color); padding: var(--date-picker-body-padding);}.var-date-picker__body::-webkit-scrollbar { display: none; width: 0; background: transparent;}.var-date-picker__actions { background-color: var(--date-picker-body-background-color); padding: var(--date-picker-actions-padding); display: flex; justify-content: flex-end;}.var-date-picker-header { padding: var(--date-picker-header-padding); align-items: center; display: flex; justify-content: space-between; position: relative; color: var(--date-picker-header-color); background-color: var(--date-picker-body-background-color);}.var-date-picker-header__value { flex: 1; text-align: center; position: relative; overflow: hidden; font-weight: 700; cursor: pointer; user-select: none;}.var-date-picker-header__value div { width: 100%;}.var-date-picker-header__arrow[var-date-picker-header-cover] { filter: var(--date-picker-header-arrow-filter);}.var-date-picker .var-month-picker__content { padding: var(--month-picker-padding);}.var-date-picker .var-month-picker__content ul { display: flex; flex-wrap: wrap; justify-content: space-between;}.var-date-picker .var-month-picker__content ul li { width: var(--month-picker-item-width); display: flex; height: var(--month-picker-item-height); align-items: center; justify-content: center;}.var-date-picker .var-month-picker__button[var-month-picker-cover] { width: 100%; max-width: var(--month-picker-item-button-max-width);}.var-date-picker .var-month-picker__button[var-date-picker-color-cover='true'] { color: var(--date-picker-main-color);}.var-date-picker .var-month-picker__button--disabled { color: var(--color-text-disabled) !important; cursor: not-allowed;}.var-date-picker .var-year-picker { padding: var(--year-picker-padding); display: flex; flex-wrap: wrap; justify-content: space-between;}.var-date-picker .var-year-picker li { width: var(--year-picker-item-width); display: flex; height: var(--year-picker-item-height); align-items: center; justify-content: center;}.var-date-picker .var-year-picker__button[var-year-picker-cover] { width: 100%; max-width: var(--year-picker-item-button-max-width);}.var-date-picker .var-year-picker__button[var-date-picker-color-cover='true'] { color: var(--date-picker-main-color);}.var-date-picker .var-year-picker__button--disabled { color: var(--color-text-disabled) !important; cursor: not-allowed;}.var-date-picker .var-day-picker__content ul { display: flex; flex-wrap: wrap;}.var-date-picker .var-day-picker__content ul li { position: relative; display: flex; justify-content: center; width: var(--day-picker-content-item-width); font-size: var(--day-picker-content-item-font-size); padding: var(--day-picker-content-item-padding);}.var-date-picker .var-day-picker__head li { color: var(--day-picker-head-item-color); padding: var(--day-picker-head-item-padding); font-weight: var(--day-picker-head-item-font-weight);}.var-date-picker .var-day-picker__button[var-day-picker-cover] { width: var(--day-picker-content-item-button-width); height: var(--day-picker-content-item-button-height); font-size: var(--day-picker-content-item-button-font-size);}.var-date-picker .var-day-picker__button:not(.var-day-picker__button--usable) { cursor: unset;}.var-date-picker .var-day-picker__button[var-date-picker-color-cover='true'] { color: var(--date-picker-main-color);}.var-date-picker .var-day-picker__button--disabled { color: var(--color-text-disabled) !important; cursor: not-allowed;}.var-date-picker-translatey-enter-from { opacity: 0; transform: translateY(100%);}.var-date-picker-translatey-enter-active,.var-date-picker-reverse-translatey-enter-active { transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatey-leave-active,.var-date-picker-reverse-translatey-leave-active { position: absolute; transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatey-leave-to { opacity: 0; transform: translateY(-100%);}.var-date-picker-reverse-translatey-enter-from { opacity: 0; transform: translateY(-100%);}.var-date-picker-reverse-translatey-leave-to { opacity: 0; transform: translateY(100%);}.var-date-picker-panel-fade-enter-from,.var-date-picker-panel-fade-leave-to { transition: 0.3s var(--cubic-bezier); opacity: 0;}.var-date-picker-panel-fade-leave-active { position: absolute;}.var-date-picker-translatex-enter-from { opacity: 0; transform: translateX(100%);}.var-date-picker-reverse-translatex-enter-from { opacity: 0; transform: translateX(-100%);}.var-date-picker-translatex-enter-active,.var-date-picker-reverse-translatex-enter-active { transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatex-leave-active,.var-date-picker-reverse-translatex-leave-active { position: absolute; transition: 0.3s var(--cubic-bezier);}.var-date-picker-translatex-leave-to { opacity: 0; transform: translateX(-100%);}.var-date-picker-reverse-translatex-leave-to { opacity: 0; transform: translateX(100%);}
@@ -262,7 +262,7 @@ import './tooltip/style/index.mjs'
262
262
  import './uploader/style/index.mjs'
263
263
  import './watermark/style/index.mjs'
264
264
 
265
- const version = '3.1.0-alpha.1709717246484'
265
+ const version = '3.1.0'
266
266
 
267
267
  function install(app) {
268
268
  ActionSheet.install && app.use(ActionSheet)
package/es/index.mjs CHANGED
@@ -174,7 +174,7 @@ export * from './tooltip/index.mjs'
174
174
  export * from './uploader/index.mjs'
175
175
  export * from './watermark/index.mjs'
176
176
 
177
- const version = '3.1.0-alpha.1709717246484'
177
+ const version = '3.1.0'
178
178
 
179
179
  function install(app) {
180
180
  ActionSheet.install && app.use(ActionSheet)
@@ -65,6 +65,7 @@ const props = __spreadValues({
65
65
  "show",
66
66
  "onUpdate:show",
67
67
  "closeOnClickOverlay",
68
+ "closeOnKeyEscape",
68
69
  "teleport",
69
70
  "safeArea",
70
71
  "onOpen",
@@ -73,9 +74,7 @@ const props = __spreadValues({
73
74
  "onClosed",
74
75
  "onClickOverlay",
75
76
  "onRouteChange",
76
- // internal for esc
77
- "onKeyEscape",
78
- "closeOnKeyEscape"
77
+ "onKeyEscape"
79
78
  ]));
80
79
  export {
81
80
  props
@@ -20,6 +20,10 @@ const props = {
20
20
  type: Boolean,
21
21
  default: true
22
22
  },
23
+ closeOnKeyEscape: {
24
+ type: Boolean,
25
+ default: true
26
+ },
23
27
  defaultStyle: {
24
28
  type: Boolean,
25
29
  default: true
@@ -34,16 +38,11 @@ const props = {
34
38
  onOpened: defineListenerProp(),
35
39
  onClose: defineListenerProp(),
36
40
  onClosed: defineListenerProp(),
41
+ onKeyEscape: defineListenerProp(),
37
42
  onClickOverlay: defineListenerProp(),
38
43
  "onUpdate:show": defineListenerProp(),
39
44
  // internal for Dialog
40
- onRouteChange: defineListenerProp(),
41
- // internal for esc
42
- onKeyEscape: defineListenerProp(),
43
- closeOnKeyEscape: {
44
- type: Boolean,
45
- default: true
46
- }
45
+ onRouteChange: defineListenerProp()
47
46
  };
48
47
  export {
49
48
  props
@@ -34,10 +34,8 @@ function useSelectController(options) {
34
34
  return (_a = option == null ? void 0 : option.label.value) != null ? _a : "";
35
35
  }
36
36
  function findValueOrLabel({ value, label: label2 }) {
37
- if (value.value != null) {
38
- return value.value;
39
- }
40
- return label2.value;
37
+ var _a;
38
+ return (_a = value.value) != null ? _a : label2.value;
41
39
  }
42
40
  function getSelectedValue(option) {
43
41
  const multiple = multipleGetter();
@@ -1,18 +1,18 @@
1
1
  import VarFormDetails from "../form-details/index.mjs";
2
2
  import VarHoverOverlay, { useHoverOverlay } from "../hover-overlay/index.mjs";
3
3
  import Hover from "../hover/index.mjs";
4
- import { defineComponent, ref, onBeforeUnmount, computed, reactive, nextTick, watch, unref } from "vue";
4
+ import { defineComponent, ref, onBeforeUnmount, computed, reactive, nextTick, watch } from "vue";
5
5
  import { useValidation, createNamespace } from "../utils/components.mjs";
6
6
  import { useForm } from "../form/provide.mjs";
7
7
  import { getLeft, toSizeUnit } from "../utils/elements.mjs";
8
8
  import { warn } from "../utils/logger.mjs";
9
- import { isArray, isNumber, toNumber, getRect, preventDefault, call } from "@varlet/shared";
9
+ import { isArray, isNumber, toNumber, getRect, preventDefault, call, hasOwn } from "@varlet/shared";
10
10
  import { props, Thumbs } from "./props.mjs";
11
- import { onSmartMounted } from "@varlet/use";
11
+ import { onSmartMounted, onWindowResize, useEventListener } from "@varlet/use";
12
12
  const { name, n, classes } = createNamespace("slider");
13
13
  import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, renderSlot as _renderSlot, resolveDirective as _resolveDirective, withDirectives as _withDirectives, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from "vue";
14
14
  const _withScopeId = (n2) => (_pushScopeId(""), n2 = n2(), _popScopeId(), n2);
15
- const _hoisted_1 = ["onTouchstart"];
15
+ const _hoisted_1 = ["tabindex", "onTouchstart", "onFocusin", "onFocusout"];
16
16
  function __render__(_ctx, _cache) {
17
17
  const _component_var_hover_overlay = _resolveComponent("var-hover-overlay");
18
18
  const _component_var_form_details = _resolveComponent("var-form-details");
@@ -73,7 +73,10 @@ function __render__(_ctx, _cache) {
73
73
  class: _normalizeClass(_ctx.n(`${_ctx.direction}-thumb`)),
74
74
  key: item.enumValue,
75
75
  style: _normalizeStyle(_ctx.thumbStyle(item)),
76
- onTouchstart: _withModifiers(($event) => _ctx.start($event, item.enumValue), ["stop"])
76
+ tabindex: _ctx.isDisabled ? void 0 : "0",
77
+ onTouchstart: _withModifiers(($event) => _ctx.start($event, item.enumValue), ["stop"]),
78
+ onFocusin: ($event) => _ctx.handleFocus(item),
79
+ onFocusout: ($event) => _ctx.handleBlur(item)
77
80
  }, [
78
81
  _renderSlot(_ctx.$slots, "button", {
79
82
  currentValue: item.text
@@ -107,8 +110,9 @@ function __render__(_ctx, _cache) {
107
110
  },
108
111
  [
109
112
  _createVNode(_component_var_hover_overlay, {
110
- hovering: item.hovering
111
- }, null, 8, ["hovering"])
113
+ hovering: !_ctx.isDisabled && item.hovering,
114
+ focusing: !_ctx.isDisabled && item.focusing
115
+ }, null, 8, ["hovering", "focusing"])
112
116
  ],
113
117
  6
114
118
  /* CLASS, STYLE */
@@ -175,6 +179,8 @@ const __sfc__ = defineComponent({
175
179
  const isDisabled = computed(() => props2.disabled || (form == null ? void 0 : form.disabled.value));
176
180
  const isReadonly = computed(() => props2.readonly || (form == null ? void 0 : form.readonly.value));
177
181
  const isVertical = computed(() => props2.direction === "vertical");
182
+ const focusingFirst = ref(false);
183
+ const focusingSecond = ref(false);
178
184
  const { bindForm, form } = useForm();
179
185
  const { errorMessage, validateWithTrigger: vt, validate: v, resetValidation } = useValidation();
180
186
  const { hovering: hoveringFirst, handleHovering: handleHoveringFirst } = useHoverOverlay();
@@ -188,15 +194,23 @@ const __sfc__ = defineComponent({
188
194
  value: getValue(modelValue[0]),
189
195
  enumValue: Thumbs.First,
190
196
  text: toPrecision(modelValue[0]),
191
- hovering: unref(hoveringFirst),
192
- handleHovering: handleHoveringFirst
197
+ hovering: hoveringFirst.value,
198
+ focusing: focusingFirst.value,
199
+ handleHovering: handleHoveringFirst,
200
+ handleFocusing(value) {
201
+ focusingFirst.value = value;
202
+ }
193
203
  },
194
204
  {
195
205
  value: getValue(modelValue[1]),
196
206
  enumValue: Thumbs.Second,
197
207
  text: toPrecision(modelValue[1]),
198
- hovering: unref(hoveringSecond),
199
- handleHovering: handleHoveringSecond
208
+ hovering: hoveringSecond.value,
209
+ focusing: focusingSecond.value,
210
+ handleHovering: handleHoveringSecond,
211
+ handleFocusing(value) {
212
+ focusingSecond.value = value;
213
+ }
200
214
  }
201
215
  ];
202
216
  } else if (isNumber(modelValue)) {
@@ -205,8 +219,12 @@ const __sfc__ = defineComponent({
205
219
  value: getValue(modelValue),
206
220
  enumValue: Thumbs.First,
207
221
  text: toPrecision(modelValue),
208
- hovering: unref(hoveringFirst),
209
- handleHovering: handleHoveringFirst
222
+ hovering: hoveringFirst.value,
223
+ focusing: focusingFirst.value,
224
+ handleHovering: handleHoveringFirst,
225
+ handleFocusing(value) {
226
+ focusingFirst.value = value;
227
+ }
210
228
  }
211
229
  ];
212
230
  }
@@ -240,19 +258,24 @@ const __sfc__ = defineComponent({
240
258
  };
241
259
  call(bindForm, sliderProvider);
242
260
  watch([() => props2.modelValue, () => props2.step], ([modelValue, step]) => {
243
- if (!stepValidator() || !valueValidator() || isScroll.value)
261
+ if (!stepValidator() || !valueValidator() || isScroll.value) {
244
262
  return;
263
+ }
245
264
  setProps(modelValue, toNumber(step));
246
265
  });
247
266
  watch(maxDistance, () => setProps());
248
267
  onSmartMounted(() => {
249
- if (!stepValidator() || !valueValidator())
268
+ if (!stepValidator() || !valueValidator()) {
250
269
  return;
251
- maxDistance.value = sliderEl.value[isVertical.value ? "offsetHeight" : "offsetWidth"];
252
- });
253
- onBeforeUnmount(() => {
254
- removeDocumentEvents();
270
+ }
271
+ resizeMaxDistance();
255
272
  });
273
+ onBeforeUnmount(removeDocumentEvents);
274
+ useEventListener(() => window, "keydown", handleKeydown);
275
+ onWindowResize(resizeMaxDistance);
276
+ function resizeMaxDistance() {
277
+ maxDistance.value = sliderEl.value[isVertical.value ? "offsetHeight" : "offsetWidth"];
278
+ }
256
279
  function validate() {
257
280
  return v(props2.rules, props2.modelValue);
258
281
  }
@@ -269,8 +292,9 @@ const __sfc__ = defineComponent({
269
292
  }
270
293
  function getOffset(e) {
271
294
  const currentTarget = e.currentTarget;
272
- if (!currentTarget)
295
+ if (!currentTarget) {
273
296
  return 0;
297
+ }
274
298
  if (!isVertical.value) {
275
299
  return e.clientX - getLeft(currentTarget);
276
300
  }
@@ -284,36 +308,49 @@ const __sfc__ = defineComponent({
284
308
  };
285
309
  }
286
310
  function showLabel(type) {
287
- if (props2.labelVisible === "always")
311
+ if (props2.labelVisible === "always") {
288
312
  return true;
289
- if (props2.labelVisible === "never")
313
+ }
314
+ if (props2.labelVisible === "never") {
290
315
  return false;
316
+ }
291
317
  return thumbsProps[type].active;
292
318
  }
293
319
  function getValue(value) {
294
320
  const { min, max } = props2;
295
- if (value < toNumber(min))
321
+ if (value < toNumber(min)) {
296
322
  return 0;
297
- if (value > toNumber(max))
323
+ }
324
+ if (value > toNumber(max)) {
298
325
  return 100;
326
+ }
299
327
  return (value - toNumber(min)) / scope.value * 100;
300
328
  }
301
329
  function toPrecision(value) {
302
- if (!isNumber(value))
330
+ if (!isNumber(value)) {
303
331
  return 0;
332
+ }
304
333
  let num = value;
305
- if (num < Number(props2.min))
334
+ if (num < Number(props2.min)) {
306
335
  num = Number(props2.min);
307
- if (num > Number(props2.max))
336
+ }
337
+ if (num > Number(props2.max)) {
308
338
  num = Number(props2.max);
339
+ }
309
340
  const isInteger = parseInt(`${num}`, 10) === num;
310
341
  return isInteger ? num : toNumber(num.toPrecision(5));
311
342
  }
312
343
  function hover(value, item) {
313
- if (isDisabled.value)
344
+ if (isDisabled.value) {
314
345
  return;
346
+ }
315
347
  item.handleHovering(value);
316
348
  }
349
+ function emitChange(value) {
350
+ call(props2.onChange, value);
351
+ call(props2["onUpdate:modelValue"], value);
352
+ validateWithTrigger();
353
+ }
317
354
  function setPercent(moveDistance, type) {
318
355
  let rangeValue = [];
319
356
  const { step, range, modelValue, onChange, min } = props2;
@@ -327,14 +364,13 @@ const __sfc__ = defineComponent({
327
364
  }
328
365
  if (prevValue !== curValue) {
329
366
  const value = range ? rangeValue.map((value2) => toPrecision(value2)) : toPrecision(curValue);
330
- call(onChange, value);
331
- call(props2["onUpdate:modelValue"], value);
332
- validateWithTrigger();
367
+ emitChange(value);
333
368
  }
334
369
  }
335
370
  function getType(offset) {
336
- if (!props2.range)
371
+ if (!props2.range) {
337
372
  return Thumbs.First;
373
+ }
338
374
  const thumb1Distance = thumbsProps[Thumbs.First].percentValue * unitWidth.value;
339
375
  const thumb2Distance = thumbsProps[Thumbs.Second].percentValue * unitWidth.value;
340
376
  const offsetToThumb1 = Math.abs(offset - thumb1Distance);
@@ -352,15 +388,15 @@ const __sfc__ = defineComponent({
352
388
  document.removeEventListener("touchcancel", end);
353
389
  }
354
390
  function start(event, type) {
355
- if (!maxDistance.value)
356
- maxDistance.value = sliderEl.value.offsetWidth;
391
+ resizeMaxDistance();
357
392
  if (!isDisabled.value) {
358
393
  thumbsProps[type].active = true;
359
394
  }
360
395
  activeThumb = type;
361
396
  addDocumentEvents();
362
- if (isDisabled.value || isReadonly.value)
397
+ if (isDisabled.value || isReadonly.value) {
363
398
  return;
399
+ }
364
400
  call(props2.onStart);
365
401
  isScroll.value = true;
366
402
  const { clientX, clientY } = event.touches[0];
@@ -368,15 +404,17 @@ const __sfc__ = defineComponent({
368
404
  }
369
405
  function move(event) {
370
406
  preventDefault(event);
371
- if (isDisabled.value || isReadonly.value || !isScroll.value)
407
+ if (isDisabled.value || isReadonly.value || !isScroll.value) {
372
408
  return;
409
+ }
373
410
  const { startPosition, currentOffset } = thumbsProps[activeThumb];
374
411
  const { clientX, clientY } = event.touches[0];
375
412
  let moveDistance = (isVertical.value ? startPosition - clientY : clientX - startPosition) + currentOffset;
376
- if (moveDistance <= 0)
413
+ if (moveDistance <= 0) {
377
414
  moveDistance = 0;
378
- else if (moveDistance >= maxDistance.value)
415
+ } else if (moveDistance >= maxDistance.value) {
379
416
  moveDistance = maxDistance.value;
417
+ }
380
418
  setPercent(moveDistance, activeThumb);
381
419
  }
382
420
  function end() {
@@ -385,8 +423,9 @@ const __sfc__ = defineComponent({
385
423
  if (!isDisabled.value) {
386
424
  thumbsProps[activeThumb].active = false;
387
425
  }
388
- if (isDisabled.value || isReadonly.value)
426
+ if (isDisabled.value || isReadonly.value) {
389
427
  return;
428
+ }
390
429
  let rangeValue = [];
391
430
  thumbsProps[activeThumb].currentOffset = thumbsProps[activeThumb].percentValue * unitWidth.value;
392
431
  const curValue = thumbsProps[activeThumb].percentValue * toNumber(step) + toNumber(min);
@@ -438,10 +477,12 @@ const __sfc__ = defineComponent({
438
477
  function setProps(modelValue = props2.modelValue, step = toNumber(props2.step)) {
439
478
  const getPercent = (value) => {
440
479
  const { min, max } = props2;
441
- if (value < toNumber(min))
480
+ if (value < toNumber(min)) {
442
481
  return 0;
443
- if (value > toNumber(max))
482
+ }
483
+ if (value > toNumber(max)) {
444
484
  return scope.value / step;
485
+ }
445
486
  return (value - toNumber(min)) / step;
446
487
  };
447
488
  if (props2.range && isArray(modelValue)) {
@@ -458,6 +499,46 @@ const __sfc__ = defineComponent({
458
499
  call(props2["onUpdate:modelValue"], resetValue);
459
500
  resetValidation();
460
501
  }
502
+ function moveFocusingThumb(offset, value) {
503
+ const stepValue = Number(props2.step);
504
+ if (isArray(value)) {
505
+ const updatedFirstValue = value[0] + (focusingFirst.value ? offset * stepValue : 0);
506
+ const updatedSecondValue = value[1] + (focusingSecond.value ? offset * stepValue : 0);
507
+ return [updatedFirstValue, updatedSecondValue].map(toPrecision);
508
+ }
509
+ return toPrecision(value + offset * stepValue);
510
+ }
511
+ function handleKeydown(event) {
512
+ const keyToOffset = {
513
+ ArrowRight: 1,
514
+ ArrowUp: 1,
515
+ ArrowLeft: -1,
516
+ ArrowDown: -1
517
+ };
518
+ const { key } = event;
519
+ if (!hasOwn(keyToOffset, key) || isReadonly.value || isDisabled.value) {
520
+ return;
521
+ }
522
+ if (props2.range && !focusingFirst.value && !focusingSecond.value) {
523
+ return;
524
+ }
525
+ if (!props2.range && !focusingFirst.value) {
526
+ return;
527
+ }
528
+ preventDefault(event);
529
+ const offset = keyToOffset[key];
530
+ const value = moveFocusingThumb(offset, props2.modelValue);
531
+ emitChange(value);
532
+ }
533
+ function handleFocus(item) {
534
+ if (isDisabled.value) {
535
+ return;
536
+ }
537
+ item.handleFocusing(true);
538
+ }
539
+ function handleBlur(item) {
540
+ item.handleFocusing(false);
541
+ }
461
542
  return {
462
543
  Thumbs,
463
544
  sliderEl,
@@ -467,6 +548,8 @@ const __sfc__ = defineComponent({
467
548
  errorMessage,
468
549
  thumbsProps,
469
550
  thumbList,
551
+ handleFocus,
552
+ handleBlur,
470
553
  n,
471
554
  classes,
472
555
  thumbStyle,
@@ -1,7 +1,7 @@
1
1
  import '../../styles/common.css'
2
+ import '../SnackbarSfc.css'
2
3
  import '../../styles/elevation.css'
3
4
  import '../../loading/loading.css'
4
5
  import '../../icon/icon.css'
5
6
  import '../snackbar.css'
6
7
  import '../coreSfc.css'
7
- import '../SnackbarSfc.css'