@antify/ui 2.0.0 → 2.2.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/README.md +13 -0
- package/dist/components/AntDropdown.vue +1 -1
- package/dist/components/AntModal.vue +1 -1
- package/dist/components/AntToaster.vue +1 -1
- package/dist/components/AntTooltip.vue +3 -1
- package/dist/components/__stories/AntTooltip.stories.d.ts +1 -0
- package/dist/components/__stories/AntTooltip.stories.js +8 -1
- package/dist/components/__stories/AntTooltip.stories.mjs +7 -0
- package/dist/components/buttons/AntButton.vue +0 -1
- package/dist/components/crud/AntCrudTableFilter.vue +18 -20
- package/dist/components/inputs/AntNumberInput.vue +40 -12
- package/dist/components/inputs/AntRangeSlider.vue +1 -1
- package/dist/components/inputs/AntSelect.vue +2 -1
- package/dist/components/inputs/AntTextarea.vue +1 -1
- package/dist/components/inputs/Elements/AntBaseInput.vue +2 -1
- package/dist/components/inputs/Elements/AntSelectMenu.vue +25 -26
- package/dist/components/inputs/__stories/AntNumberInput.stories.js +21 -1
- package/dist/components/inputs/__stories/AntNumberInput.stories.mjs +15 -1
- package/dist/components/inputs/__stories/AntSelect.stories.d.ts +1 -0
- package/dist/components/inputs/__stories/AntSelect.stories.js +36 -3
- package/dist/components/inputs/__stories/AntSelect.stories.mjs +34 -2
- package/dist/components/table/AntCollapsibleTableRowContent.vue +25 -0
- package/dist/components/table/AntTable.vue +112 -49
- package/dist/components/table/AntTd.vue +0 -4
- package/dist/components/table/__stories/AntTable.stories.d.ts +3 -0
- package/dist/components/table/__stories/AntTable.stories.js +146 -6
- package/dist/components/table/__stories/AntTable.stories.mjs +121 -5
- package/dist/components/table/__types/AntCollapsibleTable.types.d.ts +4 -0
- package/dist/components/table/__types/AntCollapsibleTable.types.js +11 -0
- package/dist/components/table/__types/AntCollapsibleTable.types.mjs +5 -0
- package/dist/components/table/__types/index.d.ts +1 -0
- package/dist/components/table/__types/index.js +11 -0
- package/dist/components/table/__types/index.mjs +1 -0
- package/dist/tailwind.config.d.ts +2 -1
- package/package.json +5 -3
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
import {AntTableSize, AntTableSortDirection, type TableHeader} from './__types/TableHeader.types';
|
|
3
3
|
import {computed, ref, type Ref, watch} from 'vue';
|
|
4
4
|
import {useVModel} from '@vueuse/core';
|
|
5
|
-
import {State} from '../../enums';
|
|
5
|
+
import {Size, State} from '../../enums';
|
|
6
6
|
import AntTh from './AntTh.vue';
|
|
7
7
|
import AntTd from './AntTd.vue';
|
|
8
8
|
import AntSpinner from '../AntSpinner.vue';
|
|
9
9
|
import AntSkeleton from '../AntSkeleton.vue';
|
|
10
|
+
import {hasSlotContent} from "@/utils";
|
|
11
|
+
import AntCollapsibleTableRowContent from "./AntCollapsibleTableRowContent.vue";
|
|
12
|
+
import {CollapseStrategy} from "@/components/table/__types";
|
|
13
|
+
import {faAngleDown, faAngleUp} from "@fortawesome/free-solid-svg-icons";
|
|
14
|
+
import AntButton from "../buttons/AntButton.vue";
|
|
15
|
+
import AntIcon from "../AntIcon.vue";
|
|
10
16
|
|
|
11
17
|
defineOptions({inheritAttrs: false});
|
|
12
18
|
|
|
@@ -29,15 +35,23 @@ const props = withDefaults(
|
|
|
29
35
|
showLightVersion?: boolean;
|
|
30
36
|
size?: AntTableSize;
|
|
31
37
|
headerColor?: string;
|
|
38
|
+
emptyStateText?: string;
|
|
39
|
+
collapseStrategy?: CollapseStrategy;
|
|
40
|
+
rowsCollapsed?: boolean;
|
|
32
41
|
}>(), {
|
|
33
42
|
rowKey: 'id',
|
|
34
43
|
loading: false,
|
|
35
44
|
selectableRows: false,
|
|
36
45
|
showLightVersion: false,
|
|
37
46
|
size: AntTableSize.md,
|
|
38
|
-
headerColor: 'bg-base-200'
|
|
47
|
+
headerColor: 'bg-base-200',
|
|
48
|
+
emptyStateText: 'We couldn\'t find any entry',
|
|
49
|
+
collapseStrategy: CollapseStrategy.single,
|
|
50
|
+
rowsCollapsed: true,
|
|
39
51
|
});
|
|
52
|
+
const slots = defineSlots();
|
|
40
53
|
|
|
54
|
+
const openItems = ref<number[]>([]);
|
|
41
55
|
const selected: Ref<Record<string, unknown> | undefined> = useVModel(props, 'selectedRow', emits);
|
|
42
56
|
const _loading: Ref<boolean> = useVModel(props, 'loading', emits);
|
|
43
57
|
const _showLightVersion = ref(props.showLightVersion);
|
|
@@ -51,6 +65,8 @@ const _headers = computed(() => {
|
|
|
51
65
|
return props.headers;
|
|
52
66
|
});
|
|
53
67
|
|
|
68
|
+
const maxColSpan = computed(() => _headers.value.length + (hasSlotContent(slots['rowFirstCell']) ? 1 : 0) + (hasSlotContent(slots['rowLastCell']) ? 1 : 0))
|
|
69
|
+
|
|
54
70
|
watch(() => props.showLightVersion, (val) => {
|
|
55
71
|
setTimeout(() => _showLightVersion.value = val, val ? 200 : 400);
|
|
56
72
|
});
|
|
@@ -80,11 +96,32 @@ function sortTable(header: TableHeader, newDirection: AntTableSortDirection) {
|
|
|
80
96
|
emits('updateSort', header, newDirection);
|
|
81
97
|
}
|
|
82
98
|
|
|
83
|
-
function rowClick(elem: Record<string, unknown>): void {
|
|
99
|
+
function rowClick(e: MouseEvent, elem: Record<string, unknown>): void {
|
|
100
|
+
e.preventDefault();
|
|
101
|
+
|
|
84
102
|
selected.value = elem;
|
|
85
103
|
|
|
86
104
|
emits('rowClick', elem);
|
|
87
105
|
}
|
|
106
|
+
|
|
107
|
+
function toggleRowContent(index: number) {
|
|
108
|
+
const isOpen = openItems.value.includes(index);
|
|
109
|
+
|
|
110
|
+
if (isOpen) {
|
|
111
|
+
openItems.value = props.collapseStrategy === CollapseStrategy.single && props.rowsCollapsed
|
|
112
|
+
? []
|
|
113
|
+
: openItems.value.filter(item => item !== index);
|
|
114
|
+
} else {
|
|
115
|
+
openItems.value = props.collapseStrategy === CollapseStrategy.single
|
|
116
|
+
? [index]
|
|
117
|
+
: [...openItems.value, index];
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Open all row contents by default
|
|
122
|
+
if (!props.rowsCollapsed) {
|
|
123
|
+
props.data.map((_, index) => openItems.value.push(index));
|
|
124
|
+
}
|
|
88
125
|
</script>
|
|
89
126
|
|
|
90
127
|
<template>
|
|
@@ -119,67 +156,93 @@ function rowClick(elem: Record<string, unknown>): void {
|
|
|
119
156
|
</AntTh>
|
|
120
157
|
</template>
|
|
121
158
|
|
|
159
|
+
<template v-if="!!$slots.afterRowContent">
|
|
160
|
+
<td/>
|
|
161
|
+
</template>
|
|
162
|
+
|
|
122
163
|
<slot name="headerLastCell"></slot>
|
|
123
164
|
</tr>
|
|
124
165
|
</thead>
|
|
125
166
|
|
|
126
167
|
<tbody class="bg-white relative">
|
|
127
168
|
<!-- TODO:: Add some kind of virtual list for very large tree data (or required pagination??) -->
|
|
128
|
-
<
|
|
129
|
-
v-for="(elem, rowIndex) in data"
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
169
|
+
<template
|
|
170
|
+
v-for="(elem, rowIndex) in data" :key="`table-row-${elem[rowKey]}-${rowIndex}`"
|
|
171
|
+
>
|
|
172
|
+
<tr
|
|
173
|
+
:id="elem[rowKey] as string"
|
|
174
|
+
:class="{
|
|
133
175
|
'bg-primary-200 text-primary-200-font transition-colors': elem === selected,
|
|
134
176
|
'bg-white text-for-white-bg-font': elem !== selected && rowIndex % 2 === 0,
|
|
135
177
|
'bg-base-100 text-base-100-font': elem !== selected && rowIndex % 2 !== 0,
|
|
136
178
|
'cursor-pointer': selectableRows,
|
|
137
179
|
'hover:bg-base-200': selectableRows && elem !== selected,
|
|
138
180
|
}"
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
181
|
+
>
|
|
182
|
+
<slot
|
|
183
|
+
name="rowFirstCell"
|
|
184
|
+
v-bind="{ elem }"
|
|
185
|
+
/>
|
|
144
186
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
187
|
+
<template v-for="(header, colIndex) in _headers">
|
|
188
|
+
<AntTd
|
|
189
|
+
v-if="!_showLightVersion || (_showLightVersion && header.lightVersion)"
|
|
190
|
+
:key="`table-cell-${header.identifier}-${colIndex}`"
|
|
191
|
+
:header="header"
|
|
192
|
+
:element="elem"
|
|
193
|
+
:align="header.align"
|
|
194
|
+
:size="size"
|
|
195
|
+
@click="(e) => rowClick(e, elem)"
|
|
196
|
+
>
|
|
197
|
+
<template #beforeCellContent="props">
|
|
198
|
+
<slot
|
|
199
|
+
name="beforeCellContent"
|
|
200
|
+
v-bind="{...props, colIndex, rowIndex}"
|
|
201
|
+
/>
|
|
202
|
+
</template>
|
|
161
203
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
204
|
+
<template #cellContent="props">
|
|
205
|
+
<slot
|
|
206
|
+
name="cellContent"
|
|
207
|
+
v-bind="{...props, colIndex, rowIndex}"
|
|
208
|
+
/>
|
|
209
|
+
</template>
|
|
168
210
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
211
|
+
<template #afterCellContent="props">
|
|
212
|
+
<slot
|
|
213
|
+
name="afterCellContent"
|
|
214
|
+
v-bind="{...props, colIndex, rowIndex}"
|
|
215
|
+
/>
|
|
216
|
+
</template>
|
|
217
|
+
</AntTd>
|
|
218
|
+
</template>
|
|
177
219
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
220
|
+
<template v-if="!!$slots.afterRowContent">
|
|
221
|
+
<td class="whitespace-nowrap text-sm font-medium relative px-2 py-0 h-9 text-right"
|
|
222
|
+
@click="(e) => rowClick(e, elem)">
|
|
223
|
+
<AntButton @click="toggleRowContent(rowIndex)" :size="Size.xs2">
|
|
224
|
+
<AntIcon :icon="openItems.includes(rowIndex) ? faAngleUp : faAngleDown"/>
|
|
225
|
+
</AntButton>
|
|
226
|
+
</td>
|
|
227
|
+
</template>
|
|
228
|
+
|
|
229
|
+
<slot
|
|
230
|
+
name="rowLastCell"
|
|
231
|
+
v-bind="{ elem }"
|
|
232
|
+
/>
|
|
233
|
+
</tr>
|
|
234
|
+
|
|
235
|
+
<template v-if="!!$slots.afterRowContent">
|
|
236
|
+
<tr>
|
|
237
|
+
<td :colspan="maxColSpan + 1" class="p-0">
|
|
238
|
+
<AntCollapsibleTableRowContent :is-open="openItems.includes(rowIndex)"
|
|
239
|
+
>
|
|
240
|
+
<slot name="afterRowContent" v-bind="{ element: elem, rowIndex }"/>
|
|
241
|
+
</AntCollapsibleTableRowContent>
|
|
242
|
+
</td>
|
|
243
|
+
</tr>
|
|
244
|
+
</template>
|
|
245
|
+
</template>
|
|
183
246
|
|
|
184
247
|
<tr v-if="data.length <= 0 && !_loading">
|
|
185
248
|
<td
|
|
@@ -188,7 +251,7 @@ function rowClick(elem: Record<string, unknown>): void {
|
|
|
188
251
|
>
|
|
189
252
|
<slot name="emptyState">
|
|
190
253
|
<div class="flex items-center flex-col">
|
|
191
|
-
<span class="font-semibold">
|
|
254
|
+
<span class="font-semibold">{{ emptyStateText }}</span>
|
|
192
255
|
</div>
|
|
193
256
|
</slot>
|
|
194
257
|
</td>
|
|
@@ -7,3 +7,6 @@ export declare const Docs: Story;
|
|
|
7
7
|
export declare const Empty: Story;
|
|
8
8
|
export declare const Skeleton: Story;
|
|
9
9
|
export declare const Loading: Story;
|
|
10
|
+
export declare const Collapsible: Story;
|
|
11
|
+
export declare const MultipleCollapseStrategy: Story;
|
|
12
|
+
export declare const DefaultCollapseOpen: Story;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
module.exports = exports.Skeleton = exports.Loading = exports.Empty = exports.Docs = void 0;
|
|
6
|
+
module.exports = exports.Skeleton = exports.MultipleCollapseStrategy = exports.Loading = exports.Empty = exports.Docs = exports.DefaultCollapseOpen = exports.Collapsible = void 0;
|
|
7
7
|
var _AntTable = _interopRequireDefault(require("../AntTable.vue"));
|
|
8
8
|
var _TableHeader = require("../__types/TableHeader.types");
|
|
9
9
|
var _vue = require("vue");
|
|
@@ -169,8 +169,8 @@ const Docs = exports.Docs = {
|
|
|
169
169
|
<div class="h-96 border border-dashed border-base-300">
|
|
170
170
|
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val">
|
|
171
171
|
<template #cellContent="{element: entry, header}">
|
|
172
|
-
<div v-if="header.identifier === '
|
|
173
|
-
<AntSwitch v-model="entry.
|
|
172
|
+
<div v-if="header.identifier === 'employed'">
|
|
173
|
+
<AntSwitch v-model="entry.employed"/>
|
|
174
174
|
</div>
|
|
175
175
|
</template>
|
|
176
176
|
</AntTable>
|
|
@@ -196,8 +196,8 @@ const Docs = exports.Docs = {
|
|
|
196
196
|
rowClassList: "",
|
|
197
197
|
type: _TableHeader.AntTableRowTypes.text
|
|
198
198
|
}, {
|
|
199
|
-
title: "
|
|
200
|
-
identifier: "
|
|
199
|
+
title: "Employed",
|
|
200
|
+
identifier: "employed",
|
|
201
201
|
rowClassList: "",
|
|
202
202
|
type: _TableHeader.AntTableRowTypes.slot
|
|
203
203
|
}],
|
|
@@ -205,7 +205,42 @@ const Docs = exports.Docs = {
|
|
|
205
205
|
}
|
|
206
206
|
};
|
|
207
207
|
const Empty = exports.Empty = {
|
|
208
|
-
render:
|
|
208
|
+
render: args => ({
|
|
209
|
+
components: {
|
|
210
|
+
AntTable: _AntTable.default,
|
|
211
|
+
AntSwitch: _AntSwitch.default
|
|
212
|
+
},
|
|
213
|
+
setup() {
|
|
214
|
+
const selected = (0, _vue.ref)();
|
|
215
|
+
return {
|
|
216
|
+
args,
|
|
217
|
+
selected
|
|
218
|
+
};
|
|
219
|
+
},
|
|
220
|
+
template: `
|
|
221
|
+
<div class="flex flex-col gap-2">
|
|
222
|
+
<div class="h-96 border border-dashed border-base-300">
|
|
223
|
+
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val">
|
|
224
|
+
<template #cellContent="{element: entry, header}">
|
|
225
|
+
<div v-if="header.identifier === 'employed'">
|
|
226
|
+
<AntSwitch v-model="entry.employed"/>
|
|
227
|
+
</div>
|
|
228
|
+
</template>
|
|
229
|
+
</AntTable>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
<div class="h-96 border border-dashed border-base-300">
|
|
233
|
+
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val" empty-state-text="Custom Empty State Text">
|
|
234
|
+
<template #cellContent="{element: entry, header}">
|
|
235
|
+
<div v-if="header.identifier === 'employed'">
|
|
236
|
+
<AntSwitch v-model="entry.employed"/>
|
|
237
|
+
</div>
|
|
238
|
+
</template>
|
|
239
|
+
</AntTable>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
`
|
|
243
|
+
}),
|
|
209
244
|
args: {
|
|
210
245
|
headers: [{
|
|
211
246
|
title: "Name",
|
|
@@ -298,4 +333,109 @@ const Loading = exports.Loading = {
|
|
|
298
333
|
}],
|
|
299
334
|
data: testData.value
|
|
300
335
|
}
|
|
336
|
+
};
|
|
337
|
+
const Collapsible = exports.Collapsible = {
|
|
338
|
+
render: args => ({
|
|
339
|
+
components: {
|
|
340
|
+
AntTable: _AntTable.default,
|
|
341
|
+
AntSwitch: _AntSwitch.default
|
|
342
|
+
},
|
|
343
|
+
setup() {
|
|
344
|
+
const selected = (0, _vue.ref)();
|
|
345
|
+
return {
|
|
346
|
+
args,
|
|
347
|
+
selected
|
|
348
|
+
};
|
|
349
|
+
},
|
|
350
|
+
template: `
|
|
351
|
+
<div class="h-96 border border-dashed border-base-300">
|
|
352
|
+
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val">
|
|
353
|
+
<template #cellContent="{element: entry, header}">
|
|
354
|
+
<div v-if="header.identifier === 'employed'">
|
|
355
|
+
<AntSwitch v-model="entry.employed"/>
|
|
356
|
+
</div>
|
|
357
|
+
</template>
|
|
358
|
+
|
|
359
|
+
<template #afterRowContent="{element, rowIndex}">
|
|
360
|
+
<div class="p-4">
|
|
361
|
+
<pre>
|
|
362
|
+
{{element}}
|
|
363
|
+
</pre>
|
|
364
|
+
</div>
|
|
365
|
+
</template>
|
|
366
|
+
</AntTable>
|
|
367
|
+
</div>
|
|
368
|
+
`
|
|
369
|
+
}),
|
|
370
|
+
args: Docs.args
|
|
371
|
+
};
|
|
372
|
+
const MultipleCollapseStrategy = exports.MultipleCollapseStrategy = {
|
|
373
|
+
render: args => ({
|
|
374
|
+
components: {
|
|
375
|
+
AntTable: _AntTable.default,
|
|
376
|
+
AntSwitch: _AntSwitch.default
|
|
377
|
+
},
|
|
378
|
+
setup() {
|
|
379
|
+
const selected = (0, _vue.ref)();
|
|
380
|
+
return {
|
|
381
|
+
args,
|
|
382
|
+
selected
|
|
383
|
+
};
|
|
384
|
+
},
|
|
385
|
+
template: `
|
|
386
|
+
<div class="h-96 border border-dashed border-base-300">
|
|
387
|
+
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val" collapse-strategy="multiple">
|
|
388
|
+
<template #cellContent="{element: entry, header}">
|
|
389
|
+
<div v-if="header.identifier === 'employed'">
|
|
390
|
+
<AntSwitch v-model="entry.employed"/>
|
|
391
|
+
</div>
|
|
392
|
+
</template>
|
|
393
|
+
|
|
394
|
+
<template #afterRowContent="{element, rowIndex}">
|
|
395
|
+
<div class="p-4">
|
|
396
|
+
<pre>
|
|
397
|
+
{{JSON.stringify(element, null, 2)}}
|
|
398
|
+
</pre>
|
|
399
|
+
</div>
|
|
400
|
+
</template>
|
|
401
|
+
</AntTable>
|
|
402
|
+
</div>
|
|
403
|
+
`
|
|
404
|
+
}),
|
|
405
|
+
args: Docs.args
|
|
406
|
+
};
|
|
407
|
+
const DefaultCollapseOpen = exports.DefaultCollapseOpen = {
|
|
408
|
+
render: args => ({
|
|
409
|
+
components: {
|
|
410
|
+
AntTable: _AntTable.default,
|
|
411
|
+
AntSwitch: _AntSwitch.default
|
|
412
|
+
},
|
|
413
|
+
setup() {
|
|
414
|
+
const selected = (0, _vue.ref)();
|
|
415
|
+
return {
|
|
416
|
+
args,
|
|
417
|
+
selected
|
|
418
|
+
};
|
|
419
|
+
},
|
|
420
|
+
template: `
|
|
421
|
+
<div class="h-96 border border-dashed border-base-300">
|
|
422
|
+
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val" :rows-collapsed="false">
|
|
423
|
+
<template #cellContent="{element: entry, header}">
|
|
424
|
+
<div v-if="header.identifier === 'employed'">
|
|
425
|
+
<AntSwitch v-model="entry.employed"/>
|
|
426
|
+
</div>
|
|
427
|
+
</template>
|
|
428
|
+
|
|
429
|
+
<template #afterRowContent="{element, rowIndex}">
|
|
430
|
+
<div class="p-4">
|
|
431
|
+
<pre>
|
|
432
|
+
{{JSON.stringify(element, null, 2)}}
|
|
433
|
+
</pre>
|
|
434
|
+
</div>
|
|
435
|
+
</template>
|
|
436
|
+
</AntTable>
|
|
437
|
+
</div>
|
|
438
|
+
`
|
|
439
|
+
}),
|
|
440
|
+
args: Docs.args
|
|
301
441
|
};
|
|
@@ -113,8 +113,8 @@ export const Docs = {
|
|
|
113
113
|
<div class="h-96 border border-dashed border-base-300">
|
|
114
114
|
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val">
|
|
115
115
|
<template #cellContent="{element: entry, header}">
|
|
116
|
-
<div v-if="header.identifier === '
|
|
117
|
-
<AntSwitch v-model="entry.
|
|
116
|
+
<div v-if="header.identifier === 'employed'">
|
|
117
|
+
<AntSwitch v-model="entry.employed"/>
|
|
118
118
|
</div>
|
|
119
119
|
</template>
|
|
120
120
|
</AntTable>
|
|
@@ -144,8 +144,8 @@ export const Docs = {
|
|
|
144
144
|
type: AntTableRowTypes.text
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
|
-
title: "
|
|
148
|
-
identifier: "
|
|
147
|
+
title: "Employed",
|
|
148
|
+
identifier: "employed",
|
|
149
149
|
rowClassList: "",
|
|
150
150
|
type: AntTableRowTypes.slot
|
|
151
151
|
}
|
|
@@ -154,7 +154,36 @@ export const Docs = {
|
|
|
154
154
|
}
|
|
155
155
|
};
|
|
156
156
|
export const Empty = {
|
|
157
|
-
render:
|
|
157
|
+
render: (args) => ({
|
|
158
|
+
components: { AntTable, AntSwitch },
|
|
159
|
+
setup() {
|
|
160
|
+
const selected = ref();
|
|
161
|
+
return { args, selected };
|
|
162
|
+
},
|
|
163
|
+
template: `
|
|
164
|
+
<div class="flex flex-col gap-2">
|
|
165
|
+
<div class="h-96 border border-dashed border-base-300">
|
|
166
|
+
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val">
|
|
167
|
+
<template #cellContent="{element: entry, header}">
|
|
168
|
+
<div v-if="header.identifier === 'employed'">
|
|
169
|
+
<AntSwitch v-model="entry.employed"/>
|
|
170
|
+
</div>
|
|
171
|
+
</template>
|
|
172
|
+
</AntTable>
|
|
173
|
+
</div>
|
|
174
|
+
|
|
175
|
+
<div class="h-96 border border-dashed border-base-300">
|
|
176
|
+
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val" empty-state-text="Custom Empty State Text">
|
|
177
|
+
<template #cellContent="{element: entry, header}">
|
|
178
|
+
<div v-if="header.identifier === 'employed'">
|
|
179
|
+
<AntSwitch v-model="entry.employed"/>
|
|
180
|
+
</div>
|
|
181
|
+
</template>
|
|
182
|
+
</AntTable>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
`
|
|
186
|
+
}),
|
|
158
187
|
args: {
|
|
159
188
|
headers: [
|
|
160
189
|
{
|
|
@@ -263,3 +292,90 @@ export const Loading = {
|
|
|
263
292
|
data: testData.value
|
|
264
293
|
}
|
|
265
294
|
};
|
|
295
|
+
export const Collapsible = {
|
|
296
|
+
render: (args) => ({
|
|
297
|
+
components: { AntTable, AntSwitch },
|
|
298
|
+
setup() {
|
|
299
|
+
const selected = ref();
|
|
300
|
+
return { args, selected };
|
|
301
|
+
},
|
|
302
|
+
template: `
|
|
303
|
+
<div class="h-96 border border-dashed border-base-300">
|
|
304
|
+
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val">
|
|
305
|
+
<template #cellContent="{element: entry, header}">
|
|
306
|
+
<div v-if="header.identifier === 'employed'">
|
|
307
|
+
<AntSwitch v-model="entry.employed"/>
|
|
308
|
+
</div>
|
|
309
|
+
</template>
|
|
310
|
+
|
|
311
|
+
<template #afterRowContent="{element, rowIndex}">
|
|
312
|
+
<div class="p-4">
|
|
313
|
+
<pre>
|
|
314
|
+
{{element}}
|
|
315
|
+
</pre>
|
|
316
|
+
</div>
|
|
317
|
+
</template>
|
|
318
|
+
</AntTable>
|
|
319
|
+
</div>
|
|
320
|
+
`
|
|
321
|
+
}),
|
|
322
|
+
args: Docs.args
|
|
323
|
+
};
|
|
324
|
+
export const MultipleCollapseStrategy = {
|
|
325
|
+
render: (args) => ({
|
|
326
|
+
components: { AntTable, AntSwitch },
|
|
327
|
+
setup() {
|
|
328
|
+
const selected = ref();
|
|
329
|
+
return { args, selected };
|
|
330
|
+
},
|
|
331
|
+
template: `
|
|
332
|
+
<div class="h-96 border border-dashed border-base-300">
|
|
333
|
+
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val" collapse-strategy="multiple">
|
|
334
|
+
<template #cellContent="{element: entry, header}">
|
|
335
|
+
<div v-if="header.identifier === 'employed'">
|
|
336
|
+
<AntSwitch v-model="entry.employed"/>
|
|
337
|
+
</div>
|
|
338
|
+
</template>
|
|
339
|
+
|
|
340
|
+
<template #afterRowContent="{element, rowIndex}">
|
|
341
|
+
<div class="p-4">
|
|
342
|
+
<pre>
|
|
343
|
+
{{JSON.stringify(element, null, 2)}}
|
|
344
|
+
</pre>
|
|
345
|
+
</div>
|
|
346
|
+
</template>
|
|
347
|
+
</AntTable>
|
|
348
|
+
</div>
|
|
349
|
+
`
|
|
350
|
+
}),
|
|
351
|
+
args: Docs.args
|
|
352
|
+
};
|
|
353
|
+
export const DefaultCollapseOpen = {
|
|
354
|
+
render: (args) => ({
|
|
355
|
+
components: { AntTable, AntSwitch },
|
|
356
|
+
setup() {
|
|
357
|
+
const selected = ref();
|
|
358
|
+
return { args, selected };
|
|
359
|
+
},
|
|
360
|
+
template: `
|
|
361
|
+
<div class="h-96 border border-dashed border-base-300">
|
|
362
|
+
<AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val" :rows-collapsed="false">
|
|
363
|
+
<template #cellContent="{element: entry, header}">
|
|
364
|
+
<div v-if="header.identifier === 'employed'">
|
|
365
|
+
<AntSwitch v-model="entry.employed"/>
|
|
366
|
+
</div>
|
|
367
|
+
</template>
|
|
368
|
+
|
|
369
|
+
<template #afterRowContent="{element, rowIndex}">
|
|
370
|
+
<div class="p-4">
|
|
371
|
+
<pre>
|
|
372
|
+
{{JSON.stringify(element, null, 2)}}
|
|
373
|
+
</pre>
|
|
374
|
+
</div>
|
|
375
|
+
</template>
|
|
376
|
+
</AntTable>
|
|
377
|
+
</div>
|
|
378
|
+
`
|
|
379
|
+
}),
|
|
380
|
+
args: Docs.args
|
|
381
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CollapseStrategy = void 0;
|
|
7
|
+
var CollapseStrategy = exports.CollapseStrategy = /* @__PURE__ */(CollapseStrategy2 => {
|
|
8
|
+
CollapseStrategy2["single"] = "single";
|
|
9
|
+
CollapseStrategy2["multiple"] = "multiple";
|
|
10
|
+
return CollapseStrategy2;
|
|
11
|
+
})(CollapseStrategy || {});
|
|
@@ -13,4 +13,15 @@ Object.keys(_TableHeader).forEach(function (key) {
|
|
|
13
13
|
return _TableHeader[key];
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
|
+
});
|
|
17
|
+
var _AntCollapsibleTable = require("./AntCollapsibleTable.types");
|
|
18
|
+
Object.keys(_AntCollapsibleTable).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _AntCollapsibleTable[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _AntCollapsibleTable[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
16
27
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antify/ui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -58,7 +58,8 @@
|
|
|
58
58
|
"@vuepic/vue-datepicker": "^6.1.0",
|
|
59
59
|
"@vueuse/components": "^10.7.2",
|
|
60
60
|
"@vueuse/core": "^10.7.2",
|
|
61
|
-
"@vueuse/router": "^10.7.2"
|
|
61
|
+
"@vueuse/router": "^10.7.2",
|
|
62
|
+
"big.js": "^6.2.2"
|
|
62
63
|
},
|
|
63
64
|
"devDependencies": {
|
|
64
65
|
"@antify/validate": "^1.14.0",
|
|
@@ -73,6 +74,7 @@
|
|
|
73
74
|
"@storybook/vue3": "^8.2.9",
|
|
74
75
|
"@storybook/vue3-vite": "^8.2.9",
|
|
75
76
|
"@tsconfig/node20": "^20.1.4",
|
|
77
|
+
"@types/big.js": "^6.2.2",
|
|
76
78
|
"@types/jsdom": "^21.1.7",
|
|
77
79
|
"@types/node": "^20.14.5",
|
|
78
80
|
"@vitejs/plugin-vue": "^5.0.5",
|
|
@@ -84,7 +86,7 @@
|
|
|
84
86
|
"standard-version": "^9.5.0",
|
|
85
87
|
"storybook": "^8.2.9",
|
|
86
88
|
"storybook-vue3-router": "^5.0.0",
|
|
87
|
-
"typescript": "~5.
|
|
89
|
+
"typescript": "~5.5.0",
|
|
88
90
|
"unbuild": "^2.0.0",
|
|
89
91
|
"vite": "^5.3.1",
|
|
90
92
|
"vitest": "^1.6.0",
|