@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.
Files changed (37) hide show
  1. package/docs/pages/component/select/usage.vue +17 -5
  2. package/docs/pages/component/table/index.vue +7 -0
  3. package/docs/pages/component/table/virtual.vue +53 -0
  4. package/lib/components/select/Select.vue.d.ts +36 -0
  5. package/lib/components/select/Select.vue.js +224 -201
  6. package/lib/components/select/theme/Select.base.theme.js +1 -1
  7. package/lib/components/table/Table.vue.d.ts +91 -4
  8. package/lib/components/table/Table.vue.js +214 -180
  9. package/lib/components/table/TableHead.vue.d.ts +10 -2
  10. package/lib/components/table/TableHead.vue.js +16 -13
  11. package/lib/components/table/TableHeader.vue.d.ts +0 -4
  12. package/lib/components/table/TableHeader.vue.js +9 -10
  13. package/lib/components/table/theme/TableHead.base.theme.js +7 -4
  14. package/lib/components/table/theme/TableHead.carbon.theme.js +7 -4
  15. package/lib/components/table/theme/TableHeader.base.theme.js +3 -3
  16. package/lib/components/table/theme/TableHeader.carbon.theme.js +1 -1
  17. package/lib/composables/index.d.ts +1 -0
  18. package/lib/composables/useVirtualList.d.ts +48 -0
  19. package/lib/composables/useVirtualList.js +123 -0
  20. package/lib/index.js +34 -32
  21. package/lib/index.umd.js +4 -4
  22. 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
  23. package/lib/version.d.ts +1 -1
  24. package/lib/version.js +1 -1
  25. package/package.json +1 -1
  26. package/src/components/select/Select.vue +56 -26
  27. package/src/components/select/theme/Select.base.theme.ts +1 -1
  28. package/src/components/table/Table.vue +152 -113
  29. package/src/components/table/TableHead.vue +6 -2
  30. package/src/components/table/TableHeader.vue +0 -1
  31. package/src/components/table/theme/TableHead.base.theme.ts +7 -1
  32. package/src/components/table/theme/TableHead.carbon.theme.ts +7 -1
  33. package/src/components/table/theme/TableHeader.base.theme.ts +0 -2
  34. package/src/components/table/theme/TableHeader.carbon.theme.ts +0 -2
  35. package/src/composables/index.ts +1 -0
  36. package/src/composables/useVirtualList.ts +286 -0
  37. 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
- for (let i = 0; i < 20; i++) {
12
- options.value.push({ value: i.toString(), label: 'Option ' + i })
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="selected"
29
- label="Dropdown select"
38
+ v-model="selected2"
39
+ label="Filterable - virtual list"
30
40
  placeholder="Placeholder"
31
41
  filterable
32
- :options="options"
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;