@katlux/toolkit 0.1.0-beta.46 → 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.
Files changed (47) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/runtime/components/KButton/KButton.logic.d.ts +1 -1
  3. package/dist/runtime/components/KCombobox/KCombobox.global.d.vue.ts +9 -0
  4. package/dist/runtime/components/KCombobox/KCombobox.global.vue +2 -1
  5. package/dist/runtime/components/KCombobox/KCombobox.global.vue.d.ts +9 -0
  6. package/dist/runtime/components/KCombobox/KCombobox.logic.d.ts +5 -0
  7. package/dist/runtime/components/KCombobox/KCombobox.logic.js +4 -0
  8. package/dist/runtime/components/KDatatable/KDataIterator.logic.d.ts +20 -0
  9. package/dist/runtime/components/KDatatable/KDatatable.logic.d.ts +12 -0
  10. package/dist/runtime/components/KDatePicker/KDatePicker.global.d.vue.ts +9 -0
  11. package/dist/runtime/components/KDatePicker/KDatePicker.global.vue +2 -1
  12. package/dist/runtime/components/KDatePicker/KDatePicker.global.vue.d.ts +9 -0
  13. package/dist/runtime/components/KDatePicker/KDatePicker.logic.d.ts +5 -0
  14. package/dist/runtime/components/KDatePicker/KDatePicker.logic.js +4 -0
  15. package/dist/runtime/components/KDateTimePicker/KDateTimePicker.global.d.vue.ts +9 -0
  16. package/dist/runtime/components/KDateTimePicker/KDateTimePicker.global.vue +2 -1
  17. package/dist/runtime/components/KDateTimePicker/KDateTimePicker.global.vue.d.ts +9 -0
  18. package/dist/runtime/components/KDateTimePicker/KDateTimePicker.logic.d.ts +5 -0
  19. package/dist/runtime/components/KDateTimePicker/KDateTimePicker.logic.js +4 -0
  20. package/dist/runtime/components/KDropdown/KDropdown.global.d.vue.ts +9 -0
  21. package/dist/runtime/components/KDropdown/KDropdown.global.vue +5 -3
  22. package/dist/runtime/components/KDropdown/KDropdown.global.vue.d.ts +9 -0
  23. package/dist/runtime/components/KDropdown/KDropdown.logic.d.ts +7 -0
  24. package/dist/runtime/components/KDropdown/KDropdown.logic.js +52 -15
  25. package/dist/runtime/components/KModal/KModal.global.vue +3 -1
  26. package/dist/runtime/components/KModal/KModal.logic.d.ts +3 -1
  27. package/dist/runtime/components/KModal/KModal.logic.js +6 -2
  28. package/dist/runtime/components/KTreePicker/KTreePicker.global.d.vue.ts +2 -2
  29. package/dist/runtime/components/KTreePicker/KTreePicker.global.vue.d.ts +2 -2
  30. package/dist/runtime/components/KTreeView/KTreeView.global.d.vue.ts +3 -3
  31. package/dist/runtime/components/KTreeView/KTreeView.global.vue.d.ts +3 -3
  32. package/dist/runtime/presets/default/components/KCombobox/KCombobox.d.vue.ts +1 -0
  33. package/dist/runtime/presets/default/components/KCombobox/KCombobox.vue +2 -1
  34. package/dist/runtime/presets/default/components/KCombobox/KCombobox.vue.d.ts +1 -0
  35. package/dist/runtime/presets/default/components/KDatePicker/KDatePicker.d.vue.ts +1 -0
  36. package/dist/runtime/presets/default/components/KDatePicker/KDatePicker.vue +2 -1
  37. package/dist/runtime/presets/default/components/KDatePicker/KDatePicker.vue.d.ts +1 -0
  38. package/dist/runtime/presets/default/components/KDateTimePicker/KDateTimePicker.d.vue.ts +1 -0
  39. package/dist/runtime/presets/default/components/KDateTimePicker/KDateTimePicker.vue +2 -1
  40. package/dist/runtime/presets/default/components/KDateTimePicker/KDateTimePicker.vue.d.ts +1 -0
  41. package/dist/runtime/presets/default/components/KDropdown/KDropdown.d.vue.ts +2 -0
  42. package/dist/runtime/presets/default/components/KDropdown/KDropdown.vue +15 -6
  43. package/dist/runtime/presets/default/components/KDropdown/KDropdown.vue.d.ts +2 -0
  44. package/dist/runtime/presets/default/components/KModal/KModal.d.vue.ts +1 -0
  45. package/dist/runtime/presets/default/components/KModal/KModal.vue +2 -0
  46. package/dist/runtime/presets/default/components/KModal/KModal.vue.d.ts +1 -0
  47. package/package.json +1 -1
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@katlux/toolkit",
3
3
  "configKey": "katluxToolkit",
