@tplc/business 0.0.14 → 0.0.16

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 (42) hide show
  1. package/action.d.ts +22 -0
  2. package/components/lcb-filter/api.ts +56 -0
  3. package/components/lcb-filter/components/ActionView/index.vue +40 -0
  4. package/components/lcb-filter/components/ComponentGroup/index.vue +86 -0
  5. package/components/lcb-filter/components/ComponentGroup/type.ts +6 -0
  6. package/components/lcb-filter/components/FilterSelect/index.vue +68 -0
  7. package/components/lcb-filter/components/FilterSelect/type.ts +3 -0
  8. package/components/lcb-filter/components/FilterSlider/index.vue +70 -0
  9. package/components/lcb-filter/components/FilterSlider/types.ts +3 -0
  10. package/components/lcb-filter/components/SelectTagView/index.vue +50 -0
  11. package/components/lcb-filter/components/TagSelect/index.vue +159 -0
  12. package/components/lcb-filter/components/TagSelect/type.ts +5 -0
  13. package/components/lcb-filter/components/TreeSelect/index.vue +131 -0
  14. package/components/lcb-filter/components/TreeSelect/type.ts +3 -0
  15. package/components/lcb-filter/hooks/useSelect.ts +45 -0
  16. package/components/lcb-filter/index.scss +30 -0
  17. package/components/lcb-filter/lcb-filter.vue +125 -0
  18. package/components/lcb-filter/types.ts +18 -0
  19. package/components/lcb-nav/lcb-nav.vue +5 -5
  20. package/components/lcb-nav/types.ts +2 -2
  21. package/global.d.ts +1 -0
  22. package/index.ts +7 -1
  23. package/package.json +2 -2
  24. package/types/components/lcb-filter/api.d.ts +49 -0
  25. package/types/components/lcb-filter/components/ActionView/index.vue.d.ts +34 -0
  26. package/types/components/lcb-filter/components/ComponentGroup/index.vue.d.ts +32 -0
  27. package/types/components/lcb-filter/components/ComponentGroup/type.d.ts +5 -0
  28. package/types/components/lcb-filter/components/FilterSelect/index.vue.d.ts +41 -0
  29. package/types/components/lcb-filter/components/FilterSelect/type.d.ts +2 -0
  30. package/types/components/lcb-filter/components/FilterSlider/index.vue.d.ts +36 -0
  31. package/types/components/lcb-filter/components/FilterSlider/types.d.ts +2 -0
  32. package/types/components/lcb-filter/components/SelectTagView/index.vue.d.ts +39 -0
  33. package/types/components/lcb-filter/components/TagSelect/index.vue.d.ts +39 -0
  34. package/types/components/lcb-filter/components/TagSelect/type.d.ts +4 -0
  35. package/types/components/lcb-filter/components/TreeSelect/index.vue.d.ts +41 -0
  36. package/types/components/lcb-filter/components/TreeSelect/type.d.ts +2 -0
  37. package/types/components/lcb-filter/hooks/useSelect.d.ts +25 -0
  38. package/types/components/lcb-filter/lcb-filter.vue.d.ts +57 -0
  39. package/types/components/lcb-filter/types.d.ts +17 -0
  40. package/types/components/lcb-img-nav/lcb-img-nav.vue.d.ts +1 -1
  41. package/types/components/lcb-nav/types.d.ts +2 -2
  42. package/types/components/lcb-user-top/lcb-user-top.vue.d.ts +1 -1
