You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

168 lines
3.8 KiB

3 months ago
  1. import { placements } from '@popperjs/core';
  2. import { CircleClose } from '@element-plus/icons-vue';
  3. import { defaultProps } from './useProps.mjs';
  4. import { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';
  5. import { iconPropType } from '../../../utils/vue/icon.mjs';
  6. import { useTooltipContentProps } from '../../tooltip/src/content.mjs';
  7. import { useSizeProp } from '../../../hooks/use-size/index.mjs';
  8. import { tagProps } from '../../tag/src/tag.mjs';
  9. import { isBoolean, isNumber } from '../../../utils/types.mjs';
  10. import { useEmptyValuesProps } from '../../../hooks/use-empty-values/index.mjs';
  11. import { useAriaProps } from '../../../hooks/use-aria/index.mjs';
  12. import { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '../../../constants/event.mjs';
  13. const SelectProps = buildProps({
  14. allowCreate: Boolean,
  15. autocomplete: {
  16. type: definePropType(String),
  17. default: "none"
  18. },
  19. automaticDropdown: Boolean,
  20. clearable: Boolean,
  21. clearIcon: {
  22. type: iconPropType,
  23. default: CircleClose
  24. },
  25. effect: {
  26. type: definePropType(String),
  27. default: "light"
  28. },
  29. collapseTags: Boolean,
  30. collapseTagsTooltip: Boolean,
  31. maxCollapseTags: {
  32. type: Number,
  33. default: 1
  34. },
  35. defaultFirstOption: Boolean,
  36. disabled: Boolean,
  37. estimatedOptionHeight: {
  38. type: Number,
  39. default: void 0
  40. },
  41. filterable: Boolean,
  42. filterMethod: Function,
  43. height: {
  44. type: Number,
  45. default: 274
  46. },
  47. itemHeight: {
  48. type: Number,
  49. default: 34
  50. },
  51. id: String,
  52. loading: Boolean,
  53. loadingText: String,
  54. modelValue: {
  55. type: definePropType([Array, String, Number, Boolean, Object])
  56. },
  57. multiple: Boolean,
  58. multipleLimit: {
  59. type: Number,
  60. default: 0
  61. },
  62. name: String,
  63. noDataText: String,
  64. noMatchText: String,
  65. remoteMethod: Function,
  66. reserveKeyword: {
  67. type: Boolean,
  68. default: true
  69. },
  70. options: {
  71. type: definePropType(Array),
  72. required: true
  73. },
  74. placeholder: {
  75. type: String
  76. },
  77. teleported: useTooltipContentProps.teleported,
  78. persistent: {
  79. type: Boolean,
  80. default: true
  81. },
  82. popperClass: {
  83. type: String,
  84. default: ""
  85. },
  86. popperOptions: {
  87. type: definePropType(Object),
  88. default: () => ({})
  89. },
  90. remote: Boolean,
  91. size: useSizeProp,
  92. props: {
  93. type: definePropType(Object),
  94. default: () => defaultProps
  95. },
  96. valueKey: {
  97. type: String,
  98. default: "value"
  99. },
  100. scrollbarAlwaysOn: Boolean,
  101. validateEvent: {
  102. type: Boolean,
  103. default: true
  104. },
  105. offset: {
  106. type: Number,
  107. default: 12
  108. },
  109. showArrow: {
  110. type: Boolean,
  111. default: true
  112. },
  113. placement: {
  114. type: definePropType(String),
  115. values: placements,
  116. default: "bottom-start"
  117. },
  118. fallbackPlacements: {
  119. type: definePropType(Array),
  120. default: ["bottom-start", "top-start", "right", "left"]
  121. },
  122. tagType: { ...tagProps.type, default: "info" },
  123. tagEffect: { ...tagProps.effect, default: "light" },
  124. tabindex: {
  125. type: [String, Number],
  126. default: 0
  127. },
  128. appendTo: String,
  129. fitInputWidth: {
  130. type: [Boolean, Number],
  131. default: true,
  132. validator(val) {
  133. return isBoolean(val) || isNumber(val);
  134. }
  135. },
  136. ...useEmptyValuesProps,
  137. ...useAriaProps(["ariaLabel"])
  138. });
  139. const OptionProps = buildProps({
  140. data: Array,
  141. disabled: Boolean,
  142. hovering: Boolean,
  143. item: {
  144. type: definePropType(Object),
  145. required: true
  146. },
  147. index: Number,
  148. style: Object,
  149. selected: Boolean,
  150. created: Boolean
  151. });
  152. const selectEmits = {
  153. [UPDATE_MODEL_EVENT]: (val) => true,
  154. [CHANGE_EVENT]: (val) => true,
  155. "remove-tag": (val) => true,
  156. "visible-change": (visible) => true,
  157. focus: (evt) => evt instanceof FocusEvent,
  158. blur: (evt) => evt instanceof FocusEvent,
  159. clear: () => true
  160. };
  161. const optionEmits = {
  162. hover: (index) => isNumber(index),
  163. select: (val, index) => true
  164. };
  165. export { OptionProps, SelectProps, optionEmits, selectEmits };
  166. //# sourceMappingURL=defaults.mjs.map