ywana-core8 0.1.74 → 0.1.76

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 (123) hide show
  1. package/ACCORDION_EVALUATION.md +583 -0
  2. package/CHECKBOX_EVALUATION.md +273 -0
  3. package/CHIP_EVALUATION.md +542 -0
  4. package/COLOR_EVALUATION.md +524 -0
  5. package/COMPONENTS_EVALUATION.md +477 -0
  6. package/FORM_EVALUATION.md +459 -0
  7. package/HEADER_EVALUATION.md +436 -0
  8. package/ICON_EVALUATION.md +254 -0
  9. package/LIST_EVALUATION.md +574 -0
  10. package/PROGRESS_EVALUATION.md +450 -0
  11. package/RADIO_EVALUATION.md +439 -0
  12. package/RADIO_VISUAL_FIX.md +183 -0
  13. package/SECTION_IMPROVEMENTS.md +153 -0
  14. package/SWITCH_EVALUATION.md +335 -0
  15. package/SWITCH_VISUAL_FIX.md +232 -0
  16. package/TAB_EVALUATION.md +626 -0
  17. package/TEXTFIELD_EVALUATION.md +747 -0
  18. package/TOOLTIP_FIX.md +157 -0
  19. package/TREE_EVALUATION.md +708 -0
  20. package/dist/index.cjs +7900 -1615
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.css +6094 -1122
  23. package/dist/index.css.map +1 -1
  24. package/dist/index.modern.js +7929 -1645
  25. package/dist/index.modern.js.map +1 -1
  26. package/dist/index.umd.js +7900 -1615
  27. package/dist/index.umd.js.map +1 -1
  28. package/jest.config.js +24 -0
  29. package/package.json +10 -1
  30. package/src/html/accordion.css +208 -4
  31. package/src/html/accordion.example.js +390 -0
  32. package/src/html/accordion.js +284 -28
  33. package/src/html/accordion.unit.test.js +334 -0
  34. package/src/html/button.css +157 -16
  35. package/src/html/button.example.js +374 -0
  36. package/src/html/button.js +240 -60
  37. package/src/html/button.test.js +422 -0
  38. package/src/html/checkbox.css +74 -2
  39. package/src/html/checkbox.example.js +316 -0
  40. package/src/html/checkbox.js +113 -26
  41. package/src/html/checkbox.test.js +285 -0
  42. package/src/html/chip.css +230 -19
  43. package/src/html/chip.example.js +355 -0
  44. package/src/html/chip.js +321 -25
  45. package/src/html/chip.test.js +425 -0
  46. package/src/html/color.css +435 -6
  47. package/src/html/color.example.js +527 -0
  48. package/src/html/color.js +458 -9
  49. package/src/html/color.test.js +362 -4
  50. package/src/html/components.example.js +492 -0
  51. package/src/html/components_enhanced.test.js +581 -0
  52. package/src/html/form.css +70 -3
  53. package/src/html/form.example.js +385 -0
  54. package/src/html/form.js +232 -34
  55. package/src/html/form.test.js +369 -0
  56. package/src/html/header2.css +264 -0
  57. package/src/html/header2.example.js +411 -0
  58. package/src/html/header2.js +203 -0
  59. package/src/html/header2.test.js +377 -0
  60. package/src/html/icon.css +20 -2
  61. package/src/html/icon.example.js +268 -0
  62. package/src/html/icon.js +86 -16
  63. package/src/html/icon.test.js +231 -0
  64. package/src/html/index.js +1 -1
  65. package/src/html/list.css +393 -1
  66. package/src/html/list.example.js +404 -0
  67. package/src/html/list.js +583 -40
  68. package/src/html/list.test.js +383 -0
  69. package/src/html/progress.css +707 -17
  70. package/src/html/progress.example.js +424 -0
  71. package/src/html/progress.js +906 -9
  72. package/src/html/progress.test.js +313 -0
  73. package/src/html/property.css +399 -0
  74. package/src/html/property.example.js +553 -0
  75. package/src/html/property.js +393 -15
  76. package/src/html/property.test.js +351 -2
  77. package/src/html/radio-visual-test.js +289 -0
  78. package/src/html/radio.css +137 -11
  79. package/src/html/radio.example.js +389 -0
  80. package/src/html/radio.js +234 -10
  81. package/src/html/radio.test.js +318 -0
  82. package/src/html/section.example.js +99 -0
  83. package/src/html/section.js +40 -3
  84. package/src/html/section.test.js +131 -0
  85. package/src/html/selector.css +329 -3
  86. package/src/html/selector.js +369 -23
  87. package/src/html/switch-debug.js +197 -0
  88. package/src/html/switch-test-visual.js +294 -0
  89. package/src/html/switch.css +200 -0
  90. package/src/html/switch.example.js +461 -0
  91. package/src/html/switch.js +283 -23
  92. package/src/html/switch.test.js +355 -0
  93. package/src/html/tab.css +288 -0
  94. package/src/html/tab.example.js +446 -0
  95. package/src/html/tab.js +387 -22
  96. package/src/html/tab_enhanced.js +378 -0
  97. package/src/html/tab_enhanced.test.js +504 -0
  98. package/src/html/table2.css +576 -0
  99. package/src/html/table2.example.js +703 -0
  100. package/src/html/table2.js +1252 -0
  101. package/src/html/table2.migration.md +328 -0
  102. package/src/html/table2.test.js +582 -0
  103. package/src/html/text.css +375 -0
  104. package/src/html/text.js +311 -20
  105. package/src/html/textfield.js +1 -1
  106. package/src/html/textfield2.css +842 -0
  107. package/src/html/textfield2.example.js +499 -0
  108. package/src/html/textfield2.js +1130 -0
  109. package/src/html/textfield2.test.js +950 -0
  110. package/src/html/thumbnail.css +289 -2
  111. package/src/html/thumbnail.js +214 -9
  112. package/src/html/tokenfield.css +449 -1
  113. package/src/html/tokenfield.example.js +503 -0
  114. package/src/html/tokenfield.js +561 -56
  115. package/src/html/tokenfield.test.js +423 -0
  116. package/src/html/tooltip-positioning-demo.js +187 -0
  117. package/src/html/tooltip.css +25 -2
  118. package/src/html/tree.css +228 -0
  119. package/src/html/tree.example.js +475 -0
  120. package/src/html/tree.js +712 -28
  121. package/src/html/tree_enhanced.test.js +495 -0
  122. package/table2.test.js +454 -0
  123. package/src/html/button.tsx +0 -38