4
- "version": "0.1.0-beta.46",
4
+ "version": "0.1.0-beta.47",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
@@ -22,7 +22,7 @@ export interface KButtonEmits {
22
22
  export declare function useKButtonLogic(props: KButtonProps, emit: KButtonEmits): {
23
23
  isLink: import("vue").ComputedRef<boolean>;
24
24
  isDisabled: import("vue").ComputedRef<boolean | undefined>;
25
- buttonClasses: import("vue").ComputedRef<("info" | "default" | "small" | "primary" | "danger" | "success" | "warning" | "light" | "dark" | "large" | "medium" | {
25
+ buttonClasses: import("vue").ComputedRef<("info" | "default" | "primary" | "danger" | "success" | "warning" | "light" | "dark" | "small" | "large" | "medium" | {
26
26
  disabled: boolean | undefined;
27
27
  })[]>;
28
28
  onClick: () => void;
@@ -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;
@@ -31,7 +31,8 @@ const templateProps = computed(() => ({
31
31
  closeDropdown,
32
32
  selectItem,
33
33
  isSelected,
34
- loading: loading.value
34
+ loading: loading.value,
35
+ teleportTo: props.teleportTo
35
36
  }));
36
37
  function updateSearchText(val) {
37
38
  searchtext.value = val;
@@ -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>;
@@ -42,6 +42,10 @@ export const KComboboxDefaultProps = {
42
42
  modelValue: {
43
43
  type: [Object, Array],
44
44
  default: null
45
+ },
46
+ teleportTo: {
47
+ type: String,
48
+ default: void 0
45
49
  }
46
50
  };
47
51
  export function useKComboboxLogic(props, emit) {
@@ -0,0 +1,20 @@
1
+ import { ADataProvider } from '@katlux/providers';
2
+ export interface KDataIteratorProps {
3
+ dataProvider: ADataProvider;
4
+ visibleFields?: Array<string> | null;
5
+ loading?: boolean;
6
+ search?: string;
7
+ itemsPerPage?: number;
8
+ page?: number;
9
+ }
10
+ export declare const KDataIteratorDefaultProps: {
11
+ visibleFields: null;
12
+ loading: boolean;
13
+ search: string;
14
+ itemsPerPage: number;
15
+ page: number;
16
+ };
17
+ export declare function useKDataIteratorLogic(props: KDataIteratorProps): {
18
+ selectedRows: import("vue").Ref<any[], any[]>;
19
+ selectAll: import("vue").Ref<boolean, boolean>;
20
+ };
@@ -0,0 +1,12 @@
1
+ import { ADataProvider } from '@katlux/providers';
2
+ export interface KDatatableProps {
3
+ dataProvider: ADataProvider;
4
+ visibleFields?: Array<string> | null;
5
+ }
6
+ export declare const KDatatableDefaultProps: {
7
+ visibleFields: null;
8
+ };
9
+ export declare function useKDatatableLogic(props: KDatatableProps): {
10
+ selectedRows: import("vue").Ref<any[], any[]>;
11
+ selectAll: import("vue").Ref<boolean, boolean>;
12
+ };
@@ -27,6 +27,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
27
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;
@@ -62,6 +66,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
62
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,6 +80,7 @@ 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
86
  calendarDefinedDays: import("../KCalendar/types.js").IDefinedDay[];
@@ -25,7 +25,8 @@ const templateProps = computed(() => ({
25
25
  calendarMarkedDays: props.calendarMarkedDays,
26
26
  textboxClicked,
27
27
  onClear: handleClear,
28
- dateSelected: handleDateSelected
28
+ dateSelected: handleDateSelected,
29
+ teleportTo: props.teleportTo
29
30
  }));
30
31
  const handleClear = () => {
31
32
  _date.value = "";
@@ -27,6 +27,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
27
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;
@@ -62,6 +66,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
62
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,6 +80,7 @@ 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
86
  calendarDefinedDays: import("../KCalendar/types.js").IDefinedDay[];
@@ -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,6 +35,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
35
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;
@@ -77,6 +81,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
77
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,6 +94,7 @@ 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
100
  calendarDefinedDays: import("../KCalendar/types.js").IDefinedDay[];
@@ -31,7 +31,8 @@ const templateProps = computed(() => ({
31
31
  textboxClicked,
32
32
  onClear: handleClear,
33
33
  dateSelected,
34
- timeSelected
34
+ timeSelected,
35
+ teleportTo: props.teleportTo
35
36
  }));
36
37
  const handleClear = () => {
37
38
  _date.value = "";
@@ -35,6 +35,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
35
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;
@@ -77,6 +81,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
77
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,6 +94,7 @@ 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
100
  calendarDefinedDays: import("../KCalendar/types.js").IDefinedDay[];
@@ -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) {
@@ -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 = async () => {
24
- await nextTick();
25
- if (props.anchorEl) {
26
- const rect = props.anchorEl.getBoundingClientRect();
27
- dropdownRect.value = {
28
- top: rect.bottom + window.scrollY,
29
- left: rect.left + window.scrollX,
30
- width: rect.width
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
- open.value = props.isOpen;
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 { opened, openModal, closeModal } = useKModalLogic(props);
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
@@ -103,6 +103,8 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
103
103
  onChange?: ((value: any) => any) | undefined;
104
104
  "onUpdate:modelValue"?: ((value: any) => any) | undefined;
105
105
  }>, {
106
+ parentKey: string;
107
+ idKey: string;
106
108
  disabled: boolean;
107
109
  loading: boolean;
108
110
  modelValue: any;
@@ -112,8 +114,6 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
112
114
  closeOnSelect: boolean;
113
115
  multiSelect: boolean;
114
116
  iconField: string;
115
- idKey: string;
116
- parentKey: string;
117
117
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
118
118
  declare const _default: typeof __VLS_export;
119
119
  export default _default;
@@ -103,6 +103,8 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
103
103
  onChange?: ((value: any) => any) | undefined;
104
104
  "onUpdate:modelValue"?: ((value: any) => any) | undefined;
105
105
  }>, {
106
+ parentKey: string;
107
+ idKey: string;
106
108
  disabled: boolean;
107
109
  loading: boolean;
108
110
  modelValue: any;
@@ -112,8 +114,6 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
112
114
  closeOnSelect: boolean;
113
115
  multiSelect: boolean;
114
116
  iconField: string;
115
- idKey: string;
116
- parentKey: string;
117
117
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
118
118
  declare const _default: typeof __VLS_export;
119
119
  export default _default;
@@ -81,14 +81,14 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
81
81
  default: () => {};
82
82
  };
83
83
  }>> & Readonly<{}>, {
84
+ parentKey: string;
85
+ idKey: string;
86
+ expandedByDefault: boolean;
84
87
  bulkActions: import("@katlux/providers").IKDatatableAction[];
85
88
  rowActions: import("./KTreeView.logic.js").IRowAction[];
86
89
  cellSlots: Record<string, any>;
87
90
  headerSlots: Record<string, any>;
88
91
  treeColumnIndex: number;
89
- idKey: string;
90
- parentKey: string;
91
- expandedByDefault: boolean;
92
92
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
93
93
  declare const _default: typeof __VLS_export;
94
94
  export default _default;
@@ -81,14 +81,14 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
81
81
  default: () => {};
82
82
  };
83
83
  }>> & Readonly<{}>, {
84
+ parentKey: string;
85
+ idKey: string;
86
+ expandedByDefault: boolean;
84
87
  bulkActions: import("@katlux/providers").IKDatatableAction[];
85
88
  rowActions: import("./KTreeView.logic.js").IRowAction[];
86
89
  cellSlots: Record<string, any>;
87
90
  headerSlots: Record<string, any>;
88
91
  treeColumnIndex: number;
89
- idKey: string;
90
- parentKey: string;
91
- expandedByDefault: boolean;
92
92
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
93
93
  declare const _default: typeof __VLS_export;
94
94
  export default _default;
@@ -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;
@@ -11,6 +11,7 @@ type __VLS_Props = {
11
11
  textboxClicked: () => void;
12
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
 
@@ -25,6 +25,7 @@ const props = defineProps<{
25
25
  textboxClicked: () => void
26
26
  onClear?: () => void
27
27
  dateSelected: (date: Date) => void
28
+ teleportTo?: string
28
29
  }>()
29
30
 
30
31
  const emit = defineEmits<{
@@ -11,6 +11,7 @@ type __VLS_Props = {
11
11
  textboxClicked: () => void;
12
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;
@@ -15,6 +15,7 @@ type __VLS_Props = {
15
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")
@@ -33,6 +33,7 @@ const props = defineProps<{
33
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<{
@@ -15,6 +15,7 @@ type __VLS_Props = {
15
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,14 @@
1
1
  <template lang="pug">
2
- Teleport(to="body")
3
- .KDropdown(v-if="open" v-click-outside="clickoutside" :style="dialogStyle" v-bind="$attrs")
4
- KPanel.KDropdown-container(:class="{'fullWidth': fullWidth}")
5
- slot
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'
10
12
 
11
13
  defineOptions({
12
14
  inheritAttrs: false
@@ -18,14 +20,21 @@ const props = defineProps<{
18
20
  anchorEl?: HTMLElement
19
21
  dropdownRect: { top: number, left: number, width: number }
20
22
  clickoutside: () => void
23
+ teleportTarget: string | null
24
+ isInModal: boolean
21
25
  }>()
22
26
 
27
+ const isMounted = ref(false)
28
+ onMounted(() => {
29
+ isMounted.value = true
30
+ })
31
+
23
32
  const dialogStyle = computed(() => ({
24
33
  position: 'absolute',
25
34
  top: `${props.dropdownRect.top}px`,
26
35
  left: `${props.dropdownRect.left}px`,
27
36
  width: props.fullWidth ? `${props.dropdownRect.width}px` : 'fit-content',
28
- zIndex: 1000
37
+ zIndex: 2000
29
38
  }))
30
39
  </script>
31
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,4 +1,5 @@
1
1
  type __VLS_Props = {
2
+ modalId: string;
2
3
  opened: boolean;
3
4
  closeModal: () => void;
4
5
  };
@@ -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
  }>()
@@ -1,4 +1,5 @@
1
1
  type __VLS_Props = {
2
+ modalId: string;
2
3
  opened: boolean;
3
4
  closeModal: () => void;
4
5
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@katlux/toolkit",
3
- "version": "0.1.0-beta.46",
3
+ "version": "0.1.0-beta.47",
4
4
  "description": "Core UI toolkit and utilities for the Katlux ecosystem",
5
5
  "author": "Katlux",
6
6
  "license": "MIT",