@keenthemes/ktui 1.1.0 → 1.1.1

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 (222) hide show
  1. package/README.md +0 -27
  2. package/dist/ktui.js +6790 -14063
  3. package/dist/ktui.min.js +1 -1
  4. package/dist/ktui.min.js.map +1 -1
  5. package/dist/styles.css +1132 -2705
  6. package/lib/cjs/components/datatable/__tests__/pagination-reset.test.js +596 -0
  7. package/lib/cjs/components/datatable/__tests__/pagination-reset.test.js.map +1 -0
  8. package/lib/cjs/components/datatable/__tests__/race-conditions.test.js +548 -0
  9. package/lib/cjs/components/datatable/__tests__/race-conditions.test.js.map +1 -0
  10. package/lib/cjs/components/datatable/__tests__/setup.js +63 -0
  11. package/lib/cjs/components/datatable/__tests__/setup.js.map +1 -0
  12. package/lib/cjs/components/datatable/datatable.js +92 -30
  13. package/lib/cjs/components/datatable/datatable.js.map +1 -1
  14. package/lib/cjs/index.js +1 -10
  15. package/lib/cjs/index.js.map +1 -1
  16. package/lib/esm/components/datatable/__tests__/pagination-reset.test.js +594 -0
  17. package/lib/esm/components/datatable/__tests__/pagination-reset.test.js.map +1 -0
  18. package/lib/esm/components/datatable/__tests__/race-conditions.test.js +546 -0
  19. package/lib/esm/components/datatable/__tests__/race-conditions.test.js.map +1 -0
  20. package/lib/esm/components/datatable/__tests__/setup.js +58 -0
  21. package/lib/esm/components/datatable/__tests__/setup.js.map +1 -0
  22. package/lib/esm/components/datatable/datatable.js +92 -30
  23. package/lib/esm/components/datatable/datatable.js.map +1 -1
  24. package/lib/esm/index.js +0 -7
  25. package/lib/esm/index.js.map +1 -1
  26. package/package.json +7 -9
  27. package/src/components/alert/alert.css +188 -429
  28. package/src/components/datatable/__tests__/pagination-reset.test.ts +657 -0
  29. package/src/components/datatable/__tests__/race-conditions.test.ts +455 -0
  30. package/src/components/datatable/__tests__/setup.ts +67 -0
  31. package/src/components/datatable/datatable.ts +66 -11
  32. package/src/components/input/input.css +0 -1
  33. package/src/components/select/select.css +0 -1
  34. package/src/components/select/variants.css +4 -0
  35. package/src/components/textarea/textarea.css +0 -1
  36. package/src/index.ts +0 -10
  37. package/styles.css +0 -1
  38. package/lib/cjs/components/alert/alert.js +0 -1025
  39. package/lib/cjs/components/alert/alert.js.map +0 -1
  40. package/lib/cjs/components/alert/index.js +0 -20
  41. package/lib/cjs/components/alert/index.js.map +0 -1
  42. package/lib/cjs/components/alert/templates.js +0 -120
  43. package/lib/cjs/components/alert/templates.js.map +0 -1
  44. package/lib/cjs/components/alert/types.js +0 -7
  45. package/lib/cjs/components/alert/types.js.map +0 -1
  46. package/lib/cjs/components/datepicker/config/config.js +0 -42
  47. package/lib/cjs/components/datepicker/config/config.js.map +0 -1
  48. package/lib/cjs/components/datepicker/config/index.js +0 -24
  49. package/lib/cjs/components/datepicker/config/index.js.map +0 -1
  50. package/lib/cjs/components/datepicker/config/interfaces.js +0 -7
  51. package/lib/cjs/components/datepicker/config/interfaces.js.map +0 -1
  52. package/lib/cjs/components/datepicker/config/types.js +0 -7
  53. package/lib/cjs/components/datepicker/config/types.js.map +0 -1
  54. package/lib/cjs/components/datepicker/core/event-manager.js +0 -135
  55. package/lib/cjs/components/datepicker/core/event-manager.js.map +0 -1
  56. package/lib/cjs/components/datepicker/core/focus-manager.js +0 -167
  57. package/lib/cjs/components/datepicker/core/focus-manager.js.map +0 -1
  58. package/lib/cjs/components/datepicker/core/helpers.js +0 -219
  59. package/lib/cjs/components/datepicker/core/helpers.js.map +0 -1
  60. package/lib/cjs/components/datepicker/core/index.js +0 -25
  61. package/lib/cjs/components/datepicker/core/index.js.map +0 -1
  62. package/lib/cjs/components/datepicker/core/unified-state-manager.js +0 -394
  63. package/lib/cjs/components/datepicker/core/unified-state-manager.js.map +0 -1
  64. package/lib/cjs/components/datepicker/datepicker.js +0 -2252
  65. package/lib/cjs/components/datepicker/datepicker.js.map +0 -1
  66. package/lib/cjs/components/datepicker/index.js +0 -24
  67. package/lib/cjs/components/datepicker/index.js.map +0 -1
  68. package/lib/cjs/components/datepicker/ui/index.js +0 -23
  69. package/lib/cjs/components/datepicker/ui/index.js.map +0 -1
  70. package/lib/cjs/components/datepicker/ui/input/dropdown.js +0 -489
  71. package/lib/cjs/components/datepicker/ui/input/dropdown.js.map +0 -1
  72. package/lib/cjs/components/datepicker/ui/input/index.js +0 -23
  73. package/lib/cjs/components/datepicker/ui/input/index.js.map +0 -1
  74. package/lib/cjs/components/datepicker/ui/input/segmented-input.js +0 -640
  75. package/lib/cjs/components/datepicker/ui/input/segmented-input.js.map +0 -1
  76. package/lib/cjs/components/datepicker/ui/renderers/calendar.js +0 -446
  77. package/lib/cjs/components/datepicker/ui/renderers/calendar.js.map +0 -1
  78. package/lib/cjs/components/datepicker/ui/renderers/footer.js +0 -42
  79. package/lib/cjs/components/datepicker/ui/renderers/footer.js.map +0 -1
  80. package/lib/cjs/components/datepicker/ui/renderers/header.js +0 -32
  81. package/lib/cjs/components/datepicker/ui/renderers/header.js.map +0 -1
  82. package/lib/cjs/components/datepicker/ui/renderers/index.js +0 -25
  83. package/lib/cjs/components/datepicker/ui/renderers/index.js.map +0 -1
  84. package/lib/cjs/components/datepicker/ui/renderers/time-picker.js +0 -384
  85. package/lib/cjs/components/datepicker/ui/renderers/time-picker.js.map +0 -1
  86. package/lib/cjs/components/datepicker/ui/templates/index.js +0 -22
  87. package/lib/cjs/components/datepicker/ui/templates/index.js.map +0 -1
  88. package/lib/cjs/components/datepicker/ui/templates/templates.js +0 -253
  89. package/lib/cjs/components/datepicker/ui/templates/templates.js.map +0 -1
  90. package/lib/cjs/components/datepicker/utils/date-formatters.js +0 -88
  91. package/lib/cjs/components/datepicker/utils/date-formatters.js.map +0 -1
  92. package/lib/cjs/components/datepicker/utils/date-utils.js +0 -194
  93. package/lib/cjs/components/datepicker/utils/date-utils.js.map +0 -1
  94. package/lib/cjs/components/datepicker/utils/index.js +0 -24
  95. package/lib/cjs/components/datepicker/utils/index.js.map +0 -1
  96. package/lib/cjs/components/datepicker/utils/time-utils.js +0 -213
  97. package/lib/cjs/components/datepicker/utils/time-utils.js.map +0 -1
  98. package/lib/esm/components/alert/alert.js +0 -1022
  99. package/lib/esm/components/alert/alert.js.map +0 -1
  100. package/lib/esm/components/alert/index.js +0 -4
  101. package/lib/esm/components/alert/index.js.map +0 -1
  102. package/lib/esm/components/alert/templates.js +0 -112
  103. package/lib/esm/components/alert/templates.js.map +0 -1
  104. package/lib/esm/components/alert/types.js +0 -6
  105. package/lib/esm/components/alert/types.js.map +0 -1
  106. package/lib/esm/components/datepicker/config/config.js +0 -39
  107. package/lib/esm/components/datepicker/config/config.js.map +0 -1
  108. package/lib/esm/components/datepicker/config/index.js +0 -8
  109. package/lib/esm/components/datepicker/config/index.js.map +0 -1
  110. package/lib/esm/components/datepicker/config/interfaces.js +0 -6
  111. package/lib/esm/components/datepicker/config/interfaces.js.map +0 -1
  112. package/lib/esm/components/datepicker/config/types.js +0 -6
  113. package/lib/esm/components/datepicker/config/types.js.map +0 -1
  114. package/lib/esm/components/datepicker/core/event-manager.js +0 -133
  115. package/lib/esm/components/datepicker/core/event-manager.js.map +0 -1
  116. package/lib/esm/components/datepicker/core/focus-manager.js +0 -164
  117. package/lib/esm/components/datepicker/core/focus-manager.js.map +0 -1
  118. package/lib/esm/components/datepicker/core/helpers.js +0 -211
  119. package/lib/esm/components/datepicker/core/helpers.js.map +0 -1
  120. package/lib/esm/components/datepicker/core/index.js +0 -9
  121. package/lib/esm/components/datepicker/core/index.js.map +0 -1
  122. package/lib/esm/components/datepicker/core/unified-state-manager.js +0 -391
  123. package/lib/esm/components/datepicker/core/unified-state-manager.js.map +0 -1
  124. package/lib/esm/components/datepicker/datepicker.js +0 -2248
  125. package/lib/esm/components/datepicker/datepicker.js.map +0 -1
  126. package/lib/esm/components/datepicker/index.js +0 -7
  127. package/lib/esm/components/datepicker/index.js.map +0 -1
  128. package/lib/esm/components/datepicker/ui/index.js +0 -7
  129. package/lib/esm/components/datepicker/ui/index.js.map +0 -1
  130. package/lib/esm/components/datepicker/ui/input/dropdown.js +0 -486
  131. package/lib/esm/components/datepicker/ui/input/dropdown.js.map +0 -1
  132. package/lib/esm/components/datepicker/ui/input/index.js +0 -7
  133. package/lib/esm/components/datepicker/ui/input/index.js.map +0 -1
  134. package/lib/esm/components/datepicker/ui/input/segmented-input.js +0 -637
  135. package/lib/esm/components/datepicker/ui/input/segmented-input.js.map +0 -1
  136. package/lib/esm/components/datepicker/ui/renderers/calendar.js +0 -443
  137. package/lib/esm/components/datepicker/ui/renderers/calendar.js.map +0 -1
  138. package/lib/esm/components/datepicker/ui/renderers/footer.js +0 -39
  139. package/lib/esm/components/datepicker/ui/renderers/footer.js.map +0 -1
  140. package/lib/esm/components/datepicker/ui/renderers/header.js +0 -29
  141. package/lib/esm/components/datepicker/ui/renderers/header.js.map +0 -1
  142. package/lib/esm/components/datepicker/ui/renderers/index.js +0 -9
  143. package/lib/esm/components/datepicker/ui/renderers/index.js.map +0 -1
  144. package/lib/esm/components/datepicker/ui/renderers/time-picker.js +0 -381
  145. package/lib/esm/components/datepicker/ui/renderers/time-picker.js.map +0 -1
  146. package/lib/esm/components/datepicker/ui/templates/index.js +0 -6
  147. package/lib/esm/components/datepicker/ui/templates/index.js.map +0 -1
  148. package/lib/esm/components/datepicker/ui/templates/templates.js +0 -242
  149. package/lib/esm/components/datepicker/ui/templates/templates.js.map +0 -1
  150. package/lib/esm/components/datepicker/utils/date-formatters.js +0 -83
  151. package/lib/esm/components/datepicker/utils/date-formatters.js.map +0 -1
  152. package/lib/esm/components/datepicker/utils/date-utils.js +0 -184
  153. package/lib/esm/components/datepicker/utils/date-utils.js.map +0 -1
  154. package/lib/esm/components/datepicker/utils/index.js +0 -8
  155. package/lib/esm/components/datepicker/utils/index.js.map +0 -1
  156. package/lib/esm/components/datepicker/utils/time-utils.js +0 -201
  157. package/lib/esm/components/datepicker/utils/time-utils.js.map +0 -1
  158. package/src/components/alert/alert.ts +0 -990
  159. package/src/components/alert/index.ts +0 -4
  160. package/src/components/alert/templates.ts +0 -110
  161. package/src/components/alert/tests/accessibility/aria-roles.test.ts +0 -19
  162. package/src/components/alert/tests/accessibility/focus-management.test.ts +0 -19
  163. package/src/components/alert/tests/accessibility/keyboard-nav.test.ts +0 -22
  164. package/src/components/alert/tests/actions/confirm-cancel.test.ts +0 -122
  165. package/src/components/alert/tests/actions/input-field.test.ts +0 -180
  166. package/src/components/alert/tests/alert.basic.test.ts +0 -126
  167. package/src/components/alert/tests/alert.config.test.ts +0 -75
  168. package/src/components/alert/tests/alert.templates.test.ts +0 -17
  169. package/src/components/alert/tests/config/attribute-config.test.ts +0 -94
  170. package/src/components/alert/tests/config/json-config.test.ts +0 -119
  171. package/src/components/alert/tests/config/merging.test.ts +0 -89
  172. package/src/components/alert/tests/dismissal/auto-dismiss.test.ts +0 -96
  173. package/src/components/alert/tests/dismissal/escape-key-dismiss.test.ts +0 -105
  174. package/src/components/alert/tests/dismissal/manual-dismiss.test.ts +0 -90
  175. package/src/components/alert/tests/dismissal/outside-click-dismiss.test.ts +0 -91
  176. package/src/components/alert/tests/edge-cases/invalid-config.test.ts +0 -19
  177. package/src/components/alert/tests/edge-cases/multiple-alerts.test.ts +0 -19
  178. package/src/components/alert/tests/rendering/custom-content.test.ts +0 -81
  179. package/src/components/alert/tests/rendering/info-alert.test.ts +0 -84
  180. package/src/components/alert/tests/rendering/success-alert.test.ts +0 -100
  181. package/src/components/alert/tests/templates/default-templates.test.ts +0 -16
  182. package/src/components/alert/tests/templates/user-templates.test.ts +0 -16
  183. package/src/components/alert/types.ts +0 -145
  184. package/src/components/datepicker/__tests__/datepicker-events.test.ts +0 -356
  185. package/src/components/datepicker/__tests__/datepicker-init.test.ts +0 -343
  186. package/src/components/datepicker/__tests__/datepicker-integration.test.ts +0 -435
  187. package/src/components/datepicker/__tests__/datepicker-timezone.test.ts +0 -220
  188. package/src/components/datepicker/__tests__/segmented-input-focus.test.ts +0 -380
  189. package/src/components/datepicker/__tests__/selective-state-updates.test.ts +0 -400
  190. package/src/components/datepicker/__tests__/state-manager.test.ts +0 -421
  191. package/src/components/datepicker/__tests__/time-preservation.test.ts +0 -387
  192. package/src/components/datepicker/config/config.ts +0 -40
  193. package/src/components/datepicker/config/index.ts +0 -8
  194. package/src/components/datepicker/config/interfaces.ts +0 -82
  195. package/src/components/datepicker/config/types.ts +0 -188
  196. package/src/components/datepicker/core/event-manager.ts +0 -159
  197. package/src/components/datepicker/core/focus-manager.ts +0 -201
  198. package/src/components/datepicker/core/helpers.ts +0 -231
  199. package/src/components/datepicker/core/index.ts +0 -9
  200. package/src/components/datepicker/core/unified-state-manager.ts +0 -459
  201. package/src/components/datepicker/datepicker.css +0 -435
  202. package/src/components/datepicker/datepicker.ts +0 -2548
  203. package/src/components/datepicker/index.ts +0 -8
  204. package/src/components/datepicker/ui/index.ts +0 -7
  205. package/src/components/datepicker/ui/input/dropdown.ts +0 -552
  206. package/src/components/datepicker/ui/input/index.ts +0 -7
  207. package/src/components/datepicker/ui/input/segmented-input.ts +0 -638
  208. package/src/components/datepicker/ui/renderers/__tests__/calendar-optimizations.test.ts +0 -611
  209. package/src/components/datepicker/ui/renderers/calendar.ts +0 -530
  210. package/src/components/datepicker/ui/renderers/footer.ts +0 -43
  211. package/src/components/datepicker/ui/renderers/header.ts +0 -33
  212. package/src/components/datepicker/ui/renderers/index.ts +0 -9
  213. package/src/components/datepicker/ui/renderers/time-picker.ts +0 -438
  214. package/src/components/datepicker/ui/templates/index.ts +0 -6
  215. package/src/components/datepicker/ui/templates/templates.ts +0 -306
  216. package/src/components/datepicker/utils/__tests__/date-formatters.test.ts +0 -160
  217. package/src/components/datepicker/utils/__tests__/date-utils-keys.test.ts +0 -86
  218. package/src/components/datepicker/utils/__tests__/date-utils-timezone.test.ts +0 -215
  219. package/src/components/datepicker/utils/date-formatters.ts +0 -85
  220. package/src/components/datepicker/utils/date-utils.ts +0 -172
  221. package/src/components/datepicker/utils/index.ts +0 -8
  222. package/src/components/datepicker/utils/time-utils.ts +0 -221
