lkt-table 1.2.0 → 1.2.1
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/dist/build.d.ts +398 -398
- package/dist/build.js +427 -406
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/components/DropButton.vue +11 -1
- package/src/components/LktTableRow.vue +6 -1
- package/src/lib-components/LktTable.vue +17 -3
- package/theme/default.css +2 -0
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.lkt-table-page,.lkt-table-page-content-wrapper{display:flex;width:100%;flex-direction:column;gap:var(--lkt-table-page-gap)}.lkt-table{width:var(--lkt-table-width);overflow-x:auto;font-family:var(--lkt-table-font-family),serif}.lkt-table>table{width:100%;max-width:100%;border-collapse:separate;border-radius:var(--lkt-table-border-radius);border-spacing:0}.lkt-table th,.lkt-table td{vertical-align:middle;text-align:var(--lkt-table-text-align);padding:var(--lkt-table-padding-row);font-size:var(--lkt-table-font-size-row);color:var(--lkt-table-color-row)}.lkt-table th{font-family:var(--lkt-table-font-family-header),serif;padding:var(--lkt-table-padding-header)}.lkt-table thead tr{background-color:var(--lkt-table-bg-header)}.lkt-table tbody tr{background-color:var(--lkt-table-bg-row)}.lkt-table tbody tr:nth-child(odd){background-color:var(--lkt-table-bg-row-odd)}.lkt-table [data-sort=asc]>div,.lkt-table [data-sort=desc]>div{display:inline-block}.lkt-table [data-sort=asc]>div:after,.lkt-table [data-sort=desc]>div:after{font-family:var(--lkt-table-font-family-sort-icon),serif;display:inline-block;font-size:var(--lkt-table-font-size-sort-icon)}.lkt-table [data-sort=asc]>div:after{content:var(--lkt-table-sort-icon-content-asc)}.lkt-table [data-sort=desc]>div:after{content:var(--lkt-table-sort-icon-content-desc)}.lkt-table td[data-role=drag-indicator],.lkt-table td[data-role=invalid-drag-indicator]{width:var(--lkt-table-width-drag);height:40px;padding:0!important;position:relative;background:#eee;cursor:pointer}.lkt-table td[data-role=drag-indicator]:before,.lkt-table td[data-role=invalid-drag-indicator]:before{content:"";display:block;background:#eee;width:18px;height:36px;margin:auto}.lkt-table td[data-role=drag-indicator]:after,.lkt-table td[data-role=invalid-drag-indicator]:after{content:"…";color:#000;display:block;position:absolute;top:50%;left:50%;font-weight:700;width:15px;height:7px;transform:rotate(90deg);transform-origin:center center}[data-lkt=empty-table]{border:1px solid #ddd;border-radius:var(--lkt-table-border-radius);width:100%;padding:10px;background-color:#f8f7e5;font-family:var(--lkt-table-font-family);font-size:13px;color:#444;text-align:var(--lkt-table-text-align)}.sortable-chosen{border:var(--lkt-table-border-sortable-chosen)}.sortable-chosen.ghost{background:var(--lkt-table-bg-sortable-chosen-ghost)}.lkt-table td.lkt-table-nav-cell{padding:0}.lkt-table-nav-container{display:flex;align-items:center;flex-direction:column;justify-content:center}.lkt-table-page-buttons{position:sticky;top:calc(-1 * var(--lkt-table-gap-buttons));display:flex;align-items:center;gap:var(--lkt-table-gap-buttons);transition:all linear .15s;background:transparent;z-index:2}.lkt-table-page-buttons-bottom{justify-content:center}.lkt-table-page-buttons>.switch-edition-mode{margin-left:auto}
|
|
1
|
+
.lkt-table-page,.lkt-table-page-content-wrapper{display:flex;width:100%;flex-direction:column;gap:var(--lkt-table-page-gap)}.lkt-table{width:var(--lkt-table-width);overflow-x:auto;font-family:var(--lkt-table-font-family),serif}.lkt-table>table{width:100%;max-width:100%;border-collapse:separate;border-radius:var(--lkt-table-border-radius);border-spacing:0}.lkt-table th,.lkt-table td{vertical-align:middle;text-align:var(--lkt-table-text-align);padding:var(--lkt-table-padding-row);font-size:var(--lkt-table-font-size-row);color:var(--lkt-table-color-row)}.lkt-table th{font-family:var(--lkt-table-font-family-header),serif;padding:var(--lkt-table-padding-header)}.lkt-table thead tr{background-color:var(--lkt-table-bg-header)}.lkt-table tbody tr{background-color:var(--lkt-table-bg-row)}.lkt-table tbody tr:nth-child(odd){background-color:var(--lkt-table-bg-row-odd)}.lkt-table [data-sort=asc]>div,.lkt-table [data-sort=desc]>div{display:inline-block}.lkt-table [data-sort=asc]>div:after,.lkt-table [data-sort=desc]>div:after{font-family:var(--lkt-table-font-family-sort-icon),serif;display:inline-block;font-size:var(--lkt-table-font-size-sort-icon)}.lkt-table [data-sort=asc]>div:after{content:var(--lkt-table-sort-icon-content-asc)}.lkt-table [data-sort=desc]>div:after{content:var(--lkt-table-sort-icon-content-desc)}.lkt-table td[data-role=drag-indicator],.lkt-table td[data-role=invalid-drag-indicator]{width:var(--lkt-table-width-drag);height:40px;padding:0!important;position:relative;background:#eee;cursor:pointer}.lkt-table td[data-role=drag-indicator]:before,.lkt-table td[data-role=invalid-drag-indicator]:before{content:"";display:block;background:#eee;width:18px;height:36px;margin:auto}.lkt-table td[data-role=drag-indicator]:after,.lkt-table td[data-role=invalid-drag-indicator]:after{content:"…";color:#000;display:block;position:absolute;top:50%;left:50%;font-weight:700;width:15px;height:7px;transform:rotate(90deg);transform-origin:center center}[data-lkt=empty-table]{border:1px solid #ddd;border-radius:var(--lkt-table-border-radius);width:100%;padding:10px;background-color:#f8f7e5;font-family:var(--lkt-table-font-family);font-size:13px;color:#444;text-align:var(--lkt-table-text-align)}.sortable-chosen{border:var(--lkt-table-border-sortable-chosen)}.sortable-chosen.ghost{background:var(--lkt-table-bg-sortable-chosen-ghost)}.lkt-table td.lkt-table-nav-cell{padding:0}.lkt-table-nav-container{display:flex;align-items:center;flex-direction:column;justify-content:center}.lkt-table-page-buttons{position:sticky;top:calc(-1 * var(--lkt-table-gap-buttons));display:flex;align-items:center;gap:var(--lkt-table-gap-buttons);transition:all linear .15s;background:transparent;z-index:2}.lkt-table-page-buttons-bottom{justify-content:center}.lkt-table-page-buttons>.switch-edition-mode{margin-left:auto}.lkt-table .lkt-table-col-drop{width:var(--lkt-table-width-col-drop);text-align:var(--lkt-table-text-align-col-drop)}
|
package/package.json
CHANGED
|
@@ -2,15 +2,22 @@
|
|
|
2
2
|
import {computed} from "vue";
|
|
3
3
|
import {Settings} from "../settings/Settings";
|
|
4
4
|
import {__} from "lkt-i18n";
|
|
5
|
+
import {LktObject} from "lkt-ts-interfaces";
|
|
5
6
|
|
|
6
7
|
const emit = defineEmits(['click']);
|
|
7
8
|
|
|
8
9
|
const props = withDefaults(defineProps<{
|
|
9
10
|
disabled: boolean
|
|
10
|
-
text:
|
|
11
|
+
text: string
|
|
12
|
+
confirm: string
|
|
13
|
+
resource: string
|
|
14
|
+
resourceData: LktObject
|
|
11
15
|
}>(), {
|
|
12
16
|
disabled: false,
|
|
13
17
|
text: '',
|
|
18
|
+
confirm: '',
|
|
19
|
+
resource: '',
|
|
20
|
+
resourceData: () => ({}),
|
|
14
21
|
});
|
|
15
22
|
|
|
16
23
|
const hasButtonSlot = computed(() => {
|
|
@@ -30,6 +37,9 @@ const hasButtonSlot = computed(() => {
|
|
|
30
37
|
<template>
|
|
31
38
|
<lkt-button
|
|
32
39
|
palette="table-delete"
|
|
40
|
+
:resource="resource"
|
|
41
|
+
:resource-data="resourceData"
|
|
42
|
+
:confirm-modal="confirm"
|
|
33
43
|
:disabled="disabled"
|
|
34
44
|
@click.prevent.stop="emit('click')">
|
|
35
45
|
<template v-if="hasButtonSlot">
|
|
@@ -26,6 +26,7 @@ const props = withDefaults(defineProps<{
|
|
|
26
26
|
emptyColumns: string[]
|
|
27
27
|
dropConfirm: string
|
|
28
28
|
dropText: string
|
|
29
|
+
dropResource: string
|
|
29
30
|
}>(), {
|
|
30
31
|
modelValue: () => ({}),
|
|
31
32
|
isDraggable: true,
|
|
@@ -41,6 +42,7 @@ const props = withDefaults(defineProps<{
|
|
|
41
42
|
emptyColumns: () => [],
|
|
42
43
|
dropConfirm: '',
|
|
43
44
|
dropText: '',
|
|
45
|
+
dropResource: '',
|
|
44
46
|
});
|
|
45
47
|
|
|
46
48
|
const Item = ref(props.modelValue);
|
|
@@ -139,8 +141,11 @@ watch(Item, (v) => {
|
|
|
139
141
|
</template>
|
|
140
142
|
</td>
|
|
141
143
|
</template>
|
|
142
|
-
<td v-if="canDrop && editModeEnabled" class="lkt-table-
|
|
144
|
+
<td v-if="canDrop && editModeEnabled" class="lkt-table-col-drop">
|
|
143
145
|
<drop-button
|
|
146
|
+
:resource="dropResource"
|
|
147
|
+
:resource-data="Item"
|
|
148
|
+
:confirm="dropConfirm"
|
|
144
149
|
:text="dropText"
|
|
145
150
|
@click="onClickDrop"/>
|
|
146
151
|
</td>
|
|
@@ -111,9 +111,11 @@ const Sorter = ref(typeof props.sorter === 'function' ? props.sorter : defaultTa
|
|
|
111
111
|
tableBody = ref(null),
|
|
112
112
|
Columns = ref(props.columns);
|
|
113
113
|
|
|
114
|
+
let basePerms: string[] = [];
|
|
114
115
|
const Page = ref(props.page),
|
|
115
116
|
loading = ref(true),
|
|
116
117
|
firstLoadReady = ref(false),
|
|
118
|
+
perms = ref(basePerms),
|
|
117
119
|
paginator = ref(null),
|
|
118
120
|
sortableObject = ref({}),
|
|
119
121
|
dataState = ref(new DataState({items: Items.value}, props.dataStateConfig)),
|
|
@@ -127,6 +129,9 @@ const onResults = (r: any) => {
|
|
|
127
129
|
firstLoadReady.value = true;
|
|
128
130
|
dataState.value.store({items: Items.value}).turnStoredIntoOriginal();
|
|
129
131
|
},
|
|
132
|
+
onPerms = (r: string[]) => {
|
|
133
|
+
perms.value = r;
|
|
134
|
+
},
|
|
130
135
|
onLoading = () => nextTick(() => loading.value = true),
|
|
131
136
|
doRefresh = () => {
|
|
132
137
|
//@ts-ignore
|
|
@@ -231,7 +236,11 @@ const emptyColumns = computed(() => {
|
|
|
231
236
|
return __(props.editModeText.substring(3));
|
|
232
237
|
}
|
|
233
238
|
return props.editModeText;
|
|
234
|
-
})
|
|
239
|
+
}),
|
|
240
|
+
hasCreatePerm = computed(() => perms.value.includes('create')),
|
|
241
|
+
hasReadPerm = computed(() => perms.value.includes('read')),
|
|
242
|
+
hasUpdatePerm = computed(() => perms.value.includes('update')),
|
|
243
|
+
hasDropPerm = computed(() => perms.value.includes('drop'));
|
|
235
244
|
|
|
236
245
|
|
|
237
246
|
const getItemByEvent = (e: any) => {
|
|
@@ -497,7 +506,10 @@ defineExpose({
|
|
|
497
506
|
v-on:click="sort(column)"
|
|
498
507
|
/>
|
|
499
508
|
</template>
|
|
500
|
-
<th
|
|
509
|
+
<th
|
|
510
|
+
v-if="canDrop && hasDropPerm && editModeEnabled"
|
|
511
|
+
class="lkt-table-col-drop"
|
|
512
|
+
/>
|
|
501
513
|
</tr>
|
|
502
514
|
</thead>
|
|
503
515
|
<tbody
|
|
@@ -517,8 +529,9 @@ defineExpose({
|
|
|
517
529
|
:add-navigation="addNavigation"
|
|
518
530
|
:hidden-is-visible="isVisible(i)"
|
|
519
531
|
:latest-row="i+1 === amountOfItems"
|
|
520
|
-
:can-drop="canDrop"
|
|
532
|
+
:can-drop="canDrop && hasDropPerm && editModeEnabled"
|
|
521
533
|
:drop-confirm="dropConfirm"
|
|
534
|
+
:drop-resource="dropResource"
|
|
522
535
|
:drop-text="dropText"
|
|
523
536
|
:edit-mode-enabled="editModeEnabled"
|
|
524
537
|
v-on:click="onClick"
|
|
@@ -594,6 +607,7 @@ defineExpose({
|
|
|
594
607
|
:filters="filters"
|
|
595
608
|
v-on:results="onResults"
|
|
596
609
|
v-on:loading="onLoading"
|
|
610
|
+
v-on:perms="onPerms"
|
|
597
611
|
/>
|
|
598
612
|
|
|
599
613
|
</component>
|