@veltra/desktop 1.1.1 → 1.1.2

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 (176) hide show
  1. package/dist/components/action/action-group.vue.d.ts +3 -3
  2. package/dist/components/action/action.vue.d.ts +2 -2
  3. package/dist/components/auto-complete/auto-complete.js +3 -2
  4. package/dist/components/auto-complete/auto-complete.js.map +1 -1
  5. package/dist/components/auto-complete/style2.css +2 -2
  6. package/dist/components/batch-edit/batch-edit.vue.d.ts +1 -1
  7. package/dist/components/cascade/cascade.js +3 -2
  8. package/dist/components/cascade/cascade.js.map +1 -1
  9. package/dist/components/cascade/cascade.vue.d.ts +1 -1
  10. package/dist/components/cascade/style2.css +1 -1
  11. package/dist/components/checkbox/checkbox-button.js +3 -2
  12. package/dist/components/checkbox/checkbox-button.js.map +1 -1
  13. package/dist/components/checkbox/checkbox-button.vue.d.ts +1 -1
  14. package/dist/components/checkbox/checkbox.js +3 -2
  15. package/dist/components/checkbox/checkbox.js.map +1 -1
  16. package/dist/components/checkbox/style2.css +2 -2
  17. package/dist/components/checkbox-group/checkbox-group.js +3 -2
  18. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  19. package/dist/components/checkbox-group/checkbox-group.vue.d.ts +1 -1
  20. package/dist/components/code-editor/code-editor.js +3 -2
  21. package/dist/components/code-editor/code-editor.js.map +1 -1
  22. package/dist/components/code-editor/style2.css +1 -1
  23. package/dist/components/collapse/collapse-item.js +10 -35
  24. package/dist/components/collapse/collapse-item.js.map +1 -1
  25. package/dist/components/collapse/collapse.js +4 -2
  26. package/dist/components/collapse/collapse.js.map +1 -1
  27. package/dist/components/collapse/di.js +1 -0
  28. package/dist/components/collapse/di.js.map +1 -1
  29. package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
  30. package/dist/components/date-picker/date-picker.js +3 -2
  31. package/dist/components/date-picker/date-picker.js.map +1 -1
  32. package/dist/components/date-picker/date-picker.vue.d.ts +1 -1
  33. package/dist/components/date-range-picker/date-range-picker.js +3 -2
  34. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  35. package/dist/components/date-range-picker/date-range-picker.vue.d.ts +1 -1
  36. package/dist/components/date-range-picker/style2.css +1 -1
  37. package/dist/components/drawer/drawer.vue.d.ts +2 -2
  38. package/dist/components/expression-editor/expression-editor.js +3 -2
  39. package/dist/components/expression-editor/expression-editor.js.map +1 -1
  40. package/dist/components/expression-editor/style2.css +5 -5
  41. package/dist/components/file-viewer/file-viewer.vue.d.ts +1 -1
  42. package/dist/components/form/form.js.map +1 -1
  43. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js +2 -2
  44. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
  45. package/dist/components/form-item/form-item.js.map +1 -1
  46. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js +3 -2
  47. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/components/form-item/style2.css +0 -1
  49. package/dist/components/grid-input/style2.css +3 -3
  50. package/dist/components/group-input/group-input.js +3 -2
  51. package/dist/components/group-input/group-input.js.map +1 -1
  52. package/dist/components/input/input.js.map +1 -1
  53. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js +3 -2
  54. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  55. package/dist/components/input/style2.css +1 -1
  56. package/dist/components/menu/di.js +1 -0
  57. package/dist/components/menu/di.js.map +1 -1
  58. package/dist/components/menu/menu-sub.js +7 -15
  59. package/dist/components/menu/menu-sub.js.map +1 -1
  60. package/dist/components/menu/menu.js +8 -2
  61. package/dist/components/menu/menu.js.map +1 -1
  62. package/dist/components/multi-select/multi-select.js +3 -2
  63. package/dist/components/multi-select/multi-select.js.map +1 -1
  64. package/dist/components/multi-select/multi-select.vue.d.ts +2 -2
  65. package/dist/components/multi-select/style2.css +2 -2
  66. package/dist/components/multi-tree-select/multi-tree-select.js +3 -2
  67. package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
  68. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +2 -2
  69. package/dist/components/multi-tree-select/style2.css +2 -2
  70. package/dist/components/number-input/number-input.js +3 -2
  71. package/dist/components/number-input/number-input.js.map +1 -1
  72. package/dist/components/number-range-input/number-range-input.js +3 -2
  73. package/dist/components/number-range-input/number-range-input.js.map +1 -1
  74. package/dist/components/palette/palette.js +3 -2
  75. package/dist/components/palette/palette.js.map +1 -1
  76. package/dist/components/password-input/password-input.js +4 -3
  77. package/dist/components/password-input/password-input.js.map +1 -1
  78. package/dist/components/pop-confirm/pop-confirm.js +3 -2
  79. package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
  80. package/dist/components/pop-confirm/pop-confirm.vue.d.ts +1 -1
  81. package/dist/components/progress-nodes/progress-nodes.vue.d.ts +2 -2
  82. package/dist/components/radio/radio.js +3 -2
  83. package/dist/components/radio/radio.js.map +1 -1
  84. package/dist/components/radio/style2.css +1 -1
  85. package/dist/components/radio-group/radio-group.js +3 -2
  86. package/dist/components/radio-group/radio-group.js.map +1 -1
  87. package/dist/components/radio-group/radio-group.vue.d.ts +1 -1
  88. package/dist/components/radio-group/style2.css +1 -1
  89. package/dist/components/rich-text-editor/rich-text-editor.js +3 -2
  90. package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
  91. package/dist/components/rich-text-editor/style2.css +5 -5
  92. package/dist/components/select/select.js +4 -3
  93. package/dist/components/select/select.js.map +1 -1
  94. package/dist/components/select/select.vue.d.ts +1 -1
  95. package/dist/components/slider/slider.js +3 -2
  96. package/dist/components/slider/slider.js.map +1 -1
  97. package/dist/components/steps/steps.vue.d.ts +1 -1
  98. package/dist/components/switch/style2.css +1 -1
  99. package/dist/components/switch/switch.js +3 -2
  100. package/dist/components/switch/switch.js.map +1 -1
  101. package/dist/components/table/table.vue.d.ts +2 -2
  102. package/dist/components/tabs/tabs-horizontal.vue.d.ts +4 -4
  103. package/dist/components/tabs/tabs-vertical.vue.d.ts +4 -4
  104. package/dist/components/tabs/tabs.vue.d.ts +4 -4
  105. package/dist/components/tag/tag.js +3 -2
  106. package/dist/components/tag/tag.js.map +1 -1
  107. package/dist/components/textarea/style2.css +1 -1
  108. package/dist/components/textarea/textarea.js +3 -2
  109. package/dist/components/textarea/textarea.js.map +1 -1
  110. package/dist/components/textarea/textarea.vue.d.ts +1 -1
  111. package/dist/components/tip/tip.vue.d.ts +1 -1
  112. package/dist/components/tree/tree.js +3 -2
  113. package/dist/components/tree/tree.js.map +1 -1
  114. package/dist/components/tree-select/tree-select.js +3 -2
  115. package/dist/components/tree-select/tree-select.js.map +1 -1
  116. package/dist/components/tree-select/tree-select.vue.d.ts +2 -2
  117. package/dist/utils/form-context.js +17 -0
  118. package/dist/utils/form-context.js.map +1 -0
  119. package/package.json +11 -11
  120. package/src/components/auto-complete/auto-complete.vue +3 -2
  121. package/src/components/auto-complete/style.scss +2 -2
  122. package/src/components/cascade/cascade.vue +3 -2
  123. package/src/components/cascade/style.scss +1 -1
  124. package/src/components/checkbox/checkbox-button.vue +3 -2
  125. package/src/components/checkbox/checkbox.vue +3 -2
  126. package/src/components/checkbox/style.scss +2 -2
  127. package/src/components/checkbox-group/checkbox-group.vue +3 -2
  128. package/src/components/code-editor/code-editor.vue +3 -2
  129. package/src/components/code-editor/style.scss +1 -1
  130. package/src/components/collapse/collapse-item.vue +11 -49
  131. package/src/components/collapse/collapse.vue +7 -2
  132. package/src/components/collapse/di.ts +2 -1
  133. package/src/components/collapse/style.scss +1 -1
  134. package/src/components/date-picker/date-picker.vue +3 -2
  135. package/src/components/date-range-picker/date-range-picker.vue +3 -2
  136. package/src/components/date-range-picker/style.scss +1 -1
  137. package/src/components/expression-editor/expression-editor.vue +3 -2
  138. package/src/components/expression-editor/style.scss +5 -5
  139. package/src/components/form/form.vue +2 -2
  140. package/src/components/form-item/form-item.vue +3 -2
  141. package/src/components/form-item/style.scss +0 -1
  142. package/src/components/grid-input/style.scss +1 -1
  143. package/src/components/group-input/group-input.vue +3 -2
  144. package/src/components/input/input.vue +3 -2
  145. package/src/components/input/style.scss +1 -1
  146. package/src/components/menu/di.ts +2 -1
  147. package/src/components/menu/menu-sub.vue +6 -9
  148. package/src/components/menu/menu.vue +11 -2
  149. package/src/components/multi-select/multi-select.vue +3 -2
  150. package/src/components/multi-select/style.scss +2 -2
  151. package/src/components/multi-tree-select/multi-tree-select.vue +3 -2
  152. package/src/components/multi-tree-select/style.scss +2 -2
  153. package/src/components/number-input/number-input.vue +3 -2
  154. package/src/components/number-range-input/number-range-input.vue +3 -2
  155. package/src/components/palette/palette.vue +3 -2
  156. package/src/components/password-input/password-input.vue +4 -3
  157. package/src/components/pop-confirm/pop-confirm.vue +3 -2
  158. package/src/components/radio/radio.vue +3 -2
  159. package/src/components/radio/style.scss +1 -1
  160. package/src/components/radio-group/radio-group.vue +3 -2
  161. package/src/components/radio-group/style.scss +1 -1
  162. package/src/components/rich-text-editor/rich-text-editor.vue +3 -2
  163. package/src/components/rich-text-editor/style.scss +5 -5
  164. package/src/components/select/select.vue +4 -3
  165. package/src/components/slider/slider.vue +3 -2
  166. package/src/components/switch/style.scss +1 -1
  167. package/src/components/switch/switch.vue +3 -2
  168. package/src/components/tag/tag.vue +3 -2
  169. package/src/components/textarea/style.scss +1 -1
  170. package/src/components/textarea/textarea.vue +3 -2
  171. package/src/components/tree/tree.vue +3 -2
  172. package/src/components/tree-select/tree-select.vue +3 -2
  173. package/src/utils/form-context.ts +24 -0
  174. package/dist/components/menu/use-menu-transition.js +0 -71
  175. package/dist/components/menu/use-menu-transition.js.map +0 -1
  176. package/src/components/menu/use-menu-transition.ts +0 -69