@@ -0,0 +1,548 @@
1
+ "use strict";
2
+ /**
3
+ * Race Condition Tests for KTDataTable
4
+ * Tests the fixes for concurrent request handling, request cancellation, and stale response detection
5
+ */
6
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8
+ return new (P || (P = Promise))(function (resolve, reject) {
9
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
11
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
13
+ });
14
+ };
15
+ var __generator = (this && this.__generator) || function (thisArg, body) {
16
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
17
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
18
+ function verb(n) { return function (v) { return step([n, v]); }; }
19
+ function step(op) {
20
+ if (f) throw new TypeError("Generator is already executing.");
21
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
22
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
23
+ if (y = 0, t) op = [op[0] & 2, t.value];
24
+ switch (op[0]) {
25
+ case 0: case 1: t = op; break;
26
+ case 4: _.label++; return { value: op[1], done: false };
27
+ case 5: _.label++; y = op[1]; op = [0]; continue;
28
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
29
+ default:
30
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
31
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
32
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
33
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
34
+ if (t[2]) _.ops.pop();
35
+ _.trys.pop(); continue;
36
+ }
37
+ op = body.call(thisArg, _);
38
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
39
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
40
+ }
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ var vitest_1 = require("vitest");
44
+ var datatable_1 = require("../datatable");
45
+ var setup_1 = require("./setup");
46
+ (0, vitest_1.describe)('KTDataTable Race Condition Fixes', function () {
47
+ var container;
48
+ var mockFetch;
49
+ var abortSignals = [];
50
+ (0, vitest_1.beforeEach)(function () {
51
+ // Setup DOM
52
+ container = document.createElement('div');
53
+ container.innerHTML = "\n\t\t\t<div data-kt-datatable=\"true\">\n\t\t\t\t<table data-kt-datatable-table=\"true\">\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th data-kt-datatable-column=\"id\">ID</th>\n\t\t\t\t\t\t\t<th data-kt-datatable-column=\"name\">Name</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody></tbody>\n\t\t\t\t</table>\n\t\t\t\t<div data-kt-datatable-info=\"true\"></div>\n\t\t\t\t<select data-kt-datatable-size=\"true\"></select>\n\t\t\t\t<div data-kt-datatable-pagination=\"true\"></div>\n\t\t\t</div>\n\t\t";
54
+ document.body.appendChild(container);
55
+ // Mock fetch to track requests and signals
56
+ abortSignals = [];
57
+ mockFetch = vitest_1.vi.fn(function (url, options) {
58
+ // Store abort signal for verification
59
+ if (options === null || options === void 0 ? void 0 : options.signal) {
60
+ abortSignals.push(options.signal);
61
+ }
62
+ // Simulate network delay
63
+ return new Promise(function (resolve, reject) {
64
+ var timeout = setTimeout(function () {
65
+ var _a;
66
+ if ((_a = options === null || options === void 0 ? void 0 : options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {
67
+ reject(new DOMException('The operation was aborted.', 'AbortError'));
68
+ }
69
+ else {
70
+ resolve(new Response(JSON.stringify({
71
+ data: [
72
+ { id: 1, name: 'Item 1' },
73
+ { id: 2, name: 'Item 2' },
74
+ ],
75
+ totalCount: 2,
76
+ }), { status: 200, headers: { 'Content-Type': 'application/json' } }));
77
+ }
78
+ }, 100); // 100ms delay
79
+ // Handle abort
80
+ if (options === null || options === void 0 ? void 0 : options.signal) {
81
+ options.signal.addEventListener('abort', function () {
82
+ clearTimeout(timeout);
83
+ reject(new DOMException('The operation was aborted.', 'AbortError'));
84
+ });
85
+ }
86
+ });
87
+ });
88
+ global.fetch = mockFetch;
89
+ });
90
+ (0, vitest_1.afterEach)(function () {
91
+ document.body.removeChild(container);
92
+ vitest_1.vi.clearAllMocks();
93
+ abortSignals = [];
94
+ });
95
+ (0, vitest_1.describe)('AbortController Integration', function () {
96
+ (0, vitest_1.it)('should create AbortController for remote data requests', function () { return __awaiter(void 0, void 0, void 0, function () {
97
+ var datatable;
98
+ return __generator(this, function (_a) {
99
+ switch (_a.label) {
100
+ case 0:
101
+ datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
102
+ apiEndpoint: '/api/data',
103
+ });
104
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
105
+ case 1:
106
+ _a.sent();
107
+ (0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(1);
108
+ (0, vitest_1.expect)(abortSignals.length).toBe(1);
109
+ (0, vitest_1.expect)(abortSignals[0]).toBeInstanceOf(AbortSignal);
110
+ return [2 /*return*/];
111
+ }
112
+ });
113
+ }); });
114
+ (0, vitest_1.it)('should use _isFetching flag to prevent concurrent requests', function () { return __awaiter(void 0, void 0, void 0, function () {
115
+ var datatable;
116
+ return __generator(this, function (_a) {
117
+ switch (_a.label) {
118
+ case 0:
119
+ datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
120
+ apiEndpoint: '/api/data',
121
+ });
122
+ // Try to trigger search during initial fetch
123
+ datatable.search('test'); // Should be blocked by _isFetching
124
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
125
+ case 1:
126
+ _a.sent();
127
+ // Should only have 1 request (initial) because _isFetching blocked the second
128
+ (0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(1);
129
+ return [2 /*return*/];
130
+ }
131
+ });
132
+ }); });
133
+ (0, vitest_1.it)('should allow new request after previous completes', function () { return __awaiter(void 0, void 0, void 0, function () {
134
+ var datatable;
135
+ return __generator(this, function (_a) {
136
+ switch (_a.label) {
137
+ case 0:
138
+ datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
139
+ apiEndpoint: '/api/data',
140
+ });
141
+ // Wait for initial fetch to complete
142
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
143
+ case 1:
144
+ // Wait for initial fetch to complete
145
+ _a.sent();
146
+ // Now trigger a search - should succeed
147
+ datatable.search('test');
148
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
149
+ case 2:
150
+ _a.sent();
151
+ // Should have 2 requests total
152
+ (0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(2);
153
+ (0, vitest_1.expect)(abortSignals.length).toBe(2);
154
+ return [2 /*return*/];
155
+ }
156
+ });
157
+ }); });
158
+ (0, vitest_1.it)('should abort previous request when _performFetchRequest is called again', function () { return __awaiter(void 0, void 0, void 0, function () {
159
+ var datatable;
160
+ return __generator(this, function (_a) {
161
+ switch (_a.label) {
162
+ case 0:
163
+ datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
164
+ apiEndpoint: '/api/data',
165
+ });
166
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
167
+ case 1:
168
+ _a.sent(); // Complete initial request
169
+ // Trigger first search
170
+ datatable.search('first');
171
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
172
+ case 2:
173
+ _a.sent();
174
+ // Trigger second search (first should complete, second starts fresh)
175
+ datatable.search('second');
176
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
177
+ case 3:
178
+ _a.sent();
179
+ // Should have 3 requests: initial + first search + second search
180
+ (0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(3);
181
+ (0, vitest_1.expect)(abortSignals.length).toBe(3);
182
+ // Each gets its own AbortController
183
+ abortSignals.forEach(function (signal) {
184
+ (0, vitest_1.expect)(signal).toBeInstanceOf(AbortSignal);
185
+ });
186
+ return [2 /*return*/];
187
+ }
188
+ });
189
+ }); });
190
+ });
191
+ (0, vitest_1.describe)('Request ID Sequencing', function () {
192
+ (0, vitest_1.it)('should assign incremental request IDs for sequential requests', function () { return __awaiter(void 0, void 0, void 0, function () {
193
+ var requestIds, callCount, datatable;
194
+ return __generator(this, function (_a) {
195
+ switch (_a.label) {
196
+ case 0:
197
+ requestIds = [];
198
+ callCount = 0;
199
+ // Mock to capture request sequence
200
+ mockFetch.mockImplementation(function (url, options) {
201
+ callCount++;
202
+ var id = callCount;
203
+ requestIds.push(id);
204
+ return new Promise(function (resolve) {
205
+ setTimeout(function () {
206
+ resolve(new Response(JSON.stringify({
207
+ data: [{ id: id, name: "Item ".concat(id) }],
208
+ totalCount: 1,
209
+ }), { status: 200 }));
210
+ }, 50);
211
+ });
212
+ });
213
+ datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
214
+ apiEndpoint: '/api/data',
215
+ });
216
+ return [4 /*yield*/, (0, setup_1.waitFor)(100)];
217
+ case 1:
218
+ _a.sent(); // Complete initial request
219
+ datatable.search('a');
220
+ return [4 /*yield*/, (0, setup_1.waitFor)(100)];
221
+ case 2:
222
+ _a.sent(); // Complete search
223
+ datatable.search('b');
224
+ return [4 /*yield*/, (0, setup_1.waitFor)(100)];
225
+ case 3:
226
+ _a.sent(); // Complete second search
227
+ // Request IDs should be sequential: 1, 2, 3
228
+ (0, vitest_1.expect)(requestIds).toEqual([1, 2, 3]);
229
+ return [2 /*return*/];
230
+ }
231
+ });
232
+ }); });
233
+ (0, vitest_1.it)('should have request ID validation logic in place', function () { return __awaiter(void 0, void 0, void 0, function () {
234
+ var datatable, tbody;
235
+ return __generator(this, function (_a) {
236
+ switch (_a.label) {
237
+ case 0:
238
+ datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
239
+ apiEndpoint: '/api/data',
240
+ });
241
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
242
+ case 1:
243
+ _a.sent(); // Complete initial
244
+ datatable.search('first');
245
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
246
+ case 2:
247
+ _a.sent(); // Complete first search
248
+ datatable.search('second');
249
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
250
+ case 3:
251
+ _a.sent(); // Complete second search
252
+ // All requests should complete successfully with incremental request IDs
253
+ (0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(3);
254
+ tbody = container.querySelector('tbody');
255
+ (0, vitest_1.expect)(tbody === null || tbody === void 0 ? void 0 : tbody.querySelectorAll('tr').length).toBeGreaterThan(0);
256
+ return [2 /*return*/];
257
+ }
258
+ });
259
+ }); });
260
+ });
261
+ (0, vitest_1.describe)('_isFetching Flag Management', function () {
262
+ (0, vitest_1.it)('should prevent concurrent fetch executions', function () { return __awaiter(void 0, void 0, void 0, function () {
263
+ var datatable;
264
+ return __generator(this, function (_a) {
265
+ switch (_a.label) {
266
+ case 0:
267
+ datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
268
+ apiEndpoint: '/api/data',
269
+ });
270
+ // Try to trigger reload immediately (should be blocked by initial fetch)
271
+ datatable.reload(); // Blocked by _isFetching
272
+ datatable.reload(); // Blocked by _isFetching
273
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
274
+ case 1:
275
+ _a.sent();
276
+ // Should only have 1 request: initial
277
+ // The reload calls are blocked by _isFetching
278
+ (0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(1);
279
+ return [2 /*return*/];
280
+ }
281
+ });
282
+ }); });
283
+ (0, vitest_1.it)('should reset _isFetching flag after fetch completes', function () { return __awaiter(void 0, void 0, void 0, function () {
284
+ var datatable;
285
+ return __generator(this, function (_a) {
286
+ switch (_a.label) {
287
+ case 0:
288
+ datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
289
+ apiEndpoint: '/api/data',
290
+ });
291
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
292
+ case 1:
293
+ _a.sent(); // Wait for initial fetch
294
+ // Should be able to trigger new fetch after previous completes
295
+ datatable.reload();
296
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
297
+ case 2:
298
+ _a.sent();
299
+ (0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(2);
300
+ return [2 /*return*/];
301
+ }
302
+ });
303
+ }); });
304
+ (0, vitest_1.it)('should reset _isFetching flag even after fetch error', function () { return __awaiter(void 0, void 0, void 0, function () {
305
+ var callCount, datatable;
306
+ return __generator(this, function (_a) {
307
+ switch (_a.label) {
308
+ case 0:
309
+ callCount = 0;
310
+ mockFetch.mockImplementation(function () {
311
+ callCount++;
312
+ if (callCount === 1) {
313
+ // Return invalid JSON to trigger parse error
314
+ return Promise.resolve(new Response('Not JSON', { status: 200 }));
315
+ }
316
+ return Promise.resolve(new Response(JSON.stringify({
317
+ data: [{ id: 1, name: 'Success' }],
318
+ totalCount: 1,
319
+ }), { status: 200 }));
320
+ });
321
+ datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
322
+ apiEndpoint: '/api/data',
323
+ });
324
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
325
+ case 1:
326
+ _a.sent(); // Initial request triggers parse error
327
+ // Should be able to retry after error
328
+ datatable.reload();
329
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
330
+ case 2:
331
+ _a.sent();
332
+ (0, vitest_1.expect)(mockFetch).toHaveBeenCalledTimes(2);
333
+ return [2 /*return*/];
334
+ }
335
+ });
336
+ }); });
337
+ });
338
+ (0, vitest_1.describe)('Loading Spinner Management', function () {
339
+ (0, vitest_1.it)('should show spinner during fetch', function () { return __awaiter(void 0, void 0, void 0, function () {
340
+ var element, datatable;
341
+ return __generator(this, function (_a) {
342
+ switch (_a.label) {
343
+ case 0:
344
+ element = container.querySelector('[data-kt-datatable="true"]');
345
+ datatable = new datatable_1.KTDataTable(element, {
346
+ apiEndpoint: '/api/data',
347
+ });
348
+ return [4 /*yield*/, (0, setup_1.waitFor)(10)];
349
+ case 1:
350
+ _a.sent(); // Spinner should be visible
351
+ (0, vitest_1.expect)(element.classList.contains('loading')).toBe(true);
352
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
353
+ case 2:
354
+ _a.sent(); // Wait for fetch to complete
355
+ (0, vitest_1.expect)(element.classList.contains('loading')).toBe(false);
356
+ return [2 /*return*/];
357
+ }
358
+ });
359
+ }); });
360
+ (0, vitest_1.it)('should keep spinner visible during overlapping requests', function () { return __awaiter(void 0, void 0, void 0, function () {
361
+ var element, datatable;
362
+ return __generator(this, function (_a) {
363
+ switch (_a.label) {
364
+ case 0:
365
+ element = container.querySelector('[data-kt-datatable="true"]');
366
+ datatable = new datatable_1.KTDataTable(element, {
367
+ apiEndpoint: '/api/data',
368
+ });
369
+ return [4 /*yield*/, (0, setup_1.waitFor)(10)];
370
+ case 1:
371
+ _a.sent();
372
+ (0, vitest_1.expect)(element.classList.contains('loading')).toBe(true);
373
+ // Trigger second request while first is in progress
374
+ datatable.search('test');
375
+ return [4 /*yield*/, (0, setup_1.waitFor)(10)];
376
+ case 2:
377
+ _a.sent();
378
+ // Spinner should still be visible
379
+ (0, vitest_1.expect)(element.classList.contains('loading')).toBe(true);
380
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
381
+ case 3:
382
+ _a.sent();
383
+ // Spinner should hide only after last request completes
384
+ (0, vitest_1.expect)(element.classList.contains('loading')).toBe(false);
385
+ return [2 /*return*/];
386
+ }
387
+ });
388
+ }); });
389
+ (0, vitest_1.it)('should not flicker spinner during rapid interactions', function () { return __awaiter(void 0, void 0, void 0, function () {
390
+ var element, datatable, spinnerStates, checkInterval, transitions;
391
+ return __generator(this, function (_a) {
392
+ switch (_a.label) {
393
+ case 0:
394
+ element = container.querySelector('[data-kt-datatable="true"]');
395
+ datatable = new datatable_1.KTDataTable(element, {
396
+ apiEndpoint: '/api/data',
397
+ });
398
+ spinnerStates = [];
399
+ checkInterval = setInterval(function () {
400
+ spinnerStates.push(element.classList.contains('loading'));
401
+ }, 20);
402
+ return [4 /*yield*/, (0, setup_1.waitFor)(10)];
403
+ case 1:
404
+ _a.sent();
405
+ datatable.search('a');
406
+ return [4 /*yield*/, (0, setup_1.waitFor)(10)];
407
+ case 2:
408
+ _a.sent();
409
+ datatable.search('ab');
410
+ return [4 /*yield*/, (0, setup_1.waitFor)(10)];
411
+ case 3:
412
+ _a.sent();
413
+ datatable.search('abc');
414
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
415
+ case 4:
416
+ _a.sent();
417
+ clearInterval(checkInterval);
418
+ transitions = spinnerStates.reduce(function (acc, curr, idx) {
419
+ if (idx > 0 && spinnerStates[idx - 1] !== curr) {
420
+ acc.push(curr);
421
+ }
422
+ return acc;
423
+ }, []);
424
+ // Should have exactly 2 transitions: off->on, on->off
425
+ // No additional transitions that would indicate flickering
426
+ (0, vitest_1.expect)(transitions.length).toBeLessThanOrEqual(2);
427
+ return [2 /*return*/];
428
+ }
429
+ });
430
+ }); });
431
+ });
432
+ (0, vitest_1.describe)('Event Handling During Race Conditions', function () {
433
+ (0, vitest_1.it)('should fire fetch event for successful requests', function () { return __awaiter(void 0, void 0, void 0, function () {
434
+ var fetchEvents, element, datatable;
435
+ return __generator(this, function (_a) {
436
+ switch (_a.label) {
437
+ case 0:
438
+ fetchEvents = [];
439
+ element = container.querySelector('[data-kt-datatable="true"]');
440
+ element.addEventListener('fetch', function (e) {
441
+ fetchEvents.push(e);
442
+ });
443
+ datatable = new datatable_1.KTDataTable(element, {
444
+ apiEndpoint: '/api/data',
445
+ });
446
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
447
+ case 1:
448
+ _a.sent(); // Complete initial
449
+ datatable.search('test');
450
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
451
+ case 2:
452
+ _a.sent(); // Complete search
453
+ // Should fire fetch for initial and search
454
+ (0, vitest_1.expect)(fetchEvents.length).toBeGreaterThanOrEqual(2);
455
+ return [2 /*return*/];
456
+ }
457
+ });
458
+ }); });
459
+ (0, vitest_1.it)('should fire fetched event after successful data load', function () { return __awaiter(void 0, void 0, void 0, function () {
460
+ var fetchedEvents, element, datatable;
461
+ return __generator(this, function (_a) {
462
+ switch (_a.label) {
463
+ case 0:
464
+ fetchedEvents = [];
465
+ element = container.querySelector('[data-kt-datatable="true"]');
466
+ element.addEventListener('fetched', function (e) {
467
+ fetchedEvents.push(e);
468
+ });
469
+ datatable = new datatable_1.KTDataTable(element, {
470
+ apiEndpoint: '/api/data',
471
+ });
472
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
473
+ case 1:
474
+ _a.sent();
475
+ // Should fire fetched for initial request
476
+ (0, vitest_1.expect)(fetchedEvents.length).toBeGreaterThanOrEqual(1);
477
+ return [2 /*return*/];
478
+ }
479
+ });
480
+ }); });
481
+ (0, vitest_1.it)('should not fire error events for AbortError', function () { return __awaiter(void 0, void 0, void 0, function () {
482
+ var errorEvents, element, datatable;
483
+ return __generator(this, function (_a) {
484
+ switch (_a.label) {
485
+ case 0:
486
+ errorEvents = [];
487
+ element = container.querySelector('[data-kt-datatable="true"]');
488
+ element.addEventListener('error.kt.datatable', function (e) {
489
+ errorEvents.push(e);
490
+ });
491
+ datatable = new datatable_1.KTDataTable(element, {
492
+ apiEndpoint: '/api/data',
493
+ });
494
+ return [4 /*yield*/, (0, setup_1.waitFor)(10)];
495
+ case 1:
496
+ _a.sent();
497
+ datatable.search('test'); // Cancels previous
498
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
499
+ case 2:
500
+ _a.sent();
501
+ // AbortError should not trigger error event
502
+ (0, vitest_1.expect)(errorEvents.length).toBe(0);
503
+ return [2 /*return*/];
504
+ }
505
+ });
506
+ }); });
507
+ });
508
+ (0, vitest_1.describe)('Backward Compatibility', function () {
509
+ (0, vitest_1.it)('should work with local data mode (no AbortController needed)', function () { return __awaiter(void 0, void 0, void 0, function () {
510
+ var datatable;
511
+ return __generator(this, function (_a) {
512
+ datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'));
513
+ // Should not call fetch for local data
514
+ (0, vitest_1.expect)(mockFetch).not.toHaveBeenCalled();
515
+ // Should still work without errors
516
+ datatable.search('Item 1');
517
+ datatable.sort('name');
518
+ datatable.goPage(1);
519
+ return [2 /*return*/];
520
+ });
521
+ }); });
522
+ (0, vitest_1.it)('should maintain existing API compatibility', function () { return __awaiter(void 0, void 0, void 0, function () {
523
+ var datatable;
524
+ return __generator(this, function (_a) {
525
+ switch (_a.label) {
526
+ case 0:
527
+ datatable = new datatable_1.KTDataTable(container.querySelector('[data-kt-datatable="true"]'), {
528
+ apiEndpoint: '/api/data',
529
+ });
530
+ return [4 /*yield*/, (0, setup_1.waitFor)(150)];
531
+ case 1:
532
+ _a.sent();
533
+ // All existing methods should work
534
+ (0, vitest_1.expect)(function () {
535
+ datatable.reload();
536
+ datatable.search('test');
537
+ datatable.sort('name');
538
+ datatable.goPage(1);
539
+ datatable.setPageSize(20);
540
+ datatable.getState();
541
+ }).not.toThrow();
542
+ return [2 /*return*/];
543
+ }
544
+ });
545
+ }); });
546
+ });
547
+ });
548
+ //# sourceMappingURL=race-conditions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"race-conditions.test.js","sourceRoot":"","sources":["../../../../../src/components/datatable/__tests__/race-conditions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * Vitest setup file for datatable tests
4
+ * Provides DOM environment setup and utilities
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createMockElement = exports.waitFor = void 0;
8
+ var vitest_1 = require("vitest");
9
+ // Mock KTComponents to prevent auto-initialization errors
10
+ vitest_1.vi.mock('../../../index', function () { return ({
11
+ default: {
12
+ init: vitest_1.vi.fn(),
13
+ },
14
+ KTComponents: {
15
+ init: vitest_1.vi.fn(),
16
+ },
17
+ }); });
18
+ // Setup DOM environment before each test
19
+ (0, vitest_1.beforeEach)(function () {
20
+ // Clear localStorage
21
+ localStorage.clear();
22
+ // Reset document body
23
+ document.body.innerHTML = '';
24
+ // Clear any global state
25
+ // Add any other global setup here
26
+ });
27
+ // Cleanup after each test
28
+ (0, vitest_1.afterEach)(function () {
29
+ // Clear localStorage
30
+ localStorage.clear();
31
+ // Reset document body
32
+ document.body.innerHTML = '';
33
+ // Clear all pending timers to prevent "document is not defined" errors
34
+ vitest_1.vi.clearAllTimers();
35
+ });
36
+ // Mock window.matchMedia if needed
37
+ Object.defineProperty(window, 'matchMedia', {
38
+ writable: true,
39
+ value: function (query) { return ({
40
+ matches: false,
41
+ media: query,
42
+ onchange: null,
43
+ addListener: function () { }, // deprecated
44
+ removeListener: function () { }, // deprecated
45
+ addEventListener: function () { },
46
+ removeEventListener: function () { },
47
+ dispatchEvent: function () { return true; },
48
+ }); },
49
+ });
50
+ // Export utilities that tests can use
51
+ var waitFor = function (ms) { return new Promise(function (resolve) { return setTimeout(resolve, ms); }); };
52
+ exports.waitFor = waitFor;
53
+ var createMockElement = function (tag, attributes) {
54
+ if (attributes === void 0) { attributes = {}; }
55
+ var el = document.createElement(tag);
56
+ Object.entries(attributes).forEach(function (_a) {
57
+ var key = _a[0], value = _a[1];
58
+ el.setAttribute(key, value);
59
+ });
60
+ return el;
61
+ };
62
+ exports.createMockElement = createMockElement;
63
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../../src/components/datatable/__tests__/setup.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iCAAmD;AAEnD,0DAA0D;AAC1D,WAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAM,OAAA,CAAC;IAChC,OAAO,EAAE;QACR,IAAI,EAAE,WAAE,CAAC,EAAE,EAAE;KACb;IACD,YAAY,EAAE;QACb,IAAI,EAAE,WAAE,CAAC,EAAE,EAAE;KACb;CACD,CAAC,EAP8B,CAO9B,CAAC,CAAC;AAEJ,yCAAyC;AACzC,IAAA,mBAAU,EAAC;IACV,qBAAqB;IACrB,YAAY,CAAC,KAAK,EAAE,CAAC;IAErB,sBAAsB;IACtB,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAE7B,yBAAyB;IACzB,kCAAkC;AACnC,CAAC,CAAC,CAAC;AAEH,0BAA0B;AAC1B,IAAA,kBAAS,EAAC;IACT,qBAAqB;IACrB,YAAY,CAAC,KAAK,EAAE,CAAC;IAErB,sBAAsB;IACtB,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAE7B,uEAAuE;IACvE,WAAE,CAAC,cAAc,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,mCAAmC;AACnC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;IAC3C,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,UAAC,KAAa,IAAK,OAAA,CAAC;QAC1B,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,IAAuE;QACjF,WAAW,EAAE,cAAO,CAAC,EAAE,aAAa;QACpC,cAAc,EAAE,cAAO,CAAC,EAAE,aAAa;QACvC,gBAAgB,EAAE,cAAO,CAAC;QAC1B,mBAAmB,EAAE,cAAO,CAAC;QAC7B,aAAa,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;KACzB,CAAC,EATwB,CASxB;CACF,CAAC,CAAC;AAEH,sCAAsC;AAC/B,IAAM,OAAO,GAAG,UAAC,EAAU,IAAK,OAAA,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAvB,CAAuB,CAAC,EAAjD,CAAiD,CAAC;AAA5E,QAAA,OAAO,WAAqE;AAElF,IAAM,iBAAiB,GAAG,UAAC,GAAW,EAAE,UAAuC;IAAvC,2BAAA,EAAA,eAAuC;IACrF,IAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAC,EAAY;YAAX,GAAG,QAAA,EAAE,KAAK,QAAA;QAC9C,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,CAAC;AACX,CAAC,CAAC;AANW,QAAA,iBAAiB,qBAM5B"}