lkt-table 1.3.21 → 1.3.23
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 +52 -52
- package/dist/build.js +546 -525
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/components/LktTableRow.vue +21 -9
- package/src/lib-components/LktTable.vue +21 -1
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.lkt-table-page{display:flex;width:100%;flex-direction:column;gap:var(--lkt-table-page-gap)}.lkt-table-page-content-wrapper{display:grid;width:100%;flex-direction:column;gap:var(--lkt-table-page-gap)}.lkt-table{width:var(--lkt-table-width);font-family:var(--lkt-table-font-family),serif}.lkt-table .lkt-field{--lkt-field-font-size: var(--lkt-table-font-size-row)}.lkt-table>table{width:100%;max-width:100%;border-collapse:var(--lkt-table-border-collapse);border-radius:var(--lkt-table-border-radius);border-spacing:var(--lkt-table-border-spacing)}.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);position:sticky;top:0;z-index:1}.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:#d4d4d4;border-bottom:1px solid #848484;margin:auto;position:absolute;top:0;left:0;height:100%;width:100%}.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:60%;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:
|
|
1
|
+
.lkt-table-page{display:flex;width:100%;flex-direction:column;gap:var(--lkt-table-page-gap)}.lkt-table-page-content-wrapper{display:grid;width:100%;flex-direction:column;gap:var(--lkt-table-page-gap)}.lkt-table{width:var(--lkt-table-width);font-family:var(--lkt-table-font-family),serif}.lkt-table .lkt-field{--lkt-field-font-size: var(--lkt-table-font-size-row)}.lkt-table>table{width:100%;max-width:100%;border-collapse:var(--lkt-table-border-collapse);border-radius:var(--lkt-table-border-radius);border-spacing:var(--lkt-table-border-spacing)}.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);position:sticky;top:0;z-index:1}.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:#d4d4d4;border-bottom:1px solid #848484;margin:auto;position:absolute;top:0;left:0;height:100%;width:100%}.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:60%;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:6}.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
|
@@ -40,8 +40,9 @@ const props = withDefaults(defineProps<{
|
|
|
40
40
|
editText: string
|
|
41
41
|
editIcon: string
|
|
42
42
|
editLink: string
|
|
43
|
-
rowDisplayType: RowDisplayType|Function
|
|
44
|
-
renderDrag?: boolean
|
|
43
|
+
rowDisplayType: RowDisplayType | Function
|
|
44
|
+
renderDrag?: boolean | Function
|
|
45
|
+
disabledDrag?: boolean | Function
|
|
45
46
|
}>(), {
|
|
46
47
|
modelValue: () => ({}),
|
|
47
48
|
isDraggable: true,
|
|
@@ -65,6 +66,7 @@ const props = withDefaults(defineProps<{
|
|
|
65
66
|
editLink: '',
|
|
66
67
|
rowDisplayType: RowDisplayType.Auto,
|
|
67
68
|
renderDrag: true,
|
|
69
|
+
disabledDrag: true,
|
|
68
70
|
});
|
|
69
71
|
|
|
70
72
|
const Item = ref(props.modelValue);
|
|
@@ -76,15 +78,20 @@ const canCustomItem = [RowDisplayType.Auto, RowDisplayType.PreferCustomItem].inc
|
|
|
76
78
|
const canItem = [RowDisplayType.Auto, RowDisplayType.PreferItem].includes(calculatedRowDisplayType);
|
|
77
79
|
|
|
78
80
|
const parsedEditLink = ref(props.editLink);
|
|
79
|
-
for (let k in Item.value) parsedEditLink.value = replaceAll(parsedEditLink.value, ':'+k
|
|
81
|
+
for (let k in Item.value) parsedEditLink.value = replaceAll(parsedEditLink.value, ':' + k, Item.value[k]);
|
|
80
82
|
|
|
81
83
|
const onClick = ($event: any) => emit('click', $event),
|
|
82
84
|
onShow = ($event: any, i: any) => {
|
|
83
85
|
emit('show', $event, i)
|
|
84
86
|
},
|
|
85
87
|
classes = computed(() => {
|
|
86
|
-
let r:string[] = [];
|
|
87
|
-
|
|
88
|
+
let r: string[] = [];
|
|
89
|
+
|
|
90
|
+
let disabledDrag = false;
|
|
91
|
+
if (typeof props.disabledDrag === 'function') disabledDrag = props.disabledDrag(Item.value);
|
|
92
|
+
else disabledDrag = props.disabledDrag === true;
|
|
93
|
+
if (!disabledDrag && props.sortable && props.isDraggable) r.push('handle');
|
|
94
|
+
else if (disabledDrag) r.push('disabled');
|
|
88
95
|
return r.join(' ');
|
|
89
96
|
}),
|
|
90
97
|
hasNavButtonSlot = computed(() => {
|
|
@@ -113,14 +120,19 @@ watch(Item, (v) => {
|
|
|
113
120
|
}, {deep: true});
|
|
114
121
|
|
|
115
122
|
const canRenderDragIndicator = computed(() => {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
})
|
|
123
|
+
if (typeof props.renderDrag === 'function') return props.renderDrag(Item.value);
|
|
124
|
+
return props.renderDrag === true;
|
|
125
|
+
}),
|
|
126
|
+
computedDisabledDrag = computed(() => {
|
|
127
|
+
if (typeof props.disabledDrag === 'function') return props.disabledDrag(Item.value);
|
|
128
|
+
return props.disabledDrag === true;
|
|
129
|
+
})
|
|
119
130
|
</script>
|
|
120
131
|
|
|
121
132
|
<template>
|
|
122
133
|
<tr :data-i="i" :data-draggable="isDraggable" :class="{'type-custom-item': canCustomItem, 'type-item': canItem}">
|
|
123
|
-
<td v-if="sortable && isDraggable && editModeEnabled && canRenderDragIndicator"
|
|
134
|
+
<td v-if="sortable && isDraggable && editModeEnabled && canRenderDragIndicator"
|
|
135
|
+
data-role="drag-indicator" :class="classes" :data-i="i"/>
|
|
124
136
|
<td v-else-if="sortable && editModeEnabled && canRenderDragIndicator" data-role="invalid-drag-indicator"/>
|
|
125
137
|
<td v-if="addNavigation && editModeEnabled" class="lkt-table-nav-cell">
|
|
126
138
|
<div class="lkt-table-nav-container">
|
|
@@ -45,6 +45,7 @@ const props = withDefaults(defineProps<{
|
|
|
45
45
|
draggableChecker?: Function
|
|
46
46
|
checkValidDrag?: Function
|
|
47
47
|
renderDrag?: boolean|Function
|
|
48
|
+
disabledDrag?: boolean|Function
|
|
48
49
|
sortable?: boolean
|
|
49
50
|
hideEmptyColumns?: boolean
|
|
50
51
|
initialSorting?: boolean
|
|
@@ -74,6 +75,8 @@ const props = withDefaults(defineProps<{
|
|
|
74
75
|
confirmData?: LktObject
|
|
75
76
|
saveResource?: string
|
|
76
77
|
saveResourceData?: LktObject
|
|
78
|
+
saveTooltipEngine?: string
|
|
79
|
+
splitSave?: boolean
|
|
77
80
|
saveText?: string
|
|
78
81
|
createText?: string
|
|
79
82
|
createIcon?: string
|
|
@@ -126,6 +129,7 @@ const props = withDefaults(defineProps<{
|
|
|
126
129
|
wrapContentTag: 'div',
|
|
127
130
|
wrapContentClass: '',
|
|
128
131
|
itemsContainerClass: '',
|
|
132
|
+
saveTooltipEngine: 'absolute',
|
|
129
133
|
filters: () => [],
|
|
130
134
|
dataStateConfig: () => ({}),
|
|
131
135
|
hiddenSave: false,
|
|
@@ -136,6 +140,7 @@ const props = withDefaults(defineProps<{
|
|
|
136
140
|
confirmData: () => ({}),
|
|
137
141
|
saveResource: '',
|
|
138
142
|
saveResourceData: () => ({}),
|
|
143
|
+
splitSave: false,
|
|
139
144
|
saveText: 'Save',
|
|
140
145
|
dropText: 'Delete',
|
|
141
146
|
dropIcon: '',
|
|
@@ -370,6 +375,9 @@ const getItemByEvent = (e: any) => {
|
|
|
370
375
|
Hidden.value[k] = typeof Hidden.value[k] === 'undefined' ? true : !Hidden.value[k];
|
|
371
376
|
},
|
|
372
377
|
validDragChecker = (evt: any) => {
|
|
378
|
+
let targetIndex = parseInt(evt?.originalEvent?.toElement?.closest('tr')?.dataset?.i);
|
|
379
|
+
if (typeof props.disabledDrag === 'function' && props.disabledDrag(Items.value[targetIndex])) return false;
|
|
380
|
+
if (typeof props.disabledDrag === 'boolean' && props.disabledDrag) return false;
|
|
373
381
|
if (typeof props.checkValidDrag === 'function') return props.checkValidDrag(evt);
|
|
374
382
|
return true;
|
|
375
383
|
},
|
|
@@ -463,7 +471,7 @@ const getItemByEvent = (e: any) => {
|
|
|
463
471
|
let newIndex = evt.newIndex;
|
|
464
472
|
Items.value.splice(newIndex, 0, Items.value.splice(oldIndex, 1)[0]);
|
|
465
473
|
updateTimeStamp.value = time();
|
|
466
|
-
emit('drag-end');
|
|
474
|
+
emit('drag-end', Items.value[newIndex]);
|
|
467
475
|
},
|
|
468
476
|
onMove: function (evt, originalEvent) {
|
|
469
477
|
return validDragChecker(evt);
|
|
@@ -582,6 +590,8 @@ const hasEmptySlot = computed(() => {
|
|
|
582
590
|
:confirm-data="confirmData"
|
|
583
591
|
:resource="saveResource"
|
|
584
592
|
:resource-data="computedSaveResourceData"
|
|
593
|
+
:split="splitSave"
|
|
594
|
+
:tooltip-engine="saveTooltipEngine"
|
|
585
595
|
v-on:loading="onButtonLoading"
|
|
586
596
|
v-on:loaded="onButtonLoaded"
|
|
587
597
|
v-on:click="onSave">
|
|
@@ -591,6 +601,15 @@ const hasEmptySlot = computed(() => {
|
|
|
591
601
|
:edit-mode="editMode"
|
|
592
602
|
:can-update="!saveDisabled"></slot>
|
|
593
603
|
<span v-else>{{ computedSaveText }}</span>
|
|
604
|
+
|
|
605
|
+
<template v-slot:split="{doClose, doRootClick}">
|
|
606
|
+
<slot name="button-save-split"
|
|
607
|
+
:do-close="doClose"
|
|
608
|
+
:do-root-click="doRootClick"
|
|
609
|
+
:data-state="dataState"
|
|
610
|
+
:on-button-loading="onButtonLoading"
|
|
611
|
+
:on-button-loaded="onButtonLoaded" />
|
|
612
|
+
</template>
|
|
594
613
|
</lkt-button>
|
|
595
614
|
|
|
596
615
|
<create-button
|
|
@@ -685,6 +704,7 @@ const hasEmptySlot = computed(() => {
|
|
|
685
704
|
:has-inline-edit-perm="hasInlineEditPerm"
|
|
686
705
|
:row-display-type="rowDisplayType"
|
|
687
706
|
:render-drag="renderDrag"
|
|
707
|
+
:disabled-drag="disabledDrag"
|
|
688
708
|
v-on:click="onClick"
|
|
689
709
|
v-on:show="show"
|
|
690
710
|
v-on:item-up="onItemUp"
|