@@ -24,11 +24,11 @@
24
24
 
25
25
  <!-- @vue-ignore -->
26
26
  <transition
27
- @enter="enter"
28
- @after-enter="afterEnter"
29
- @leave="leave"
30
- @before-leave="beforeLeave"
31
- @after-leave="afterLeave"
27
+ @enter="(el: Element) => expandTransition.enter(el as HTMLElement)"
28
+ @after-enter="(el: Element) => expandTransition.afterEnter(el as HTMLElement)"
29
+ @before-leave="(el: Element) => expandTransition.beforeLeave(el as HTMLElement)"
30
+ @leave="(el: Element) => expandTransition.leave(el as HTMLElement)"
31
+ @after-leave="(el: Element) => expandTransition.afterLeave(el as HTMLElement)"
32
32
  >
33
33
  <ul :class="cls.e('sub-list')" v-show="expanded">
34
34
  <template v-for="(child, index) of menu.children!" :key="getKey(index, parentKey)">
@@ -51,15 +51,12 @@ import { MenuDIKey } from './di'
51
51
  import { getKey } from './helper'
52
52
  import UMenuIcon from './menu-icon.vue'
53
53
  import UMenuItem from './menu-item.vue'
54
- import { useMenuTransition } from './use-menu-transition'
55
54
 