@@ -0,0 +1,131 @@
1
+ <template>
2
+ <view>
3
+ <view class="flex">
4
+ <view class="scroll-view w-25">
5
+ <view
6
+ v-for="(item, index) in options"
7
+ :key="item.label"
8
+ @click="currentCategory = index"
9
+ class="filter-select flex justify-between items-center"
10
+ :class="currentCategory === index ? 'filter-select__choose' : ''"
11
+ >
12
+ {{ item.label }}
13
+ </view>
14
+ </view>
15
+ <view class="scroll-view flex-1 w-0 bg-#FAFAFA pl-4" v-if="mode === 'single'">
16
+ <view
17
+ v-for="item in options[currentCategory].children"
18
+ :key="item.label"
19
+ @click="onItemClick(item)"
20
+ class="filter-select flex justify-between items-center !px-36rpx !py-30rpx"
21
+ :class="getChecked(item) ? 'filter-select__choose' : ''"
22
+ >
23
+ {{ item.label }}
24
+ <wd-icon name="check" custom-class="choose_icon" v-if="innerValue === item.value" />
25
+ </view>
26
+ </view>
27
+ <view class="flex-1 w-0 bg-#FAFAFA pl-4 scroll-view" v-else>
28
+ <view v-for="item in options" :key="item.label">
29
+ <view class="filter-select__title">
30
+ {{ item.label }}
31
+ </view>
32
+
33
+ <view class="grid grid-cols-3 gap-20rpx">
34
+ <SelectTagView
35
+ v-for="child in item.children"
36
+ :key="child.label"
37
+ :title="child.label"
38
+ :checked="getChecked(child)"
39
+ @click="onItemClick(child)"
40
+ />
41
+ </view>
42
+ </view>
43
+ </view>
44
+ </view>
45
+ <ActionView
46
+ :disabled="!Boolean(innerValue)"
47
+ @cancel="innerValue = undefined"
48
+ @submit="onSubmit"
49
+ />
50
+ </view>
51
+ </template>
52
+
53
+ <script setup lang="ts">
54
+ import { computed, nextTick, ref } from 'vue'
55
+ import { TreeSelectProps } from './type'
56
+ import useSelect from '../../hooks/useSelect'
57
+ import SelectTagView from '../SelectTagView/index.vue'
58
+ import ActionView from '../ActionView/index.vue'
59
+ defineOptions({
60
+ name: 'TreeSelect',
61
+ options: {
62
+ addGlobalClass: true,
63
+ virtualHost: true,
64
+ styleIsolation: 'shared',
65
+ },
66
+ })
67
+ const props = defineProps<TreeSelectProps>()
68
+ const model = defineModel<string | string[]>()
69
+ const modelTitle = defineModel<string>('title')
70
+ const innerValue = ref(model.value)
71
+ const emits = defineEmits(['submit'])
72
+ const { onItemClick, options, getChecked } = useSelect(props, { model: innerValue })
73
+ const currentCategory = ref(0)
74
+ const treeObj = computed(() => {
75
+ return options.value.reduce(
76
+ (prev, next) => {
77
+ next?.children?.forEach((item) => {
78
+ prev[item.value as string] = item.label
79
+ })
80
+ return prev
81
+ },
82
+ {} as Record<string, string>,
83
+ )
84
+ })
85
+ const onSubmit = () => {
86
+ if (props.mode !== 'multiple') {
87
+ modelTitle.value = treeObj.value[innerValue.value as string]
88
+ }
89
+ model.value = innerValue.value
90
+ nextTick(() => {
91
+ emits('submit')
92
+ })
93
+ }
94
+ </script>
95
+ <style lang="scss" scoped>
96
+ @import '@tplc/wot/components/common/abstracts/variable';
97
+ .scroll-view {
98
+ max-height: 60vh;
99
+ overflow-y: auto;
100
+ }
101
+ .choose_icon {
102
+ color: $-color-theme;
103
+ font-size: $-cell-arrow-size;
104
+ }
105
+ .filter-select {
106
+ padding: 30rpx 40rpx;
107
+ font-size: $-cell-title-fs;
108
+ position: relative;
109
+ &__title {
110
+ margin-top: 34rpx;
111
+ font-weight: 500;
112
+ font-size: 30rpx;
113
+ color: $-color-theme;
114
+ margin-bottom: 30rpx;
115
+ }
116
+ &__choose {
117
+ color: $-color-theme;
118
+ // 透明背景颜色
119
+ &::after {
120
+ content: '';
121
+ position: absolute;
122
+ top: 0;
123
+ left: 0;
124
+ width: 100%;
125
+ height: 100%;
126
+ opacity: 0.05;
127
+ background-color: $-color-theme;
128
+ }
129
+ }
130
+ }
131
+ </style>
@@ -0,0 +1,3 @@
1
+ import { FilterItemProps } from '../../types'
2
+
3
+ export interface TreeSelectProps extends FilterItemProps {}
@@ -0,0 +1,45 @@
1
+ import { onMounted, ref, Ref } from 'vue'
2
+ import { FilterItemProps, Option } from '../types'
3
+ const useSelect = (
4
+ props: FilterItemProps,
5
+ {
6
+ model,
7
+ }: {
8
+ model: Ref<string | string[] | undefined>
9
+ },
10
+ ) => {
11
+ const options = ref<Option[]>(props.options || [])
12
+ const onItemClick = (item: Option) => {
13
+ if (props.mode === 'multiple') {
14
+ if (typeof model.value === 'object' && model.value.includes(item.value as string)) {
15
+ model.value = model.value.filter((v) => v !== item.value)
16
+ } else {
17
+ model.value = [...(model.value || []), item.value as string]
18
+ }
19
+ } else {
20
+ model.value = item.value
21
+ }
22
+ }
23
+
24
+ onMounted(async () => {
25
+ if (props.apiPath) {
26
+ // 调用接口获取数据
27
+ const { data } = await uni.$lcb.http.get<Option[]>(props.apiPath)
28
+ options.value = data
29
+ }
30
+ })
31
+ const getChecked = (item: Option) => {
32
+ if (Array.isArray(model.value)) {
33
+ return model.value.includes(`${item.value}`)
34
+ } else {
35
+ return Boolean(model.value && model.value === item.value)
36
+ }
37
+ }
38
+ return {
39
+ options,
40
+ getChecked,
41
+ onItemClick,
42
+ }
43
+ }
44
+
45
+ export default useSelect
@@ -0,0 +1,30 @@
1
+ @import '@tplc/wot/components/common/abstracts/variable';
2
+
3
+ .lcb-filter {
4
+ &__popup {
5
+ background: #F5F5F7;
6
+ }
7
+
8
+ &-menu__choose {
9
+ color: $-color-theme !important;
10
+ }
11
+
12
+
13
+ }
14
+
15
+ .opacity-primary {
16
+ position: relative;
17
+ color: $-color-theme !important;
18
+ background-color: transparent !important;
19
+ font-weight: 500;
20
+ font-size: 24rpx !important;
21
+
22
+ &::after {
23
+ content: '';
24
+ position: absolute;
25
+ top: 0;
26
+ left: 0;
27
+ opacity: 0.14;
28
+ background-color: $-color-theme;
29
+ }
30
+ }
@@ -0,0 +1,125 @@
1
+ <template>
2
+ <view v-if="info">
3
+ <wd-drop-menu>
4
+ <wd-drop-menu-item
5
+ v-for="(item, index) in info?.filterComponent"
6
+ :key="item.valueName"
7
+ :title="titleObj[item.valueName] || item.fitlerName"
8
+ icon="caret-down-small"
9
+ icon-size="26px"
10
+ :selected="getSelect(item)"
11
+ ref="dropMenu"
12
+ >
13
+ <view class="lcb-filter__popup">
14
+ <FilterSelect
15
+ v-if="item.component === 'select'"
16
+ v-bind="item.componentProps"
17
+ v-model="filter[item.valueName]"
18
+ v-model:title="titleObj[item.valueName]"
19
+ @submit="onSubmit(index)"
20
+ />
21
+ <TreeSelect
22
+ v-else-if="item.component === 'treeSelect'"
23
+ v-bind="item.componentProps"
24
+ v-model="filter[item.valueName]"
25
+ v-model:title="titleObj[item.valueName]"
26
+ @submit="onSubmit(index)"
27
+ />
28
+ <ComponentGroup
29
+ v-else-if="item.component === 'componentGroup'"
30
+ v-bind="item.componentProps"
31
+ :filter="filter"
32
+ @submit="onSubmit(index, $event)"
33
+ />
34
+ </view>
35
+ </wd-drop-menu-item>
36
+ </wd-drop-menu>
37
+ <view
38
+ v-if="info?.filterTags || info.btnComponent"
39
+ class="bg-white px-3 pb-2 box-border flex items-center"
40
+ >
41
+ <view class="flex gap-3.5 flex-1">
42
+ <TagSelect
43
+ v-if="info.filterTags"
44
+ size="small"
45
+ v-bind="info.filterTags.componentProps"
46
+ v-model="filter[info.filterTags.valueName]"
47
+ />
48
+ </view>
49
+ <wd-button v-if="info.btnComponent" custom-class="!h-60rpx opacity-primary">
50
+ {{ info.btnComponent?.postRequest }}
51
+ </wd-button>
52
+ </view>
53
+ </view>
54
+ </template>
55
+
56
+ <script setup lang="ts">
57
+ import { ref, watch } from 'vue'
58
+ import { LcbFilterProps } from './types'
59
+ import { FilterComponent, getFilterDetail, LcbFilterResult } from './api'
60
+ import FilterSelect from './components/FilterSelect/index.vue'
61
+ import TreeSelect from './components/TreeSelect/index.vue'
62
+ import ComponentGroup from './components/ComponentGroup/index.vue'
63
+ import TagSelect from './components/TagSelect/index.vue'
64
+ import './index.scss'
65
+ defineOptions({
66
+ name: 'LcbFilter',
67
+ options: {
68
+ addGlobalClass: true,
69
+ virtualHost: true,
70
+ styleIsolation: 'shared',
71
+ },
72
+ })
73
+ const dropMenu = ref()
74
+ const props = withDefaults(defineProps<LcbFilterProps>(), {
75
+ pageFilterType: 'hotelTravelFilter',
76
+ })
77
+ const info = ref<LcbFilterResult>()
78
+ const filter = ref<Record<string, any>>({})
79
+ const titleObj = ref<Record<string, any>>({})
80
+ watch(
81
+ () => props.pageFilterType,
82
+ async (val) => {
83
+ if (val) {
84
+ const { data } = await getFilterDetail(val)
85
+ data.filterComponent.forEach((item) => {
86
+ filter.value[item.valueName] = item.defaultValue
87
+ titleObj.value[item.valueName] = item.fitlerName
88
+ if (item.componentProps?.componentList) {
89
+ item.componentProps.componentList.forEach((data) => {
90
+ filter.value[data.valueName] = data.defaultValue
91
+ })
92
+ }
93
+ })
94
+ if (data.filterTags) {
95
+ filter.value[data.filterTags.valueName] = data.filterTags.defaultValue
96
+ titleObj.value[data.filterTags.valueName] = data.filterTags.defaultName
97
+ }
98
+ info.value = data
99
+ }
100
+ },
101
+ {
102
+ immediate: true,
103
+ },
104
+ )
105
+ const onSubmit = (index: number, filterObj?: Record<string, any>) => {
106
+ dropMenu.value?.[index]?.close()
107
+ if (filterObj) {
108
+ filter.value = {
109
+ ...filter.value,
110
+ ...filterObj,
111
+ }
112
+ }
113
+ }
114
+ const getSelect = (item: FilterComponent) => {
115
+ if (item.component === 'componentGroup') {
116
+ return item.componentProps.componentList?.some((v) => filter.value[v.valueName])
117
+ } else {
118
+ return Boolean(filter.value[item.valueName])
119
+ }
120
+ }
121
+ </script>
122
+
123
+ <style lang="scss" scoped>
124
+ @import './index';
125
+ </style>
@@ -0,0 +1,18 @@
1
+ export interface LcbFilterProps {
2
+ pageFilterType?: string
3
+ }
4
+ export interface Option {
5
+ label: string
6
+ value: string | string[]
7
+ custom?: boolean
8
+ max?: number
9
+ min?: number
10
+ children?: Option[]
11
+ unit?: string
12
+ }
13
+
14
+ export interface FilterItemProps {
15
+ mode?: 'multiple' | 'single'
16
+ apiPath?: string
17
+ options?: Option[]
18
+ }
@@ -148,12 +148,12 @@ const capsuleList = computed(() => {
148
148
 
149
149
  return [...list, ...(props.capsules || [])] as ICapsule[]
150
150
  })