@@ -0,0 +1,576 @@
1
+ /* DataTable2 CSS - Enhanced version maintaining 100% compatibility */
2
+
3
+ /* Import original table styles for compatibility */
4
+ @import './table.css';
5
+
6
+ /* Enhanced DataTable2 Styles - New functionality while maintaining compatibility */
7
+
8
+ .datatable2 {
9
+ position: relative;
10
+ width: 100%;
11
+ overflow: hidden;
12
+ border-radius: 8px;
13
+ background: var(--background-color, #ffffff);
14
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
15
+ transition: all 0.2s ease;
16
+ }
17
+
18
+ /* Fix table borders - single 1px borders */
19
+ .datatable2 table {
20
+ border-collapse: collapse;
21
+ width: 100%;
22
+ border-spacing: 0;
23
+ }
24
+
25
+ .datatable2 th,
26
+ .datatable2 td {
27
+ border: 1px solid var(--divider-color, #e0e0e0);
28
+ padding: 0.5rem 0.75rem;
29
+ text-align: left;
30
+ vertical-align: middle;
31
+ position: relative;
32
+ }
33
+
34
+ /* Fix editable fields to stay within cells */
35
+ .datatable2 .field-editor {
36
+ width: 100%;
37
+ max-width: 100%;
38
+ box-sizing: border-box;
39
+ }
40
+
41
+ .datatable2 .field-editor input,
42
+ .datatable2 .field-editor select,
43
+ .datatable2 .field-editor textarea {
44
+ width: 100%;
45
+ max-width: 100%;
46
+ box-sizing: border-box;
47
+ border: none;
48
+ outline: none;
49
+ background: transparent;
50
+ padding: 0.25rem;
51
+ margin: 0;
52
+ font-size: inherit;
53
+ font-family: inherit;
54
+ line-height: inherit;
55
+ }
56
+
57
+ .datatable2 .field-editor input:focus,
58
+ .datatable2 .field-editor select:focus,
59
+ .datatable2 .field-editor textarea:focus {
60
+ background: rgba(33, 150, 243, 0.05);
61
+ border-radius: 2px;
62
+ }
63
+
64
+ /* Search functionality */
65
+ .datatable2__search {
66
+ padding: 1rem;
67
+ border-bottom: 1px solid var(--divider-color, #e0e0e0);
68
+ background: var(--background-color-light, #f8f9fa);
69
+ }
70
+
71
+ /* Toolbar */
72
+ .datatable2__toolbar {
73
+ display: flex;
74
+ justify-content: space-between;
75
+ align-items: center;
76
+ padding: 0.5rem 1rem;
77
+ border-bottom: 1px solid var(--divider-color, #e0e0e0);
78
+ background: var(--background-color-light, #f8f9fa);
79
+ }
80
+
81
+ .datatable2__export-btn {
82
+ display: flex;
83
+ align-items: center;
84
+ gap: 0.5rem;
85
+ padding: 0.5rem 1rem;
86
+ border: 1px solid var(--primary-color, #2196f3);
87
+ background: transparent;
88
+ color: var(--primary-color, #2196f3);
89
+ border-radius: 4px;
90
+ cursor: pointer;
91
+ font-size: 0.9rem;
92
+ transition: all 0.2s ease;
93
+ }
94
+
95
+ .datatable2__export-btn:hover:not(:disabled) {
96
+ background: var(--primary-color, #2196f3);
97
+ color: white;
98
+ }
99
+
100
+ .datatable2__export-btn:disabled {
101
+ opacity: 0.6;
102
+ cursor: not-allowed;
103
+ }
104
+
105
+ /* Table variants */
106
+ .datatable2--striped tbody tr:nth-child(even) {
107
+ background-color: var(--background-color-light, #f8f9fa);
108
+ }
109
+
110
+ .datatable2--compact {
111
+ font-size: 0.85rem;
112
+ }
113
+
114
+ .datatable2--compact th,
115
+ .datatable2--compact td {
116
+ padding: 0.375rem 0.5rem;
117
+ }
118
+
119
+ .datatable2--bordered {
120
+ border: 1px solid var(--divider-color, #e0e0e0);
121
+ }
122
+
123
+ .datatable2--bordered th,
124
+ .datatable2--bordered td {
125
+ border: 1px solid var(--divider-color, #e0e0e0);
126
+ }
127
+
128
+ .datatable2--no-hover tbody tr:hover {
129
+ background-color: inherit !important;
130
+ }
131
+
132
+ /* Row height variants - Clear differences */
133
+ .datatable2--small th,
134
+ .datatable2--small td {
135
+ padding: 0.25rem 0.5rem;
136
+ font-size: 0.75rem;
137
+ line-height: 1.2;
138
+ height: 32px;
139
+ }
140
+
141
+ .datatable2--medium th,
142
+ .datatable2--medium td {
143
+ padding: 0.5rem 0.75rem;
144
+ font-size: 0.875rem;
145
+ line-height: 1.4;
146
+ height: 44px;
147
+ }
148
+
149
+ .datatable2--large th,
150
+ .datatable2--large td {
151
+ padding: 0.75rem 1rem;
152
+ font-size: 1rem;
153
+ line-height: 1.6;
154
+ height: 56px;
155
+ }
156
+
157
+ /* Density variants - Clear differences */
158
+ .datatable2--compact {
159
+ font-size: 0.8rem;
160
+ }
161
+
162
+ .datatable2--compact th,
163
+ .datatable2--compact td {
164
+ padding: 0.25rem 0.5rem;
165
+ line-height: 1.2;
166
+ height: 28px;
167
+ }
168
+
169
+ .datatable2--normal {
170
+ font-size: 0.9rem;
171
+ }
172
+
173
+ .datatable2--normal th,
174
+ .datatable2--normal td {
175
+ padding: 0.5rem 0.75rem;
176
+ line-height: 1.4;
177
+ height: 40px;
178
+ }
179
+
180
+ .datatable2--comfortable {
181
+ font-size: 1rem;
182
+ }
183
+
184
+ .datatable2--comfortable th,
185
+ .datatable2--comfortable td {
186
+ padding: 0.875rem 1.25rem;
187
+ line-height: 1.6;
188
+ height: 52px;
189
+ }
190
+
191
+ /* Theme variants */
192
+ .datatable2--dark {
193
+ background: var(--background-color-dark, #303030);
194
+ color: var(--text-color-dark, #ffffff);
195
+ }
196
+
197
+ .datatable2--dark th {
198
+ background: var(--background-color-light-dark, #424242);
199
+ color: var(--text-color-dark, #ffffff);
200
+ }
201
+
202
+ .datatable2--dark tbody tr:hover {
203
+ background-color: var(--hover-color-dark, rgba(255, 255, 255, 0.08));
204
+ }
205
+
206
+ .datatable2--minimal {
207
+ box-shadow: none;
208
+ border: none;
209
+ }
210
+
211
+ .datatable2--minimal th {
212
+ border-bottom: 2px solid var(--primary-color, #2196f3);
213
+ background: transparent;
214
+ }
215
+
216
+ /* Header enhancements */
217
+ .datatable2__header--sticky {
218
+ position: sticky;
219
+ top: 0;
220
+ z-index: 10;
221
+ background: var(--background-color, #ffffff);
222
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
223
+ }
224
+
225
+ .datatable2__row-number-header {
226
+ width: 60px;
227
+ text-align: center;
228
+ background: var(--background-color-light, #f8f9fa);
229
+ font-weight: 600;
230
+ }
231
+
232
+ /* Row numbers */
233
+ .datatable2__row-number {
234
+ width: 60px;
235
+ text-align: center;
236
+ background: var(--background-color-light, #f8f9fa);
237
+ font-weight: 500;
238
+ color: var(--text-color-light, #666);
239
+ border-right: 1px solid var(--divider-color, #e0e0e0);
240
+ }
241
+
242
+ /* Column resizing - Enhanced visibility */
243
+ .resizable-column {
244
+ position: relative;
245
+ user-select: none;
246
+ }
247
+
248
+ .column-resizer {
249
+ position: absolute;
250
+ top: 0;
251
+ right: -2px;
252
+ width: 6px;
253
+ height: 100%;
254
+ cursor: col-resize;
255
+ background: transparent;
256
+ transition: all 0.2s ease;
257
+ z-index: 10;
258
+ border-right: 2px solid transparent;
259
+ }
260
+
261
+ .column-resizer:hover {
262
+ background: rgba(33, 150, 243, 0.1);
263
+ border-right-color: var(--primary-color, #2196f3);
264
+ }
265
+
266
+ .column-resizer:active {
267
+ background: rgba(33, 150, 243, 0.2);
268
+ border-right-color: var(--primary-color, #2196f3);
269
+ }
270
+
271
+ /* Add resize indicator */
272
+ .resizable-column:hover .column-resizer::after {
273
+ content: '';
274
+ position: absolute;
275
+ top: 50%;
276
+ right: 1px;
277
+ transform: translateY(-50%);
278
+ width: 2px;
279
+ height: 20px;
280
+ background: var(--primary-color, #2196f3);
281
+ border-radius: 1px;
282
+ }
283
+
284
+ /* Loading states */
285
+ .datatable2--loading {
286
+ opacity: 0.7;
287
+ pointer-events: none;
288
+ }
289
+
290
+ .datatable2--skeleton .skeleton-text {
291
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
292
+ background-size: 200% 100%;
293
+ animation: skeleton-loading 1.5s infinite;
294
+ border-radius: 4px;
295
+ height: 1rem;
296
+ margin: 0.25rem 0;
297
+ }
298
+
299
+ .datatable2--skeleton .skeleton-text--header {
300
+ height: 1.2rem;
301
+ background: linear-gradient(90deg, #e0e0e0 25%, #d0d0d0 50%, #e0e0e0 75%);
302
+ background-size: 200% 100%;
303
+ }
304
+
305
+ /* Row selection */
306
+ .datatable2 tbody tr.selected {
307
+ background-color: rgba(33, 150, 243, 0.1);
308
+ border-left: 3px solid var(--primary-color, #2196f3);
309
+ }
310
+
311
+ .datatable2 tbody tr:hover {
312
+ background-color: var(--hover-color, rgba(0, 0, 0, 0.04));
313
+ }
314
+
315
+ /* Footer */
316
+ .datatable2__footer {
317
+ padding: 1rem;
318
+ border-top: 1px solid var(--divider-color, #e0e0e0);
319
+ background: var(--background-color-light, #f8f9fa);
320
+ display: flex;
321
+ justify-content: space-between;
322
+ align-items: center;
323
+ }
324
+
325
+ /* Pagination */
326
+ .datatable2__pagination {
327
+ display: flex;
328
+ justify-content: center;
329
+ align-items: center;
330
+ gap: 1rem;
331
+ padding: 1rem;
332
+ border-top: 1px solid var(--divider-color, #e0e0e0);
333
+ }
334
+
335
+ .datatable2__pagination button {
336
+ padding: 0.5rem 1rem;
337
+ border: 1px solid var(--divider-color, #e0e0e0);
338
+ background: white;
339
+ color: var(--text-color, #333);
340
+ border-radius: 4px;
341
+ cursor: pointer;
342
+ transition: all 0.2s ease;
343
+ }
344
+
345
+ .datatable2__pagination button:hover:not(:disabled) {
346
+ background: var(--primary-color, #2196f3);
347
+ color: white;
348
+ border-color: var(--primary-color, #2196f3);
349
+ }
350
+
351
+ .datatable2__pagination button:disabled {
352
+ opacity: 0.6;
353
+ cursor: not-allowed;
354
+ }
355
+
356
+ /* Enhanced cell viewers */
357
+ .image-cell {
358
+ display: flex;
359
+ align-items: center;
360
+ gap: 0.5rem;
361
+ }
362
+
363
+ .image-cell img {
364
+ width: 32px;
365
+ height: 32px;
366
+ border-radius: 50%;
367
+ object-fit: cover;
368
+ }
369
+
370
+ .entity-cell {
371
+ padding: 0.25rem 0.5rem;
372
+ }
373
+
374
+ .field-editor {
375
+ width: 100%;
376
+ }
377
+
378
+ .string-viewer {
379
+ max-width: 200px;
380
+ overflow: hidden;
381
+ text-overflow: ellipsis;
382
+ white-space: nowrap;
383
+ }
384
+
385
+ /* Responsive design */
386
+ .datatable2--responsive {
387
+ overflow-x: auto;
388
+ }
389
+
390
+ @media (max-width: 768px) {
391
+ .datatable2--responsive table {
392
+ min-width: 600px;
393
+ }
394
+
395
+ .datatable2__search {
396
+ padding: 0.75rem;
397
+ }
398
+
399
+ .datatable2__toolbar {
400
+ padding: 0.5rem 0.75rem;
401
+ flex-direction: column;
402
+ gap: 0.5rem;
403
+ }
404
+
405
+ .datatable2__export-btn {
406
+ width: 100%;
407
+ justify-content: center;
408
+ }
409
+
410
+ .datatable2__row-number {
411
+ width: 40px;
412
+ }
413
+
414
+ .datatable2__row-number-header {
415
+ width: 40px;
416
+ }
417
+
418
+ .datatable2--small th,
419
+ .datatable2--small td,
420
+ .datatable2--medium th,
421
+ .datatable2--medium td,
422
+ .datatable2--large th,
423
+ .datatable2--large td {
424
+ padding: 0.375rem 0.5rem;
425
+ font-size: 0.8rem;
426
+ }
427
+ }
428
+
429
+ /* Animations */
430
+ @keyframes skeleton-loading {
431
+ 0% {
432
+ background-position: 200% 0;
433
+ }
434
+ 100% {
435
+ background-position: -200% 0;
436
+ }
437
+ }
438
+
439
+ /* Dark theme support */
440
+ @media (prefers-color-scheme: dark) {
441
+ .datatable2 {
442
+ background: var(--background-color-dark, #303030);
443
+ color: var(--text-color-dark, #ffffff);
444
+ }
445
+
446
+ .datatable2__search,
447
+ .datatable2__toolbar,
448
+ .datatable2__footer {
449
+ background: var(--background-color-light-dark, #424242);
450
+ border-color: var(--divider-color-dark, #616161);
451
+ }
452
+
453
+ .datatable2--striped tbody tr:nth-child(even) {
454
+ background-color: var(--background-color-light-dark, #424242);
455
+ }
456
+
457
+ .datatable2__header--sticky {
458
+ background: var(--background-color-dark, #303030);
459
+ }
460
+
461
+ .datatable2__row-number,
462
+ .datatable2__row-number-header {
463
+ background: var(--background-color-light-dark, #424242);
464
+ color: var(--text-color-light-dark, #cccccc);
465
+ border-color: var(--divider-color-dark, #616161);
466
+ }
467
+
468
+ .datatable2 tbody tr:hover {
469
+ background-color: var(--hover-color-dark, rgba(255, 255, 255, 0.08));
470
+ }
471
+
472
+ .datatable2 tbody tr.selected {
473
+ background-color: rgba(100, 181, 246, 0.2);
474
+ border-left-color: var(--primary-color-dark, #64b5f6);
475
+ }
476
+
477
+ .datatable2--skeleton .skeleton-text {
478
+ background: linear-gradient(90deg, #424242 25%, #616161 50%, #424242 75%);
479
+ background-size: 200% 100%;
480
+ }
481
+
482
+ .datatable2--skeleton .skeleton-text--header {
483
+ background: linear-gradient(90deg, #616161 25%, #757575 50%, #616161 75%);
484
+ background-size: 200% 100%;
485
+ }
486
+
487
+ .datatable2__pagination button {
488
+ background: var(--background-color-dark, #303030);
489
+ color: var(--text-color-dark, #ffffff);
490
+ border-color: var(--divider-color-dark, #616161);
491
+ }
492
+
493
+ .datatable2__export-btn {
494
+ border-color: var(--primary-color-dark, #64b5f6);
495
+ color: var(--primary-color-dark, #64b5f6);
496
+ }
497
+
498
+ .datatable2__export-btn:hover:not(:disabled) {
499
+ background: var(--primary-color-dark, #64b5f6);
500
+ color: var(--text-color-dark, #000);
501
+ }
502
+ }
503
+
504
+ /* High contrast mode */
505
+ @media (prefers-contrast: high) {
506
+ .datatable2 {
507
+ border: 2px solid currentColor;
508
+ }
509
+
510
+ .datatable2--bordered th,
511
+ .datatable2--bordered td {
512
+ border-width: 2px;
513
+ }
514
+
515
+ .datatable2 tbody tr.selected {
516
+ outline: 3px solid var(--primary-color, #2196f3);
517
+ outline-offset: -3px;
518
+ }
519
+
520
+ .datatable2__export-btn {
521
+ border-width: 2px;
522
+ font-weight: 600;
523
+ }
524
+ }
525
+
526
+ /* Reduced motion */
527
+ @media (prefers-reduced-motion: reduce) {
528
+ .datatable2,
529
+ .datatable2__export-btn,
530
+ .datatable2__pagination button,
531
+ .column-resizer {
532
+ transition: none;
533
+ }
534
+
535
+ .datatable2--skeleton .skeleton-text,
536
+ .datatable2--skeleton .skeleton-text--header {
537
+ animation: none;
538
+ background: #e0e0e0;
539
+ }
540
+ }
541
+
542
+ /* Print styles */
543
+ @media print {
544
+ .datatable2 {
545
+ break-inside: avoid;
546
+ box-shadow: none !important;
547
+ border: 1px solid black !important;
548
+ }
549
+
550
+ .datatable2__search,
551
+ .datatable2__toolbar,
552
+ .datatable2__footer,
553
+ .datatable2__pagination {
554
+ display: none !important;
555
+ }
556
+
557
+ .datatable2 th,
558
+ .datatable2 td {
559
+ border: 1px solid black !important;
560
+ background: white !important;
561
+ color: black !important;
562
+ }
563
+
564
+ .datatable2 tbody tr:hover {
565
+ background: white !important;
566
+ }
567
+
568
+ .datatable2 tbody tr.selected {
569
+ background: #f0f0f0 !important;
570
+ border-left: none !important;
571
+ }
572
+
573
+ .column-resizer {
574
+ display: none !important;
575
+ }
576
+ }