56
55
  defineOptions({ name: 'MenuSub' })
57
56
 
58
57
  const props = defineProps<{ menu: MenuItem; parentKey: string; depth: number }>()
59
58
 
60
- const { cls, expandedPath, menuProps } = inject(MenuDIKey)!
61
-
62
- const { enter, afterEnter, beforeLeave, leave, afterLeave } = useMenuTransition()
59
+ const { cls, expandedPath, menuProps, expandTransition } = inject(MenuDIKey)!
63
60
 
64
61
  const expanded = computed(() => expandedPath.has(props.menu.path))
65
62
 
@@ -34,7 +34,7 @@
34
34
 
35
35
  <script lang="ts" setup>
36
36
  import { useFallbackProps } from '@veltra/compositions'
37
- import { bem } from '@veltra/utils'
37
+ import { bem, ExpandTransition } from '@veltra/utils'
38
38
  import { computed, provide, shallowReactive, watch } from 'vue'
39
39
 
40
40
  import type { MenuEmits, MenuProps, ComponentSize } from '../../types'
@@ -66,6 +66,14 @@ const menuCls = computed(() => {
66
66
  return props.collapsed ? collapsedCls : cls
67
67
  })
68
68
 
69
+ const expandTransition = new ExpandTransition({
70
+ enterTransition:
71
+ 'height 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-top 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-bottom 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.18s cubic-bezier(0.4, 0, 0.2, 1)',
72
+ leaveTransition:
73
+ 'height 0.2s cubic-bezier(0.4, 0, 1, 1), padding-top 0.2s cubic-bezier(0.4, 0, 1, 1), padding-bottom 0.2s cubic-bezier(0.4, 0, 1, 1), opacity 0.12s cubic-bezier(0.4, 0, 1, 1)',
74
+ opacity: true
75
+ })
76
+
69
77
  const { size } = useFallbackProps([props], {
70
78
  size: 'default' as ComponentSize
71
79
  })
@@ -98,6 +106,7 @@ provide(MenuDIKey, {
98
106
  menuProps: props,
99
107
  menuEmit: emit,
100
108
  expandedPath,
101
- size
109
+ size,
110
+ expandTransition
102
111
  })
103
112
  </script>
