@indielayer/ui 1.8.4 → 1.9.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.
- package/docs/pages/component/select/usage.vue +17 -5
- package/docs/pages/component/table/index.vue +7 -0
- package/docs/pages/component/table/virtual.vue +53 -0
- package/lib/components/select/Select.vue.d.ts +36 -0
- package/lib/components/select/Select.vue.js +224 -201
- package/lib/components/select/theme/Select.base.theme.js +1 -1
- package/lib/components/table/Table.vue.d.ts +91 -4
- package/lib/components/table/Table.vue.js +214 -180
- package/lib/components/table/TableHead.vue.d.ts +10 -2
- package/lib/components/table/TableHead.vue.js +16 -13
- package/lib/components/table/TableHeader.vue.d.ts +0 -4
- package/lib/components/table/TableHeader.vue.js +9 -10
- package/lib/components/table/theme/TableHead.base.theme.js +7 -4
- package/lib/components/table/theme/TableHead.carbon.theme.js +7 -4
- package/lib/components/table/theme/TableHeader.base.theme.js +3 -3
- package/lib/components/table/theme/TableHeader.carbon.theme.js +1 -1
- package/lib/composables/index.d.ts +1 -0
- package/lib/composables/useVirtualList.d.ts +48 -0
- package/lib/composables/useVirtualList.js +123 -0
- package/lib/index.js +34 -32
- package/lib/index.umd.js +4 -4
- package/lib/node_modules/.pnpm/@vueuse_core@10.2.0_vue@3.3.9_typescript@5.2.2_/node_modules/@vueuse/core/index.js +254 -221
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
- package/src/components/select/Select.vue +56 -26
- package/src/components/select/theme/Select.base.theme.ts +1 -1
- package/src/components/table/Table.vue +152 -113
- package/src/components/table/TableHead.vue +6 -2
- package/src/components/table/TableHeader.vue +0 -1
- package/src/components/table/theme/TableHead.base.theme.ts +7 -1
- package/src/components/table/theme/TableHead.carbon.theme.ts +7 -1
- package/src/components/table/theme/TableHeader.base.theme.ts +0 -2
- package/src/components/table/theme/TableHeader.carbon.theme.ts +0 -2
- package/src/composables/index.ts +1 -0
- package/src/composables/useVirtualList.ts +286 -0
- package/src/version.ts +1 -1
|
@@ -2,15 +2,25 @@
|
|
|
2
2
|
import { ref } from 'vue'
|
|
3
3
|
|
|
4
4
|
const selected = ref<undefined | string>()
|
|
5
|
+
const selected2 = ref<undefined | string>()
|
|
5
6
|
const selectedMultiple = ref<string[]>(['A', 'B'])
|
|
6
7
|
const options = ref([
|
|
7
8
|
{ value: 'A', label: 'Option A', disabled: true },
|
|
8
9
|
{ value: 'B', label: 'Option B' },
|
|
9
10
|
])
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
// function to generate
|
|
13
|
+
function genOptions(x: number) {
|
|
14
|
+
const options = []
|
|
15
|
+
|
|
16
|
+
for (let i = 0; i < x; i++) {
|
|
17
|
+
options.push({ value: i.toString(), label: 'Option ' + i })
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return options
|
|
13
21
|
}
|
|
22
|
+
|
|
23
|
+
const options2 = ref(genOptions(1000))
|
|
14
24
|
</script>
|
|
15
25
|
|
|
16
26
|
<template>
|
|
@@ -25,11 +35,13 @@ for (let i = 0; i < 20; i++) {
|
|
|
25
35
|
native
|
|
26
36
|
/>
|
|
27
37
|
<x-select
|
|
28
|
-
v-model="
|
|
29
|
-
label="
|
|
38
|
+
v-model="selected2"
|
|
39
|
+
label="Filterable - virtual list"
|
|
30
40
|
placeholder="Placeholder"
|
|
31
41
|
filterable
|
|
32
|
-
|
|
42
|
+
virtual-list
|
|
43
|
+
:virtual-list-item-height="33"
|
|
44
|
+
:options="options2"
|
|
33
45
|
/>
|
|
34
46
|
<x-select
|
|
35
47
|
v-model="selectedMultiple"
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import { XTable, XTableBody, XTableCell, XTableHead, XTableHeader, XTableRow } from '@indielayer/ui'
|
|
3
3
|
import UsageDemoCode from './usage.vue?raw'
|
|
4
4
|
import UsageDemo from './usage.vue'
|
|
5
|
+
import VirtualDemoCode from './virtual.vue?raw'
|
|
6
|
+
import VirtualDemo from './virtual.vue'
|
|
5
7
|
import StatesDemoCode from './states.vue?raw'
|
|
6
8
|
import StatesDemo from './states.vue'
|
|
7
9
|
|
|
@@ -13,6 +15,11 @@ const demos = [{
|
|
|
13
15
|
description: '',
|
|
14
16
|
code: UsageDemoCode,
|
|
15
17
|
component: UsageDemo,
|
|
18
|
+
}, {
|
|
19
|
+
name: 'Virtual List',
|
|
20
|
+
description: '',
|
|
21
|
+
code: VirtualDemoCode,
|
|
22
|
+
component: VirtualDemo,
|
|
16
23
|
}, {
|
|
17
24
|
name: 'States',
|
|
18
25
|
description: '',
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type TableHeader } from '@indielayer/ui'
|
|
3
|
+
import { computed, ref } from 'vue'
|
|
4
|
+
|
|
5
|
+
const headers: TableHeader[] = [
|
|
6
|
+
{ text: '#', value: 'id', sortable: true, align: 'center' },
|
|
7
|
+
{ text: 'Title', value: 'title' },
|
|
8
|
+
{ text: 'Description', value: 'description' },
|
|
9
|
+
{ text: 'Published', value: 'published' },
|
|
10
|
+
{ text: 'Status', value: 'status' },
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
const sort = ref([])
|
|
14
|
+
const itemsSorted = computed<any[]>(() => {
|
|
15
|
+
const ite = items.value.slice(0)
|
|
16
|
+
|
|
17
|
+
return ite.sort((a: any, b: any) => {
|
|
18
|
+
for (const s of sort.value) {
|
|
19
|
+
const [key, asc] = (s as string).split(',')
|
|
20
|
+
|
|
21
|
+
if (a[key] > b[key]) return asc === '-1' ? -1 : 1
|
|
22
|
+
if (a[key] < b[key]) return asc === '-1' ? 1 : -1
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return 0
|
|
26
|
+
})
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
function generateItems(x: number) {
|
|
30
|
+
return Array.from({ length: x }, (_, i) => ({
|
|
31
|
+
id: i + 1,
|
|
32
|
+
title: `Book ${i + 1}`,
|
|
33
|
+
description: 'Lorem ipsum dolor sit, amet consectetur adipisicing elit. Saepe, velit.',
|
|
34
|
+
published: Date.now() - x * i,
|
|
35
|
+
status: 'Tag label',
|
|
36
|
+
}))
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const items = ref(generateItems(1000))
|
|
40
|
+
</script>
|
|
41
|
+
|
|
42
|
+
<template>
|
|
43
|
+
<x-card>
|
|
44
|
+
<x-table
|
|
45
|
+
v-model:sort="sort"
|
|
46
|
+
class="h-[300px]"
|
|
47
|
+
:headers="headers"
|
|
48
|
+
:items="itemsSorted"
|
|
49
|
+
virtual-list
|
|
50
|
+
:virtual-list-item-height="54"
|
|
51
|
+
/>
|
|
52
|
+
</x-card>
|
|
53
|
+
</template>
|
|
@@ -11,6 +11,17 @@ declare const selectProps: {
|
|
|
11
11
|
type: StringConstructor;
|
|
12
12
|
default: string;
|
|
13
13
|
};
|
|
14
|
+
virtualList: BooleanConstructor;
|
|
15
|
+
virtualListOffsetTop: NumberConstructor;
|
|
16
|
+
virtualListOffsetBottom: NumberConstructor;
|
|
17
|
+
virtualListItemHeight: {
|
|
18
|
+
type: NumberConstructor;
|
|
19
|
+
default: number;
|
|
20
|
+
};
|
|
21
|
+
virtualListOverscan: {
|
|
22
|
+
type: NumberConstructor;
|
|
23
|
+
default: number;
|
|
24
|
+
};
|
|
14
25
|
modelValue: {
|
|
15
26
|
readonly type: PropType<string | number | boolean | object | any[] | undefined>;
|
|
16
27
|
readonly default: undefined;
|
|
@@ -73,6 +84,17 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
|
73
84
|
type: StringConstructor;
|
|
74
85
|
default: string;
|
|
75
86
|
};
|
|
87
|
+
virtualList: BooleanConstructor;
|
|
88
|
+
virtualListOffsetTop: NumberConstructor;
|
|
89
|
+
virtualListOffsetBottom: NumberConstructor;
|
|
90
|
+
virtualListItemHeight: {
|
|
91
|
+
type: NumberConstructor;
|
|
92
|
+
default: number;
|
|
93
|
+
};
|
|
94
|
+
virtualListOverscan: {
|
|
95
|
+
type: NumberConstructor;
|
|
96
|
+
default: number;
|
|
97
|
+
};
|
|
76
98
|
modelValue: {
|
|
77
99
|
readonly type: PropType<string | number | boolean | object | any[] | undefined>;
|
|
78
100
|
readonly default: undefined;
|
|
@@ -128,6 +150,17 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
|
128
150
|
type: StringConstructor;
|
|
129
151
|
default: string;
|
|
130
152
|
};
|
|
153
|
+
virtualList: BooleanConstructor;
|
|
154
|
+
virtualListOffsetTop: NumberConstructor;
|
|
155
|
+
virtualListOffsetBottom: NumberConstructor;
|
|
156
|
+
virtualListItemHeight: {
|
|
157
|
+
type: NumberConstructor;
|
|
158
|
+
default: number;
|
|
159
|
+
};
|
|
160
|
+
virtualListOverscan: {
|
|
161
|
+
type: NumberConstructor;
|
|
162
|
+
default: number;
|
|
163
|
+
};
|
|
131
164
|
modelValue: {
|
|
132
165
|
readonly type: PropType<string | number | boolean | object | any[] | undefined>;
|
|
133
166
|
readonly default: undefined;
|
|
@@ -186,6 +219,9 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
|
186
219
|
native: boolean;
|
|
187
220
|
filterable: boolean;
|
|
188
221
|
filterPlaceholder: string;
|
|
222
|
+
virtualList: boolean;
|
|
223
|
+
virtualListItemHeight: number;
|
|
224
|
+
virtualListOverscan: number;
|
|
189
225
|
}, {}>, {
|
|
190
226
|
"content-header"?(_: {}): any;
|
|
191
227
|
"content-footer"?(_: {}): any;
|