@keenthemes/ktui 1.2.1 → 1.2.3
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/ktui.js +2216 -845
- package/dist/ktui.min.js +1 -1
- package/dist/ktui.min.js.map +1 -1
- package/dist/styles.css +24 -197
- package/lib/cjs/components/carousel/carousel.d.ts +102 -0
- package/lib/cjs/components/carousel/carousel.d.ts.map +1 -0
- package/lib/cjs/components/carousel/carousel.js +769 -0
- package/lib/cjs/components/carousel/carousel.js.map +1 -0
- package/lib/cjs/components/carousel/index.d.ts +7 -0
- package/lib/cjs/components/carousel/index.d.ts.map +1 -0
- package/lib/cjs/components/carousel/index.js +10 -0
- package/lib/cjs/components/carousel/index.js.map +1 -0
- package/lib/cjs/components/carousel/types.d.ts +36 -0
- package/lib/cjs/components/carousel/types.d.ts.map +1 -0
- package/lib/cjs/components/carousel/types.js +7 -0
- package/lib/cjs/components/carousel/types.js.map +1 -0
- package/lib/cjs/components/component.d.ts +3 -3
- package/lib/cjs/components/component.d.ts.map +1 -1
- package/lib/cjs/components/component.js +9 -1
- package/lib/cjs/components/component.js.map +1 -1
- package/lib/cjs/components/datatable/datatable-checkbox.d.ts +1 -1
- package/lib/cjs/components/datatable/datatable-checkbox.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable-checkbox.js +1 -1
- package/lib/cjs/components/datatable/datatable-checkbox.js.map +1 -1
- package/lib/cjs/components/datatable/datatable-sort.d.ts +1 -1
- package/lib/cjs/components/datatable/datatable-sort.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable-sort.js.map +1 -1
- package/lib/cjs/components/datatable/datatable.d.ts +2 -0
- package/lib/cjs/components/datatable/datatable.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable.js +30 -17
- package/lib/cjs/components/datatable/datatable.js.map +1 -1
- package/lib/cjs/components/datatable/types.d.ts +2 -1
- package/lib/cjs/components/datatable/types.d.ts.map +1 -1
- package/lib/cjs/components/drawer/drawer.d.ts.map +1 -1
- package/lib/cjs/components/drawer/drawer.js +3 -16
- package/lib/cjs/components/drawer/drawer.js.map +1 -1
- package/lib/cjs/components/dropdown/dropdown.d.ts +1 -1
- package/lib/cjs/components/dropdown/dropdown.d.ts.map +1 -1
- package/lib/cjs/components/dropdown/dropdown.js +2 -3
- package/lib/cjs/components/dropdown/dropdown.js.map +1 -1
- package/lib/cjs/components/modal/modal.d.ts.map +1 -1
- package/lib/cjs/components/modal/modal.js +19 -13
- package/lib/cjs/components/modal/modal.js.map +1 -1
- package/lib/cjs/components/pin-input/index.d.ts +3 -0
- package/lib/cjs/components/pin-input/index.d.ts.map +1 -0
- package/lib/cjs/components/pin-input/index.js +6 -0
- package/lib/cjs/components/pin-input/index.js.map +1 -0
- package/lib/cjs/components/pin-input/pin-input.d.ts +56 -0
- package/lib/cjs/components/pin-input/pin-input.d.ts.map +1 -0
- package/lib/cjs/components/pin-input/pin-input.js +455 -0
- package/lib/cjs/components/pin-input/pin-input.js.map +1 -0
- package/lib/cjs/components/pin-input/types.d.ts +41 -0
- package/lib/cjs/components/pin-input/types.d.ts.map +1 -0
- package/lib/cjs/components/pin-input/types.js +6 -0
- package/lib/cjs/components/pin-input/types.js.map +1 -0
- package/lib/cjs/components/rating/rating.d.ts.map +1 -1
- package/lib/cjs/components/rating/rating.js.map +1 -1
- package/lib/cjs/components/select/combobox.d.ts.map +1 -1
- package/lib/cjs/components/select/combobox.js +25 -15
- package/lib/cjs/components/select/combobox.js.map +1 -1
- package/lib/cjs/components/select/config.d.ts +2 -2
- package/lib/cjs/components/select/config.d.ts.map +1 -1
- package/lib/cjs/components/select/config.js +10 -9
- package/lib/cjs/components/select/config.js.map +1 -1
- package/lib/cjs/components/select/dropdown.js.map +1 -1
- package/lib/cjs/components/select/option.d.ts +2 -1
- package/lib/cjs/components/select/option.d.ts.map +1 -1
- package/lib/cjs/components/select/option.js +9 -3
- package/lib/cjs/components/select/option.js.map +1 -1
- package/lib/cjs/components/select/remote.d.ts +1 -0
- package/lib/cjs/components/select/remote.d.ts.map +1 -1
- package/lib/cjs/components/select/remote.js +21 -14
- package/lib/cjs/components/select/remote.js.map +1 -1
- package/lib/cjs/components/select/search.d.ts +1 -1
- package/lib/cjs/components/select/search.d.ts.map +1 -1
- package/lib/cjs/components/select/search.js +34 -25
- package/lib/cjs/components/select/search.js.map +1 -1
- package/lib/cjs/components/select/select.d.ts +5 -3
- package/lib/cjs/components/select/select.d.ts.map +1 -1
- package/lib/cjs/components/select/select.js +31 -31
- package/lib/cjs/components/select/select.js.map +1 -1
- package/lib/cjs/components/select/tags.d.ts.map +1 -1
- package/lib/cjs/components/select/tags.js +22 -13
- package/lib/cjs/components/select/tags.js.map +1 -1
- package/lib/cjs/components/select/templates.d.ts.map +1 -1
- package/lib/cjs/components/select/templates.js +4 -4
- package/lib/cjs/components/select/templates.js.map +1 -1
- package/lib/cjs/components/select/types.d.ts +1 -1
- package/lib/cjs/components/select/types.d.ts.map +1 -1
- package/lib/cjs/components/select/utils.d.ts +4 -4
- package/lib/cjs/components/select/utils.d.ts.map +1 -1
- package/lib/cjs/components/select/utils.js +2 -3
- package/lib/cjs/components/select/utils.js.map +1 -1
- package/lib/cjs/components/sticky/sticky.d.ts +1 -1
- package/lib/cjs/components/sticky/sticky.d.ts.map +1 -1
- package/lib/cjs/components/sticky/sticky.js +13 -13
- package/lib/cjs/components/sticky/sticky.js.map +1 -1
- package/lib/cjs/components/theme-switch/theme-switch.d.ts +3 -0
- package/lib/cjs/components/theme-switch/theme-switch.d.ts.map +1 -1
- package/lib/cjs/components/theme-switch/theme-switch.js +17 -4
- package/lib/cjs/components/theme-switch/theme-switch.js.map +1 -1
- package/lib/cjs/components/toast/toast.d.ts.map +1 -1
- package/lib/cjs/components/toast/toast.js +17 -9
- package/lib/cjs/components/toast/toast.js.map +1 -1
- package/lib/cjs/components/toast/types.d.ts +3 -0
- package/lib/cjs/components/toast/types.d.ts.map +1 -1
- package/lib/cjs/components/toggle/toggle.d.ts +2 -0
- package/lib/cjs/components/toggle/toggle.d.ts.map +1 -1
- package/lib/cjs/components/toggle/toggle.js +11 -2
- package/lib/cjs/components/toggle/toggle.js.map +1 -1
- package/lib/cjs/components/toggle-password/toggle-password.d.ts.map +1 -1
- package/lib/cjs/components/toggle-password/toggle-password.js.map +1 -1
- package/lib/cjs/helpers/dom.d.ts +4 -4
- package/lib/cjs/helpers/dom.d.ts.map +1 -1
- package/lib/cjs/helpers/dom.js +8 -10
- package/lib/cjs/helpers/dom.js.map +1 -1
- package/lib/cjs/helpers/event-handler.d.ts +1 -1
- package/lib/cjs/helpers/event-handler.d.ts.map +1 -1
- package/lib/cjs/helpers/event-handler.js +3 -1
- package/lib/cjs/helpers/event-handler.js.map +1 -1
- package/lib/cjs/helpers/utils.d.ts +1 -1
- package/lib/cjs/helpers/utils.d.ts.map +1 -1
- package/lib/cjs/helpers/utils.js +4 -1
- package/lib/cjs/helpers/utils.js.map +1 -1
- package/lib/cjs/index.d.ts +8 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +9 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/types.d.ts +1 -1
- package/lib/cjs/types.d.ts.map +1 -1
- package/lib/esm/components/carousel/carousel.d.ts +102 -0
- package/lib/esm/components/carousel/carousel.d.ts.map +1 -0
- package/lib/esm/components/carousel/carousel.js +766 -0
- package/lib/esm/components/carousel/carousel.js.map +1 -0
- package/lib/esm/components/carousel/index.d.ts +7 -0
- package/lib/esm/components/carousel/index.d.ts.map +1 -0
- package/lib/esm/components/carousel/index.js +6 -0
- package/lib/esm/components/carousel/index.js.map +1 -0
- package/lib/esm/components/carousel/types.d.ts +36 -0
- package/lib/esm/components/carousel/types.d.ts.map +1 -0
- package/lib/esm/components/carousel/types.js +6 -0
- package/lib/esm/components/carousel/types.js.map +1 -0
- package/lib/esm/components/component.d.ts +3 -3
- package/lib/esm/components/component.d.ts.map +1 -1
- package/lib/esm/components/component.js +9 -1
- package/lib/esm/components/component.js.map +1 -1
- package/lib/esm/components/datatable/datatable-checkbox.d.ts +1 -1
- package/lib/esm/components/datatable/datatable-checkbox.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable-checkbox.js +1 -1
- package/lib/esm/components/datatable/datatable-checkbox.js.map +1 -1
- package/lib/esm/components/datatable/datatable-sort.d.ts +1 -1
- package/lib/esm/components/datatable/datatable-sort.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable-sort.js.map +1 -1
- package/lib/esm/components/datatable/datatable.d.ts +2 -0
- package/lib/esm/components/datatable/datatable.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable.js +30 -17
- package/lib/esm/components/datatable/datatable.js.map +1 -1
- package/lib/esm/components/datatable/types.d.ts +2 -1
- package/lib/esm/components/datatable/types.d.ts.map +1 -1
- package/lib/esm/components/drawer/drawer.d.ts.map +1 -1
- package/lib/esm/components/drawer/drawer.js +3 -16
- package/lib/esm/components/drawer/drawer.js.map +1 -1
- package/lib/esm/components/dropdown/dropdown.d.ts +1 -1
- package/lib/esm/components/dropdown/dropdown.d.ts.map +1 -1
- package/lib/esm/components/dropdown/dropdown.js +2 -3
- package/lib/esm/components/dropdown/dropdown.js.map +1 -1
- package/lib/esm/components/modal/modal.d.ts.map +1 -1
- package/lib/esm/components/modal/modal.js +19 -13
- package/lib/esm/components/modal/modal.js.map +1 -1
- package/lib/esm/components/pin-input/index.d.ts +3 -0
- package/lib/esm/components/pin-input/index.d.ts.map +1 -0
- package/lib/esm/components/pin-input/index.js +2 -0
- package/lib/esm/components/pin-input/index.js.map +1 -0
- package/lib/esm/components/pin-input/pin-input.d.ts +56 -0
- package/lib/esm/components/pin-input/pin-input.d.ts.map +1 -0
- package/lib/esm/components/pin-input/pin-input.js +452 -0
- package/lib/esm/components/pin-input/pin-input.js.map +1 -0
- package/lib/esm/components/pin-input/types.d.ts +41 -0
- package/lib/esm/components/pin-input/types.d.ts.map +1 -0
- package/lib/esm/components/pin-input/types.js +5 -0
- package/lib/esm/components/pin-input/types.js.map +1 -0
- package/lib/esm/components/rating/rating.d.ts.map +1 -1
- package/lib/esm/components/rating/rating.js.map +1 -1
- package/lib/esm/components/select/combobox.d.ts.map +1 -1
- package/lib/esm/components/select/combobox.js +25 -15
- package/lib/esm/components/select/combobox.js.map +1 -1
- package/lib/esm/components/select/config.d.ts +2 -2
- package/lib/esm/components/select/config.d.ts.map +1 -1
- package/lib/esm/components/select/config.js +10 -9
- package/lib/esm/components/select/config.js.map +1 -1
- package/lib/esm/components/select/dropdown.js.map +1 -1
- package/lib/esm/components/select/option.d.ts +2 -1
- package/lib/esm/components/select/option.d.ts.map +1 -1
- package/lib/esm/components/select/option.js +9 -3
- package/lib/esm/components/select/option.js.map +1 -1
- package/lib/esm/components/select/remote.d.ts +1 -0
- package/lib/esm/components/select/remote.d.ts.map +1 -1
- package/lib/esm/components/select/remote.js +21 -14
- package/lib/esm/components/select/remote.js.map +1 -1
- package/lib/esm/components/select/search.d.ts +1 -1
- package/lib/esm/components/select/search.d.ts.map +1 -1
- package/lib/esm/components/select/search.js +34 -25
- package/lib/esm/components/select/search.js.map +1 -1
- package/lib/esm/components/select/select.d.ts +5 -3
- package/lib/esm/components/select/select.d.ts.map +1 -1
- package/lib/esm/components/select/select.js +31 -31
- package/lib/esm/components/select/select.js.map +1 -1
- package/lib/esm/components/select/tags.d.ts.map +1 -1
- package/lib/esm/components/select/tags.js +22 -13
- package/lib/esm/components/select/tags.js.map +1 -1
- package/lib/esm/components/select/templates.d.ts.map +1 -1
- package/lib/esm/components/select/templates.js +4 -4
- package/lib/esm/components/select/templates.js.map +1 -1
- package/lib/esm/components/select/types.d.ts +1 -1
- package/lib/esm/components/select/types.d.ts.map +1 -1
- package/lib/esm/components/select/utils.d.ts +4 -4
- package/lib/esm/components/select/utils.d.ts.map +1 -1
- package/lib/esm/components/select/utils.js +2 -3
- package/lib/esm/components/select/utils.js.map +1 -1
- package/lib/esm/components/sticky/sticky.d.ts +1 -1
- package/lib/esm/components/sticky/sticky.d.ts.map +1 -1
- package/lib/esm/components/sticky/sticky.js +13 -13
- package/lib/esm/components/sticky/sticky.js.map +1 -1
- package/lib/esm/components/theme-switch/theme-switch.d.ts +3 -0
- package/lib/esm/components/theme-switch/theme-switch.d.ts.map +1 -1
- package/lib/esm/components/theme-switch/theme-switch.js +17 -4
- package/lib/esm/components/theme-switch/theme-switch.js.map +1 -1
- package/lib/esm/components/toast/toast.d.ts.map +1 -1
- package/lib/esm/components/toast/toast.js +17 -9
- package/lib/esm/components/toast/toast.js.map +1 -1
- package/lib/esm/components/toast/types.d.ts +3 -0
- package/lib/esm/components/toast/types.d.ts.map +1 -1
- package/lib/esm/components/toggle/toggle.d.ts +2 -0
- package/lib/esm/components/toggle/toggle.d.ts.map +1 -1
- package/lib/esm/components/toggle/toggle.js +11 -2
- package/lib/esm/components/toggle/toggle.js.map +1 -1
- package/lib/esm/components/toggle-password/toggle-password.d.ts.map +1 -1
- package/lib/esm/components/toggle-password/toggle-password.js.map +1 -1
- package/lib/esm/helpers/dom.d.ts +4 -4
- package/lib/esm/helpers/dom.d.ts.map +1 -1
- package/lib/esm/helpers/dom.js +8 -10
- package/lib/esm/helpers/dom.js.map +1 -1
- package/lib/esm/helpers/event-handler.d.ts +1 -1
- package/lib/esm/helpers/event-handler.d.ts.map +1 -1
- package/lib/esm/helpers/event-handler.js +3 -1
- package/lib/esm/helpers/event-handler.js.map +1 -1
- package/lib/esm/helpers/utils.d.ts +1 -1
- package/lib/esm/helpers/utils.d.ts.map +1 -1
- package/lib/esm/helpers/utils.js +4 -1
- package/lib/esm/helpers/utils.js.map +1 -1
- package/lib/esm/index.d.ts +8 -0
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +6 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/types.d.ts +1 -1
- package/lib/esm/types.d.ts.map +1 -1
- package/package.json +5 -2
- package/src/components/carousel/__tests__/carousel.test.ts +326 -0
- package/src/components/carousel/carousel.css +42 -0
- package/src/components/carousel/carousel.ts +847 -0
- package/src/components/carousel/index.ts +11 -0
- package/src/components/carousel/types.ts +38 -0
- package/src/components/clipboard/__tests__/clipboard.test.ts +4 -4
- package/src/components/component.ts +15 -5
- package/src/components/datatable/__tests__/currency-sort.test.ts +4 -3
- package/src/components/datatable/__tests__/pagination-reset.test.ts +7 -4
- package/src/components/datatable/__tests__/setup.ts +1 -1
- package/src/components/datatable/datatable-checkbox.ts +6 -4
- package/src/components/datatable/datatable-sort.ts +27 -7
- package/src/components/datatable/datatable.ts +64 -37
- package/src/components/datatable/types.ts +3 -1
- package/src/components/drawer/drawer.ts +3 -18
- package/src/components/dropdown/dropdown.ts +2 -3
- package/src/components/modal/modal.ts +22 -14
- package/src/components/pin-input/__tests__/pin-input.test.ts +928 -0
- package/src/components/pin-input/index.ts +6 -0
- package/src/components/pin-input/pin-input.ts +499 -0
- package/src/components/pin-input/types.ts +45 -0
- package/src/components/rating/rating.ts +0 -1
- package/src/components/repeater/__tests__/repeater.test.ts +5 -5
- package/src/components/select/__tests__/ux-behaviors.test.ts +4 -3
- package/src/components/select/combobox.ts +23 -16
- package/src/components/select/config.ts +15 -14
- package/src/components/select/dropdown.ts +1 -1
- package/src/components/select/option.ts +14 -4
- package/src/components/select/remote.ts +68 -56
- package/src/components/select/search.ts +30 -27
- package/src/components/select/select.ts +41 -37
- package/src/components/select/tags.ts +14 -8
- package/src/components/select/templates.ts +11 -6
- package/src/components/select/types.ts +1 -1
- package/src/components/select/utils.ts +7 -9
- package/src/components/sticky/sticky.ts +2 -2
- package/src/components/theme-switch/theme-switch.ts +22 -4
- package/src/components/toast/toast.ts +34 -21
- package/src/components/toast/types.ts +5 -1
- package/src/components/toggle/toggle.ts +12 -2
- package/src/components/toggle-password/toggle-password.ts +0 -1
- package/src/helpers/dom.ts +14 -17
- package/src/helpers/event-handler.ts +5 -6
- package/src/helpers/utils.ts +5 -2
- package/src/index.ts +18 -0
- package/src/types.ts +1 -1
- package/styles.css +1 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
|
|
3
|
+
* Copyright 2025 by Keenthemes Inc
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export { KTCarousel } from './carousel';
|
|
7
|
+
export type {
|
|
8
|
+
KTCarouselChangePayloadInterface,
|
|
9
|
+
KTCarouselConfigInterface,
|
|
10
|
+
KTCarouselInterface,
|
|
11
|
+
} from './types';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
|
|
3
|
+
* Copyright 2025 by Keenthemes Inc
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export interface KTCarouselConfigInterface {
|
|
7
|
+
autoplay: boolean;
|
|
8
|
+
autoplayInterval: number;
|
|
9
|
+
infiniteLoop: boolean;
|
|
10
|
+
rtl: boolean;
|
|
11
|
+
perView: number;
|
|
12
|
+
centered: boolean;
|
|
13
|
+
draggable: boolean;
|
|
14
|
+
snap: boolean;
|
|
15
|
+
autoHeight: boolean;
|
|
16
|
+
/** When true, native scrollbars stay visible on the viewport and thumbnail strip. */
|
|
17
|
+
showScrollbar: boolean;
|
|
18
|
+
lazy: boolean;
|
|
19
|
+
pauseOnHover: boolean;
|
|
20
|
+
changeEvent: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface KTCarouselChangePayloadInterface {
|
|
24
|
+
index: number;
|
|
25
|
+
prevIndex: number;
|
|
26
|
+
userInitiated: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface KTCarouselInterface {
|
|
30
|
+
goTo(index: number, userInitiated?: boolean): void;
|
|
31
|
+
next(userInitiated?: boolean): void;
|
|
32
|
+
prev(userInitiated?: boolean): void;
|
|
33
|
+
getIndex(): number;
|
|
34
|
+
getSlideCount(): number;
|
|
35
|
+
dispose(): void;
|
|
36
|
+
getElement(): HTMLElement;
|
|
37
|
+
getOption(name: string): unknown;
|
|
38
|
+
}
|
|
@@ -80,7 +80,7 @@ function createFixture(options?: {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
describe('KTClipboard', () => {
|
|
83
|
-
let originalExecCommand:
|
|
83
|
+
let originalExecCommand: Document['execCommand'];
|
|
84
84
|
|
|
85
85
|
beforeEach(() => {
|
|
86
86
|
// Ensure a clean clipboard state between tests.
|
|
@@ -90,7 +90,7 @@ describe('KTClipboard', () => {
|
|
|
90
90
|
afterEach(() => {
|
|
91
91
|
document.body.innerHTML = '';
|
|
92
92
|
// Restore execCommand (if it was replaced).
|
|
93
|
-
document.execCommand = originalExecCommand
|
|
93
|
+
document.execCommand = originalExecCommand;
|
|
94
94
|
});
|
|
95
95
|
|
|
96
96
|
it('copies predefined text (text wins over target)', async () => {
|
|
@@ -135,7 +135,7 @@ describe('KTClipboard', () => {
|
|
|
135
135
|
});
|
|
136
136
|
|
|
137
137
|
const execCommandMock = vi.fn().mockReturnValue(true);
|
|
138
|
-
document.execCommand = execCommandMock as
|
|
138
|
+
document.execCommand = execCommandMock as Document['execCommand'];
|
|
139
139
|
|
|
140
140
|
const { trigger } = createFixture({
|
|
141
141
|
withPredefinedText: true,
|
|
@@ -163,7 +163,7 @@ describe('KTClipboard', () => {
|
|
|
163
163
|
});
|
|
164
164
|
|
|
165
165
|
const execCommandMock = vi.fn().mockReturnValue(false);
|
|
166
|
-
document.execCommand = execCommandMock as
|
|
166
|
+
document.execCommand = execCommandMock as Document['execCommand'];
|
|
167
167
|
|
|
168
168
|
const { trigger } = createFixture({
|
|
169
169
|
withPredefinedText: true,
|
|
@@ -19,7 +19,7 @@ export default class KTComponent {
|
|
|
19
19
|
protected _name: string;
|
|
20
20
|
protected _defaultConfig: object;
|
|
21
21
|
protected _config: object;
|
|
22
|
-
protected _events: Map<string, Map<string, CallableFunction
|
|
22
|
+
protected _events: Map<string, Map<string, CallableFunction>> = new Map();
|
|
23
23
|
protected _uid: string | null = null;
|
|
24
24
|
protected _element: HTMLElement | null = null;
|
|
25
25
|
|
|
@@ -67,7 +67,7 @@ export default class KTComponent {
|
|
|
67
67
|
|
|
68
68
|
protected async _fireEvent(
|
|
69
69
|
eventType: string,
|
|
70
|
-
payload: object = null,
|
|
70
|
+
payload: object | null = null,
|
|
71
71
|
): Promise<void> {
|
|
72
72
|
const callbacks = this._events.get(eventType);
|
|
73
73
|
|
|
@@ -86,7 +86,10 @@ export default class KTComponent {
|
|
|
86
86
|
);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
protected _dispatchEvent(
|
|
89
|
+
protected _dispatchEvent(
|
|
90
|
+
eventType: string,
|
|
91
|
+
payload: object | null = null,
|
|
92
|
+
): void {
|
|
90
93
|
const event = new CustomEvent(eventType, {
|
|
91
94
|
detail: { payload },
|
|
92
95
|
bubbles: true,
|
|
@@ -100,6 +103,9 @@ export default class KTComponent {
|
|
|
100
103
|
|
|
101
104
|
protected _getOption(name: string): KTOptionType {
|
|
102
105
|
const value = this._config[name as keyof object];
|
|
106
|
+
if (!this._element) {
|
|
107
|
+
return value as KTOptionType;
|
|
108
|
+
}
|
|
103
109
|
const reponsiveValue = KTDom.getCssProp(
|
|
104
110
|
this._element,
|
|
105
111
|
`--kt-${this._name}-${KTUtils.camelReverseCase(name)}`,
|
|
@@ -163,7 +169,11 @@ export default class KTComponent {
|
|
|
163
169
|
this._events.set(eventType, new Map());
|
|
164
170
|
}
|
|
165
171
|
|
|
166
|
-
this._events.get(eventType)
|
|
172
|
+
const eventMap = this._events.get(eventType);
|
|
173
|
+
if (!eventMap) {
|
|
174
|
+
return eventId;
|
|
175
|
+
}
|
|
176
|
+
eventMap.set(eventId, callback);
|
|
167
177
|
|
|
168
178
|
return eventId;
|
|
169
179
|
}
|
|
@@ -176,7 +186,7 @@ export default class KTComponent {
|
|
|
176
186
|
return this._getOption(name as keyof object);
|
|
177
187
|
}
|
|
178
188
|
|
|
179
|
-
public getElement(): HTMLElement {
|
|
189
|
+
public getElement(): HTMLElement | null {
|
|
180
190
|
if (!this._element) return null;
|
|
181
191
|
return this._element;
|
|
182
192
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
10
10
|
import { createSortHandler } from '../datatable-sort';
|
|
11
|
+
import { KTDataTableConfigInterface } from '../types';
|
|
11
12
|
|
|
12
13
|
describe('KTDataTable - Currency/numeric sort', () => {
|
|
13
14
|
let thead: HTMLTableSectionElement;
|
|
@@ -29,7 +30,7 @@ describe('KTDataTable - Currency/numeric sort', () => {
|
|
|
29
30
|
},
|
|
30
31
|
};
|
|
31
32
|
const handler = createSortHandler(
|
|
32
|
-
config as
|
|
33
|
+
config as KTDataTableConfigInterface,
|
|
33
34
|
thead,
|
|
34
35
|
() => ({ sortField: null, sortOrder: '' }),
|
|
35
36
|
noop,
|
|
@@ -58,7 +59,7 @@ describe('KTDataTable - Currency/numeric sort', () => {
|
|
|
58
59
|
},
|
|
59
60
|
};
|
|
60
61
|
const handler = createSortHandler(
|
|
61
|
-
config as
|
|
62
|
+
config as KTDataTableConfigInterface,
|
|
62
63
|
thead,
|
|
63
64
|
() => ({ sortField: null, sortOrder: '' }),
|
|
64
65
|
noop,
|
|
@@ -79,7 +80,7 @@ describe('KTDataTable - Currency/numeric sort', () => {
|
|
|
79
80
|
it('without sortType numeric, sorts lexicographically (e.g. £123 before £20)', () => {
|
|
80
81
|
const config = { columns: {} };
|
|
81
82
|
const handler = createSortHandler(
|
|
82
|
-
config as
|
|
83
|
+
config as KTDataTableConfigInterface,
|
|
83
84
|
thead,
|
|
84
85
|
() => ({ sortField: null, sortOrder: '' }),
|
|
85
86
|
noop,
|
|
@@ -13,7 +13,7 @@ import { KTDataTableColumnFilterInterface } from '../types';
|
|
|
13
13
|
describe('KTDataTable - Pagination Reset', () => {
|
|
14
14
|
let container: HTMLElement;
|
|
15
15
|
let tableElement: HTMLTableElement;
|
|
16
|
-
let datatable: KTDataTable<
|
|
16
|
+
let datatable: KTDataTable<Record<string, unknown>>;
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Helper: Create a mock datatable with sample data
|
|
@@ -177,13 +177,16 @@ describe('KTDataTable - Pagination Reset', () => {
|
|
|
177
177
|
// Provide custom search callback that handles objects
|
|
178
178
|
search: {
|
|
179
179
|
delay: 500,
|
|
180
|
-
callback: (
|
|
180
|
+
callback: (
|
|
181
|
+
data: Record<string, unknown>[],
|
|
182
|
+
search: string | object,
|
|
183
|
+
) => {
|
|
181
184
|
if (!search) return data;
|
|
182
185
|
// For object search, just return all data (simplified for test)
|
|
183
186
|
if (typeof search === 'object') return data;
|
|
184
187
|
// String search
|
|
185
|
-
return data.filter((item:
|
|
186
|
-
Object.values(item).some((value:
|
|
188
|
+
return data.filter((item: Record<string, unknown>) =>
|
|
189
|
+
Object.values(item).some((value: unknown) =>
|
|
187
190
|
String(value)
|
|
188
191
|
.toLowerCase()
|
|
189
192
|
.includes((search as string).toLowerCase()),
|
|
@@ -46,7 +46,7 @@ Object.defineProperty(window, 'matchMedia', {
|
|
|
46
46
|
matches: false,
|
|
47
47
|
media: query,
|
|
48
48
|
onchange: null as
|
|
49
|
-
| ((this: MediaQueryList, ev: MediaQueryListEvent) =>
|
|
49
|
+
| ((this: MediaQueryList, ev: MediaQueryListEvent) => unknown)
|
|
50
50
|
| null,
|
|
51
51
|
addListener: () => {}, // deprecated
|
|
52
52
|
removeListener: () => {}, // deprecated
|
|
@@ -25,7 +25,7 @@ export interface KTDataTableCheckboxAPI {
|
|
|
25
25
|
export function createCheckboxHandler(
|
|
26
26
|
element: HTMLElement,
|
|
27
27
|
config: KTDataTableConfigInterface,
|
|
28
|
-
fireEvent: (eventName: string, eventData?:
|
|
28
|
+
fireEvent: (eventName: string, eventData?: object) => void,
|
|
29
29
|
): KTDataTableCheckboxAPI {
|
|
30
30
|
let headerChecked = false;
|
|
31
31
|
let headerCheckElement: HTMLInputElement | null = null;
|
|
@@ -36,7 +36,8 @@ export function createCheckboxHandler(
|
|
|
36
36
|
|
|
37
37
|
// Helper: get selectedRows from state, always as string[]
|
|
38
38
|
function getSelectedRows(): string[] {
|
|
39
|
-
if (!config._state)
|
|
39
|
+
if (!config._state)
|
|
40
|
+
config._state = {} as unknown as KTDataTableConfigInterface['_state'];
|
|
40
41
|
if (!Array.isArray(config._state.selectedRows))
|
|
41
42
|
config._state.selectedRows = [];
|
|
42
43
|
return config._state.selectedRows.map(String);
|
|
@@ -44,7 +45,8 @@ export function createCheckboxHandler(
|
|
|
44
45
|
|
|
45
46
|
// Helper: set selectedRows in state
|
|
46
47
|
function setSelectedRows(rows: string[]) {
|
|
47
|
-
if (!config._state)
|
|
48
|
+
if (!config._state)
|
|
49
|
+
config._state = {} as unknown as KTDataTableConfigInterface['_state'];
|
|
48
50
|
config._state.selectedRows = Array.from(new Set(rows.map(String)));
|
|
49
51
|
}
|
|
50
52
|
|
|
@@ -118,7 +120,7 @@ export function createCheckboxHandler(
|
|
|
118
120
|
}
|
|
119
121
|
|
|
120
122
|
// When the header checkbox is toggled
|
|
121
|
-
function checkboxToggle(
|
|
123
|
+
function checkboxToggle(_event?: Event) {
|
|
122
124
|
const checked = !isChecked();
|
|
123
125
|
// Update state first, then fire events
|
|
124
126
|
change(checked);
|
|
@@ -40,8 +40,8 @@ export function createSortHandler<T = KTDataTableDataInterface>(
|
|
|
40
40
|
field: keyof T | number,
|
|
41
41
|
order: KTDataTableSortOrderInterface,
|
|
42
42
|
) => void,
|
|
43
|
-
fireEvent: (eventName: string, eventData?:
|
|
44
|
-
dispatchEvent: (eventName: string, eventData?:
|
|
43
|
+
fireEvent: (eventName: string, eventData?: object) => void,
|
|
44
|
+
dispatchEvent: (eventName: string, eventData?: object) => void,
|
|
45
45
|
updateData: () => void,
|
|
46
46
|
): KTDataTableSortAPI<T> {
|
|
47
47
|
// Helper to compare values for sorting (string)
|
|
@@ -93,7 +93,9 @@ export function createSortHandler<T = KTDataTableDataInterface>(
|
|
|
93
93
|
| {
|
|
94
94
|
sortType?: 'string' | 'numeric';
|
|
95
95
|
sortValue?: (
|
|
96
|
-
cellValue:
|
|
96
|
+
cellValue:
|
|
97
|
+
| KTDataTableDataInterface[keyof KTDataTableDataInterface]
|
|
98
|
+
| string,
|
|
97
99
|
rowData: KTDataTableDataInterface,
|
|
98
100
|
) => number | string;
|
|
99
101
|
}
|
|
@@ -121,8 +123,18 @@ export function createSortHandler<T = KTDataTableDataInterface>(
|
|
|
121
123
|
const bRaw = b[sortField as keyof T] as unknown;
|
|
122
124
|
|
|
123
125
|
if (typeof sortValueFn === 'function') {
|
|
124
|
-
const aVal = sortValueFn(
|
|
125
|
-
|
|
126
|
+
const aVal = sortValueFn(
|
|
127
|
+
aRaw as
|
|
128
|
+
| KTDataTableDataInterface[keyof KTDataTableDataInterface]
|
|
129
|
+
| string,
|
|
130
|
+
a as KTDataTableDataInterface,
|
|
131
|
+
);
|
|
132
|
+
const bVal = sortValueFn(
|
|
133
|
+
bRaw as
|
|
134
|
+
| KTDataTableDataInterface[keyof KTDataTableDataInterface]
|
|
135
|
+
| string,
|
|
136
|
+
b as KTDataTableDataInterface,
|
|
137
|
+
);
|
|
126
138
|
const aNum = typeof aVal === 'number' ? aVal : parseNumeric(aVal);
|
|
127
139
|
const bNum = typeof bVal === 'number' ? bVal : parseNumeric(bVal);
|
|
128
140
|
if (typeof aVal === 'number' && typeof bVal === 'number') {
|
|
@@ -131,8 +143,16 @@ export function createSortHandler<T = KTDataTableDataInterface>(
|
|
|
131
143
|
return compareValues(aVal, bVal, sortOrder);
|
|
132
144
|
}
|
|
133
145
|
if (useNumeric) {
|
|
134
|
-
const aNum = parseNumeric(
|
|
135
|
-
|
|
146
|
+
const aNum = parseNumeric(
|
|
147
|
+
aRaw as
|
|
148
|
+
| KTDataTableDataInterface[keyof KTDataTableDataInterface]
|
|
149
|
+
| string,
|
|
150
|
+
);
|
|
151
|
+
const bNum = parseNumeric(
|
|
152
|
+
bRaw as
|
|
153
|
+
| KTDataTableDataInterface[keyof KTDataTableDataInterface]
|
|
154
|
+
| string,
|
|
155
|
+
);
|
|
136
156
|
return compareNumeric(aNum, bNum, sortOrder);
|
|
137
157
|
}
|
|
138
158
|
return compareValues(aRaw, bRaw, sortOrder);
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
KTDataTableColumnFilterInterface,
|
|
14
14
|
KTDataTableAttributeInterface,
|
|
15
15
|
} from './types';
|
|
16
|
+
import { KTOptionType } from '../../types';
|
|
16
17
|
import KTUtils from '../../helpers/utils';
|
|
17
18
|
import KTComponents from '../../index';
|
|
18
19
|
import KTData from '../../helpers/data';
|
|
@@ -35,6 +36,20 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
35
36
|
extends KTComponent
|
|
36
37
|
implements KTDataTableInterface
|
|
37
38
|
{
|
|
39
|
+
private static asElementWithInstance(element: HTMLElement): HTMLElement & {
|
|
40
|
+
instance?: KTDataTable<KTDataTableDataInterface>;
|
|
41
|
+
} {
|
|
42
|
+
return element as HTMLElement & {
|
|
43
|
+
instance?: KTDataTable<KTDataTableDataInterface>;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private static asSearchElementWithDebounce(
|
|
48
|
+
element: HTMLInputElement,
|
|
49
|
+
): HTMLInputElement & { _debouncedSearch?: EventListener } {
|
|
50
|
+
return element as HTMLInputElement & { _debouncedSearch?: EventListener };
|
|
51
|
+
}
|
|
52
|
+
|
|
38
53
|
protected override _name: string = 'datatable';
|
|
39
54
|
protected override _config: KTDataTableConfigInterface;
|
|
40
55
|
protected override _defaultConfig: KTDataTableConfigInterface;
|
|
@@ -88,7 +103,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
88
103
|
this._buildConfig();
|
|
89
104
|
|
|
90
105
|
// Store the instance directly on the element
|
|
91
|
-
(element
|
|
106
|
+
KTDataTable.asElementWithInstance(element).instance = this;
|
|
92
107
|
|
|
93
108
|
this._initElements();
|
|
94
109
|
|
|
@@ -96,7 +111,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
96
111
|
this._checkbox = createCheckboxHandler(
|
|
97
112
|
this._element,
|
|
98
113
|
this._config,
|
|
99
|
-
(eventName: string, eventData?:
|
|
114
|
+
(eventName: string, eventData?: object) => {
|
|
100
115
|
this._fireEvent(eventName, eventData);
|
|
101
116
|
this._dispatchEvent(eventName, eventData);
|
|
102
117
|
},
|
|
@@ -284,22 +299,20 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
284
299
|
return false;
|
|
285
300
|
}
|
|
286
301
|
|
|
287
|
-
return Object.values(item).some(
|
|
288
|
-
(
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
},
|
|
302
|
-
);
|
|
302
|
+
return Object.values(item).some((value: KTOptionType) => {
|
|
303
|
+
if (
|
|
304
|
+
typeof value !== 'string' &&
|
|
305
|
+
typeof value !== 'number' &&
|
|
306
|
+
typeof value !== 'boolean'
|
|
307
|
+
) {
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
const valueText = String(value)
|
|
312
|
+
.replace(/<|>| /g, '')
|
|
313
|
+
.toLowerCase();
|
|
314
|
+
return valueText.includes(search.toLowerCase());
|
|
315
|
+
});
|
|
303
316
|
});
|
|
304
317
|
},
|
|
305
318
|
},
|
|
@@ -533,11 +546,13 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
533
546
|
|
|
534
547
|
if (searchElement) {
|
|
535
548
|
// Check if a debounced search function already exists
|
|
536
|
-
|
|
549
|
+
const searchWithDebounce =
|
|
550
|
+
KTDataTable.asSearchElementWithDebounce(searchElement);
|
|
551
|
+
if (searchWithDebounce._debouncedSearch) {
|
|
537
552
|
// Remove the existing debounced event listener
|
|
538
553
|
searchElement.removeEventListener(
|
|
539
554
|
'keyup',
|
|
540
|
-
|
|
555
|
+
searchWithDebounce._debouncedSearch,
|
|
541
556
|
);
|
|
542
557
|
}
|
|
543
558
|
|
|
@@ -547,7 +562,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
547
562
|
}, this._config.search.delay);
|
|
548
563
|
|
|
549
564
|
// Store the new debounced function as a property of the element
|
|
550
|
-
|
|
565
|
+
searchWithDebounce._debouncedSearch = debouncedSearch;
|
|
551
566
|
|
|
552
567
|
// Add the new debounced event listener
|
|
553
568
|
searchElement.addEventListener('keyup', debouncedSearch);
|
|
@@ -590,10 +605,11 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
590
605
|
let _temp = (this._data = [...originalData] as T[]);
|
|
591
606
|
|
|
592
607
|
if (search) {
|
|
608
|
+
const searchTerm = typeof search === 'string' ? search : '';
|
|
593
609
|
_temp = this._data = this._config.search.callback.call(
|
|
594
610
|
this,
|
|
595
611
|
this._data,
|
|
596
|
-
|
|
612
|
+
searchTerm,
|
|
597
613
|
) as T[];
|
|
598
614
|
}
|
|
599
615
|
|
|
@@ -651,7 +667,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
651
667
|
|
|
652
668
|
private _tableConfigInvalidate(): boolean {
|
|
653
669
|
// Remove _data and _state from config
|
|
654
|
-
const {
|
|
670
|
+
const { _state, ...restConfig } = this._config;
|
|
655
671
|
const checksum: string = KTUtils.checksum(JSON.stringify(restConfig));
|
|
656
672
|
if (_state._configChecksum !== checksum) {
|
|
657
673
|
this._config._state._configChecksum = checksum;
|
|
@@ -1072,7 +1088,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1072
1088
|
const th = columnsToRender[colIndex];
|
|
1073
1089
|
const colName = th?.getAttribute('data-kt-datatable-column');
|
|
1074
1090
|
const td = document.createElement('td');
|
|
1075
|
-
let value:
|
|
1091
|
+
let value: KTOptionType | '';
|
|
1076
1092
|
if (colName && Object.prototype.hasOwnProperty.call(item, colName)) {
|
|
1077
1093
|
value = item[colName as keyof T];
|
|
1078
1094
|
} else if (Object.prototype.hasOwnProperty.call(item, colIndex)) {
|
|
@@ -1564,12 +1580,17 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1564
1580
|
document.querySelector<HTMLInputElement>(
|
|
1565
1581
|
`[data-kt-datatable-search="#${tableId}"]`,
|
|
1566
1582
|
);
|
|
1567
|
-
if (searchElement
|
|
1583
|
+
if (searchElement) {
|
|
1584
|
+
const searchWithDebounce =
|
|
1585
|
+
KTDataTable.asSearchElementWithDebounce(searchElement);
|
|
1586
|
+
if (!searchWithDebounce._debouncedSearch) {
|
|
1587
|
+
return;
|
|
1588
|
+
}
|
|
1568
1589
|
searchElement.removeEventListener(
|
|
1569
1590
|
'keyup',
|
|
1570
|
-
|
|
1591
|
+
searchWithDebounce._debouncedSearch,
|
|
1571
1592
|
);
|
|
1572
|
-
delete
|
|
1593
|
+
delete searchWithDebounce._debouncedSearch;
|
|
1573
1594
|
}
|
|
1574
1595
|
|
|
1575
1596
|
// --- 2. Remove page size dropdown event listener ---
|
|
@@ -1587,11 +1608,11 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1587
1608
|
|
|
1588
1609
|
// --- 4. Dispose of handler objects (checkbox, sort) ---
|
|
1589
1610
|
// KTDataTableCheckboxAPI does not have a dispose method, but we can remove header checkbox listener
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
) {
|
|
1594
|
-
|
|
1611
|
+
const checkboxWithDispose = this._checkbox as KTDataTableCheckboxAPI & {
|
|
1612
|
+
dispose?: () => void;
|
|
1613
|
+
};
|
|
1614
|
+
if (this._checkbox && typeof checkboxWithDispose.dispose === 'function') {
|
|
1615
|
+
checkboxWithDispose.dispose();
|
|
1595
1616
|
} else {
|
|
1596
1617
|
// Remove header checkbox event listener if possible
|
|
1597
1618
|
const headerCheckElement = this._element.querySelector<HTMLInputElement>(
|
|
@@ -1619,8 +1640,11 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1619
1640
|
this._element.classList.remove(this._config.loadingClass);
|
|
1620
1641
|
|
|
1621
1642
|
// --- 6. Remove instance reference from the DOM element ---
|
|
1622
|
-
|
|
1623
|
-
|
|
1643
|
+
const elementWithInstance = KTDataTable.asElementWithInstance(
|
|
1644
|
+
this._element,
|
|
1645
|
+
);
|
|
1646
|
+
if (elementWithInstance.instance) {
|
|
1647
|
+
delete elementWithInstance.instance;
|
|
1624
1648
|
}
|
|
1625
1649
|
|
|
1626
1650
|
// --- 7. (Optional) Clear localStorage state ---
|
|
@@ -1628,9 +1652,12 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1628
1652
|
// this._deleteState();
|
|
1629
1653
|
}
|
|
1630
1654
|
|
|
1631
|
-
private _debounce
|
|
1655
|
+
private _debounce<TArgs extends unknown[]>(
|
|
1656
|
+
func: (...args: TArgs) => void,
|
|
1657
|
+
wait: number,
|
|
1658
|
+
): (...args: TArgs) => void {
|
|
1632
1659
|
let timeout: number | undefined;
|
|
1633
|
-
return function (...args:
|
|
1660
|
+
return function (...args: TArgs) {
|
|
1634
1661
|
const later = () => {
|
|
1635
1662
|
clearTimeout(timeout);
|
|
1636
1663
|
func(...args);
|
|
@@ -1837,7 +1864,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1837
1864
|
}
|
|
1838
1865
|
|
|
1839
1866
|
// Fallback to element's instance property (for manually created instances)
|
|
1840
|
-
return (element
|
|
1867
|
+
return KTDataTable.asElementWithInstance(element).instance;
|
|
1841
1868
|
}
|
|
1842
1869
|
|
|
1843
1870
|
/**
|
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
* Copyright 2025 by Keenthemes Inc
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import { KTOptionType } from '../../types';
|
|
7
|
+
|
|
6
8
|
// Define the sort order and filter criteria types
|
|
7
9
|
export type KTDataTableSortOrderInterface = 'asc' | 'desc' | '';
|
|
8
10
|
|
|
9
11
|
export interface KTDataTableDataInterface {
|
|
10
|
-
[key: string]:
|
|
12
|
+
[key: string]: KTOptionType;
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
export interface KTDataTableAttributeInterface {
|
|
@@ -448,8 +448,6 @@ export class KTDrawer extends KTComponent implements KTDrawerInterface {
|
|
|
448
448
|
if (!drawerElement) {
|
|
449
449
|
// If element is a toggle button and drawer element wasn't found, return null
|
|
450
450
|
// The handleToggle() will handle waiting for the element to appear
|
|
451
|
-
if (element.hasAttribute('data-kt-drawer-toggle')) {
|
|
452
|
-
}
|
|
453
451
|
return null;
|
|
454
452
|
}
|
|
455
453
|
|
|
@@ -485,10 +483,8 @@ export class KTDrawer extends KTComponent implements KTDrawerInterface {
|
|
|
485
483
|
|
|
486
484
|
public static handleResize(): void {
|
|
487
485
|
window.addEventListener('resize', () => {
|
|
488
|
-
let timer;
|
|
489
|
-
|
|
490
486
|
KTUtils.throttle(
|
|
491
|
-
|
|
487
|
+
undefined,
|
|
492
488
|
() => {
|
|
493
489
|
document
|
|
494
490
|
.querySelectorAll('[data-kt-drawer-initialized]')
|
|
@@ -512,8 +508,7 @@ export class KTDrawer extends KTComponent implements KTDrawerInterface {
|
|
|
512
508
|
'click',
|
|
513
509
|
(rawEvent: MouseEvent) => {
|
|
514
510
|
const target = rawEvent.target as HTMLElement;
|
|
515
|
-
|
|
516
|
-
}
|
|
511
|
+
void (target && target.hasAttribute('data-kt-drawer-toggle'));
|
|
517
512
|
},
|
|
518
513
|
true,
|
|
519
514
|
); // Use capture phase to catch before any stopPropagation
|
|
@@ -534,15 +529,6 @@ export class KTDrawer extends KTComponent implements KTDrawerInterface {
|
|
|
534
529
|
if (drawer) {
|
|
535
530
|
drawer.toggle(target);
|
|
536
531
|
} else {
|
|
537
|
-
// Drawer element not found - wait for it to appear (handles persisted Livewire components)
|
|
538
|
-
// Check if drawer exists in persisted components (might be in header that's persisted)
|
|
539
|
-
const persistedHeader =
|
|
540
|
-
document.querySelector('[wire\\:id]')?.closest('[wire\\:id]') ||
|
|
541
|
-
document.querySelector('header#header');
|
|
542
|
-
const drawerInPersisted = persistedHeader
|
|
543
|
-
? persistedHeader.querySelector(selector)
|
|
544
|
-
: null;
|
|
545
|
-
|
|
546
532
|
// Wait longer for persisted components that may take time to render
|
|
547
533
|
// Also check if drawer exists in persisted header component
|
|
548
534
|
KTDrawer.waitForElement(selector, 5000).then((drawerElement) => {
|
|
@@ -706,11 +692,10 @@ export class KTDrawer extends KTComponent implements KTDrawerInterface {
|
|
|
706
692
|
instance.hide(); // This will clean up backdrop and state
|
|
707
693
|
}
|
|
708
694
|
// Clear KTData entries
|
|
709
|
-
const hadDrawer = KTData.has(element as HTMLElement, 'drawer');
|
|
710
695
|
KTData.remove(element as HTMLElement, 'drawer');
|
|
711
696
|
// Remove initialization attribute to allow fresh initialization
|
|
712
697
|
element.removeAttribute('data-kt-drawer-initialized');
|
|
713
|
-
} catch
|
|
698
|
+
} catch {
|
|
714
699
|
// Ignore errors for individual elements
|
|
715
700
|
}
|
|
716
701
|
});
|
|
@@ -120,7 +120,7 @@ export class KTDropdown extends KTComponent implements KTDropdownInterface {
|
|
|
120
120
|
this._toggle();
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
protected _mouseover(
|
|
123
|
+
protected _mouseover(_event: MouseEvent): void {
|
|
124
124
|
if (this._disabled) return;
|
|
125
125
|
|
|
126
126
|
if (this._getOption('trigger') !== 'hover') return;
|
|
@@ -244,7 +244,6 @@ export class KTDropdown extends KTComponent implements KTDropdownInterface {
|
|
|
244
244
|
}
|
|
245
245
|
|
|
246
246
|
protected _initPopper(): void {
|
|
247
|
-
const isRtl = KTDom.isRTL();
|
|
248
247
|
let reference: HTMLElement;
|
|
249
248
|
const attach = this._getOption('attach') as string;
|
|
250
249
|
|
|
@@ -607,7 +606,7 @@ export class KTDropdown extends KTComponent implements KTDropdownInterface {
|
|
|
607
606
|
if (menu) {
|
|
608
607
|
KTData.remove(menu as HTMLElement, 'dropdownElement');
|
|
609
608
|
}
|
|
610
|
-
} catch
|
|
609
|
+
} catch {
|
|
611
610
|
// Ignore errors for individual elements
|
|
612
611
|
}
|
|
613
612
|
});
|