@keenthemes/ktui 1.2.0 → 1.2.2
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 +8355 -5213
- package/dist/ktui.min.js +1 -1
- package/dist/ktui.min.js.map +1 -1
- package/dist/styles.css +24 -1
- 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/clipboard/clipboard.d.ts +37 -0
- package/lib/cjs/components/clipboard/clipboard.d.ts.map +1 -0
- package/lib/cjs/components/clipboard/clipboard.js +402 -0
- package/lib/cjs/components/clipboard/clipboard.js.map +1 -0
- package/lib/cjs/components/clipboard/index.d.ts +3 -0
- package/lib/cjs/components/clipboard/index.d.ts.map +1 -0
- package/lib/cjs/components/clipboard/index.js +6 -0
- package/lib/cjs/components/clipboard/index.js.map +1 -0
- package/lib/cjs/components/clipboard/types.d.ts +44 -0
- package/lib/cjs/components/clipboard/types.d.ts.map +1 -0
- package/lib/cjs/components/clipboard/types.js +7 -0
- package/lib/cjs/components/clipboard/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 +29 -16
- 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/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/range-slider/index.d.ts +7 -0
- package/lib/cjs/components/range-slider/index.d.ts.map +1 -0
- package/lib/cjs/components/range-slider/index.js +10 -0
- package/lib/cjs/components/range-slider/index.js.map +1 -0
- package/lib/cjs/components/range-slider/range-slider.d.ts +42 -0
- package/lib/cjs/components/range-slider/range-slider.d.ts.map +1 -0
- package/lib/cjs/components/range-slider/range-slider.js +254 -0
- package/lib/cjs/components/range-slider/range-slider.js.map +1 -0
- package/lib/cjs/components/range-slider/types.d.ts +33 -0
- package/lib/cjs/components/range-slider/types.d.ts.map +1 -0
- package/lib/cjs/components/range-slider/types.js +7 -0
- package/lib/cjs/components/range-slider/types.js.map +1 -0
- package/lib/cjs/components/rating/rating.d.ts.map +1 -1
- package/lib/cjs/components/rating/rating.js +8 -3
- package/lib/cjs/components/rating/rating.js.map +1 -1
- package/lib/cjs/components/repeater/repeater.d.ts.map +1 -1
- package/lib/cjs/components/repeater/repeater.js +3 -2
- package/lib/cjs/components/repeater/repeater.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 +5 -4
- 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 +16 -14
- package/lib/cjs/components/sticky/sticky.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-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 +16 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +17 -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/clipboard/clipboard.d.ts +37 -0
- package/lib/esm/components/clipboard/clipboard.d.ts.map +1 -0
- package/lib/esm/components/clipboard/clipboard.js +399 -0
- package/lib/esm/components/clipboard/clipboard.js.map +1 -0
- package/lib/esm/components/clipboard/index.d.ts +3 -0
- package/lib/esm/components/clipboard/index.d.ts.map +1 -0
- package/lib/esm/components/clipboard/index.js +2 -0
- package/lib/esm/components/clipboard/index.js.map +1 -0
- package/lib/esm/components/clipboard/types.d.ts +44 -0
- package/lib/esm/components/clipboard/types.d.ts.map +1 -0
- package/lib/esm/components/clipboard/types.js +6 -0
- package/lib/esm/components/clipboard/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 +29 -16
- 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/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/range-slider/index.d.ts +7 -0
- package/lib/esm/components/range-slider/index.d.ts.map +1 -0
- package/lib/esm/components/range-slider/index.js +6 -0
- package/lib/esm/components/range-slider/index.js.map +1 -0
- package/lib/esm/components/range-slider/range-slider.d.ts +42 -0
- package/lib/esm/components/range-slider/range-slider.d.ts.map +1 -0
- package/lib/esm/components/range-slider/range-slider.js +251 -0
- package/lib/esm/components/range-slider/range-slider.js.map +1 -0
- package/lib/esm/components/range-slider/types.d.ts +33 -0
- package/lib/esm/components/range-slider/types.d.ts.map +1 -0
- package/lib/esm/components/range-slider/types.js +6 -0
- package/lib/esm/components/range-slider/types.js.map +1 -0
- package/lib/esm/components/rating/rating.d.ts.map +1 -1
- package/lib/esm/components/rating/rating.js +8 -3
- package/lib/esm/components/rating/rating.js.map +1 -1
- package/lib/esm/components/repeater/repeater.d.ts.map +1 -1
- package/lib/esm/components/repeater/repeater.js +3 -2
- package/lib/esm/components/repeater/repeater.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 +5 -4
- 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 +16 -14
- package/lib/esm/components/sticky/sticky.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-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 +16 -0
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +12 -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 -3
- 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 +438 -0
- package/src/components/clipboard/clipboard.ts +416 -0
- package/src/components/clipboard/index.ts +2 -0
- package/src/components/clipboard/types.ts +51 -0
- package/src/components/component.ts +15 -5
- package/src/components/datatable/__tests__/currency-sort.test.ts +6 -13
- package/src/components/datatable/__tests__/multi-row-headers.test.ts +2 -2
- package/src/components/datatable/__tests__/pagination-reset.test.ts +7 -4
- package/src/components/datatable/__tests__/race-conditions.test.ts +11 -14
- 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 +67 -42
- 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/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/range-slider/__tests__/range-slider.test.ts +659 -0
- package/src/components/range-slider/index.ts +11 -0
- package/src/components/range-slider/range-slider.ts +276 -0
- package/src/components/range-slider/types.ts +36 -0
- package/src/components/rating/__tests__/rating.test.ts +11 -4
- package/src/components/rating/rating.ts +22 -12
- package/src/components/repeater/__tests__/repeater.test.ts +24 -11
- package/src/components/repeater/repeater.ts +5 -3
- package/src/components/select/__tests__/ux-behaviors.test.ts +25 -6
- 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 +12 -10
- package/src/components/sticky/__tests__/sticky.test.ts +10 -3
- package/src/components/sticky/sticky.ts +16 -26
- package/src/components/sticky/types.ts +3 -3
- package/src/components/toast/toast.ts +34 -21
- package/src/components/toast/types.ts +5 -1
- 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 +35 -0
- package/src/types.ts +1 -1
- package/styles.css +1 -0
|
@@ -43,7 +43,7 @@ describe('KTDataTable Race Condition Fixes', () => {
|
|
|
43
43
|
|
|
44
44
|
// Mock fetch to track requests and signals
|
|
45
45
|
abortSignals = [];
|
|
46
|
-
mockFetch = vi.fn<typeof fetch>((
|
|
46
|
+
mockFetch = vi.fn<typeof fetch>((_url, options) => {
|
|
47
47
|
// Store abort signal for verification
|
|
48
48
|
if (options?.signal) {
|
|
49
49
|
abortSignals.push(options.signal);
|
|
@@ -98,12 +98,9 @@ describe('KTDataTable Race Condition Fixes', () => {
|
|
|
98
98
|
|
|
99
99
|
describe('AbortController Integration', () => {
|
|
100
100
|
it('should create AbortController for remote data requests', async () => {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
apiEndpoint: '/api/data',
|
|
105
|
-
},
|
|
106
|
-
);
|
|
101
|
+
new KTDataTable(container.querySelector('[data-kt-datatable="true"]')!, {
|
|
102
|
+
apiEndpoint: '/api/data',
|
|
103
|
+
});
|
|
107
104
|
|
|
108
105
|
await waitFor(150);
|
|
109
106
|
|
|
@@ -186,7 +183,7 @@ describe('KTDataTable Race Condition Fixes', () => {
|
|
|
186
183
|
|
|
187
184
|
// Mock to capture request sequence
|
|
188
185
|
mockFetch.mockImplementation(
|
|
189
|
-
(
|
|
186
|
+
(_url: RequestInfo | URL, _options?: RequestInit) => {
|
|
190
187
|
callCount++;
|
|
191
188
|
const id = callCount;
|
|
192
189
|
requestIds.push(id);
|
|
@@ -293,7 +290,7 @@ describe('KTDataTable Race Condition Fixes', () => {
|
|
|
293
290
|
it('should reset _isFetching flag even after fetch error', async () => {
|
|
294
291
|
let callCount = 0;
|
|
295
292
|
mockFetch.mockImplementation(
|
|
296
|
-
(
|
|
293
|
+
(_url: RequestInfo | URL, _options?: RequestInit) => {
|
|
297
294
|
callCount++;
|
|
298
295
|
if (callCount === 1) {
|
|
299
296
|
// Return invalid JSON to trigger parse error
|
|
@@ -333,7 +330,7 @@ describe('KTDataTable Race Condition Fixes', () => {
|
|
|
333
330
|
const element = container.querySelector(
|
|
334
331
|
'[data-kt-datatable="true"]',
|
|
335
332
|
) as HTMLElement;
|
|
336
|
-
|
|
333
|
+
new KTDataTable(element, {
|
|
337
334
|
apiEndpoint: '/api/data',
|
|
338
335
|
});
|
|
339
336
|
|
|
@@ -410,7 +407,7 @@ describe('KTDataTable Race Condition Fixes', () => {
|
|
|
410
407
|
|
|
411
408
|
describe('Event Handling During Race Conditions', () => {
|
|
412
409
|
it('should fire fetch event for successful requests', async () => {
|
|
413
|
-
const fetchEvents:
|
|
410
|
+
const fetchEvents: Event[] = [];
|
|
414
411
|
|
|
415
412
|
const element = container.querySelector(
|
|
416
413
|
'[data-kt-datatable="true"]',
|
|
@@ -433,7 +430,7 @@ describe('KTDataTable Race Condition Fixes', () => {
|
|
|
433
430
|
});
|
|
434
431
|
|
|
435
432
|
it('should fire fetched event after successful data load', async () => {
|
|
436
|
-
const fetchedEvents:
|
|
433
|
+
const fetchedEvents: Event[] = [];
|
|
437
434
|
|
|
438
435
|
const element = container.querySelector(
|
|
439
436
|
'[data-kt-datatable="true"]',
|
|
@@ -442,7 +439,7 @@ describe('KTDataTable Race Condition Fixes', () => {
|
|
|
442
439
|
fetchedEvents.push(e);
|
|
443
440
|
});
|
|
444
441
|
|
|
445
|
-
|
|
442
|
+
new KTDataTable(element, {
|
|
446
443
|
apiEndpoint: '/api/data',
|
|
447
444
|
});
|
|
448
445
|
|
|
@@ -453,7 +450,7 @@ describe('KTDataTable Race Condition Fixes', () => {
|
|
|
453
450
|
});
|
|
454
451
|
|
|
455
452
|
it('should not fire error events for AbortError', async () => {
|
|
456
|
-
const errorEvents:
|
|
453
|
+
const errorEvents: Event[] = [];
|
|
457
454
|
|
|
458
455
|
const element = container.querySelector(
|
|
459
456
|
'[data-kt-datatable="true"]',
|
|
@@ -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;
|
|
@@ -746,9 +762,8 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
746
762
|
return Object.keys(originalData[0]).length;
|
|
747
763
|
}
|
|
748
764
|
if (this._tbodyElement) {
|
|
749
|
-
const firstRow =
|
|
750
|
-
'tr'
|
|
751
|
-
);
|
|
765
|
+
const firstRow =
|
|
766
|
+
this._tbodyElement.querySelector<HTMLTableRowElement>('tr');
|
|
752
767
|
if (firstRow) {
|
|
753
768
|
return firstRow.querySelectorAll<HTMLTableCellElement>('td').length;
|
|
754
769
|
}
|
|
@@ -1052,8 +1067,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1052
1067
|
th.hasAttribute('data-kt-datatable-column'),
|
|
1053
1068
|
);
|
|
1054
1069
|
// When no th has data-kt-datatable-column (e.g. multi-row headers), use logical column count from tbody so we don't overcount thead cells
|
|
1055
|
-
const columnsToRender: HTMLTableCellElement[] =
|
|
1056
|
-
ths.length > 0 ? ths : [];
|
|
1070
|
+
const columnsToRender: HTMLTableCellElement[] = ths.length > 0 ? ths : [];
|
|
1057
1071
|
const logicalColumnCount =
|
|
1058
1072
|
ths.length > 0 ? ths.length : this._getLogicalColumnCount();
|
|
1059
1073
|
|
|
@@ -1074,7 +1088,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1074
1088
|
const th = columnsToRender[colIndex];
|
|
1075
1089
|
const colName = th?.getAttribute('data-kt-datatable-column');
|
|
1076
1090
|
const td = document.createElement('td');
|
|
1077
|
-
let value:
|
|
1091
|
+
let value: KTOptionType | '';
|
|
1078
1092
|
if (colName && Object.prototype.hasOwnProperty.call(item, colName)) {
|
|
1079
1093
|
value = item[colName as keyof T];
|
|
1080
1094
|
} else if (Object.prototype.hasOwnProperty.call(item, colIndex)) {
|
|
@@ -1566,12 +1580,17 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1566
1580
|
document.querySelector<HTMLInputElement>(
|
|
1567
1581
|
`[data-kt-datatable-search="#${tableId}"]`,
|
|
1568
1582
|
);
|
|
1569
|
-
if (searchElement
|
|
1583
|
+
if (searchElement) {
|
|
1584
|
+
const searchWithDebounce =
|
|
1585
|
+
KTDataTable.asSearchElementWithDebounce(searchElement);
|
|
1586
|
+
if (!searchWithDebounce._debouncedSearch) {
|
|
1587
|
+
return;
|
|
1588
|
+
}
|
|
1570
1589
|
searchElement.removeEventListener(
|
|
1571
1590
|
'keyup',
|
|
1572
|
-
|
|
1591
|
+
searchWithDebounce._debouncedSearch,
|
|
1573
1592
|
);
|
|
1574
|
-
delete
|
|
1593
|
+
delete searchWithDebounce._debouncedSearch;
|
|
1575
1594
|
}
|
|
1576
1595
|
|
|
1577
1596
|
// --- 2. Remove page size dropdown event listener ---
|
|
@@ -1589,11 +1608,11 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1589
1608
|
|
|
1590
1609
|
// --- 4. Dispose of handler objects (checkbox, sort) ---
|
|
1591
1610
|
// KTDataTableCheckboxAPI does not have a dispose method, but we can remove header checkbox listener
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
) {
|
|
1596
|
-
|
|
1611
|
+
const checkboxWithDispose = this._checkbox as KTDataTableCheckboxAPI & {
|
|
1612
|
+
dispose?: () => void;
|
|
1613
|
+
};
|
|
1614
|
+
if (this._checkbox && typeof checkboxWithDispose.dispose === 'function') {
|
|
1615
|
+
checkboxWithDispose.dispose();
|
|
1597
1616
|
} else {
|
|
1598
1617
|
// Remove header checkbox event listener if possible
|
|
1599
1618
|
const headerCheckElement = this._element.querySelector<HTMLInputElement>(
|
|
@@ -1621,8 +1640,11 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1621
1640
|
this._element.classList.remove(this._config.loadingClass);
|
|
1622
1641
|
|
|
1623
1642
|
// --- 6. Remove instance reference from the DOM element ---
|
|
1624
|
-
|
|
1625
|
-
|
|
1643
|
+
const elementWithInstance = KTDataTable.asElementWithInstance(
|
|
1644
|
+
this._element,
|
|
1645
|
+
);
|
|
1646
|
+
if (elementWithInstance.instance) {
|
|
1647
|
+
delete elementWithInstance.instance;
|
|
1626
1648
|
}
|
|
1627
1649
|
|
|
1628
1650
|
// --- 7. (Optional) Clear localStorage state ---
|
|
@@ -1630,9 +1652,12 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1630
1652
|
// this._deleteState();
|
|
1631
1653
|
}
|
|
1632
1654
|
|
|
1633
|
-
private _debounce
|
|
1655
|
+
private _debounce<TArgs extends unknown[]>(
|
|
1656
|
+
func: (...args: TArgs) => void,
|
|
1657
|
+
wait: number,
|
|
1658
|
+
): (...args: TArgs) => void {
|
|
1634
1659
|
let timeout: number | undefined;
|
|
1635
|
-
return function (...args:
|
|
1660
|
+
return function (...args: TArgs) {
|
|
1636
1661
|
const later = () => {
|
|
1637
1662
|
clearTimeout(timeout);
|
|
1638
1663
|
func(...args);
|
|
@@ -1839,7 +1864,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
|
|
|
1839
1864
|
}
|
|
1840
1865
|
|
|
1841
1866
|
// Fallback to element's instance property (for manually created instances)
|
|
1842
|
-
return (element
|
|
1867
|
+
return KTDataTable.asElementWithInstance(element).instance;
|
|
1843
1868
|
}
|
|
1844
1869
|
|
|
1845
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
|
});
|