@keenthemes/ktui 1.1.1 → 1.1.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 +674 -225
- package/dist/ktui.min.js +1 -1
- package/dist/ktui.min.js.map +1 -1
- package/dist/styles.css +13 -1
- package/lib/cjs/components/component.js +22 -0
- package/lib/cjs/components/component.js.map +1 -1
- package/lib/cjs/components/datatable/datatable.js +7 -1
- package/lib/cjs/components/datatable/datatable.js.map +1 -1
- package/lib/cjs/components/drawer/drawer.js +255 -9
- package/lib/cjs/components/drawer/drawer.js.map +1 -1
- package/lib/cjs/components/dropdown/dropdown.js +55 -8
- package/lib/cjs/components/dropdown/dropdown.js.map +1 -1
- package/lib/cjs/components/select/combobox.js +0 -2
- package/lib/cjs/components/select/combobox.js.map +1 -1
- package/lib/cjs/components/select/config.js +4 -1
- package/lib/cjs/components/select/config.js.map +1 -1
- package/lib/cjs/components/select/dropdown.js +0 -16
- package/lib/cjs/components/select/dropdown.js.map +1 -1
- package/lib/cjs/components/select/remote.js +0 -40
- package/lib/cjs/components/select/remote.js.map +1 -1
- package/lib/cjs/components/select/search.js +93 -22
- package/lib/cjs/components/select/search.js.map +1 -1
- package/lib/cjs/components/select/select.js +180 -114
- package/lib/cjs/components/select/select.js.map +1 -1
- package/lib/cjs/components/select/tags.js +0 -2
- package/lib/cjs/components/select/tags.js.map +1 -1
- package/lib/cjs/components/sticky/sticky.js +44 -5
- package/lib/cjs/components/sticky/sticky.js.map +1 -1
- package/lib/cjs/helpers/data.js +8 -0
- package/lib/cjs/helpers/data.js.map +1 -1
- package/lib/cjs/helpers/event-handler.js +6 -5
- package/lib/cjs/helpers/event-handler.js.map +1 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/components/component.js +22 -0
- package/lib/esm/components/component.js.map +1 -1
- package/lib/esm/components/datatable/datatable.js +7 -1
- package/lib/esm/components/datatable/datatable.js.map +1 -1
- package/lib/esm/components/drawer/drawer.js +255 -9
- package/lib/esm/components/drawer/drawer.js.map +1 -1
- package/lib/esm/components/dropdown/dropdown.js +55 -8
- package/lib/esm/components/dropdown/dropdown.js.map +1 -1
- package/lib/esm/components/select/combobox.js +0 -2
- package/lib/esm/components/select/combobox.js.map +1 -1
- package/lib/esm/components/select/config.js +4 -1
- package/lib/esm/components/select/config.js.map +1 -1
- package/lib/esm/components/select/dropdown.js +0 -16
- package/lib/esm/components/select/dropdown.js.map +1 -1
- package/lib/esm/components/select/remote.js +0 -40
- package/lib/esm/components/select/remote.js.map +1 -1
- package/lib/esm/components/select/search.js +93 -22
- package/lib/esm/components/select/search.js.map +1 -1
- package/lib/esm/components/select/select.js +180 -114
- package/lib/esm/components/select/select.js.map +1 -1
- package/lib/esm/components/select/tags.js +0 -2
- package/lib/esm/components/select/tags.js.map +1 -1
- package/lib/esm/components/sticky/sticky.js +44 -5
- package/lib/esm/components/sticky/sticky.js.map +1 -1
- package/lib/esm/helpers/data.js +8 -0
- package/lib/esm/helpers/data.js.map +1 -1
- package/lib/esm/helpers/event-handler.js +6 -5
- package/lib/esm/helpers/event-handler.js.map +1 -1
- package/lib/esm/index.js.map +1 -1
- package/package.json +6 -4
- package/src/components/component.ts +26 -0
- package/src/components/datatable/__tests__/race-conditions.test.ts +7 -7
- package/src/components/datatable/datatable.ts +8 -1
- package/src/components/drawer/drawer.ts +266 -10
- package/src/components/dropdown/dropdown.ts +63 -8
- package/src/components/select/__tests__/ux-behaviors.test.ts +997 -0
- package/src/components/select/combobox.ts +0 -1
- package/src/components/select/config.ts +7 -1
- package/src/components/select/dropdown.ts +0 -24
- package/src/components/select/remote.ts +0 -49
- package/src/components/select/search.ts +97 -24
- package/src/components/select/select.css +5 -1
- package/src/components/select/select.ts +211 -153
- package/src/components/select/tags.ts +0 -1
- package/src/components/sticky/sticky.ts +55 -5
- package/src/helpers/data.ts +10 -0
- package/src/helpers/event-handler.ts +7 -6
- package/src/index.ts +2 -0
|
@@ -44,6 +44,8 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
|
|
|
44
44
|
protected _releaseElement: HTMLElement;
|
|
45
45
|
protected _activateElement: HTMLElement;
|
|
46
46
|
protected _wrapperElement: HTMLElement;
|
|
47
|
+
private _resizeHandler: (() => void) | null = null;
|
|
48
|
+
private _scrollHandler: (() => void) | null = null;
|
|
47
49
|
|
|
48
50
|
constructor(
|
|
49
51
|
element: HTMLElement,
|
|
@@ -51,7 +53,10 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
|
|
|
51
53
|
) {
|
|
52
54
|
super();
|
|
53
55
|
|
|
54
|
-
if
|
|
56
|
+
// Check if element already has an instance and is still connected
|
|
57
|
+
if (this._shouldSkipInit(element)) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
55
60
|
|
|
56
61
|
this._init(element);
|
|
57
62
|
this._buildConfig(config);
|
|
@@ -88,7 +93,8 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
|
|
|
88
93
|
}
|
|
89
94
|
|
|
90
95
|
protected _handlers(): void {
|
|
91
|
-
|
|
96
|
+
// Store resize handler reference for cleanup
|
|
97
|
+
this._resizeHandler = () => {
|
|
92
98
|
let timer;
|
|
93
99
|
|
|
94
100
|
KTUtils.throttle(
|
|
@@ -98,11 +104,25 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
|
|
|
98
104
|
},
|
|
99
105
|
200,
|
|
100
106
|
);
|
|
101
|
-
}
|
|
107
|
+
};
|
|
102
108
|
|
|
103
|
-
|
|
109
|
+
window.addEventListener('resize', this._resizeHandler);
|
|
110
|
+
|
|
111
|
+
// Store scroll handler reference for cleanup
|
|
112
|
+
this._scrollHandler = () => {
|
|
104
113
|
this._process();
|
|
105
|
-
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
if (this._targetElement) {
|
|
117
|
+
if (this._targetElement === document) {
|
|
118
|
+
window.addEventListener('scroll', this._scrollHandler);
|
|
119
|
+
} else {
|
|
120
|
+
(this._targetElement as HTMLElement).addEventListener(
|
|
121
|
+
'scroll',
|
|
122
|
+
this._scrollHandler,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
106
126
|
}
|
|
107
127
|
|
|
108
128
|
protected _process(): void {
|
|
@@ -373,6 +393,36 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
|
|
|
373
393
|
return this._isActive();
|
|
374
394
|
}
|
|
375
395
|
|
|
396
|
+
public override dispose(): void {
|
|
397
|
+
// Remove resize event listener
|
|
398
|
+
if (this._resizeHandler) {
|
|
399
|
+
window.removeEventListener('resize', this._resizeHandler);
|
|
400
|
+
this._resizeHandler = null;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// Remove scroll event listener
|
|
404
|
+
if (this._scrollHandler) {
|
|
405
|
+
if (this._targetElement === document) {
|
|
406
|
+
window.removeEventListener('scroll', this._scrollHandler);
|
|
407
|
+
} else if (this._targetElement) {
|
|
408
|
+
(this._targetElement as HTMLElement).removeEventListener(
|
|
409
|
+
'scroll',
|
|
410
|
+
this._scrollHandler,
|
|
411
|
+
);
|
|
412
|
+
}
|
|
413
|
+
this._scrollHandler = null;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// Clean up state
|
|
417
|
+
this._disable();
|
|
418
|
+
if (this._attributeRoot && document.body.hasAttribute(this._attributeRoot)) {
|
|
419
|
+
document.body.removeAttribute(this._attributeRoot);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// Call parent dispose to clean up data attributes and KTData
|
|
423
|
+
super.dispose();
|
|
424
|
+
}
|
|
425
|
+
|
|
376
426
|
public static getInstance(element: HTMLElement): KTSticky {
|
|
377
427
|
if (!element) return null;
|
|
378
428
|
|
package/src/helpers/data.ts
CHANGED
|
@@ -41,6 +41,16 @@ const KTData = {
|
|
|
41
41
|
KTElementMap.delete(element);
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
|
+
|
|
45
|
+
// Clear all data for a specific element (useful for reinitialization)
|
|
46
|
+
clear(element: HTMLElement): void {
|
|
47
|
+
KTElementMap.delete(element);
|
|
48
|
+
},
|
|
44
49
|
};
|
|
45
50
|
|
|
51
|
+
// Expose KTData on window for external access (useful for Livewire wire:navigate)
|
|
52
|
+
if (typeof window !== 'undefined') {
|
|
53
|
+
window.KTData = KTData;
|
|
54
|
+
}
|
|
55
|
+
|
|
46
56
|
export default KTData;
|
|
@@ -28,14 +28,15 @@ const KTEventHandler = {
|
|
|
28
28
|
KTDelegatedEventHandlers[eventId] = (
|
|
29
29
|
event: Event & { target: HTMLElement },
|
|
30
30
|
) => {
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
// Fix: Check selector dynamically instead of pre-computing targets
|
|
32
|
+
// This allows event delegation to work with dynamically added elements
|
|
33
|
+
let target = event.target as HTMLElement;
|
|
33
34
|
|
|
34
35
|
while (target && target !== element) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
// Check if current target matches the selector
|
|
37
|
+
if (target.matches && target.matches(selector)) {
|
|
38
|
+
handler.call(this, event, target);
|
|
39
|
+
return; // Stop bubbling once we've handled it
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
target = target.parentNode as HTMLElement;
|
package/src/index.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import KTDom from './helpers/dom';
|
|
7
7
|
import KTUtils from './helpers/utils';
|
|
8
8
|
import KTEventHandler from './helpers/event-handler';
|
|
9
|
+
import KTData from './helpers/data';
|
|
9
10
|
import { KTDropdown } from './components/dropdown';
|
|
10
11
|
import { KTModal } from './components/modal';
|
|
11
12
|
import { KTDrawer } from './components/drawer';
|
|
@@ -81,6 +82,7 @@ declare global {
|
|
|
81
82
|
KTUtils: typeof KTUtils;
|
|
82
83
|
KTDom: typeof KTDom;
|
|
83
84
|
KTEventHandler: typeof KTEventHandler;
|
|
85
|
+
KTData: typeof KTData;
|
|
84
86
|
KTDropdown: typeof KTDropdown;
|
|
85
87
|
KTModal: typeof KTModal;
|
|
86
88
|
KTDrawer: typeof KTDrawer;
|