@keenthemes/ktui 1.0.11 → 1.0.12
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 +1283 -1096
- package/dist/ktui.min.js +1 -1
- package/dist/ktui.min.js.map +1 -1
- package/examples/select/basic-usage.html +43 -0
- package/examples/select/combobox-icons.html +58 -0
- package/examples/select/combobox.html +46 -0
- package/examples/select/description.html +69 -0
- package/examples/select/disable-option.html +43 -0
- package/examples/select/disable-select.html +34 -0
- package/examples/select/icon-description.html +56 -0
- package/examples/select/icon-multiple.html +58 -0
- package/examples/select/icon.html +58 -0
- package/examples/select/max-selection.html +39 -0
- package/examples/select/modal.html +70 -0
- package/examples/select/multiple.html +42 -0
- package/examples/select/placeholder.html +43 -0
- package/examples/select/remote-data.html +32 -0
- package/examples/select/search.html +49 -0
- package/examples/select/tags-icons.html +58 -0
- package/examples/select/tags-selected.html +59 -0
- package/examples/select/tags.html +58 -0
- package/examples/select/template-customization.html +65 -0
- package/examples/select/test.html +94 -0
- package/examples/toast/example.html +427 -0
- package/lib/cjs/components/component.js +1 -1
- package/lib/cjs/components/component.js.map +1 -1
- package/lib/cjs/components/datatable/datatable.js +22 -6
- package/lib/cjs/components/datatable/datatable.js.map +1 -1
- package/lib/cjs/components/select/combobox.js +38 -120
- package/lib/cjs/components/select/combobox.js.map +1 -1
- package/lib/cjs/components/select/config.js +4 -16
- package/lib/cjs/components/select/config.js.map +1 -1
- package/lib/cjs/components/select/dropdown.js +10 -49
- package/lib/cjs/components/select/dropdown.js.map +1 -1
- package/lib/cjs/components/select/index.js +2 -1
- package/lib/cjs/components/select/index.js.map +1 -1
- package/lib/cjs/components/select/option.js +21 -4
- package/lib/cjs/components/select/option.js.map +1 -1
- package/lib/cjs/components/select/remote.js +1 -37
- package/lib/cjs/components/select/remote.js.map +1 -1
- package/lib/cjs/components/select/search.js +11 -41
- package/lib/cjs/components/select/search.js.map +1 -1
- package/lib/cjs/components/select/select.js +213 -326
- package/lib/cjs/components/select/select.js.map +1 -1
- package/lib/cjs/components/select/tags.js +39 -31
- package/lib/cjs/components/select/tags.js.map +1 -1
- package/lib/cjs/components/select/templates.js +120 -179
- package/lib/cjs/components/select/templates.js.map +1 -1
- package/lib/cjs/components/select/types.js +0 -12
- package/lib/cjs/components/select/types.js.map +1 -1
- package/lib/cjs/components/select/utils.js +204 -257
- package/lib/cjs/components/select/utils.js.map +1 -1
- package/lib/cjs/components/toast/index.js +10 -0
- package/lib/cjs/components/toast/index.js.map +1 -0
- package/lib/cjs/components/toast/toast.js +543 -0
- package/lib/cjs/components/toast/toast.js.map +1 -0
- package/lib/cjs/components/toast/types.js +7 -0
- package/lib/cjs/components/toast/types.js.map +1 -0
- package/lib/cjs/helpers/dom.js +24 -0
- package/lib/cjs/helpers/dom.js.map +1 -1
- package/lib/cjs/index.js +5 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/components/component.js +1 -1
- package/lib/esm/components/component.js.map +1 -1
- package/lib/esm/components/datatable/datatable.js +22 -6
- package/lib/esm/components/datatable/datatable.js.map +1 -1
- package/lib/esm/components/select/combobox.js +39 -121
- package/lib/esm/components/select/combobox.js.map +1 -1
- package/lib/esm/components/select/config.js +3 -15
- package/lib/esm/components/select/config.js.map +1 -1
- package/lib/esm/components/select/dropdown.js +10 -49
- package/lib/esm/components/select/dropdown.js.map +1 -1
- package/lib/esm/components/select/index.js +1 -1
- package/lib/esm/components/select/index.js.map +1 -1
- package/lib/esm/components/select/option.js +21 -4
- package/lib/esm/components/select/option.js.map +1 -1
- package/lib/esm/components/select/remote.js +1 -37
- package/lib/esm/components/select/remote.js.map +1 -1
- package/lib/esm/components/select/search.js +12 -42
- package/lib/esm/components/select/search.js.map +1 -1
- package/lib/esm/components/select/select.js +214 -327
- package/lib/esm/components/select/select.js.map +1 -1
- package/lib/esm/components/select/tags.js +39 -31
- package/lib/esm/components/select/tags.js.map +1 -1
- package/lib/esm/components/select/templates.js +119 -178
- package/lib/esm/components/select/templates.js.map +1 -1
- package/lib/esm/components/select/types.js +1 -11
- package/lib/esm/components/select/types.js.map +1 -1
- package/lib/esm/components/select/utils.js +201 -255
- package/lib/esm/components/select/utils.js.map +1 -1
- package/lib/esm/components/toast/index.js +6 -0
- package/lib/esm/components/toast/index.js.map +1 -0
- package/lib/esm/components/toast/toast.js +540 -0
- package/lib/esm/components/toast/toast.js.map +1 -0
- package/lib/esm/components/toast/types.js +6 -0
- package/lib/esm/components/toast/types.js.map +1 -0
- package/lib/esm/helpers/dom.js +24 -0
- package/lib/esm/helpers/dom.js.map +1 -1
- package/lib/esm/index.js +3 -0
- package/lib/esm/index.js.map +1 -1
- package/package.json +8 -6
- package/src/components/alert/alert.css +15 -2
- package/src/components/component.ts +4 -0
- package/src/components/datatable/datatable.ts +24 -16
- package/src/components/input/input.css +3 -1
- package/src/components/link/link.css +2 -2
- package/src/components/select/combobox.ts +42 -149
- package/src/components/select/config.ts +38 -33
- package/src/components/select/dropdown.ts +8 -55
- package/src/components/select/index.ts +1 -1
- package/src/components/select/option.ts +28 -7
- package/src/components/select/remote.ts +2 -42
- package/src/components/select/search.ts +14 -54
- package/src/components/select/select.css +49 -0
- package/src/components/select/select.ts +231 -437
- package/src/components/select/tags.ts +40 -37
- package/src/components/select/templates.ts +166 -303
- package/src/components/select/types.ts +0 -10
- package/src/components/select/utils.ts +214 -304
- package/src/components/textarea/textarea.css +2 -1
- package/src/components/toast/index.ts +7 -0
- package/src/components/toast/toast.css +60 -0
- package/src/components/toast/toast.ts +605 -0
- package/src/components/toast/types.ts +169 -0
- package/src/helpers/dom.ts +30 -0
- package/src/index.ts +4 -0
- package/styles/main.css +3 -0
- package/styles/vars.css +138 -0
- package/styles.css +1 -0
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { KTSelectConfigInterface } from './config';
|
|
7
7
|
import { KTSelect } from './select';
|
|
8
8
|
import { defaultTemplates } from './templates';
|
|
9
|
-
import { EventManager } from './utils';
|
|
9
|
+
import { EventManager, renderTemplateString } from './utils';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* KTSelectTags - Handles tags-specific functionality for KTSelect
|
|
@@ -34,50 +34,53 @@ export class KTSelectTags {
|
|
|
34
34
|
* Renders selected options as tags in the display element
|
|
35
35
|
*/
|
|
36
36
|
public updateTagsDisplay(selectedOptions: string[]): void {
|
|
37
|
-
//
|
|
38
|
-
this._valueDisplayElement.
|
|
37
|
+
// Remove any existing tag elements
|
|
38
|
+
const wrapper = this._valueDisplayElement.parentElement;
|
|
39
|
+
if (!wrapper) return;
|
|
39
40
|
|
|
40
|
-
//
|
|
41
|
+
// Remove all previous tags
|
|
42
|
+
Array.from(wrapper.querySelectorAll('[data-kt-select-tag]')).forEach(tag => tag.remove());
|
|
43
|
+
|
|
44
|
+
// If no options selected, do nothing (let display show placeholder)
|
|
41
45
|
if (selectedOptions.length === 0) {
|
|
42
|
-
this._valueDisplayElement.textContent = this._config.placeholder || '';
|
|
43
46
|
return;
|
|
44
47
|
}
|
|
45
48
|
|
|
46
|
-
//
|
|
49
|
+
// Insert each tag before the display element
|
|
47
50
|
selectedOptions.forEach((optionValue) => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
// Find the original option element (in dropdown or select)
|
|
52
|
+
let optionElement: HTMLOptionElement | null = null;
|
|
53
|
+
const optionElements = this._select.getOptionsElement();
|
|
54
|
+
for (const opt of Array.from(optionElements)) {
|
|
55
|
+
if ((opt as HTMLElement).dataset.value === optionValue) {
|
|
56
|
+
optionElement = opt as HTMLOptionElement;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (!optionElement) {
|
|
61
|
+
const originalOptions = this._select.getElement().querySelectorAll('option');
|
|
62
|
+
for (const opt of Array.from(originalOptions)) {
|
|
63
|
+
if ((opt as HTMLOptionElement).value === optionValue) {
|
|
64
|
+
optionElement = opt as HTMLOptionElement;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
52
69
|
|
|
53
|
-
|
|
54
|
-
* Create tag element for a selected option
|
|
55
|
-
*/
|
|
56
|
-
private _createTagElement(optionValue: string): HTMLElement {
|
|
57
|
-
const optionLabel = this._getOptionLabel(optionValue);
|
|
58
|
-
// Create a mock option object to pass to the tag template
|
|
59
|
-
const mockOption = {
|
|
60
|
-
id: optionValue,
|
|
61
|
-
title: optionLabel,
|
|
62
|
-
selected: true,
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
// Use the tag template
|
|
66
|
-
const tag = defaultTemplates.tag(mockOption, this._config);
|
|
67
|
-
|
|
68
|
-
// Add event listener to the close button
|
|
69
|
-
const closeButton = tag.querySelector(
|
|
70
|
-
`[data-kt-select-remove-button]`,
|
|
71
|
-
) as HTMLElement;
|
|
72
|
-
|
|
73
|
-
if (closeButton) {
|
|
74
|
-
this._eventManager.addListener(closeButton, 'click', (event: Event) => {
|
|
75
|
-
event.stopPropagation();
|
|
76
|
-
this._removeTag(optionValue);
|
|
77
|
-
});
|
|
78
|
-
}
|
|
70
|
+
const tag = defaultTemplates.tag(optionElement, this._config);
|
|
79
71
|
|
|
80
|
-
|
|
72
|
+
// Add event listener to the close button
|
|
73
|
+
const closeButton = tag.querySelector('[data-kt-select-remove-button]') as HTMLElement;
|
|
74
|
+
if (closeButton) {
|
|
75
|
+
this._eventManager.addListener(closeButton, 'click', (event: Event) => {
|
|
76
|
+
event.stopPropagation();
|
|
77
|
+
this._removeTag(optionValue);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Insert tag before the display element
|
|
82
|
+
wrapper.insertBefore(tag, this._valueDisplayElement);
|
|
83
|
+
});
|
|
81
84
|
}
|
|
82
85
|
|
|
83
86
|
/**
|