@katlux/toolkit 0.1.0-beta.45 → 0.1.0-beta.47
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/module.json +1 -1
- package/dist/runtime/components/KCombobox/KCombobox.global.d.vue.ts +9 -0
- package/dist/runtime/components/KCombobox/KCombobox.global.vue +2 -1
- package/dist/runtime/components/KCombobox/KCombobox.global.vue.d.ts +9 -0
- package/dist/runtime/components/KCombobox/KCombobox.logic.d.ts +5 -0
- package/dist/runtime/components/KCombobox/KCombobox.logic.js +4 -0
- package/dist/runtime/components/KDatePicker/KDatePicker.global.d.vue.ts +15 -6
- package/dist/runtime/components/KDatePicker/KDatePicker.global.vue +14 -3
- package/dist/runtime/components/KDatePicker/KDatePicker.global.vue.d.ts +15 -6
- package/dist/runtime/components/KDatePicker/KDatePicker.logic.d.ts +6 -1
- package/dist/runtime/components/KDatePicker/KDatePicker.logic.js +23 -6
- package/dist/runtime/components/KDateTimePicker/KDateTimePicker.global.d.vue.ts +15 -6
- package/dist/runtime/components/KDateTimePicker/KDateTimePicker.global.vue +20 -2
- package/dist/runtime/components/KDateTimePicker/KDateTimePicker.global.vue.d.ts +15 -6
- package/dist/runtime/components/KDateTimePicker/KDateTimePicker.logic.d.ts +6 -1
- package/dist/runtime/components/KDateTimePicker/KDateTimePicker.logic.js +29 -6
- package/dist/runtime/components/KDropdown/KDropdown.global.d.vue.ts +9 -0
- package/dist/runtime/components/KDropdown/KDropdown.global.vue +5 -3
- package/dist/runtime/components/KDropdown/KDropdown.global.vue.d.ts +9 -0
- package/dist/runtime/components/KDropdown/KDropdown.logic.d.ts +7 -0
- package/dist/runtime/components/KDropdown/KDropdown.logic.js +52 -15
- package/dist/runtime/components/KModal/KModal.global.vue +3 -1
- package/dist/runtime/components/KModal/KModal.logic.d.ts +3 -1
- package/dist/runtime/components/KModal/KModal.logic.js +6 -2
- package/dist/runtime/presets/default/components/KCombobox/KCombobox.d.vue.ts +1 -0
- package/dist/runtime/presets/default/components/KCombobox/KCombobox.vue +2 -1
- package/dist/runtime/presets/default/components/KCombobox/KCombobox.vue.d.ts +1 -0
- package/dist/runtime/presets/default/components/KDatePicker/KDatePicker.d.vue.ts +2 -1
- package/dist/runtime/presets/default/components/KDatePicker/KDatePicker.vue +3 -2
- package/dist/runtime/presets/default/components/KDatePicker/KDatePicker.vue.d.ts +2 -1
- package/dist/runtime/presets/default/components/KDateTimePicker/KDateTimePicker.d.vue.ts +2 -1
- package/dist/runtime/presets/default/components/KDateTimePicker/KDateTimePicker.vue +3 -2
- package/dist/runtime/presets/default/components/KDateTimePicker/KDateTimePicker.vue.d.ts +2 -1
- package/dist/runtime/presets/default/components/KDropdown/KDropdown.d.vue.ts +2 -0
- package/dist/runtime/presets/default/components/KDropdown/KDropdown.vue +19 -6
- package/dist/runtime/presets/default/components/KDropdown/KDropdown.vue.d.ts +2 -0
- package/dist/runtime/presets/default/components/KModal/KModal.d.vue.ts +1 -0
- package/dist/runtime/presets/default/components/KModal/KModal.vue +2 -0
- package/dist/runtime/presets/default/components/KModal/KModal.vue.d.ts +1 -0
- package/package.json +1 -1
package/dist/module.json
CHANGED
|
@@ -39,6 +39,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
39
39
|
type: import("vue").PropType<import("./KCombobox.logic.js").ComboboxItem | import("./KCombobox.logic.js").ComboboxItem[] | null>;
|
|
40
40
|
default: null;
|
|
41
41
|
};
|
|
42
|
+
teleportTo: {
|
|
43
|
+
type: import("vue").PropType<string>;
|
|
44
|
+
default: undefined;
|
|
45
|
+
};
|
|
42
46
|
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
43
47
|
"update:modelValue": (value: import("@katlux/providers").TDataRow | import("@katlux/providers").TDataRow[] | null) => any;
|
|
44
48
|
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
@@ -82,6 +86,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
82
86
|
type: import("vue").PropType<import("./KCombobox.logic.js").ComboboxItem | import("./KCombobox.logic.js").ComboboxItem[] | null>;
|
|
83
87
|
default: null;
|
|
84
88
|
};
|
|
89
|
+
teleportTo: {
|
|
90
|
+
type: import("vue").PropType<string>;
|
|
91
|
+
default: undefined;
|
|
92
|
+
};
|
|
85
93
|
}>> & Readonly<{
|
|
86
94
|
"onUpdate:modelValue"?: ((value: import("@katlux/providers").TDataRow | import("@katlux/providers").TDataRow[] | null) => any) | undefined;
|
|
87
95
|
}>, {
|
|
@@ -89,6 +97,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
89
97
|
modelValue: import("@katlux/providers").TDataRow | import("@katlux/providers").TDataRow[] | null;
|
|
90
98
|
searchbox: boolean;
|
|
91
99
|
placeholder: string;
|
|
100
|
+
teleportTo: string;
|
|
92
101
|
closeOnSelect: boolean;
|
|
93
102
|
multiSelect: boolean;
|
|
94
103
|
maxSelectedDisplay: string | number | boolean;
|
|
@@ -39,6 +39,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
39
39
|
type: import("vue").PropType<import("./KCombobox.logic.js").ComboboxItem | import("./KCombobox.logic.js").ComboboxItem[] | null>;
|
|
40
40
|
default: null;
|
|
41
41
|
};
|
|
42
|
+
teleportTo: {
|
|
43
|
+
type: import("vue").PropType<string>;
|
|
44
|
+
default: undefined;
|
|
45
|
+
};
|
|
42
46
|
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
43
47
|
"update:modelValue": (value: import("@katlux/providers").TDataRow | import("@katlux/providers").TDataRow[] | null) => any;
|
|
44
48
|
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
@@ -82,6 +86,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
82
86
|
type: import("vue").PropType<import("./KCombobox.logic.js").ComboboxItem | import("./KCombobox.logic.js").ComboboxItem[] | null>;
|
|
83
87
|
default: null;
|
|
84
88
|
};
|
|
89
|
+
teleportTo: {
|
|
90
|
+
type: import("vue").PropType<string>;
|
|
91
|
+
default: undefined;
|
|
92
|
+
};
|
|
85
93
|
}>> & Readonly<{
|
|
86
94
|
"onUpdate:modelValue"?: ((value: import("@katlux/providers").TDataRow | import("@katlux/providers").TDataRow[] | null) => any) | undefined;
|
|
87
95
|
}>, {
|
|
@@ -89,6 +97,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
89
97
|
modelValue: import("@katlux/providers").TDataRow | import("@katlux/providers").TDataRow[] | null;
|
|
90
98
|
searchbox: boolean;
|
|
91
99
|
placeholder: string;
|
|
100
|
+
teleportTo: string;
|
|
92
101
|
closeOnSelect: boolean;
|
|
93
102
|
multiSelect: boolean;
|
|
94
103
|
maxSelectedDisplay: string | number | boolean;
|
|
@@ -13,6 +13,7 @@ export interface KComboboxProps {
|
|
|
13
13
|
visibleFields?: Array<String> | null;
|
|
14
14
|
labelField: string;
|
|
15
15
|
modelValue?: ComboboxItem | ComboboxItem[] | null;
|
|
16
|
+
teleportTo?: string;
|
|
16
17
|
}
|
|
17
18
|
export interface KComboboxEmits {
|
|
18
19
|
(e: 'update:modelValue', value: ComboboxItem | ComboboxItem[] | null): void;
|
|
@@ -58,6 +59,10 @@ export declare const KComboboxDefaultProps: {
|
|
|
58
59
|
type: PropType<ComboboxItem | ComboboxItem[] | null>;
|
|
59
60
|
default: null;
|
|
60
61
|
};
|
|
62
|
+
teleportTo: {
|
|
63
|
+
type: PropType<string>;
|
|
64
|
+
default: undefined;
|
|
65
|
+
};
|
|
61
66
|
};
|
|
62
67
|
export declare function useKComboboxLogic(props: KComboboxProps, emit: KComboboxEmits): {
|
|
63
68
|
selectedItems: import("vue").Ref<TDataRow[] | null, TDataRow[] | null>;
|
|
@@ -20,13 +20,17 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
20
20
|
default: boolean;
|
|
21
21
|
};
|
|
22
22
|
calendarDefinedDays: {
|
|
23
|
-
type: import("vue").PropType<IDefinedDay[]>;
|
|
23
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IDefinedDay[]>;
|
|
24
24
|
default: () => never[];
|
|
25
25
|
};
|
|
26
26
|
calendarMarkedDays: {
|
|
27
|
-
type: import("vue").PropType<IMarkedDay[]>;
|
|
27
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IMarkedDay[]>;
|
|
28
28
|
default: () => never[];
|
|
29
29
|
};
|
|
30
|
+
teleportTo: {
|
|
31
|
+
type: import("vue").PropType<string>;
|
|
32
|
+
default: undefined;
|
|
33
|
+
};
|
|
30
34
|
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
31
35
|
"update:modelValue": (value: string | Date) => any;
|
|
32
36
|
"update:maskedModel": (value: string) => any;
|
|
@@ -55,13 +59,17 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
55
59
|
default: boolean;
|
|
56
60
|
};
|
|
57
61
|
calendarDefinedDays: {
|
|
58
|
-
type: import("vue").PropType<IDefinedDay[]>;
|
|
62
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IDefinedDay[]>;
|
|
59
63
|
default: () => never[];
|
|
60
64
|
};
|
|
61
65
|
calendarMarkedDays: {
|
|
62
|
-
type: import("vue").PropType<IMarkedDay[]>;
|
|
66
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IMarkedDay[]>;
|
|
63
67
|
default: () => never[];
|
|
64
68
|
};
|
|
69
|
+
teleportTo: {
|
|
70
|
+
type: import("vue").PropType<string>;
|
|
71
|
+
default: undefined;
|
|
72
|
+
};
|
|
65
73
|
}>> & Readonly<{
|
|
66
74
|
"onUpdate:modelValue"?: ((value: string | Date) => any) | undefined;
|
|
67
75
|
"onUpdate:maskedModel"?: ((value: string) => any) | undefined;
|
|
@@ -72,10 +80,11 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
72
80
|
isOpen: boolean;
|
|
73
81
|
day: string | Date;
|
|
74
82
|
modelValue: string | Date;
|
|
83
|
+
teleportTo: string;
|
|
75
84
|
format: string;
|
|
76
85
|
showClear: boolean;
|
|
77
|
-
calendarDefinedDays: IDefinedDay[];
|
|
78
|
-
calendarMarkedDays: IMarkedDay[];
|
|
86
|
+
calendarDefinedDays: import("../KCalendar/types.js").IDefinedDay[];
|
|
87
|
+
calendarMarkedDays: import("../KCalendar/types.js").IMarkedDay[];
|
|
79
88
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
80
89
|
declare const _default: typeof __VLS_export;
|
|
81
90
|
export default _default;
|
|
@@ -24,8 +24,14 @@ const templateProps = computed(() => ({
|
|
|
24
24
|
calendarDefinedDays: props.calendarDefinedDays,
|
|
25
25
|
calendarMarkedDays: props.calendarMarkedDays,
|
|
26
26
|
textboxClicked,
|
|
27
|
-
|
|
27
|
+
onClear: handleClear,
|
|
28
|
+
dateSelected: handleDateSelected,
|
|
29
|
+
teleportTo: props.teleportTo
|
|
28
30
|
}));
|
|
31
|
+
const handleClear = () => {
|
|
32
|
+
_date.value = "";
|
|
33
|
+
maskedModel.value = "";
|
|
34
|
+
};
|
|
29
35
|
const updateMaskedModel = (val) => {
|
|
30
36
|
maskedModel.value = val;
|
|
31
37
|
};
|
|
@@ -36,8 +42,13 @@ const handleDateSelected = (date) => {
|
|
|
36
42
|
dateSelected(date);
|
|
37
43
|
};
|
|
38
44
|
watch(_date, (newDate) => {
|
|
39
|
-
|
|
40
|
-
|
|
45
|
+
const d1 = newDate instanceof Date ? newDate.getTime() : new Date(newDate).getTime();
|
|
46
|
+
const d2 = props.modelValue instanceof Date ? props.modelValue.getTime() : new Date(props.modelValue || "").getTime();
|
|
47
|
+
const d3 = props.day instanceof Date ? props.day.getTime() : new Date(props.day || "").getTime();
|
|
48
|
+
if (d1 !== d2 && d1 !== d3) {
|
|
49
|
+
emit("update:day", newDate);
|
|
50
|
+
emit("update:modelValue", newDate);
|
|
51
|
+
}
|
|
41
52
|
});
|
|
42
53
|
watch(calendarShow, (newVal) => {
|
|
43
54
|
emit("update:isOpen", newVal);
|
|
@@ -20,13 +20,17 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
20
20
|
default: boolean;
|
|
21
21
|
};
|
|
22
22
|
calendarDefinedDays: {
|
|
23
|
-
type: import("vue").PropType<IDefinedDay[]>;
|
|
23
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IDefinedDay[]>;
|
|
24
24
|
default: () => never[];
|
|
25
25
|
};
|
|
26
26
|
calendarMarkedDays: {
|
|
27
|
-
type: import("vue").PropType<IMarkedDay[]>;
|
|
27
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IMarkedDay[]>;
|
|
28
28
|
default: () => never[];
|
|
29
29
|
};
|
|
30
|
+
teleportTo: {
|
|
31
|
+
type: import("vue").PropType<string>;
|
|
32
|
+
default: undefined;
|
|
33
|
+
};
|
|
30
34
|
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
31
35
|
"update:modelValue": (value: string | Date) => any;
|
|
32
36
|
"update:maskedModel": (value: string) => any;
|
|
@@ -55,13 +59,17 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
55
59
|
default: boolean;
|
|
56
60
|
};
|
|
57
61
|
calendarDefinedDays: {
|
|
58
|
-
type: import("vue").PropType<IDefinedDay[]>;
|
|
62
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IDefinedDay[]>;
|
|
59
63
|
default: () => never[];
|
|
60
64
|
};
|
|
61
65
|
calendarMarkedDays: {
|
|
62
|
-
type: import("vue").PropType<IMarkedDay[]>;
|
|
66
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IMarkedDay[]>;
|
|
63
67
|
default: () => never[];
|
|
64
68
|
};
|
|
69
|
+
teleportTo: {
|
|
70
|
+
type: import("vue").PropType<string>;
|
|
71
|
+
default: undefined;
|
|
72
|
+
};
|
|
65
73
|
}>> & Readonly<{
|
|
66
74
|
"onUpdate:modelValue"?: ((value: string | Date) => any) | undefined;
|
|
67
75
|
"onUpdate:maskedModel"?: ((value: string) => any) | undefined;
|
|
@@ -72,10 +80,11 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
72
80
|
isOpen: boolean;
|
|
73
81
|
day: string | Date;
|
|
74
82
|
modelValue: string | Date;
|
|
83
|
+
teleportTo: string;
|
|
75
84
|
format: string;
|
|
76
85
|
showClear: boolean;
|
|
77
|
-
calendarDefinedDays: IDefinedDay[];
|
|
78
|
-
calendarMarkedDays: IMarkedDay[];
|
|
86
|
+
calendarDefinedDays: import("../KCalendar/types.js").IDefinedDay[];
|
|
87
|
+
calendarMarkedDays: import("../KCalendar/types.js").IMarkedDay[];
|
|
79
88
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
80
89
|
declare const _default: typeof __VLS_export;
|
|
81
90
|
export default _default;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type PropType } from 'vue';
|
|
2
|
-
import type { IMarkedDay, IDefinedDay } from '
|
|
2
|
+
import type { IMarkedDay, IDefinedDay } from '../KCalendar/types.js';
|
|
3
3
|
export interface KDatePickerProps {
|
|
4
4
|
format: string;
|
|
5
5
|
day?: Date | string;
|
|
@@ -8,6 +8,7 @@ export interface KDatePickerProps {
|
|
|
8
8
|
showClear?: boolean;
|
|
9
9
|
calendarDefinedDays: IDefinedDay[];
|
|
10
10
|
calendarMarkedDays: IMarkedDay[];
|
|
11
|
+
teleportTo?: string;
|
|
11
12
|
}
|
|
12
13
|
export declare const KDatePickerDefaultProps: {
|
|
13
14
|
format: {
|
|
@@ -38,6 +39,10 @@ export declare const KDatePickerDefaultProps: {
|
|
|
38
39
|
type: PropType<IMarkedDay[]>;
|
|
39
40
|
default: () => never[];
|
|
40
41
|
};
|
|
42
|
+
teleportTo: {
|
|
43
|
+
type: PropType<string>;
|
|
44
|
+
default: undefined;
|
|
45
|
+
};
|
|
41
46
|
};
|
|
42
47
|
export declare function useKDatePickerLogic(props: KDatePickerProps): {
|
|
43
48
|
_date: import("vue").Ref<string | Date, string | Date>;
|
|
@@ -27,6 +27,10 @@ export const KDatePickerDefaultProps = {
|
|
|
27
27
|
calendarMarkedDays: {
|
|
28
28
|
type: Array,
|
|
29
29
|
default: () => []
|
|
30
|
+
},
|
|
31
|
+
teleportTo: {
|
|
32
|
+
type: String,
|
|
33
|
+
default: void 0
|
|
30
34
|
}
|
|
31
35
|
};
|
|
32
36
|
export function useKDatePickerLogic(props) {
|
|
@@ -35,7 +39,9 @@ export function useKDatePickerLogic(props) {
|
|
|
35
39
|
const calendarShow = ref(false);
|
|
36
40
|
watch(maskedModel, (newVal) => {
|
|
37
41
|
if (newVal === "") {
|
|
38
|
-
_date.value
|
|
42
|
+
if (_date.value !== "") {
|
|
43
|
+
_date.value = "";
|
|
44
|
+
}
|
|
39
45
|
return;
|
|
40
46
|
}
|
|
41
47
|
const format = props.format;
|
|
@@ -57,7 +63,10 @@ export function useKDatePickerLogic(props) {
|
|
|
57
63
|
if (month.length === 2 && day.length === 2 && year.length === 4) {
|
|
58
64
|
const d = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
|
|
59
65
|
if (!isNaN(d.getTime())) {
|
|
60
|
-
_date.value
|
|
66
|
+
const oldTime = _date.value instanceof Date ? _date.value.getTime() : new Date(_date.value).getTime();
|
|
67
|
+
if (d.getTime() !== oldTime) {
|
|
68
|
+
_date.value = d;
|
|
69
|
+
}
|
|
61
70
|
}
|
|
62
71
|
}
|
|
63
72
|
});
|
|
@@ -101,14 +110,22 @@ export function useKDatePickerLogic(props) {
|
|
|
101
110
|
});
|
|
102
111
|
watch(() => props.day, (newDay) => {
|
|
103
112
|
if (newDay) {
|
|
104
|
-
|
|
105
|
-
|
|
113
|
+
const d1 = newDay instanceof Date ? newDay.getTime() : new Date(newDay).getTime();
|
|
114
|
+
const d2 = _date.value instanceof Date ? _date.value.getTime() : new Date(_date.value).getTime();
|
|
115
|
+
if (d1 !== d2) {
|
|
116
|
+
_date.value = newDay;
|
|
117
|
+
syncMaskedModel(newDay);
|
|
118
|
+
}
|
|
106
119
|
}
|
|
107
120
|
});
|
|
108
121
|
watch(() => props.modelValue, (newVal) => {
|
|
109
122
|
if (newVal) {
|
|
110
|
-
|
|
111
|
-
|
|
123
|
+
const d1 = newVal instanceof Date ? newVal.getTime() : new Date(newVal).getTime();
|
|
124
|
+
const d2 = _date.value instanceof Date ? _date.value.getTime() : new Date(_date.value).getTime();
|
|
125
|
+
if (d1 !== d2) {
|
|
126
|
+
_date.value = newVal;
|
|
127
|
+
syncMaskedModel(newVal);
|
|
128
|
+
}
|
|
112
129
|
}
|
|
113
130
|
});
|
|
114
131
|
watch(() => props.isOpen, (newVal) => {
|
|
@@ -28,13 +28,17 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
28
28
|
default: number;
|
|
29
29
|
};
|
|
30
30
|
calendarDefinedDays: {
|
|
31
|
-
type: import("vue").PropType<IDefinedDay[]>;
|
|
31
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IDefinedDay[]>;
|
|
32
32
|
default: () => never[];
|
|
33
33
|
};
|
|
34
34
|
calendarMarkedDays: {
|
|
35
|
-
type: import("vue").PropType<IMarkedDay[]>;
|
|
35
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IMarkedDay[]>;
|
|
36
36
|
default: () => never[];
|
|
37
37
|
};
|
|
38
|
+
teleportTo: {
|
|
39
|
+
type: import("vue").PropType<string>;
|
|
40
|
+
default: undefined;
|
|
41
|
+
};
|
|
38
42
|
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
39
43
|
"update:modelValue": (value: string | Date) => any;
|
|
40
44
|
"update:maskedModel": (value: string) => any;
|
|
@@ -70,13 +74,17 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
70
74
|
default: number;
|
|
71
75
|
};
|
|
72
76
|
calendarDefinedDays: {
|
|
73
|
-
type: import("vue").PropType<IDefinedDay[]>;
|
|
77
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IDefinedDay[]>;
|
|
74
78
|
default: () => never[];
|
|
75
79
|
};
|
|
76
80
|
calendarMarkedDays: {
|
|
77
|
-
type: import("vue").PropType<IMarkedDay[]>;
|
|
81
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IMarkedDay[]>;
|
|
78
82
|
default: () => never[];
|
|
79
83
|
};
|
|
84
|
+
teleportTo: {
|
|
85
|
+
type: import("vue").PropType<string>;
|
|
86
|
+
default: undefined;
|
|
87
|
+
};
|
|
80
88
|
}>> & Readonly<{
|
|
81
89
|
"onUpdate:modelValue"?: ((value: string | Date) => any) | undefined;
|
|
82
90
|
"onUpdate:maskedModel"?: ((value: string) => any) | undefined;
|
|
@@ -86,10 +94,11 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
86
94
|
isOpen: boolean;
|
|
87
95
|
day: string | Date;
|
|
88
96
|
modelValue: string | Date;
|
|
97
|
+
teleportTo: string;
|
|
89
98
|
format: string;
|
|
90
99
|
showClear: boolean;
|
|
91
|
-
calendarDefinedDays: IDefinedDay[];
|
|
92
|
-
calendarMarkedDays: IMarkedDay[];
|
|
100
|
+
calendarDefinedDays: import("../KCalendar/types.js").IDefinedDay[];
|
|
101
|
+
calendarMarkedDays: import("../KCalendar/types.js").IMarkedDay[];
|
|
93
102
|
timeFormat: string;
|
|
94
103
|
timeStep: number;
|
|
95
104
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -29,9 +29,16 @@ const templateProps = computed(() => ({
|
|
|
29
29
|
calendarMarkedDays: props.calendarMarkedDays,
|
|
30
30
|
showClear: props.showClear,
|
|
31
31
|
textboxClicked,
|
|
32
|
+
onClear: handleClear,
|
|
32
33
|
dateSelected,
|
|
33
|
-
timeSelected
|
|
34
|
+
timeSelected,
|
|
35
|
+
teleportTo: props.teleportTo
|
|
34
36
|
}));
|
|
37
|
+
const handleClear = () => {
|
|
38
|
+
_date.value = "";
|
|
39
|
+
_time.value = "";
|
|
40
|
+
maskedModel.value = "";
|
|
41
|
+
};
|
|
35
42
|
const updateMaskedModel = (val) => {
|
|
36
43
|
maskedModel.value = val;
|
|
37
44
|
};
|
|
@@ -39,7 +46,18 @@ const updateCalendarShow = (val) => {
|
|
|
39
46
|
calendarShow.value = val;
|
|
40
47
|
};
|
|
41
48
|
watch(_date, (newDate) => {
|
|
42
|
-
|
|
49
|
+
if (!newDate) {
|
|
50
|
+
if (props.modelValue || props.day) {
|
|
51
|
+
emit("update:modelValue", "");
|
|
52
|
+
}
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const d1 = newDate instanceof Date ? newDate.getTime() : new Date(newDate).getTime();
|
|
56
|
+
const d2 = props.modelValue instanceof Date ? props.modelValue.getTime() : new Date(props.modelValue || "").getTime();
|
|
57
|
+
const d3 = props.day instanceof Date ? props.day.getTime() : new Date(props.day || "").getTime();
|
|
58
|
+
if (d1 !== d2 && d1 !== d3) {
|
|
59
|
+
emit("update:modelValue", newDate);
|
|
60
|
+
}
|
|
43
61
|
});
|
|
44
62
|
watch(calendarShow, (newVal) => {
|
|
45
63
|
emit("update:isOpen", newVal);
|
|
@@ -28,13 +28,17 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
28
28
|
default: number;
|
|
29
29
|
};
|
|
30
30
|
calendarDefinedDays: {
|
|
31
|
-
type: import("vue").PropType<IDefinedDay[]>;
|
|
31
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IDefinedDay[]>;
|
|
32
32
|
default: () => never[];
|
|
33
33
|
};
|
|
34
34
|
calendarMarkedDays: {
|
|
35
|
-
type: import("vue").PropType<IMarkedDay[]>;
|
|
35
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IMarkedDay[]>;
|
|
36
36
|
default: () => never[];
|
|
37
37
|
};
|
|
38
|
+
teleportTo: {
|
|
39
|
+
type: import("vue").PropType<string>;
|
|
40
|
+
default: undefined;
|
|
41
|
+
};
|
|
38
42
|
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
39
43
|
"update:modelValue": (value: string | Date) => any;
|
|
40
44
|
"update:maskedModel": (value: string) => any;
|
|
@@ -70,13 +74,17 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
70
74
|
default: number;
|
|
71
75
|
};
|
|
72
76
|
calendarDefinedDays: {
|
|
73
|
-
type: import("vue").PropType<IDefinedDay[]>;
|
|
77
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IDefinedDay[]>;
|
|
74
78
|
default: () => never[];
|
|
75
79
|
};
|
|
76
80
|
calendarMarkedDays: {
|
|
77
|
-
type: import("vue").PropType<IMarkedDay[]>;
|
|
81
|
+
type: import("vue").PropType<import("../KCalendar/types.js").IMarkedDay[]>;
|
|
78
82
|
default: () => never[];
|
|
79
83
|
};
|
|
84
|
+
teleportTo: {
|
|
85
|
+
type: import("vue").PropType<string>;
|
|
86
|
+
default: undefined;
|
|
87
|
+
};
|
|
80
88
|
}>> & Readonly<{
|
|
81
89
|
"onUpdate:modelValue"?: ((value: string | Date) => any) | undefined;
|
|
82
90
|
"onUpdate:maskedModel"?: ((value: string) => any) | undefined;
|
|
@@ -86,10 +94,11 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
86
94
|
isOpen: boolean;
|
|
87
95
|
day: string | Date;
|
|
88
96
|
modelValue: string | Date;
|
|
97
|
+
teleportTo: string;
|
|
89
98
|
format: string;
|
|
90
99
|
showClear: boolean;
|
|
91
|
-
calendarDefinedDays: IDefinedDay[];
|
|
92
|
-
calendarMarkedDays: IMarkedDay[];
|
|
100
|
+
calendarDefinedDays: import("../KCalendar/types.js").IDefinedDay[];
|
|
101
|
+
calendarMarkedDays: import("../KCalendar/types.js").IMarkedDay[];
|
|
93
102
|
timeFormat: string;
|
|
94
103
|
timeStep: number;
|
|
95
104
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type PropType } from 'vue';
|
|
2
|
-
import type { IMarkedDay, IDefinedDay } from '
|
|
2
|
+
import type { IMarkedDay, IDefinedDay } from '../KCalendar/types.js';
|
|
3
3
|
export interface KDateTimePickerProps {
|
|
4
4
|
format?: string;
|
|
5
5
|
timeFormat?: string;
|
|
@@ -10,6 +10,7 @@ export interface KDateTimePickerProps {
|
|
|
10
10
|
timeStep?: number;
|
|
11
11
|
calendarDefinedDays?: IDefinedDay[];
|
|
12
12
|
calendarMarkedDays?: IMarkedDay[];
|
|
13
|
+
teleportTo?: string;
|
|
13
14
|
}
|
|
14
15
|
export declare const KDateTimePickerDefaultProps: {
|
|
15
16
|
format: {
|
|
@@ -48,6 +49,10 @@ export declare const KDateTimePickerDefaultProps: {
|
|
|
48
49
|
type: PropType<IMarkedDay[]>;
|
|
49
50
|
default: () => never[];
|
|
50
51
|
};
|
|
52
|
+
teleportTo: {
|
|
53
|
+
type: PropType<string>;
|
|
54
|
+
default: undefined;
|
|
55
|
+
};
|
|
51
56
|
};
|
|
52
57
|
export declare function useKDateTimePickerLogic(props: KDateTimePickerProps): {
|
|
53
58
|
_date: import("vue").Ref<string | Date, string | Date>;
|
|
@@ -35,6 +35,10 @@ export const KDateTimePickerDefaultProps = {
|
|
|
35
35
|
calendarMarkedDays: {
|
|
36
36
|
type: Array,
|
|
37
37
|
default: () => []
|
|
38
|
+
},
|
|
39
|
+
teleportTo: {
|
|
40
|
+
type: String,
|
|
41
|
+
default: void 0
|
|
38
42
|
}
|
|
39
43
|
};
|
|
40
44
|
export function useKDateTimePickerLogic(props) {
|
|
@@ -44,8 +48,10 @@ export function useKDateTimePickerLogic(props) {
|
|
|
44
48
|
const calendarShow = ref(false);
|
|
45
49
|
watch(maskedModel, (newVal) => {
|
|
46
50
|
if (newVal === "") {
|
|
47
|
-
_date.value
|
|
48
|
-
|
|
51
|
+
if (_date.value !== "") {
|
|
52
|
+
_date.value = "";
|
|
53
|
+
_time.value = "";
|
|
54
|
+
}
|
|
49
55
|
return;
|
|
50
56
|
}
|
|
51
57
|
const format = props.format || "MM-DD-YYYY HH:mm";
|
|
@@ -75,10 +81,15 @@ export function useKDateTimePickerLogic(props) {
|
|
|
75
81
|
if (hours.length === 2 && minutes.length === 2) {
|
|
76
82
|
d.setHours(parseInt(hours));
|
|
77
83
|
d.setMinutes(parseInt(minutes));
|
|
78
|
-
_time.value = `${hours}:${minutes}`;
|
|
79
84
|
}
|
|
80
85
|
if (!isNaN(d.getTime())) {
|
|
81
|
-
_date.value
|
|
86
|
+
const oldTime = _date.value instanceof Date ? _date.value.getTime() : new Date(_date.value).getTime();
|
|
87
|
+
if (d.getTime() !== oldTime) {
|
|
88
|
+
_date.value = d;
|
|
89
|
+
if (hours.length === 2 && minutes.length === 2) {
|
|
90
|
+
_time.value = `${hours}:${minutes}`;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
82
93
|
}
|
|
83
94
|
}
|
|
84
95
|
});
|
|
@@ -167,10 +178,22 @@ export function useKDateTimePickerLogic(props) {
|
|
|
167
178
|
updateMaskedModel();
|
|
168
179
|
};
|
|
169
180
|
watch(() => props.modelValue, (newVal) => {
|
|
170
|
-
|
|
181
|
+
if (newVal) {
|
|
182
|
+
const d1 = newVal instanceof Date ? newVal.getTime() : new Date(newVal).getTime();
|
|
183
|
+
const d2 = _date.value instanceof Date ? _date.value.getTime() : new Date(_date.value).getTime();
|
|
184
|
+
if (d1 !== d2) {
|
|
185
|
+
syncValue(newVal);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
171
188
|
});
|
|
172
189
|
watch(() => props.day, (newDay) => {
|
|
173
|
-
|
|
190
|
+
if (newDay) {
|
|
191
|
+
const d1 = newDay instanceof Date ? newDay.getTime() : new Date(newDay).getTime();
|
|
192
|
+
const d2 = _date.value instanceof Date ? _date.value.getTime() : new Date(_date.value).getTime();
|
|
193
|
+
if (d1 !== d2) {
|
|
194
|
+
syncValue(newDay);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
174
197
|
});
|
|
175
198
|
watch(() => props.isOpen, (newVal) => {
|
|
176
199
|
calendarShow.value = !!newVal;
|
|
@@ -11,6 +11,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
11
11
|
type: import("vue").PropType<HTMLElement>;
|
|
12
12
|
default: undefined;
|
|
13
13
|
};
|
|
14
|
+
teleportTo: {
|
|
15
|
+
type: import("vue").PropType<string>;
|
|
16
|
+
default: undefined;
|
|
17
|
+
};
|
|
14
18
|
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
15
19
|
"update:isOpen": (value: boolean) => any;
|
|
16
20
|
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
@@ -26,10 +30,15 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
26
30
|
type: import("vue").PropType<HTMLElement>;
|
|
27
31
|
default: undefined;
|
|
28
32
|
};
|
|
33
|
+
teleportTo: {
|
|
34
|
+
type: import("vue").PropType<string>;
|
|
35
|
+
default: undefined;
|
|
36
|
+
};
|
|
29
37
|
}>> & Readonly<{
|
|
30
38
|
"onUpdate:isOpen"?: ((value: boolean) => any) | undefined;
|
|
31
39
|
}>, {
|
|
32
40
|
isOpen: boolean;
|
|
41
|
+
teleportTo: string;
|
|
33
42
|
fullWidth: boolean;
|
|
34
43
|
anchorEl: HTMLElement;
|
|
35
44
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -5,19 +5,21 @@ import { computed } from "vue";
|
|
|
5
5
|
import KDropdownDefault from "../../presets/default/components/KDropdown/KDropdown.vue";
|
|
6
6
|
const props = defineProps(KDropdownDefaultProps);
|
|
7
7
|
const emit = defineEmits(["update:isOpen"]);
|
|
8
|
-
const { open, dropdownRect, clickoutside } = useKDropdownLogic(props, emit);
|
|
8
|
+
const { open, dropdownRect, clickoutside, teleportTarget, isInModal } = useKDropdownLogic(props, emit);
|
|
9
9
|
const presetComponent = usePresetComponent("KDropdown", KDropdownDefault);
|
|
10
10
|
const templateProps = computed(() => ({
|
|
11
11
|
open: open.value,
|
|
12
12
|
fullWidth: props.fullWidth,
|
|
13
13
|
anchorEl: props.anchorEl,
|
|
14
14
|
dropdownRect: dropdownRect.value,
|
|
15
|
-
clickoutside
|
|
15
|
+
clickoutside,
|
|
16
|
+
teleportTarget: teleportTarget.value,
|
|
17
|
+
isInModal: isInModal.value
|
|
16
18
|
}));
|
|
17
19
|
</script>
|
|
18
20
|
|
|
19
21
|
<template lang="pug">
|
|
20
|
-
component(:is="presetComponent" v-bind="{ ...templateProps, ...$attrs }")
|
|
22
|
+
component(:is="presetComponent" v-bind="{ ...templateProps, ...$attrs }" @update:isOpen="emit('update:isOpen', $event)")
|
|
21
23
|
template(v-for="(_, slot) in $slots" #[slot]="scope")
|
|
22
24
|
slot(:name="slot" v-bind="scope")
|
|
23
25
|
</template>
|
|
@@ -11,6 +11,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
11
11
|
type: import("vue").PropType<HTMLElement>;
|
|
12
12
|
default: undefined;
|
|
13
13
|
};
|
|
14
|
+
teleportTo: {
|
|
15
|
+
type: import("vue").PropType<string>;
|
|
16
|
+
default: undefined;
|
|
17
|
+
};
|
|
14
18
|
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
15
19
|
"update:isOpen": (value: boolean) => any;
|
|
16
20
|
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
@@ -26,10 +30,15 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
26
30
|
type: import("vue").PropType<HTMLElement>;
|
|
27
31
|
default: undefined;
|
|
28
32
|
};
|
|
33
|
+
teleportTo: {
|
|
34
|
+
type: import("vue").PropType<string>;
|
|
35
|
+
default: undefined;
|
|
36
|
+
};
|
|
29
37
|
}>> & Readonly<{
|
|
30
38
|
"onUpdate:isOpen"?: ((value: boolean) => any) | undefined;
|
|
31
39
|
}>, {
|
|
32
40
|
isOpen: boolean;
|
|
41
|
+
teleportTo: string;
|
|
33
42
|
fullWidth: boolean;
|
|
34
43
|
anchorEl: HTMLElement;
|
|
35
44
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -3,6 +3,7 @@ export interface KDropdownProps {
|
|
|
3
3
|
isOpen: boolean;
|
|
4
4
|
fullWidth: boolean;
|
|
5
5
|
anchorEl?: HTMLElement;
|
|
6
|
+
teleportTo?: string;
|
|
6
7
|
}
|
|
7
8
|
export interface KDropdownEmits {
|
|
8
9
|
(e: 'update:isOpen', value: boolean): void;
|
|
@@ -20,6 +21,10 @@ export declare const KDropdownDefaultProps: {
|
|
|
20
21
|
type: PropType<HTMLElement>;
|
|
21
22
|
default: undefined;
|
|
22
23
|
};
|
|
24
|
+
teleportTo: {
|
|
25
|
+
type: PropType<string>;
|
|
26
|
+
default: undefined;
|
|
27
|
+
};
|
|
23
28
|
};
|
|
24
29
|
export declare function useKDropdownLogic(props: KDropdownProps, emit: KDropdownEmits): {
|
|
25
30
|
open: import("vue").Ref<boolean, boolean>;
|
|
@@ -37,4 +42,6 @@ export declare function useKDropdownLogic(props: KDropdownProps, emit: KDropdown
|
|
|
37
42
|
width: number;
|
|
38
43
|
}>;
|
|
39
44
|
clickoutside: () => void;
|
|
45
|
+
teleportTarget: import("vue").ComputedRef<string>;
|
|
46
|
+
isInModal: import("vue").ComputedRef<boolean>;
|
|
40
47
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ref, watch, onMounted, onUnmounted, nextTick } from "vue";
|
|
1
|
+
import { ref, watch, onMounted, onUnmounted, nextTick, inject, computed } from "vue";
|
|
2
|
+
import { KMODAL_PORTAL_ID_KEY } from "../KModal/KModal.logic.js";
|
|
2
3
|
export const KDropdownDefaultProps = {
|
|
3
4
|
isOpen: {
|
|
4
5
|
type: Boolean,
|
|
@@ -11,24 +12,51 @@ export const KDropdownDefaultProps = {
|
|
|
11
12
|
anchorEl: {
|
|
12
13
|
type: Object,
|
|
13
14
|
default: void 0
|
|
15
|
+
},
|
|
16
|
+
teleportTo: {
|
|
17
|
+
type: String,
|
|
18
|
+
default: void 0
|
|
14
19
|
}
|
|
15
20
|
};
|
|
16
21
|
export function useKDropdownLogic(props, emit) {
|
|
22
|
+
const modalPortalId = inject(KMODAL_PORTAL_ID_KEY, null);
|
|
23
|
+
const isInModal = computed(() => !!modalPortalId);
|
|
24
|
+
const teleportTarget = computed(() => {
|
|
25
|
+
if (props.teleportTo) return props.teleportTo;
|
|
26
|
+
if (isInModal.value) return `#${modalPortalId}`;
|
|
27
|
+
return "body";
|
|
28
|
+
});
|
|
17
29
|
const open = ref(false);
|
|
18
30
|
const dropdownRect = ref({ top: 0, left: 0, width: 0 });
|
|
19
31
|
const clickoutside = () => {
|
|
20
32
|
open.value = false;
|
|
21
33
|
emit("update:isOpen", open.value);
|
|
22
34
|
};
|
|
23
|
-
const updatePosition =
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
35
|
+
const updatePosition = () => {
|
|
36
|
+
try {
|
|
37
|
+
if (props.anchorEl) {
|
|
38
|
+
const el = props.anchorEl.$el || props.anchorEl;
|
|
39
|
+
if (el && typeof el.getBoundingClientRect === "function") {
|
|
40
|
+
const rect = el.getBoundingClientRect();
|
|
41
|
+
if (teleportTarget.value === "body" || teleportTarget.value === void 0) {
|
|
42
|
+
dropdownRect.value = {
|
|
43
|
+
top: rect.bottom + window.scrollY,
|
|
44
|
+
left: rect.left + window.scrollX,
|
|
45
|
+
width: rect.width
|
|
46
|
+
};
|
|
47
|
+
} else {
|
|
48
|
+
const portalEl = document.querySelector(teleportTarget.value);
|
|
49
|
+
const portalRect = portalEl ? portalEl.getBoundingClientRect() : { top: 0, left: 0 };
|
|
50
|
+
dropdownRect.value = {
|
|
51
|
+
top: rect.bottom - portalRect.top,
|
|
52
|
+
left: rect.left - portalRect.left,
|
|
53
|
+
width: rect.width
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
} catch (e) {
|
|
59
|
+
console.error("[KDropdown] Failed to update position", e);
|
|
32
60
|
}
|
|
33
61
|
};
|
|
34
62
|
const onScrollResize = () => {
|
|
@@ -39,11 +67,16 @@ export function useKDropdownLogic(props, emit) {
|
|
|
39
67
|
watch(
|
|
40
68
|
() => props.isOpen,
|
|
41
69
|
(newValue) => {
|
|
42
|
-
open.value = newValue;
|
|
43
70
|
if (newValue) {
|
|
44
71
|
updatePosition();
|
|
72
|
+
nextTick(() => {
|
|
73
|
+
open.value = true;
|
|
74
|
+
});
|
|
75
|
+
} else {
|
|
76
|
+
open.value = false;
|
|
45
77
|
}
|
|
46
|
-
}
|
|
78
|
+
},
|
|
79
|
+
{ immediate: true }
|
|
47
80
|
);
|
|
48
81
|
watch(
|
|
49
82
|
() => props.anchorEl,
|
|
@@ -54,9 +87,11 @@ export function useKDropdownLogic(props, emit) {
|
|
|
54
87
|
}
|
|
55
88
|
);
|
|
56
89
|
onMounted(() => {
|
|
57
|
-
|
|
58
|
-
if (open.value) {
|
|
90
|
+
if (props.isOpen) {
|
|
59
91
|
updatePosition();
|
|
92
|
+
nextTick(() => {
|
|
93
|
+
open.value = true;
|
|
94
|
+
});
|
|
60
95
|
}
|
|
61
96
|
window.addEventListener("scroll", onScrollResize, true);
|
|
62
97
|
window.addEventListener("resize", onScrollResize);
|
|
@@ -68,6 +103,8 @@ export function useKDropdownLogic(props, emit) {
|
|
|
68
103
|
return {
|
|
69
104
|
open,
|
|
70
105
|
dropdownRect,
|
|
71
|
-
clickoutside
|
|
106
|
+
clickoutside,
|
|
107
|
+
teleportTarget,
|
|
108
|
+
isInModal
|
|
72
109
|
};
|
|
73
110
|
}
|
|
@@ -4,13 +4,15 @@ import { usePresetComponent } from "../../composables/usePresetComponent";
|
|
|
4
4
|
import { computed } from "vue";
|
|
5
5
|
import KModalDefault from "../../presets/default/components/KModal/KModal.vue";
|
|
6
6
|
const props = defineProps(KModalDefaultProps);
|
|
7
|
-
const
|
|
7
|
+
const stableId = globalThis.useId ? globalThis.useId() : `k-modal-${Math.random().toString(36).slice(2, 9)}`;
|
|
8
|
+
const { modalId, opened, openModal, closeModal } = useKModalLogic(props, stableId);
|
|
8
9
|
defineExpose({
|
|
9
10
|
openModal,
|
|
10
11
|
closeModal
|
|
11
12
|
});
|
|
12
13
|
const presetComponent = usePresetComponent("KModal", KModalDefault);
|
|
13
14
|
const templateProps = computed(() => ({
|
|
15
|
+
modalId,
|
|
14
16
|
opened: opened.value,
|
|
15
17
|
closeModal
|
|
16
18
|
}));
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
export declare const KMODAL_PORTAL_ID_KEY = "KMODAL_PORTAL_ID";
|
|
1
2
|
export interface KModalProps {
|
|
2
3
|
}
|
|
3
4
|
export declare const KModalDefaultProps: {};
|
|
4
|
-
export declare function useKModalLogic(props: KModalProps): {
|
|
5
|
+
export declare function useKModalLogic(props: KModalProps, stableId: string): {
|
|
6
|
+
modalId: string;
|
|
5
7
|
opened: import("vue").Ref<boolean, boolean>;
|
|
6
8
|
openModal: () => void;
|
|
7
9
|
closeModal: () => void;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { ref } from "vue";
|
|
1
|
+
import { ref, provide } from "vue";
|
|
2
|
+
export const KMODAL_PORTAL_ID_KEY = "KMODAL_PORTAL_ID";
|
|
2
3
|
export const KModalDefaultProps = {};
|
|
3
|
-
export function useKModalLogic(props) {
|
|
4
|
+
export function useKModalLogic(props, stableId) {
|
|
5
|
+
const modalId = stableId;
|
|
6
|
+
provide(KMODAL_PORTAL_ID_KEY, modalId);
|
|
4
7
|
const opened = ref(false);
|
|
5
8
|
function openModal() {
|
|
6
9
|
opened.value = true;
|
|
@@ -9,6 +12,7 @@ export function useKModalLogic(props) {
|
|
|
9
12
|
opened.value = false;
|
|
10
13
|
}
|
|
11
14
|
return {
|
|
15
|
+
modalId,
|
|
12
16
|
opened,
|
|
13
17
|
openModal,
|
|
14
18
|
closeModal
|
|
@@ -13,6 +13,7 @@ type __VLS_Props = {
|
|
|
13
13
|
selectItem: (option: ComboboxItem) => void;
|
|
14
14
|
isSelected: (option: ComboboxItem) => boolean;
|
|
15
15
|
loading: boolean;
|
|
16
|
+
teleportTo?: string;
|
|
16
17
|
};
|
|
17
18
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
18
19
|
"update:searchtext": (value: string) => any;
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
) {{ item[labelField] }}
|
|
10
10
|
.KCombobox__selected-content-placeholder(v-else) {{placeholder}}
|
|
11
11
|
KIcon(iconname="chevron" width="12" height="12").chevron
|
|
12
|
-
KDropdown(:isOpen="isOptionsOpen" :anchorEl="activatorRef" fullWidth).KCombobox__options
|
|
12
|
+
KDropdown(:isOpen="isOptionsOpen" :anchorEl="activatorRef" fullWidth :teleportTo="teleportTo").KCombobox__options
|
|
13
13
|
slot
|
|
14
14
|
KComboboxList(
|
|
15
15
|
:searchbox="searchbox"
|
|
@@ -42,6 +42,7 @@ const props = defineProps<{
|
|
|
42
42
|
selectItem: (option: ComboboxItem) => void
|
|
43
43
|
isSelected: (option: ComboboxItem) => boolean
|
|
44
44
|
loading: boolean
|
|
45
|
+
teleportTo?: string
|
|
45
46
|
}>()
|
|
46
47
|
|
|
47
48
|
const emit = defineEmits<{
|
|
@@ -13,6 +13,7 @@ type __VLS_Props = {
|
|
|
13
13
|
selectItem: (option: ComboboxItem) => void;
|
|
14
14
|
isSelected: (option: ComboboxItem) => boolean;
|
|
15
15
|
loading: boolean;
|
|
16
|
+
teleportTo?: string;
|
|
16
17
|
};
|
|
17
18
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
18
19
|
"update:searchtext": (value: string) => any;
|
|
@@ -9,8 +9,9 @@ type __VLS_Props = {
|
|
|
9
9
|
calendarDefinedDays: IDefinedDay[];
|
|
10
10
|
calendarMarkedDays: IMarkedDay[];
|
|
11
11
|
textboxClicked: () => void;
|
|
12
|
-
onClear
|
|
12
|
+
onClear?: () => void;
|
|
13
13
|
dateSelected: (date: Date) => void;
|
|
14
|
+
teleportTo?: string;
|
|
14
15
|
};
|
|
15
16
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
16
17
|
"update:maskedModel": (value: string) => any;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template lang="pug">
|
|
2
2
|
.KDatePicker(ref="activatorRef")
|
|
3
3
|
KMaskTextbox(v-model="maskedModel" :key="maskedModel" :mask="format" :placeholder="format" @click.stop="textboxClicked" :showClear="showClear" @clear="onClear")
|
|
4
|
-
KDropdown(v-model:isOpen="calendarShow" :anchorEl="activatorRef")
|
|
4
|
+
KDropdown(v-model:isOpen="calendarShow" :anchorEl="activatorRef" :teleportTo="teleportTo")
|
|
5
5
|
KCalendar(view="month" :viewCount="1" :day="calendarDay" :selectedDay="_date" @dayClicked="dateSelected" :definedDays="calendarDefinedDays" :markedDays="calendarMarkedDays")
|
|
6
6
|
</template>
|
|
7
7
|
|
|
@@ -23,8 +23,9 @@ const props = defineProps<{
|
|
|
23
23
|
calendarDefinedDays: IDefinedDay[]
|
|
24
24
|
calendarMarkedDays: IMarkedDay[]
|
|
25
25
|
textboxClicked: () => void
|
|
26
|
-
onClear
|
|
26
|
+
onClear?: () => void
|
|
27
27
|
dateSelected: (date: Date) => void
|
|
28
|
+
teleportTo?: string
|
|
28
29
|
}>()
|
|
29
30
|
|
|
30
31
|
const emit = defineEmits<{
|
|
@@ -9,8 +9,9 @@ type __VLS_Props = {
|
|
|
9
9
|
calendarDefinedDays: IDefinedDay[];
|
|
10
10
|
calendarMarkedDays: IMarkedDay[];
|
|
11
11
|
textboxClicked: () => void;
|
|
12
|
-
onClear
|
|
12
|
+
onClear?: () => void;
|
|
13
13
|
dateSelected: (date: Date) => void;
|
|
14
|
+
teleportTo?: string;
|
|
14
15
|
};
|
|
15
16
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
16
17
|
"update:maskedModel": (value: string) => any;
|
|
@@ -12,9 +12,10 @@ type __VLS_Props = {
|
|
|
12
12
|
calendarMarkedDays: IMarkedDay[];
|
|
13
13
|
showClear: boolean;
|
|
14
14
|
textboxClicked: () => void;
|
|
15
|
-
onClear
|
|
15
|
+
onClear?: () => void;
|
|
16
16
|
dateSelected: (date: Date) => void;
|
|
17
17
|
timeSelected: (time: string) => void;
|
|
18
|
+
teleportTo?: string;
|
|
18
19
|
};
|
|
19
20
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
20
21
|
"update:maskedModel": (value: string) => any;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template lang="pug">
|
|
2
2
|
.KDateTimePicker(ref="activatorRef" @click.stop="textboxClicked")
|
|
3
3
|
KMaskTextbox(v-model="maskedModel" :key="maskedModel" :mask="format" :placeholder="format" :showClear="showClear" @clear="onClear")
|
|
4
|
-
KDropdown(v-model:isOpen="calendarShow" :anchorEl="activatorRef")
|
|
4
|
+
KDropdown(v-model:isOpen="calendarShow" :anchorEl="activatorRef" :teleportTo="teleportTo")
|
|
5
5
|
KGrid(direction="row" align="start" :noGap="false" wrap="nowrap").datetime-picker-grid
|
|
6
6
|
.calendar-section
|
|
7
7
|
KCalendar(view="month" :viewCount="1" :day="calendarDay" :selectedDay="_date" @dayClicked="dateSelected" :definedDays="calendarDefinedDays" :markedDays="calendarMarkedDays")
|
|
@@ -30,9 +30,10 @@ const props = defineProps<{
|
|
|
30
30
|
calendarMarkedDays: IMarkedDay[]
|
|
31
31
|
showClear: boolean
|
|
32
32
|
textboxClicked: () => void
|
|
33
|
-
onClear
|
|
33
|
+
onClear?: () => void
|
|
34
34
|
dateSelected: (date: Date) => void
|
|
35
35
|
timeSelected: (time: string) => void
|
|
36
|
+
teleportTo?: string
|
|
36
37
|
}>()
|
|
37
38
|
|
|
38
39
|
const emit = defineEmits<{
|
|
@@ -12,9 +12,10 @@ type __VLS_Props = {
|
|
|
12
12
|
calendarMarkedDays: IMarkedDay[];
|
|
13
13
|
showClear: boolean;
|
|
14
14
|
textboxClicked: () => void;
|
|
15
|
-
onClear
|
|
15
|
+
onClear?: () => void;
|
|
16
16
|
dateSelected: (date: Date) => void;
|
|
17
17
|
timeSelected: (time: string) => void;
|
|
18
|
+
teleportTo?: string;
|
|
18
19
|
};
|
|
19
20
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
20
21
|
"update:maskedModel": (value: string) => any;
|
|
@@ -8,6 +8,8 @@ type __VLS_Props = {
|
|
|
8
8
|
width: number;
|
|
9
9
|
};
|
|
10
10
|
clickoutside: () => void;
|
|
11
|
+
teleportTarget: string | null;
|
|
12
|
+
isInModal: boolean;
|
|
11
13
|
};
|
|
12
14
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
15
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
<template lang="pug">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
.KDropdown-source
|
|
3
|
+
Teleport(v-if="isMounted && open && teleportTarget" :to="teleportTarget")
|
|
4
|
+
.KDropdown-teleported
|
|
5
|
+
.KDropdown(v-click-outside="clickoutside" :style="dialogStyle" v-bind="$attrs")
|
|
6
|
+
KPanel.KDropdown-container(:class="{'fullWidth': fullWidth}")
|
|
7
|
+
slot
|
|
6
8
|
</template>
|
|
7
9
|
|
|
8
10
|
<script lang="ts" setup>
|
|
9
|
-
import { computed } from 'vue'
|
|
11
|
+
import { computed, ref, onMounted } from 'vue'
|
|
12
|
+
|
|
13
|
+
defineOptions({
|
|
14
|
+
inheritAttrs: false
|
|
15
|
+
})
|
|
10
16
|
|
|
11
17
|
const props = defineProps<{
|
|
12
18
|
open: boolean
|
|
@@ -14,14 +20,21 @@ const props = defineProps<{
|
|
|
14
20
|
anchorEl?: HTMLElement
|
|
15
21
|
dropdownRect: { top: number, left: number, width: number }
|
|
16
22
|
clickoutside: () => void
|
|
23
|
+
teleportTarget: string | null
|
|
24
|
+
isInModal: boolean
|
|
17
25
|
}>()
|
|
18
26
|
|
|
27
|
+
const isMounted = ref(false)
|
|
28
|
+
onMounted(() => {
|
|
29
|
+
isMounted.value = true
|
|
30
|
+
})
|
|
31
|
+
|
|
19
32
|
const dialogStyle = computed(() => ({
|
|
20
33
|
position: 'absolute',
|
|
21
34
|
top: `${props.dropdownRect.top}px`,
|
|
22
35
|
left: `${props.dropdownRect.left}px`,
|
|
23
36
|
width: props.fullWidth ? `${props.dropdownRect.width}px` : 'fit-content',
|
|
24
|
-
zIndex:
|
|
37
|
+
zIndex: 2000
|
|
25
38
|
}))
|
|
26
39
|
</script>
|
|
27
40
|
|
|
@@ -8,6 +8,8 @@ type __VLS_Props = {
|
|
|
8
8
|
width: number;
|
|
9
9
|
};
|
|
10
10
|
clickoutside: () => void;
|
|
11
|
+
teleportTarget: string | null;
|
|
12
|
+
isInModal: boolean;
|
|
11
13
|
};
|
|
12
14
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
15
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<template lang="pug">
|
|
2
2
|
dialog.k-dialog(ref="dialogRef" @close="closeModal" @click="handleBackdropClick")
|
|
3
|
+
.modal-portal(:id="modalId" style="position: absolute; top: 0; left: 0;")
|
|
3
4
|
KPanel(no-gap flex-content scrollable).modal-container
|
|
4
5
|
template(#header)
|
|
5
6
|
slot(name="header")
|
|
@@ -12,6 +13,7 @@ dialog.k-dialog(ref="dialogRef" @close="closeModal" @click="handleBackdropClick"
|
|
|
12
13
|
import { ref, watch, onMounted } from 'vue'
|
|
13
14
|
|
|
14
15
|
const props = defineProps<{
|
|
16
|
+
modalId: string
|
|
15
17
|
opened: boolean
|
|
16
18
|
closeModal: () => void
|
|
17
19
|
}>()
|