@@ -140,7 +140,7 @@
140
140
 
141
141
  <script lang="ts" setup>
142
142
  import { o as chainObj } from '@cat-kit/core'
143
- import { useFormComponent, useFormFallbackProps, useVirtualizer } from '@veltra/compositions'
143
+ import { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'
144
144
  import { ArrowDown, Close, Search } from '@veltra/icons/normal'
145
145
  import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
146
146
  import { computed, shallowRef, shallowReactive, watch, provide } from 'vue'
@@ -151,6 +151,7 @@ import type {
151
151
  ScrollExposed,
152
152
  DropdownExposed
153
153
  } from '../../types'
154
+ import { injectFormContext } from '../../utils/form-context'
154
155
  import { UCheckbox } from '../checkbox'
155
156
  import { UDropdown } from '../dropdown'
156
157
  import { UEmpty } from '../empty'
@@ -179,7 +180,7 @@ const emit = defineEmits<MultiSelectEmits>()
179
180
 
180
181
  const cls = bem('multi-select')
181
182
 
182
- const { formProps } = useFormComponent()
183
+ const { formProps } = injectFormContext()
183
184
 
184
185
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
185
186
  size: 'default',
@@ -8,7 +8,7 @@ $root-name: multi-select;
8
8
  @include m.b($root-name) {
9
9
  width: 100%;
10
10
  line-height: 1;
11
- border: fn.use-var(border);
11
+ border: fn.use-var(border-muted);
12
12
  box-shadow: fn.use-var(shadow, emboss);
13
13
  transition: border-color 0.25s ease, box-shadow 0.25s ease;
14
14
  overflow: hidden;
@@ -137,7 +137,7 @@ $root-name: multi-select;
137
137
  }
138
138
 
139
139
  @include m.bem(tag) {
140
- border: fn.use-var(border);
140
+ border: fn.use-var(border-muted);
141
141
  }
142
142
  }
143
143
 
@@ -96,13 +96,14 @@
96
96
 
97
97
  <script lang="ts" setup>
98
98
  import { dfs, o } from '@cat-kit/core'
99
- import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
99
+ import { useFormFallbackProps } from '@veltra/compositions'
100
100
  import { ArrowDown, Close, Search } from '@veltra/icons/normal'
101
101
  import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
102
102
  import { computed, nextTick, shallowRef, watch } from 'vue'
103
103
 
104
104
  import type { MultiTreeSelectProps, MultiTreeSelectEmits, TreeExposed } from '../../types'
105
105
  import type { DropdownExposed } from '../../types'
106
+ import { injectFormContext } from '../../utils/form-context'
106
107
  import { UButton } from '../button'
107
108
  import { UCheckbox } from '../checkbox'
108
109
  import { UDropdown } from '../dropdown'
@@ -161,7 +162,7 @@ const hovered = shallowRef(false)
161
162
 
162
163
  const tags = shallowRef<Record<string, any>[]>([])
163
164
 
164
- const { formProps } = useFormComponent()
165
+ const { formProps } = injectFormContext()
165
166
 
166
167
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
167
168
 
@@ -7,7 +7,7 @@ $root-name: multi-tree-select;
7
7
 
8
8
  @include m.b($root-name) {
9
9
  width: 100%;
10
- border: fn.use-var(border);
10
+ border: fn.use-var(border-muted);
11
11
  box-shadow: fn.use-var(shadow, emboss);
12
12
  transition: border-color 0.25s ease, box-shadow 0.25s ease;
13
13
  overflow: hidden;
@@ -45,7 +45,7 @@ $root-name: multi-tree-select;
45
45
  }
46
46
 
47
47
  @include m.bem(tag) {
48
- border: fn.use-var(border);
48
+ border: fn.use-var(border-muted);
49
49
  }
50
50
  }
51
51
 
@@ -63,13 +63,14 @@
63
63
 
64
64
  <script lang="ts" setup>
65
65
  import { $n, n, o, isUndef } from '@cat-kit/core'
66
- import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
66
+ import { useFormFallbackProps } from '@veltra/compositions'
67
67
  import { vRipple } from '@veltra/directives'
68
68
  import { ArrowDown, ArrowUp, Close } from '@veltra/icons/normal'
69
69
  import { bem, FORM_EMPTY_CONTENT, Tween } from '@veltra/utils'
70
70
  import { computed, shallowRef, watch } from 'vue'
71
71
 
72
72
  import type { NumberInputEmits, NumberInputProps, InputExposed } from '../../types'
73
+ import { injectFormContext } from '../../utils/form-context'
73
74
  import { UIcon } from '../icon'
74
75
  import { UInput } from '../input'
75
76
 
@@ -90,7 +91,7 @@ const slots = defineSlots<{
90
91
  suffix?: () => any
91
92
  }>()
92
93
 
93
- const { formProps } = useFormComponent()
94
+ const { formProps } = injectFormContext()
94
95
 
95
96
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
96
97
  size: 'default',
