@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.
Files changed (129) hide show
  1. package/dist/ktui.js +1283 -1096
  2. package/dist/ktui.min.js +1 -1
  3. package/dist/ktui.min.js.map +1 -1
  4. package/examples/select/basic-usage.html +43 -0
  5. package/examples/select/combobox-icons.html +58 -0
  6. package/examples/select/combobox.html +46 -0
  7. package/examples/select/description.html +69 -0
  8. package/examples/select/disable-option.html +43 -0
  9. package/examples/select/disable-select.html +34 -0
  10. package/examples/select/icon-description.html +56 -0
  11. package/examples/select/icon-multiple.html +58 -0
  12. package/examples/select/icon.html +58 -0
  13. package/examples/select/max-selection.html +39 -0
  14. package/examples/select/modal.html +70 -0
  15. package/examples/select/multiple.html +42 -0
  16. package/examples/select/placeholder.html +43 -0
  17. package/examples/select/remote-data.html +32 -0
  18. package/examples/select/search.html +49 -0
  19. package/examples/select/tags-icons.html +58 -0
  20. package/examples/select/tags-selected.html +59 -0
  21. package/examples/select/tags.html +58 -0
  22. package/examples/select/template-customization.html +65 -0
  23. package/examples/select/test.html +94 -0
  24. package/examples/toast/example.html +427 -0
  25. package/lib/cjs/components/component.js +1 -1
  26. package/lib/cjs/components/component.js.map +1 -1
  27. package/lib/cjs/components/datatable/datatable.js +22 -6
  28. package/lib/cjs/components/datatable/datatable.js.map +1 -1
  29. package/lib/cjs/components/select/combobox.js +38 -120
  30. package/lib/cjs/components/select/combobox.js.map +1 -1
  31. package/lib/cjs/components/select/config.js +4 -16
  32. package/lib/cjs/components/select/config.js.map +1 -1
  33. package/lib/cjs/components/select/dropdown.js +10 -49
  34. package/lib/cjs/components/select/dropdown.js.map +1 -1
  35. package/lib/cjs/components/select/index.js +2 -1
  36. package/lib/cjs/components/select/index.js.map +1 -1
  37. package/lib/cjs/components/select/option.js +21 -4
  38. package/lib/cjs/components/select/option.js.map +1 -1
  39. package/lib/cjs/components/select/remote.js +1 -37
  40. package/lib/cjs/components/select/remote.js.map +1 -1
  41. package/lib/cjs/components/select/search.js +11 -41
  42. package/lib/cjs/components/select/search.js.map +1 -1
  43. package/lib/cjs/components/select/select.js +213 -326
  44. package/lib/cjs/components/select/select.js.map +1 -1
  45. package/lib/cjs/components/select/tags.js +39 -31
  46. package/lib/cjs/components/select/tags.js.map +1 -1
  47. package/lib/cjs/components/select/templates.js +120 -179
  48. package/lib/cjs/components/select/templates.js.map +1 -1
  49. package/lib/cjs/components/select/types.js +0 -12
  50. package/lib/cjs/components/select/types.js.map +1 -1
  51. package/lib/cjs/components/select/utils.js +204 -257
  52. package/lib/cjs/components/select/utils.js.map +1 -1
  53. package/lib/cjs/components/toast/index.js +10 -0
  54. package/lib/cjs/components/toast/index.js.map +1 -0
  55. package/lib/cjs/components/toast/toast.js +543 -0
  56. package/lib/cjs/components/toast/toast.js.map +1 -0
  57. package/lib/cjs/components/toast/types.js +7 -0
  58. package/lib/cjs/components/toast/types.js.map +1 -0
  59. package/lib/cjs/helpers/dom.js +24 -0
  60. package/lib/cjs/helpers/dom.js.map +1 -1
  61. package/lib/cjs/index.js +5 -1
  62. package/lib/cjs/index.js.map +1 -1
  63. package/lib/esm/components/component.js +1 -1
  64. package/lib/esm/components/component.js.map +1 -1
  65. package/lib/esm/components/datatable/datatable.js +22 -6
  66. package/lib/esm/components/datatable/datatable.js.map +1 -1
  67. package/lib/esm/components/select/combobox.js +39 -121
  68. package/lib/esm/components/select/combobox.js.map +1 -1
  69. package/lib/esm/components/select/config.js +3 -15
  70. package/lib/esm/components/select/config.js.map +1 -1
  71. package/lib/esm/components/select/dropdown.js +10 -49
  72. package/lib/esm/components/select/dropdown.js.map +1 -1
  73. package/lib/esm/components/select/index.js +1 -1
  74. package/lib/esm/components/select/index.js.map +1 -1
  75. package/lib/esm/components/select/option.js +21 -4
  76. package/lib/esm/components/select/option.js.map +1 -1
  77. package/lib/esm/components/select/remote.js +1 -37
  78. package/lib/esm/components/select/remote.js.map +1 -1
  79. package/lib/esm/components/select/search.js +12 -42
  80. package/lib/esm/components/select/search.js.map +1 -1
  81. package/lib/esm/components/select/select.js +214 -327
  82. package/lib/esm/components/select/select.js.map +1 -1
  83. package/lib/esm/components/select/tags.js +39 -31
  84. package/lib/esm/components/select/tags.js.map +1 -1
  85. package/lib/esm/components/select/templates.js +119 -178
  86. package/lib/esm/components/select/templates.js.map +1 -1
  87. package/lib/esm/components/select/types.js +1 -11
  88. package/lib/esm/components/select/types.js.map +1 -1
  89. package/lib/esm/components/select/utils.js +201 -255
  90. package/lib/esm/components/select/utils.js.map +1 -1
  91. package/lib/esm/components/toast/index.js +6 -0
  92. package/lib/esm/components/toast/index.js.map +1 -0
  93. package/lib/esm/components/toast/toast.js +540 -0
  94. package/lib/esm/components/toast/toast.js.map +1 -0
  95. package/lib/esm/components/toast/types.js +6 -0
  96. package/lib/esm/components/toast/types.js.map +1 -0
  97. package/lib/esm/helpers/dom.js +24 -0
  98. package/lib/esm/helpers/dom.js.map +1 -1
  99. package/lib/esm/index.js +3 -0
  100. package/lib/esm/index.js.map +1 -1
  101. package/package.json +8 -6
  102. package/src/components/alert/alert.css +15 -2
  103. package/src/components/component.ts +4 -0
  104. package/src/components/datatable/datatable.ts +24 -16
  105. package/src/components/input/input.css +3 -1
  106. package/src/components/link/link.css +2 -2
  107. package/src/components/select/combobox.ts +42 -149
  108. package/src/components/select/config.ts +38 -33
  109. package/src/components/select/dropdown.ts +8 -55
  110. package/src/components/select/index.ts +1 -1
  111. package/src/components/select/option.ts +28 -7
  112. package/src/components/select/remote.ts +2 -42
  113. package/src/components/select/search.ts +14 -54
  114. package/src/components/select/select.css +49 -0
  115. package/src/components/select/select.ts +231 -437
  116. package/src/components/select/tags.ts +40 -37
  117. package/src/components/select/templates.ts +166 -303
  118. package/src/components/select/types.ts +0 -10
  119. package/src/components/select/utils.ts +214 -304
  120. package/src/components/textarea/textarea.css +2 -1
  121. package/src/components/toast/index.ts +7 -0
  122. package/src/components/toast/toast.css +60 -0
  123. package/src/components/toast/toast.ts +605 -0
  124. package/src/components/toast/types.ts +169 -0
  125. package/src/helpers/dom.ts +30 -0
  126. package/src/index.ts +4 -0
  127. package/styles/main.css +3 -0
  128. package/styles/vars.css +138 -0
  129. 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
- // Clear existing content
38
- this._valueDisplayElement.innerHTML = '';
37
+ // Remove any existing tag elements
38
+ const wrapper = this._valueDisplayElement.parentElement;
39
+ if (!wrapper) return;
39
40
 
40
- // If no options selected, show placeholder
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
- // Create and append a tag element for each selected option
49
+ // Insert each tag before the display element
47
50
  selectedOptions.forEach((optionValue) => {
48
- const tagElement = this._createTagElement(optionValue);
49
- this._valueDisplayElement.appendChild(tagElement);
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
- return tag;
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
  /**