quasar-ui-danx 0.2.16 → 0.2.17
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +1 -1
- package/src/components/ActionTable/ActionMenu.vue +4 -4
- package/src/components/ActionTable/ActionTable.vue +12 -12
- package/src/components/ActionTable/ActionTableColumn.vue +11 -11
- package/src/components/ActionTable/Columns/ColumnListItem.vue +2 -2
- package/src/components/ActionTable/Columns/ColumnSettingsDialog.vue +8 -8
- package/src/components/ActionTable/Columns/TitleColumnFormat.vue +1 -1
- package/src/components/ActionTable/Columns/VisibleColumnsToggleButtons.vue +7 -7
- package/src/components/ActionTable/EmptyTableState.vue +4 -4
- package/src/components/ActionTable/Filters/CollapsableFiltersSidebar.vue +3 -3
- package/src/components/ActionTable/Filters/FilterFieldList.vue +6 -6
- package/src/components/ActionTable/Filters/FilterListToggle.vue +3 -3
- package/src/components/ActionTable/Filters/FilterToolbarLayout.vue +3 -3
- package/src/components/ActionTable/Filters/FilterableField.vue +6 -6
- package/src/components/ActionTable/Form/Fields/BooleanField.vue +4 -4
- package/src/components/ActionTable/Form/Fields/ConfirmPasswordField.vue +7 -7
- package/src/components/ActionTable/Form/Fields/DateField.vue +6 -6
- package/src/components/ActionTable/Form/Fields/DateRangeField.vue +13 -13
- package/src/components/ActionTable/Form/Fields/DateTimeField.vue +6 -6
- package/src/components/ActionTable/Form/Fields/DateTimePicker.vue +6 -6
- package/src/components/ActionTable/Form/Fields/EditableDiv.vue +3 -3
- package/src/components/ActionTable/Form/Fields/FieldLabel.vue +2 -2
- package/src/components/ActionTable/Form/Fields/FileUploadButton.vue +15 -15
- package/src/components/ActionTable/Form/Fields/InlineDateTimeField.vue +7 -7
- package/src/components/ActionTable/Form/Fields/IntegerField.vue +2 -2
- package/src/components/ActionTable/Form/Fields/LabeledInput.vue +2 -2
- package/src/components/ActionTable/Form/Fields/MultiFileField.vue +6 -6
- package/src/components/ActionTable/Form/Fields/MultiKeywordField.vue +8 -8
- package/src/components/ActionTable/Form/Fields/NewPasswordField.vue +6 -6
- package/src/components/ActionTable/Form/Fields/NumberField.vue +20 -20
- package/src/components/ActionTable/Form/Fields/NumberRangeField.vue +20 -20
- package/src/components/ActionTable/Form/Fields/SelectDrawer.vue +8 -8
- package/src/components/ActionTable/Form/Fields/SelectField.vue +36 -36
- package/src/components/ActionTable/Form/Fields/SelectWithChildrenField.vue +9 -9
- package/src/components/ActionTable/Form/Fields/SingleFileField.vue +6 -6
- package/src/components/ActionTable/Form/Fields/TextField.vue +15 -15
- package/src/components/ActionTable/Form/Fields/WysiwygField.vue +4 -4
- package/src/components/ActionTable/Form/RenderedForm.vue +5 -5
- package/src/components/ActionTable/TableSummaryRow.vue +8 -8
- package/src/components/ActionTable/listControls.ts +5 -5
- package/src/components/ActionTable/listHelpers.ts +1 -1
- package/src/components/ActionTable/tableColumns.ts +24 -1
- package/src/components/AuditHistory/AuditHistoryItem.vue +4 -4
- package/src/components/AuditHistory/AuditHistoryItemValue.vue +10 -10
- package/src/components/DragAndDrop/HandleDraggable.vue +8 -8
- package/src/components/DragAndDrop/ListItemDraggable.vue +8 -8
- package/src/components/DragAndDrop/dragAndDrop.ts +219 -219
- package/src/components/DragAndDrop/listDragAndDrop.ts +4 -4
- package/src/components/PanelsDrawer/PanelsDrawer.vue +7 -7
- package/src/components/PanelsDrawer/PanelsDrawerPanels.vue +1 -1
- package/src/components/PanelsDrawer/PanelsDrawerTabs.vue +4 -4
- package/src/components/Utility/Buttons/ExportButton.vue +4 -4
- package/src/components/Utility/Buttons/RefreshButton.vue +2 -2
- package/src/components/Utility/Controls/PreviousNextControls.vue +2 -2
- package/src/components/Utility/Dialogs/ConfirmDialog.vue +14 -14
- package/src/components/Utility/Dialogs/FullScreenDialog.vue +8 -8
- package/src/components/Utility/Dialogs/FullscreenCarouselDialog.vue +11 -11
- package/src/components/Utility/Dialogs/InfoDialog.vue +12 -12
- package/src/components/Utility/Dialogs/InputDialog.vue +5 -5
- package/src/components/Utility/Files/FilePreview.vue +10 -10
- package/src/components/Utility/Formats/GpsCoordinatesFormat.vue +4 -4
- package/src/components/Utility/Formats/IconWithTextFormat.vue +2 -2
- package/src/components/Utility/Formats/LabelValueFormat.vue +2 -2
- package/src/components/Utility/Layouts/CollapsableSidebar.vue +15 -15
- package/src/components/Utility/Layouts/ContentDrawer.vue +6 -6
- package/src/components/Utility/Popovers/InteractiveTooltip.vue +4 -4
- package/src/components/Utility/Popovers/PopoverMenu.vue +49 -49
- package/src/components/Utility/Tabs/BadgeTab.vue +1 -1
- package/src/components/Utility/Tabs/IndicatorTab.vue +3 -3
- package/src/components/Utility/Tools/ActionVnode.vue +3 -3
- package/src/components/Utility/Tools/RenderComponent.vue +3 -3
- package/src/components/Utility/Transitions/StaggeredListTransition.vue +3 -3
- package/src/helpers/array.ts +16 -16
- package/src/helpers/storage.ts +5 -5
- package/src/helpers/utils.ts +1 -1
- package/src/index.common.js +1 -2
- package/src/index.esm.js +1 -1
- package/src/index.umd.js +2 -2
- package/src/svg/CaretDownIcon.svg +1 -1
- package/src/svg/DragHandleDotsIcon.svg +3 -3
- package/src/svg/DragHandleIcon.svg +3 -3
- package/src/svg/FilterIcon.svg +5 -5
- package/src/svg/ImageIcon.svg +27 -27
- package/src/svg/PdfIcon.svg +5 -5
- package/src/svg/SkipNextIcon.svg +3 -3
- package/src/svg/SkipPreviousIcon.svg +3 -3
- package/src/svg/TrashIcon.svg +12 -12
- package/src/svg/WarningIcon.svg +3 -3
- package/src/svg/XIcon.svg +15 -15
- package/src/vue-plugin.js +5 -5
@@ -20,10 +20,10 @@
|
|
20
20
|
</template>
|
21
21
|
|
22
22
|
<script setup>
|
23
|
-
import { computed } from
|
24
|
-
import { XIcon } from
|
23
|
+
import { computed } from "vue";
|
24
|
+
import { XIcon } from "../../../svg";
|
25
25
|
|
26
|
-
const emit = defineEmits([
|
26
|
+
const emit = defineEmits(["update:model-value", "close"]);
|
27
27
|
const props = defineProps({
|
28
28
|
modelValue: Boolean,
|
29
29
|
center: Boolean,
|
@@ -33,14 +33,14 @@ const props = defineProps({
|
|
33
33
|
|
34
34
|
let computedClass = computed(() => {
|
35
35
|
return {
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
"bg-blue-600 text-white": props.blue,
|
37
|
+
"bg-white text-gray-base": !props.blue,
|
38
|
+
"items-center": props.center
|
39
39
|
};
|
40
40
|
});
|
41
41
|
|
42
42
|
function onClose() {
|
43
|
-
emit(
|
44
|
-
emit(
|
43
|
+
emit("update:model-value", false);
|
44
|
+
emit("close");
|
45
45
|
}
|
46
46
|
</script>
|
@@ -38,19 +38,19 @@
|
|
38
38
|
<img v-else :alt="file.filename" :src="file.url" />
|
39
39
|
</div>
|
40
40
|
</QCarouselSlide>
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
</QCarousel>
|
42
|
+
<CloseIcon
|
43
|
+
class="absolute top-4 right-4 cursor-pointer text-white w-8 h-8"
|
44
|
+
@click="$emit('close')"
|
45
|
+
/>
|
46
46
|
</div>
|
47
|
-
|
47
|
+
</QDialog>
|
48
48
|
</template>
|
49
49
|
<script setup>
|
50
|
-
import { ref } from
|
51
|
-
import { XIcon as CloseIcon } from
|
50
|
+
import { ref } from "vue";
|
51
|
+
import { XIcon as CloseIcon } from "../../../svg";
|
52
52
|
|
53
|
-
defineEmits([
|
53
|
+
defineEmits(["close"]);
|
54
54
|
const props = defineProps({
|
55
55
|
files: {
|
56
56
|
type: Array,
|
@@ -58,14 +58,14 @@ const props = defineProps({
|
|
58
58
|
},
|
59
59
|
defaultSlide: {
|
60
60
|
type: String,
|
61
|
-
default:
|
61
|
+
default: ""
|
62
62
|
}
|
63
63
|
});
|
64
64
|
|
65
65
|
const carousel = ref(null);
|
66
66
|
const currentSlide = ref(props.defaultSlide);
|
67
67
|
function isVideo(file) {
|
68
|
-
return file.mime?.startsWith(
|
68
|
+
return file.mime?.startsWith("video");
|
69
69
|
}
|
70
70
|
function getThumbUrl(file) {
|
71
71
|
if (file.thumb) {
|
@@ -40,7 +40,7 @@
|
|
40
40
|
@click="onClose"
|
41
41
|
>
|
42
42
|
<slot name="done-text" />
|
43
|
-
|
43
|
+
</QBtn>
|
44
44
|
</div>
|
45
45
|
</div>
|
46
46
|
<a
|
@@ -49,31 +49,31 @@
|
|
49
49
|
>
|
50
50
|
<CloseIcon class="w-5" />
|
51
51
|
</a>
|
52
|
-
|
53
|
-
|
52
|
+
</QCard>
|
53
|
+
</QDialog>
|
54
54
|
</template>
|
55
55
|
|
56
56
|
<script setup>
|
57
|
-
import { XIcon as CloseIcon } from
|
57
|
+
import { XIcon as CloseIcon } from "@heroicons/vue/outline";
|
58
58
|
|
59
|
-
const emit = defineEmits([
|
59
|
+
const emit = defineEmits(["update:model-value", "close"]);
|
60
60
|
defineProps({
|
61
61
|
modelValue: { type: [Boolean, Object], default: true },
|
62
62
|
title: {
|
63
63
|
type: String,
|
64
|
-
default:
|
64
|
+
default: ""
|
65
65
|
},
|
66
66
|
titleClass: {
|
67
67
|
type: String,
|
68
|
-
default:
|
68
|
+
default: ""
|
69
69
|
},
|
70
70
|
subtitle: {
|
71
71
|
type: String,
|
72
|
-
default:
|
72
|
+
default: ""
|
73
73
|
},
|
74
74
|
content: {
|
75
75
|
type: String,
|
76
|
-
default:
|
76
|
+
default: ""
|
77
77
|
},
|
78
78
|
backdropDismiss: Boolean,
|
79
79
|
maximized: Boolean,
|
@@ -81,12 +81,12 @@ defineProps({
|
|
81
81
|
fullHeight: Boolean,
|
82
82
|
doneText: {
|
83
83
|
type: String,
|
84
|
-
default:
|
84
|
+
default: "Done"
|
85
85
|
}
|
86
86
|
});
|
87
87
|
|
88
88
|
function onClose() {
|
89
|
-
emit(
|
90
|
-
emit(
|
89
|
+
emit("update:model-value", false);
|
90
|
+
emit("close");
|
91
91
|
}
|
92
92
|
</script>
|
@@ -15,19 +15,19 @@
|
|
15
15
|
</ConfirmDialog>
|
16
16
|
</template>
|
17
17
|
<script setup>
|
18
|
-
import { ref } from
|
19
|
-
import ConfirmDialog from
|
18
|
+
import { ref } from "vue";
|
19
|
+
import ConfirmDialog from "./ConfirmDialog";
|
20
20
|
|
21
|
-
defineEmits([
|
21
|
+
defineEmits(["confirm", "close", "update:input"]);
|
22
22
|
const props = defineProps({
|
23
23
|
...ConfirmDialog.props,
|
24
24
|
title: {
|
25
25
|
type: String,
|
26
|
-
default:
|
26
|
+
default: "Enter Value"
|
27
27
|
},
|
28
28
|
input: {
|
29
29
|
type: [Number, String],
|
30
|
-
default:
|
30
|
+
default: ""
|
31
31
|
}
|
32
32
|
});
|
33
33
|
|
@@ -98,17 +98,17 @@
|
|
98
98
|
</template>
|
99
99
|
|
100
100
|
<script setup>
|
101
|
-
import { DocumentTextIcon as TextFileIcon, DownloadIcon, PlayIcon } from
|
102
|
-
import { computed, ref } from
|
103
|
-
import { download } from
|
104
|
-
import { ImageIcon, PdfIcon, TrashIcon as RemoveIcon } from
|
105
|
-
import { FullScreenCarouselDialog } from
|
101
|
+
import { DocumentTextIcon as TextFileIcon, DownloadIcon, PlayIcon } from "@heroicons/vue/outline";
|
102
|
+
import { computed, ref } from "vue";
|
103
|
+
import { download } from "../../../helpers";
|
104
|
+
import { ImageIcon, PdfIcon, TrashIcon as RemoveIcon } from "../../../svg";
|
105
|
+
import { FullScreenCarouselDialog } from "../Dialogs";
|
106
106
|
|
107
|
-
const emit = defineEmits([
|
107
|
+
const emit = defineEmits(["remove"]);
|
108
108
|
const props = defineProps({
|
109
109
|
src: {
|
110
110
|
type: String,
|
111
|
-
default:
|
111
|
+
default: ""
|
112
112
|
},
|
113
113
|
image: {
|
114
114
|
type: Object,
|
@@ -124,7 +124,7 @@ const props = defineProps({
|
|
124
124
|
},
|
125
125
|
downloadButtonClass: {
|
126
126
|
type: String,
|
127
|
-
default:
|
127
|
+
default: "bg-blue-600 text-white"
|
128
128
|
},
|
129
129
|
downloadable: Boolean,
|
130
130
|
removable: Boolean,
|
@@ -140,7 +140,7 @@ const computedImage = computed(() => {
|
|
140
140
|
return {
|
141
141
|
id: props.src,
|
142
142
|
url: props.src,
|
143
|
-
type:
|
143
|
+
type: "image/" + props.src.split(".").pop().toLowerCase()
|
144
144
|
};
|
145
145
|
}
|
146
146
|
return null;
|
@@ -168,7 +168,7 @@ function onRemove() {
|
|
168
168
|
isConfirmingRemove.value = false;
|
169
169
|
}, 2000);
|
170
170
|
} else {
|
171
|
-
emit(
|
171
|
+
emit("remove");
|
172
172
|
}
|
173
173
|
}
|
174
174
|
</script>
|
@@ -14,15 +14,15 @@ import { LocationMarkerIcon as LocationIcon } from "@heroicons/vue/solid";
|
|
14
14
|
defineProps({
|
15
15
|
location: {
|
16
16
|
type: Object,
|
17
|
-
default: null
|
17
|
+
default: null
|
18
18
|
},
|
19
19
|
decimals: {
|
20
20
|
type: Number,
|
21
|
-
default: 6
|
21
|
+
default: 6
|
22
22
|
},
|
23
23
|
iconClass: {
|
24
24
|
type: String,
|
25
|
-
default: "w-7"
|
26
|
-
}
|
25
|
+
default: "w-7"
|
26
|
+
}
|
27
27
|
});
|
28
28
|
</script>
|
@@ -14,7 +14,7 @@ defineProps({
|
|
14
14
|
},
|
15
15
|
iconClass: {
|
16
16
|
type: String,
|
17
|
-
default:
|
17
|
+
default: "w-6"
|
18
18
|
},
|
19
19
|
text: {
|
20
20
|
type: String,
|
@@ -22,7 +22,7 @@ defineProps({
|
|
22
22
|
},
|
23
23
|
textClass: {
|
24
24
|
type: String,
|
25
|
-
default:
|
25
|
+
default: "ml-2"
|
26
26
|
}
|
27
27
|
});
|
28
28
|
</script>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<template v-if="loading">
|
6
6
|
<QSpinnerTail />
|
7
7
|
</template>
|
8
|
-
<slot v-else>{{ value ||
|
8
|
+
<slot v-else>{{ value || "-" }}</slot>
|
9
9
|
</div>
|
10
10
|
</div>
|
11
11
|
</template>
|
@@ -17,7 +17,7 @@ defineProps({
|
|
17
17
|
},
|
18
18
|
value: {
|
19
19
|
type: [String, Number],
|
20
|
-
default:
|
20
|
+
default: "-"
|
21
21
|
},
|
22
22
|
dense: Boolean,
|
23
23
|
nowrap: Boolean,
|
@@ -44,59 +44,59 @@
|
|
44
44
|
</div>
|
45
45
|
</template>
|
46
46
|
<script setup>
|
47
|
-
import { ChevronLeftIcon as ToggleIcon } from
|
48
|
-
import { computed, onMounted, ref, watch } from
|
47
|
+
import { ChevronLeftIcon as ToggleIcon } from "@heroicons/vue/outline";
|
48
|
+
import { computed, onMounted, ref, watch } from "vue";
|
49
49
|
|
50
|
-
const emit = defineEmits([
|
50
|
+
const emit = defineEmits(["collapse", "update:collapse"]);
|
51
51
|
const props = defineProps({
|
52
52
|
rightSide: Boolean,
|
53
53
|
displayClass: {
|
54
54
|
type: String,
|
55
|
-
default:
|
55
|
+
default: "flex flex-col"
|
56
56
|
},
|
57
57
|
maxWidth: {
|
58
58
|
type: String,
|
59
|
-
default:
|
59
|
+
default: "13.5rem"
|
60
60
|
},
|
61
61
|
minWidth: {
|
62
62
|
type: String,
|
63
|
-
default:
|
63
|
+
default: "5.5rem"
|
64
64
|
},
|
65
65
|
disabled: Boolean,
|
66
66
|
collapse: Boolean,
|
67
67
|
name: {
|
68
68
|
type: String,
|
69
|
-
default:
|
69
|
+
default: "sidebar"
|
70
70
|
},
|
71
71
|
toggleAtTop: Boolean,
|
72
72
|
toggleClass: {
|
73
73
|
type: String,
|
74
|
-
default:
|
74
|
+
default: ""
|
75
75
|
},
|
76
76
|
hideToggleOnCollapse: Boolean
|
77
77
|
});
|
78
78
|
|
79
79
|
const isCollapsed = ref(props.collapse);
|
80
80
|
|
81
|
-
const stored = localStorage.getItem(props.name +
|
81
|
+
const stored = localStorage.getItem(props.name + "-is-collapsed");
|
82
82
|
|
83
83
|
if (stored !== null) {
|
84
|
-
isCollapsed.value = stored ===
|
84
|
+
isCollapsed.value = stored === "1";
|
85
85
|
}
|
86
86
|
function toggleCollapse() {
|
87
87
|
setCollapse(!isCollapsed.value);
|
88
|
-
emit(
|
89
|
-
emit(
|
88
|
+
emit("collapse", isCollapsed.value);
|
89
|
+
emit("update:collapse", isCollapsed.value);
|
90
90
|
}
|
91
91
|
|
92
92
|
function setCollapse(state) {
|
93
93
|
isCollapsed.value = state;
|
94
|
-
localStorage.setItem(props.name +
|
94
|
+
localStorage.setItem(props.name + "-is-collapsed", isCollapsed.value ? "1" : "");
|
95
95
|
}
|
96
96
|
|
97
97
|
onMounted(() => {
|
98
|
-
emit(
|
99
|
-
emit(
|
98
|
+
emit("collapse", isCollapsed.value);
|
99
|
+
emit("update:collapse", isCollapsed.value);
|
100
100
|
});
|
101
101
|
const style = computed(() => {
|
102
102
|
return {
|
@@ -25,9 +25,9 @@
|
|
25
25
|
</template>
|
26
26
|
|
27
27
|
<script setup>
|
28
|
-
import { computed } from
|
28
|
+
import { computed } from "vue";
|
29
29
|
|
30
|
-
const emit = defineEmits([
|
30
|
+
const emit = defineEmits(["update:show"]);
|
31
31
|
|
32
32
|
const props = defineProps({
|
33
33
|
show: Boolean,
|
@@ -35,21 +35,21 @@ const props = defineProps({
|
|
35
35
|
overlay: Boolean,
|
36
36
|
position: {
|
37
37
|
type: String,
|
38
|
-
default:
|
38
|
+
default: "bottom"
|
39
39
|
},
|
40
40
|
contentClass: {
|
41
41
|
type: String,
|
42
|
-
default:
|
42
|
+
default: "py-8 px-12"
|
43
43
|
},
|
44
44
|
title: {
|
45
45
|
type: String,
|
46
|
-
default:
|
46
|
+
default: "Edit"
|
47
47
|
}
|
48
48
|
});
|
49
49
|
|
50
50
|
const isShowing = computed({
|
51
51
|
get: () => props.show,
|
52
|
-
set: (value) => emit(
|
52
|
+
set: (value) => emit("update:show", value)
|
53
53
|
});
|
54
54
|
</script>
|
55
55
|
|
@@ -12,17 +12,17 @@
|
|
12
12
|
</QTooltip>
|
13
13
|
</template>
|
14
14
|
<script setup>
|
15
|
-
import { onMounted, ref } from
|
15
|
+
import { onMounted, ref } from "vue";
|
16
16
|
|
17
|
-
defineProps({ tooltip: { type: String, default:
|
17
|
+
defineProps({ tooltip: { type: String, default: "" } });
|
18
18
|
const show = ref(false);
|
19
19
|
const tooltipBox = ref(null);
|
20
20
|
const isHovering = ref(false);
|
21
21
|
const isHoveringParent = ref(false);
|
22
22
|
let timeout = null;
|
23
23
|
onMounted(() => {
|
24
|
-
tooltipBox.value.$el.parentNode.addEventListener(
|
25
|
-
tooltipBox.value.$el.parentNode.addEventListener(
|
24
|
+
tooltipBox.value.$el.parentNode.addEventListener("mouseover", onEnterParent);
|
25
|
+
tooltipBox.value.$el.parentNode.addEventListener("mouseleave", onLeaveParent);
|
26
26
|
});
|
27
27
|
function onEnterParent() {
|
28
28
|
show.value = true;
|
@@ -5,56 +5,56 @@
|
|
5
5
|
>
|
6
6
|
<QTooltip v-if="$slots.tooltip || tooltip">
|
7
7
|
<slot name="tooltip">{{ tooltip }}</slot>
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
8
|
+
</QTooltip>
|
9
|
+
<Transition
|
10
|
+
mode="out-in"
|
11
|
+
:duration="150"
|
12
|
+
>
|
13
|
+
<RenderComponent
|
14
|
+
v-if="loading"
|
15
|
+
:component="loadingComponent"
|
16
|
+
/>
|
17
|
+
<MenuIcon
|
18
|
+
v-else
|
19
|
+
class="w-4 text-black"
|
20
|
+
/>
|
21
|
+
</Transition>
|
22
|
+
<QMenu
|
23
|
+
v-if="!disabled"
|
24
|
+
auto-close
|
25
|
+
>
|
26
|
+
<QList>
|
27
|
+
<template v-for="item in items">
|
28
|
+
<a
|
29
|
+
v-if="item.url"
|
30
|
+
:key="item.url"
|
31
|
+
class="q-item"
|
32
|
+
target="_blank"
|
33
|
+
:href="item.url"
|
34
|
+
:class="item.class"
|
35
|
+
>
|
36
|
+
{{ item.label }}
|
37
|
+
</a>
|
38
|
+
<QItem
|
39
|
+
v-else
|
40
|
+
:key="item.name || item.action"
|
41
|
+
clickable
|
42
|
+
:class="item.class"
|
43
|
+
@click="onAction(item)"
|
44
|
+
>
|
45
|
+
{{ item.label }}
|
46
|
+
</QItem>
|
47
|
+
</template>
|
48
|
+
</QList>
|
49
|
+
</QMenu>
|
50
50
|
</a>
|
51
51
|
</template>
|
52
52
|
<script setup>
|
53
|
-
import { DotsVerticalIcon as MenuIcon } from
|
54
|
-
import { QSpinner } from
|
55
|
-
import { RenderComponent } from
|
53
|
+
import { DotsVerticalIcon as MenuIcon } from "@heroicons/vue/outline";
|
54
|
+
import { QSpinner } from "quasar";
|
55
|
+
import { RenderComponent } from "../Tools";
|
56
56
|
|
57
|
-
const emit = defineEmits([
|
57
|
+
const emit = defineEmits(["action", "action-item"]);
|
58
58
|
defineProps({
|
59
59
|
items: {
|
60
60
|
type: Array,
|
@@ -73,13 +73,13 @@ defineProps({
|
|
73
73
|
type: [Function, Object],
|
74
74
|
default: () => ({
|
75
75
|
is: QSpinner,
|
76
|
-
props: { class:
|
76
|
+
props: { class: "w-4 h-4 text-black" }
|
77
77
|
})
|
78
78
|
}
|
79
79
|
});
|
80
80
|
|
81
81
|
function onAction(item) {
|
82
|
-
emit(
|
83
|
-
emit(
|
82
|
+
emit("action", item.name || item.action);
|
83
|
+
emit("action-item", item);
|
84
84
|
}
|
85
85
|
</script>
|
@@ -18,11 +18,11 @@
|
|
18
18
|
/>
|
19
19
|
</div>
|
20
20
|
</div>
|
21
|
-
|
21
|
+
</QTab>
|
22
22
|
</template>
|
23
23
|
<script setup>
|
24
|
-
import { ExclamationCircleIcon as OverdueIcon } from
|
25
|
-
import { WarningIcon } from
|
24
|
+
import { ExclamationCircleIcon as OverdueIcon } from "@heroicons/vue/solid";
|
25
|
+
import { WarningIcon } from "../../../svg";
|
26
26
|
|
27
27
|
defineProps({
|
28
28
|
name: {
|
@@ -10,9 +10,9 @@
|
|
10
10
|
</div>
|
11
11
|
</template>
|
12
12
|
<script setup>
|
13
|
-
import { ref } from
|
14
|
-
import { activeActionVnode } from
|
15
|
-
import RenderVnode from
|
13
|
+
import { ref } from "vue";
|
14
|
+
import { activeActionVnode } from "../../../helpers";
|
15
|
+
import RenderVnode from "./RenderVnode";
|
16
16
|
|
17
17
|
const isSaving = ref(false);
|
18
18
|
async function onConfirm(input) {
|
@@ -13,9 +13,9 @@
|
|
13
13
|
/>
|
14
14
|
</template>
|
15
15
|
<script setup>
|
16
|
-
import { computed } from
|
16
|
+
import { computed } from "vue";
|
17
17
|
|
18
|
-
defineEmits([
|
18
|
+
defineEmits(["action"]);
|
19
19
|
const props = defineProps({
|
20
20
|
component: {
|
21
21
|
type: [Function, Object],
|
@@ -33,7 +33,7 @@ const props = defineProps({
|
|
33
33
|
|
34
34
|
const content = computed(() => resolvedComponent.value?.value || resolvedComponent.value?.props?.text);
|
35
35
|
const resolvedComponent = computed(() => {
|
36
|
-
if (typeof props.component ===
|
36
|
+
if (typeof props.component === "function") {
|
37
37
|
return props.component(...props.params);
|
38
38
|
}
|
39
39
|
return props.component;
|
@@ -13,13 +13,13 @@
|
|
13
13
|
</template>
|
14
14
|
|
15
15
|
<script setup>
|
16
|
-
import gsap from
|
17
|
-
import { computed, ref } from
|
16
|
+
import gsap from "gsap";
|
17
|
+
import { computed, ref } from "vue";
|
18
18
|
|
19
19
|
const props = defineProps({
|
20
20
|
height: {
|
21
21
|
type: [String, Number],
|
22
|
-
default:
|
22
|
+
default: "auto"
|
23
23
|
},
|
24
24
|
duration: {
|
25
25
|
type: Number,
|
package/src/helpers/array.ts
CHANGED
@@ -6,21 +6,21 @@
|
|
6
6
|
* @returns {*[]}
|
7
7
|
*/
|
8
8
|
export function replace(array, item, newItem = undefined) {
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
9
|
+
const index =
|
10
|
+
typeof item === "function" ? array.findIndex(item) : array.indexOf(item);
|
11
|
+
if (index === false) {
|
12
|
+
console.error("Item not found in array", item, array);
|
13
|
+
throw new Error("Item not found in array");
|
14
|
+
}
|
15
|
+
const newArray = [...array];
|
16
|
+
newItem !== undefined
|
17
|
+
? newArray.splice(index, 1, newItem)
|
18
|
+
: newArray.splice(index, 1);
|
19
|
+
return newArray;
|
20
20
|
}
|
21
21
|
|
22
22
|
export function remove(array, item) {
|
23
|
-
|
23
|
+
return replace(array, item);
|
24
24
|
}
|
25
25
|
|
26
26
|
/**
|
@@ -30,8 +30,8 @@ export function remove(array, item) {
|
|
30
30
|
* @returns {*}
|
31
31
|
*/
|
32
32
|
export function uniqueBy(array, cb) {
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
return array.filter((a, index, self) => {
|
34
|
+
// Check if the current element 'a' is the first occurrence in the array
|
35
|
+
return index === self.findIndex((b) => cb(a, b));
|
36
|
+
});
|
37
37
|
}
|