151
- const onCapsule = (item: ICapsule) => {
152
- switch (item.action) {
151
+ const onCapsule = ({ action = 'link', link }: ICapsule) => {
152
+ switch (action) {
153
153
  case 'link':
154
- if (item.linkUrl) {
154
+ if (link) {
155
155
  uni.navigateTo({
156
- url: item.linkUrl,
156
+ url: link,
157
157
  })
158
158
  } else {
159
159
  toBack()
@@ -161,7 +161,7 @@ const onCapsule = (item: ICapsule) => {
161
161
  break
162
162
  case 'home':
163
163
  uni.switchTab({
164
- url: '/pages/index/index',
164
+ url: '/pages/home/index',
165
165
  })
166
166
  break
167
167
  }
@@ -1,7 +1,7 @@
1
1
  export interface ICapsule {
2
2
  icon: string
3
- action: 'translate' | 'scanCode' | 'link' | 'home'
4
- linkUrl?: string
3
+ action?: 'translate' | 'scanCode' | 'link' | 'home'
4
+ link?: string
5
5
  }
6
6
 
7
7
  export interface NavTitleProps {
package/global.d.ts CHANGED
@@ -4,6 +4,7 @@ declare module 'vue' {
4
4
  'lcb-banner': (typeof import('./types/components/lcb-banner/lcb-banner.vue'))['default']
5
5
  'lcb-banner-block': (typeof import('./types/components/lcb-banner-block/lcb-banner-block.vue'))['default']
6
6
  'lcb-block': (typeof import('./types/components/lcb-block/lcb-block.vue'))['default']
7
+ 'lcb-filter': (typeof import('./types/components/lcb-filter/lcb-filter.vue'))['default']
7
8
  'lcb-grid': (typeof import('./types/components/lcb-grid/lcb-grid.vue'))['default']
8
9
  'lcb-home-search': (typeof import('./types/components/lcb-home-search/lcb-home-search.vue'))['default']
9
10
  'lcb-img-nav': (typeof import('./types/components/lcb-img-nav/lcb-img-nav.vue'))['default']
package/index.ts CHANGED
@@ -1,3 +1,7 @@
1
+ import { LcbGlobal } from 'action'
2
+
3
+ export const $lcb: LcbGlobal = {} as LcbGlobal
4
+ uni.$lcb = $lcb
1
5
  // #ifdef H5
2
6
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
7
  // @ts-ignore
@@ -16,13 +20,15 @@ for (const key in importFn) {
16
20
  }
17
21
  }
18
22
  // #endif
19
-
20
23
  const install = (Vue) => {
21
24
  // #ifdef H5
22
25
  components.forEach(function (component) {
23
26
  Vue.component(component.name, component)
24
27
  })
25
28
  // #endif
29
+ // #ifndef APP-NVUE
30
+ Vue.config.globalProperties.$lcb = $lcb
31
+ // #endif
26
32
  }
27
33
 
28
34
  export default {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tplc/business",
3
- "version": "0.0.14",
3
+ "version": "0.0.16",
4
4
  "keywords": [
5
5
  "业务组件"
6
6
  ],
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "peerDependencies": {
13
13
  "vue": ">=3.2.47",
14
- "@tplc/wot": "0.1.4"
14
+ "@tplc/wot": "0.1.5"
15
15
  },
16
16
  "engines": {
17
17
  "node": ">=18",
@@ -0,0 +1,49 @@
1
+ import { Option } from './types'
2
+ export interface LcbFilterResult {
3
+ btnComponent: BtnComponent
4
+ filterTags: FilterTags
5
+ filterComponent: FilterComponent[]
6
+ }
7
+ export interface FilterComponent {
8
+ fitlerName?: string
9
+ component: string
10
+ defaultValue?: string
11
+ defaultName?: string
12
+ valueName: string
13
+ componentProps: ComponentProps3
14
+ }
15
+ interface ComponentProps3 {
16
+ mode?: 'multiple' | 'single'
17
+ apiPath?: string
18
+ options?: Option[]
19
+ componentList?: ComponentList[]
20
+ }
21
+ export interface ComponentList {
22
+ fitlerName: string
23
+ component: string
24
+ valueName: string
25
+ defaultValue?: string | string[] | number[]
26
+ componentProps: ComponentProps
27
+ }
28
+ export interface FilterTags {
29
+ component: string
30
+ valueName: string
31
+ defaultValue?: string
32
+ defaultName?: string
33
+ componentProps: ComponentProps
34
+ }
35
+ export interface ComponentProps {
36
+ mode?: 'multiple' | 'single'
37
+ max: number
38
+ min: number
39
+ apiPath: string
40
+ options: Option[]
41
+ unit?: string
42
+ }
43
+ interface BtnComponent {
44
+ postRequest: string
45
+ }
46
+ export declare const getFilterDetail: (
47
+ val: string,
48
+ ) => Promise<import('../../action').IResData<LcbFilterResult>>
49
+ export {}
@@ -0,0 +1,34 @@
1
+ declare const _default: import('vue').DefineComponent<
2
+ {
3
+ disabled: {
4
+ type: BooleanConstructor
5
+ }
6
+ },
7
+ {},
8
+ unknown,
9
+ {},
10
+ {},
11
+ import('vue').ComponentOptionsMixin,
12
+ import('vue').ComponentOptionsMixin,
13
+ {
14
+ submit: (...args: any[]) => void
15
+ cancel: (...args: any[]) => void
16
+ },
17
+ string,
18
+ import('vue').PublicProps,
19
+ Readonly<
20
+ import('vue').ExtractPropTypes<{
21
+ disabled: {
22
+ type: BooleanConstructor
23
+ }
24
+ }>
25
+ > & {
26
+ onSubmit?: ((...args: any[]) => any) | undefined
27
+ onCancel?: ((...args: any[]) => any) | undefined
28
+ },
29
+ {
30
+ disabled: boolean
31
+ },
32
+ {}
33
+ >
34
+ export default _default
@@ -0,0 +1,32 @@
1
+ import { ComponentGroupProps } from './type'
2
+ declare const _default: import('vue').DefineComponent<
3
+ __VLS_TypePropsToOption<ComponentGroupProps>,
4
+ {},
5
+ unknown,
6
+ {},
7
+ {},
8
+ import('vue').ComponentOptionsMixin,
9
+ import('vue').ComponentOptionsMixin,
10
+ {
11
+ submit: (...args: any[]) => void
12
+ },
13
+ string,
14
+ import('vue').PublicProps,
15
+ Readonly<import('vue').ExtractPropTypes<__VLS_TypePropsToOption<ComponentGroupProps>>> & {
16
+ onSubmit?: ((...args: any[]) => any) | undefined
17
+ },
18
+ {},
19
+ {}
20
+ >
21
+ export default _default
22
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T
23
+ type __VLS_TypePropsToOption<T> = {
24
+ [K in keyof T]-?: {} extends Pick<T, K>
25
+ ? {
26
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>
27
+ }
28
+ : {
29
+ type: import('vue').PropType<T[K]>
30
+ required: true
31
+ }
32
+ }
@@ -0,0 +1,5 @@
1
+ import { ComponentList } from '../../api'
2
+ export interface ComponentGroupProps {
3
+ componentList?: ComponentList[]
4
+ filter?: Record<string, string>
5
+ }
@@ -0,0 +1,41 @@
1
+ import { FilterSelectProps } from './type'
2
+ declare let __VLS_typeProps: FilterSelectProps
3
+ type __VLS_PublicProps = {
4
+ modelValue?: string | string[]
5
+ title?: string
6
+ } & typeof __VLS_typeProps
7
+ declare const _default: import('vue').DefineComponent<
8
+ __VLS_TypePropsToOption<__VLS_PublicProps>,
9
+ {},
10
+ unknown,
11
+ {},
12
+ {},
13
+ import('vue').ComponentOptionsMixin,
14
+ import('vue').ComponentOptionsMixin,
15
+ {
16
+ 'update:modelValue': (modelValue: string | string[]) => void
17
+ 'update:title': (title: string) => void
18
+ submit: (...args: any[]) => void
19
+ },
20
+ string,
21
+ import('vue').PublicProps,
22
+ Readonly<import('vue').ExtractPropTypes<__VLS_TypePropsToOption<__VLS_PublicProps>>> & {
23
+ onSubmit?: ((...args: any[]) => any) | undefined
24
+ 'onUpdate:modelValue'?: ((modelValue: string | string[]) => any) | undefined
25
+ 'onUpdate:title'?: ((title: string) => any) | undefined
26
+ },
27
+ {},
28
+ {}
29
+ >
30
+ export default _default
31
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T
32
+ type __VLS_TypePropsToOption<T> = {
33
+ [K in keyof T]-?: {} extends Pick<T, K>
34
+ ? {
35
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>
36
+ }
37
+ : {
38
+ type: import('vue').PropType<T[K]>
39
+ required: true
40
+ }
41
+ }
@@ -0,0 +1,2 @@
1
+ import { FilterItemProps } from '../../types'
2
+ export interface FilterSelectProps extends FilterItemProps {}
@@ -0,0 +1,36 @@
1
+ import { FilterSliderProps } from './types'
2
+ declare let __VLS_typeProps: FilterSliderProps
3
+ type __VLS_PublicProps = {
4
+ modelValue?: number[]
5
+ } & typeof __VLS_typeProps
6
+ declare const _default: import('vue').DefineComponent<
7
+ __VLS_TypePropsToOption<__VLS_PublicProps>,
8
+ {},
9
+ unknown,
10
+ {},
11
+ {},
12
+ import('vue').ComponentOptionsMixin,
13
+ import('vue').ComponentOptionsMixin,
14
+ {
15
+ 'update:modelValue': (modelValue: number[]) => void
16
+ },
17
+ string,
18
+ import('vue').PublicProps,
19
+ Readonly<import('vue').ExtractPropTypes<__VLS_TypePropsToOption<__VLS_PublicProps>>> & {
20
+ 'onUpdate:modelValue'?: ((modelValue: number[]) => any) | undefined
21
+ },
22
+ {},
23
+ {}
24
+ >
25
+ export default _default
26
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T
27
+ type __VLS_TypePropsToOption<T> = {
28
+ [K in keyof T]-?: {} extends Pick<T, K>
29
+ ? {
30
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>
31
+ }
32
+ : {
33
+ type: import('vue').PropType<T[K]>
34
+ required: true
35
+ }
36
+ }
@@ -0,0 +1,2 @@
1
+ import { ComponentProps } from '../../api'
2
+ export interface FilterSliderProps extends ComponentProps {}