@@ -28,11 +28,12 @@
28
28
 
29
29
  <script lang="ts" setup>
30
30
  import { n, $n, o } from '@cat-kit/core'
31
- import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
31
+ import { useFormFallbackProps } from '@veltra/compositions'
32
32
  import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
33
33
  import { computed, getCurrentInstance, nextTick, onMounted, watch } from 'vue'
34
34
 
35
35
  import type { NumberRangeInputEmits, NumberRangeInputProps, NumberRangeTuple } from '../../types'
36
+ import { injectFormContext } from '../../utils/form-context'
36
37
  import { UNumberInput } from '../number-input'
37
38
 
38
39
  defineOptions({
@@ -58,7 +59,7 @@ function splitBound(): boolean {
58
59
  return 'start' in p || 'onUpdate:start' in p || 'end' in p || 'onUpdate:end' in p
59
60
  }
60
61
 
61
- const { formProps } = useFormComponent()
62
+ const { formProps } = injectFormContext()
62
63
 
63
64
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
64
65
  size: 'default',
@@ -24,11 +24,12 @@
24
24
  </template>
25
25
 
26
26
  <script lang="ts" setup>
27
- import { useFormComponent, useFormFallbackProps, useUserAction } from '@veltra/compositions'
27
+ import { useFormFallbackProps, useUserAction } from '@veltra/compositions'
28
28
  import { bem } from '@veltra/utils'
29
29
  import { computed, provide, shallowRef, useTemplateRef, watch } from 'vue'
30
30
 
31
31
  import type { PaletteProps } from '../../types'
32
+ import { injectFormContext } from '../../utils/form-context'
32
33
  import { UTip } from '../tip'
33
34
  import { HSV2RGB, RGB2HEX, HEX2RGBA, RGB2HSV } from './color-transform'
34
35
  import { PaletteDIKey } from './di'
@@ -47,7 +48,7 @@ const props = withDefaults(defineProps<PaletteProps>(), {
47
48
  readonly: undefined
48
49
  })
49
50
 
50
- const { formProps } = useFormComponent()
51
+ const { formProps } = injectFormContext()
51
52
 
52
53
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
53
54
 
@@ -27,12 +27,13 @@
27
27
 
28
28
  <script lang="ts" setup>
29
29
  import { o } from '@cat-kit/core'
30
- import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
30
+ import { useFormFallbackProps } from '@veltra/compositions'
31
31
  import { Hide, View } from '@veltra/icons/normal'
32
32
  import { bem } from '@veltra/utils'
33
33
  import { computed, nextTick, shallowRef } from 'vue'
34
34
 
35
35
  import type { PasswordInputProps } from '../../types'
36
+ import { injectFormContext } from '../../utils/form-context'
36
37
  import { UIcon } from '../icon'
37
38
  import { UInput } from '../input'
38
39
 
@@ -41,7 +42,7 @@ defineOptions({
41
42
  })
42
43
 
43
44
  const props = withDefaults(defineProps<PasswordInputProps>(), {
44
- clearable: true,
45
+ clearable: false,
45
46
  disabled: undefined,
46
47
  readonly: undefined
47
48
  })
@@ -50,7 +51,7 @@ const slots = defineSlots<{
50
51
  prefix?: () => any
51
52
  }>()
52
53
 
53
- const { formProps } = useFormComponent()
54
+ const { formProps } = injectFormContext()
54
55
 
55
56
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
56
57
  size: 'default',
@@ -32,12 +32,13 @@
32
32
  </template>
33
33
 
34
34
  <script lang="ts" setup>
35
- import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
35
+ import { useFormFallbackProps } from '@veltra/compositions'
36
36
  import { QuestionFilled } from '@veltra/icons/normal'
37
37
  import { bem } from '@veltra/utils'
38
38
  import { ref } from 'vue'
39
39
 
40
40
  import type { PopConfirmProps, PopConfirmEmits } from '../../types'
41
+ import { injectFormContext } from '../../utils/form-context'
41
42
  import { UButton } from '../button'
42
43
  import { UIcon } from '../icon'
43
44
  import { UTip } from '../tip'
@@ -61,7 +62,7 @@ const cls = bem('pop-confirm')
61
62
 
62
63
  const visible = ref(false)
63
64
 
64
- const { formProps } = useFormComponent()
65
+ const { formProps } = injectFormContext()
65
66
 
66
67
  const { size } = useFormFallbackProps([formProps ?? {}], {
67
68
  size: 'default'
@@ -23,11 +23,12 @@
23
23
  </template>
24
24
 
25
25
  <script lang="ts" setup>
26
- import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
26
+ import { useFormFallbackProps } from '@veltra/compositions'
27
27
  import { bem } from '@veltra/utils'
28
28
  import { computed } from 'vue'
29
29
 
30
30
  import type { RadioProps, RadioEmits } from '../../types'
31
+ import { injectFormContext } from '../../utils/form-context'
31
32
 
32
33
  defineOptions({
33
34
  name: 'Radio'
@@ -43,7 +44,7 @@ defineEmits<RadioEmits>()
43
44
 
44
45
  const cls = bem('radio')
45
46
 
46
- const { formProps } = useFormComponent()
47
+ const { formProps } = injectFormContext()
47
48
 
48
49
  const { size, disabled } = useFormFallbackProps([formProps ?? {}, props], {
49
50
  size: 'default',
@@ -63,7 +63,7 @@ $root-name: radio;
63
63
  color: fn.use-var(text-color, disabled);
64
64
  cursor: not-allowed;
65
65
  @include m.bem($root-name, button) {
66
- border-color: fn.use-var(border, color);
66
+ border-color: fn.use-var(border, muted-color);
67
67
  background-color: fn.use-var(color, disabled);
68
68
  }
69
69
 
@@ -19,10 +19,11 @@
19
19
  </template>
20
20
 
21
21
  <script lang="ts" setup>
22
- import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
22
+ import { useFormFallbackProps } from '@veltra/compositions'
23
23
  import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
24
24
 
25
25
  import type { RadioGroupProps, RadioGroupEmits } from '../../types'
26
+ import { injectFormContext } from '../../utils/form-context'
26
27
  import URadio from '../radio/radio.vue'
27
28
 
28
29
  defineOptions({
@@ -40,7 +41,7 @@ const model = defineModel<any>()
40
41
 
41
42
  const emit = defineEmits<RadioGroupEmits>()
42
43
 
43
- const { formProps } = useFormComponent()
44
+ const { formProps } = injectFormContext()
44
45
 
45
46
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
46
47
  size: 'default',
@@ -32,7 +32,7 @@
32
32
  }
33
33
 
34
34
  &:last-child {
35
- border-right: fn.use-var(border) !important;
35
+ border-right: fn.use-var(border-muted) !important;
36
36
  border-radius: 0 fn.use-var(radius, default) fn.use-var(radius, default) 0 !important;
37
37
  }
38
38
  }
@@ -77,12 +77,13 @@ import { LinkNode, AutoLinkNode } from '@lexical/link'
77
77
  import { ListNode, ListItemNode, registerList } from '@lexical/list'
78
78
  import { registerRichText } from '@lexical/rich-text'
79
79
  import { HeadingNode, QuoteNode } from '@lexical/rich-text'
80
- import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
80
+ import { useFormFallbackProps } from '@veltra/compositions'
81
81
  import { bem } from '@veltra/utils'
82
82
  import { createEditor, $getRoot, $createParagraphNode, type LexicalEditor } from 'lexical'
83
83
  import { computed, onBeforeUnmount, onMounted, ref, shallowRef, useTemplateRef, watch } from 'vue'
84
84
 
85
85
  import type { RichTextEditorProps } from '../../types'
86
+ import { injectFormContext } from '../../utils/form-context'
86
87
  import Toolbar from './toolbar.vue'
87
88
 
88
89
  const props = withDefaults(defineProps<RichTextEditorProps>(), {
@@ -97,7 +98,7 @@ const model = defineModel<string>()
97
98
 
98
99
  const cls = bem('rich-text-editor')
99
100
 
100
- const { formProps } = useFormComponent()
101
+ const { formProps } = injectFormContext()
101
102
 
102
103
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
103
104
 
@@ -6,7 +6,7 @@ $root-name: rich-text-editor;
6
6
 
7
7
  @include m.b($root-name) {
8
8
  width: 100%;
9
- border: 1px solid fn.use-var(border-color);
9
+ border: 1px solid fn.use-var(border, muted-color);
10
10
  border-radius: fn.use-var(radius, default);
11
11
  background-color: fn.use-var(color, bg);
12
12
  transition: border-color 0.25s ease;
@@ -101,7 +101,7 @@ $root-name: rich-text-editor;
101
101
  appearance: none;
102
102
  padding: 2px 24px 2px 8px;
103
103
  height: 28px;
104
- border: 1px solid fn.use-var(border-color);
104
+ border: 1px solid fn.use-var(border, muted-color);
105
105
  border-radius: 4px;
106
106
  background-color: transparent;
107
107
  color: fn.use-var(text-color);
@@ -171,17 +171,17 @@ $root-name: rich-text-editor;
171
171
 
172
172
  @include m.is(disabled) {
173
173
  background-color: fn.use-var(color, disabled);
174
- border-color: fn.use-var(border-color);
174
+ border-color: fn.use-var(border, muted-color);
175
175
  cursor: not-allowed;
176
176
 
177
177
  &:hover {
178
- border-color: fn.use-var(border-color);
178
+ border-color: fn.use-var(border, muted-color);
179
179
  }
180
180
  }
181
181
 
182
182
  @include m.is(readonly) {
183
183
  &:hover {
184
- border-color: fn.use-var(border-color);
184
+ border-color: fn.use-var(border, muted-color);
185
185
  }
186
186
  }
187
187
  }
@@ -115,7 +115,7 @@
115
115
 
116
116
  <script lang="ts" setup>
117
117
  import { o } from '@cat-kit/core'
118
- import { useFormComponent, useFormFallbackProps, useVirtualizer } from '@veltra/compositions'
118
+ import { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'
119
119
  import { vFocus } from '@veltra/directives'
120
120
  import { ArrowDown, Search } from '@veltra/icons/normal'
121
121
  import { bem, FORM_EMPTY_CONTENT, scrollIntoContainerView, withUnit } from '@veltra/utils'
@@ -128,6 +128,7 @@ import type {
128
128
  DropdownExposed,
129
129
  ScrollExposed
130
130
  } from '../../types'
131
+ import { injectFormContext } from '../../utils/form-context'
131
132
  import { UDropdown } from '../dropdown'
132
133
  import { UEmpty } from '../empty'
133
134
  import { UIcon } from '../icon'
@@ -160,7 +161,7 @@ const cls = bem('select')
160
161
 
161
162
  const optionClass = cls.e('option')
162
163
 
163
- const { formProps } = useFormComponent()
164
+ const { formProps } = injectFormContext()
164
165
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
165
166
  size: 'default',
166
167
  disabled: false,
@@ -174,7 +175,7 @@ const selected = shallowRef<Record<string, any>>()
174
175
  const displayedValue = computed(() => {
175
176
  if (label.value) return label.value
176
177
 
177
- return selected.value ? o(selected.value).get(props.labelKey) : String(props.modelValue)
178
+ return selected.value ? o(selected.value).get(props.labelKey) : String(props.modelValue ?? '')
178
179
  })
179
180
 
180
181
  const dropdownRef = shallowRef<DropdownExposed>()
@@ -20,11 +20,12 @@
20
20
  </template>
21
21
 
22
22
  <script lang="ts" setup generic="T extends number | [number, number]">
23
- import { useFormComponent, useFormFallbackProps, useUserAction } from '@veltra/compositions'
23
+ import { useFormFallbackProps, useUserAction } from '@veltra/compositions'
24
24
  import { bem } from '@veltra/utils'
25
25
  import { computed, provide, watch } from 'vue'
26
26
 
27
27
  import type { SliderProps, SliderEmits } from '../../types'
28
+ import { injectFormContext } from '../../utils/form-context'
28
29
  import { sliderContextKey } from './di'
29
30
  import SliderThumb from './slider-thumb.vue'
30
31
  import { useSlider } from './use-slider'
@@ -44,7 +45,7 @@ const emit = defineEmits<SliderEmits<T>>()
44
45
 
45
46
  const cls = bem('slider')
46
47
 
47
- const { formProps } = useFormComponent()
48
+ const { formProps } = injectFormContext()
48
49
 
49
50
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
50
51
 
@@ -57,7 +57,7 @@ $root-name: switch;
57
57
  align-items: center;
58
58
  border-radius: 100px;
59
59
  background-color: fn.use-var(bg-color, bottom);
60
- border: 1px solid fn.use-var(border, color);
60
+ border: 1px solid fn.use-var(border, muted-color);
61
61
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
62
62
  padding: 2px;
63
63
  flex-shrink: 0;
@@ -23,11 +23,12 @@
23
23
  </template>
24
24
 
25
25
  <script lang="ts" setup>
26
- import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
26
+ import { useFormFallbackProps } from '@veltra/compositions'
27
27
  import { bem } from '@veltra/utils'
28
28
  import { computed } from 'vue'
29
29
 
30
30
  import type { SwitchEmits, SwitchProps, _SwitchExposed } from '../../types'
31
+ import { injectFormContext } from '../../utils/form-context'
31
32
 
32
33
  defineOptions({
33
34
  name: 'Switch'
@@ -44,7 +45,7 @@ const model = defineModel<boolean>()
44
45
 
45
46
  const cls = bem('switch')
46
47
 
47
- const { formProps } = useFormComponent()
48
+ const { formProps } = injectFormContext()
48
49
 
49
50
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
50
51
 
@@ -11,12 +11,13 @@
11
11
  </template>
12
12
 
13
13
  <script lang="ts" setup>
14
- import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
14
+ import { useFormFallbackProps } from '@veltra/compositions'
15
15
  import { Close } from '@veltra/icons/normal'
16
16
  import { bem } from '@veltra/utils'
17
17
  import { computed } from 'vue'
18
18
 
19
19
  import type { TagEmits, TagProps } from '../../types'
20
+ import { injectFormContext } from '../../utils/form-context'
20
21
  import { UIcon } from '../icon'
21
22
 
22
23
  defineOptions({
@@ -29,7 +30,7 @@ const props = defineProps<TagProps>()
29
30
 
30
31
  const emit = defineEmits<TagEmits>()
31
32
 
32
- const { formProps } = useFormComponent()
33
+ const { formProps } = injectFormContext()
33
34
  const { size } = useFormFallbackProps([formProps ?? {}, props], {
34
35
  size: 'default'
35
36
  })
@@ -7,7 +7,7 @@ $root-name: textarea;
7
7
  @include m.b($root-name) {
8
8
  position: relative;
9
9
  width: 100%;
10
- border: fn.use-var(border);
10
+ border: fn.use-var(border-muted);
11
11
  box-shadow: fn.use-var(shadow, emboss);
12
12
  transition: border-color 0.25s ease, box-shadow 0.25s ease;
13
13
  overflow: hidden;
@@ -40,12 +40,13 @@
40
40
  </template>
41
41
 
42
42
  <script lang="ts" setup>
43
- import { useFocus, useFormComponent, useFormFallbackProps } from '@veltra/compositions'
43
+ import { useFocus, useFormFallbackProps } from '@veltra/compositions'
44
44
  import { Close } from '@veltra/icons/normal'
45
45
  import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
46
46
  import { computed, ref, shallowRef, watch } from 'vue'
47
47
 
48
48
  import type { TextareaProps, TextareaEmits, ComponentSize } from '../../types'
49
+ import { injectFormContext } from '../../utils/form-context'
49
50
  import { UIcon } from '../icon'
50
51
  import { calcTextareaHeight } from './utils'
51
52
 
@@ -64,7 +65,7 @@ const props = withDefaults(defineProps<TextareaProps>(), {
64
65
 
65
66
  const cls = bem('textarea')
66
67
 
67
- const { formProps } = useFormComponent()
68
+ const { formProps } = injectFormContext()
68
69
 
69
70
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
70
71
  size: 'default' as ComponentSize,
@@ -31,12 +31,13 @@
31
31
  </template>
32
32
 
33
33
  <script lang="ts" setup>
34
- import { useFormComponent, useFormFallbackProps, useVirtualizer } from '@veltra/compositions'
34
+ import { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'
35
35
  import { bem, nextFrame, scrollIntoContainerView } from '@veltra/utils'
36
36
  import { computed, provide, shallowRef, useSlots, watch, watchEffect, type VNode } from 'vue'
37
37
 
38
38
  import type { TreeProps, TreeEmit, _TreeExposed } from '../../types'
39
39
  import type { ScrollExposed } from '../../types'
40
+ import { injectFormContext } from '../../utils/form-context'
40
41
  import { UEmpty } from '../empty'
41
42
  import { UScroll } from '../scroll'
42
43
  import { TreeDIKey, type TreeConText, type TreeSlotsScope } from './di'
@@ -63,7 +64,7 @@ const emit = defineEmits<TreeEmit>()
63
64
 
64
65
  const cls = bem('tree')
65
66
 
66
- const { formProps } = useFormComponent()
67
+ const { formProps } = injectFormContext()
67
68
 
68
69
  const { size } = useFormFallbackProps([formProps ?? {}, props], {
69
70
  size: 'default'
@@ -60,12 +60,13 @@
60
60
 
61
61
  <script lang="ts" setup>
62
62
  import { dfs, o } from '@cat-kit/core'
63
- import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
63
+ import { useFormFallbackProps } from '@veltra/compositions'
64
64
  import { ArrowDown, Search } from '@veltra/icons/normal'
65
65
  import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
66
66
  import { computed, nextTick, shallowRef, watch } from 'vue'
67
67
 
68
68
  import type { TreeSelectProps, TreeSelectEmits, TreeExposed } from '../../types'
69
+ import { injectFormContext } from '../../utils/form-context'
69
70
  import { UDropdown } from '../dropdown'
70
71
  import { UIcon } from '../icon'
71
72
  import { UInput } from '../input'
@@ -122,7 +123,7 @@ const model = defineModel<string | number>()
122
123
 
123
124
  const label = shallowRef<string>()
124
125
 
125
- const { formProps } = useFormComponent()
126
+ const { formProps } = injectFormContext()
126
127
 
127
128
  const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
128
129
 
@@ -0,0 +1,24 @@
1
+ import { type InjectionKey, inject, provide } from 'vue'
2
+
3
+ import type { FormProps } from '../types/form'
4
+
5
+ type DIContext = {
6
+ /** 表单属性 */
7
+ formProps: FormProps
8
+ }
9
+
10
+ const FormComponentDIKey: InjectionKey<DIContext> = Symbol('FormComponentDIKey')
11
+
12
+ export function provideFormContext(props: FormProps): void {
13
+ if (props) {
14
+ return provide(FormComponentDIKey, { formProps: props })
15
+ }
16
+ }
17
+
18
+ export function injectFormContext(): {
19
+ /** 是否在表单中 */
20
+ inForm: boolean
21
+ } & Partial<DIContext> {
22
+ const context = inject(FormComponentDIKey, undefined) || {}
23
+ return { inForm: !!context, ...context }
24
+ }