overview-components 0.2.1 → 0.2.2

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 (40) hide show
  1. package/dist/components/lit-attachments-tab.d.ts +5 -0
  2. package/dist/components/lit-attachments-tab.d.ts.map +1 -1
  3. package/dist/components/lit-attachments-tab.js +37 -15
  4. package/dist/components/lit-attachments-tab.js.map +1 -1
  5. package/dist/components/lit-case-variables-tab.d.ts.map +1 -1
  6. package/dist/components/lit-case-variables-tab.js +143 -174
  7. package/dist/components/lit-case-variables-tab.js.map +1 -1
  8. package/dist/components/lit-chart.js +2 -2
  9. package/dist/components/lit-chart.js.map +1 -1
  10. package/dist/components/lit-data-grid-tanstack.d.ts +3 -2
  11. package/dist/components/lit-data-grid-tanstack.d.ts.map +1 -1
  12. package/dist/components/lit-data-grid-tanstack.js +7 -79
  13. package/dist/components/lit-data-grid-tanstack.js.map +1 -1
  14. package/dist/components/lit-section-tab.d.ts +6 -1
  15. package/dist/components/lit-section-tab.d.ts.map +1 -1
  16. package/dist/components/lit-section-tab.js +30 -30
  17. package/dist/components/lit-section-tab.js.map +1 -1
  18. package/dist/shared/filter-inputs.d.ts +5 -1
  19. package/dist/shared/filter-inputs.d.ts.map +1 -1
  20. package/dist/shared/filter-inputs.js +323 -259
  21. package/dist/shared/filter-inputs.js.map +1 -1
  22. package/dist/shared/lit-loader.d.ts +7 -0
  23. package/dist/shared/lit-loader.d.ts.map +1 -0
  24. package/dist/shared/lit-loader.js +51 -0
  25. package/dist/shared/lit-loader.js.map +1 -0
  26. package/dist/shared/lit-loading-bar.d.ts +20 -0
  27. package/dist/shared/lit-loading-bar.d.ts.map +1 -0
  28. package/dist/shared/lit-loading-bar.js +92 -0
  29. package/dist/shared/lit-loading-bar.js.map +1 -0
  30. package/dist/shared/lit-select.d.ts +3 -1
  31. package/dist/shared/lit-select.d.ts.map +1 -1
  32. package/dist/shared/lit-select.js +20 -10
  33. package/dist/shared/lit-select.js.map +1 -1
  34. package/dist/utils/custom-filters.d.ts.map +1 -0
  35. package/dist/utils/custom-filters.js.map +1 -0
  36. package/package.json +1 -1
  37. package/dist/components/custom-filters.d.ts.map +0 -1
  38. package/dist/components/custom-filters.js.map +0 -1
  39. /package/dist/{components → utils}/custom-filters.d.ts +0 -0
  40. /package/dist/{components → utils}/custom-filters.js +0 -0
@@ -144,6 +144,70 @@ let FilterInputs = class FilterInputs extends LitElement {
144
144
  focusableElements[nextIndex]?.focus();
145
145
  }
146
146
  }
147
+ _convertToStandardDate(match, format) {
148
+ let year, month, day;
149
+ switch (format) {
150
+ case 'dd.MM.yyyy':
151
+ case 'dd/MM/yyyy':
152
+ [day, month, year] = match.slice(1, 4);
153
+ break;
154
+ case 'd.M.yyyy':
155
+ [day, month, year] = match.slice(1, 4);
156
+ break;
157
+ case 'MM/dd/yyyy':
158
+ [month, day, year] = match.slice(1, 4);
159
+ break;
160
+ case 'yyyy-MM-dd':
161
+ [year, month, day] = match.slice(1, 4);
162
+ break;
163
+ }
164
+ // Convert to ISO format (YYYY-MM-DD)
165
+ return `${year}-${month?.padStart(2, '0')}-${day?.padStart(2, '0')}`;
166
+ }
167
+ _parseDate(dateStr) {
168
+ // Regular expressions for different date formats
169
+ // Patterns for different formats
170
+ const patterns = [
171
+ { regex: /^(\d{2})\.(\d{2})\.(\d{4})$/, format: 'dd.MM.yyyy' }, // dd.MM.yyyy
172
+ { regex: /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/, format: 'd.M.yyyy' }, // d.M.yyyy
173
+ { regex: /^(\d{2})\/(\d{2})\/(\d{4})$/, format: 'dd/MM/yyyy' }, // dd/MM/yyyy
174
+ { regex: /^(\d{2})\/(\d{2})\/(\d{4})$/, format: 'MM/dd/yyyy' }, // MM/dd/yyyy
175
+ { regex: /^(\d{4})-(\d{2})-(\d{2})$/, format: 'yyyy-MM-dd' }, // yyyy-MM-dd
176
+ ];
177
+ for (const { regex, format } of patterns) {
178
+ const match = dateStr.match(regex);
179
+ if (match) {
180
+ return this._convertToStandardDate(match, format);
181
+ }
182
+ }
183
+ return null;
184
+ }
185
+ handleDateInputStart(event) {
186
+ const target = event.target;
187
+ const dateStr = target.value;
188
+ if (!dateStr) {
189
+ this.handleFilterDateChange(undefined, this.endDate);
190
+ return;
191
+ }
192
+ const parsedDate = this._parseDate(dateStr);
193
+ if (parsedDate) {
194
+ this.startDate = parsedDate;
195
+ this.startDatePicker.selectDate(this.startDate);
196
+ }
197
+ }
198
+ handleDateInputEnd(event) {
199
+ const target = event.target;
200
+ const dateStr = target.value;
201
+ if (!dateStr) {
202
+ this.handleFilterDateChange(this.startDate, undefined);
203
+ return;
204
+ }
205
+ const parsedDate = this._parseDate(dateStr);
206
+ if (parsedDate) {
207
+ this.endDate = parsedDate;
208
+ this.endDatePicker.selectDate(this.endDate);
209
+ }
210
+ }
147
211
  render() {
148
212
  if (this.filterVariant === 'range') {
149
213
  return this.renderRangeInput();
@@ -161,7 +225,7 @@ let FilterInputs = class FilterInputs extends LitElement {
161
225
  return this.renderDateInput();
162
226
  }
163
227
  else if (this.filterVariant === 'dateTime') {
164
- return this.renderDateInput(true);
228
+ return this.renderDateInput();
165
229
  }
166
230
  else {
167
231
  return this.renderTextInput();
@@ -172,336 +236,336 @@ let FilterInputs = class FilterInputs extends LitElement {
172
236
  this.column.setFilterValue([min, max]);
173
237
  this.requestUpdate();
174
238
  });
175
- return html `
176
- <div class="range">
177
- <div class="custom-icon-wrapper" style="min-width: 70px">
178
- <input
179
- type="number"
180
- placeholder="Min"
239
+ return html `
240
+ <div class="range">
241
+ <div class="custom-icon-wrapper" style="min-width: 70px">
242
+ <input
243
+ type="number"
244
+ placeholder="Min"
181
245
  @input=${(e) => {
182
246
  const min = e.target.value ? Number(e.target.value) : undefined;
183
247
  const currentMax = this.column.getFilterValue()?.[1];
184
248
  debouncedSetRangeFilter(min, currentMax);
185
- }}
186
- .value="${this.column.getFilterValue()?.[0] || ''}"
187
- tabindex="0"
188
- @keydown="${this.handleTabSwitch}"
189
- />
190
- ${this.renderClearButton(0)}
191
- </div>
192
-
193
- <div class="custom-icon-wrapper" style="min-width: 70px">
194
- <input
195
- type="number"
196
- placeholder="Max"
249
+ }}
250
+ .value="${this.column.getFilterValue()?.[0] || ''}"
251
+ tabindex="0"
252
+ @keydown="${this.handleTabSwitch}"
253
+ />
254
+ ${this.renderClearButton(0)}
255
+ </div>
256
+
257
+ <div class="custom-icon-wrapper" style="min-width: 70px">
258
+ <input
259
+ type="number"
260
+ placeholder="Max"
197
261
  @input=${(e) => {
198
262
  const max = e.target.value ? Number(e.target.value) : undefined;
199
263
  const currentMin = this.column.getFilterValue()?.[0];
200
264
  debouncedSetRangeFilter(currentMin, max);
201
- }}
202
- .value="${this.column.getFilterValue()?.[1] || ''}"
203
- tabindex="0"
204
- @keydown="${this.handleTabSwitch}"
205
- />
206
- ${this.renderClearButton(1)}
207
- </div>
208
- </div>
265
+ }}
266
+ .value="${this.column.getFilterValue()?.[1] || ''}"
267
+ tabindex="0"
268
+ @keydown="${this.handleTabSwitch}"
269
+ />
270
+ ${this.renderClearButton(1)}
271
+ </div>
272
+ </div>
209
273
  `;
210
274
  }
211
275
  renderSelectInput(multiselect = false) {
212
- return html `
213
- <lit-select
214
- .value="${this.column.getFilterValue() || []}"
276
+ return html `
277
+ <lit-select
278
+ .value="${this.column.getFilterValue() || []}"
215
279
  .options="${[
216
280
  ...this.sortedUniqueValues.map((value) => ({
217
281
  value,
218
282
  label: value,
219
283
  })),
220
- ]}"
284
+ ]}"
221
285
  .onChange="${(selectedValue) => {
222
286
  const filterValue = selectedValue.length === 0 ? undefined : selectedValue;
223
287
  this.column.setFilterValue(filterValue);
224
288
  this.requestUpdate(); // Aktualizácia komponentu po zmene
225
- }}"
226
- tabindex="0"
227
- @keydown="${this.handleTabSwitch}"
228
- .multiple="${multiselect}"
229
- ></lit-select>
289
+ }}"
290
+ tabindex="0"
291
+ @keydown="${this.handleTabSwitch}"
292
+ .multiple="${multiselect}"
293
+ ></lit-select>
230
294
  `;
231
295
  }
232
296
  renderNumberInput() {
233
- return html `
234
- <div class="custom-icon-wrapper">
235
- <input
236
- class="inputs"
237
- type="number"
297
+ return html `
298
+ <div class="custom-icon-wrapper">
299
+ <input
300
+ class="inputs"
301
+ type="number"
238
302
  @input=${(e) => {
239
303
  const value = e.target.value;
240
304
  this.debouncedSetNumberFilter(value);
241
- }}
242
- .value="${this.column?.getFilterValue() || ''}"
243
- tabindex="0"
244
- @keydown="${this.handleTabSwitch}"
245
- />
246
- ${this.renderClearButton()}
247
- </div>
305
+ }}
306
+ .value="${this.column?.getFilterValue() || ''}"
307
+ tabindex="0"
308
+ @keydown="${this.handleTabSwitch}"
309
+ />
310
+ ${this.renderClearButton()}
311
+ </div>
248
312
  `;
249
313
  }
250
- renderDateInput(time = false) {
251
- return html `
252
- <div class="range">
253
- <div class="custom-icon-wrapper" style="min-width: 70px">
254
- <input
255
- id="startDateInput"
256
- class="inputs customCell"
257
- type="text"
258
- placeholder="${msg('Od')}"
259
- value="${this.startDate || ''}"
260
- readonly
261
- @click=${() => this.switchDatePickers('start')}
262
- tabindex="0"
263
- @keydown="${this.handleTabSwitch}"
264
- />
265
- <div
266
- class="events-icon"
314
+ renderDateInput() {
315
+ return html `
316
+ <div class="range">
317
+ <div class="custom-icon-wrapper" style="min-width: 70px">
318
+ <input
319
+ id="startDateInput"
320
+ class="inputs customCell"
321
+ type="text"
322
+ placeholder="${msg('Od')}"
323
+ value="${this.startDate || ''}"
324
+ @input=${this.handleDateInputStart}
325
+ @click=${() => this.switchDatePickers('start')}
326
+ tabindex="0"
327
+ @keydown="${this.handleTabSwitch}"
328
+ />
329
+ <div
330
+ class="events-icon"
267
331
  @click=${() => {
268
332
  this.startDatePicker.show();
269
333
  this.switchDatePickers('start');
270
- }}
271
- >
272
- <lit-icon-button
273
- icon="events"
274
- size="small"
275
- variant="text"
276
- ></lit-icon-button>
277
- </div>
334
+ }}
335
+ >
336
+ <lit-icon-button
337
+ icon="events"
338
+ size="small"
339
+ variant="text"
340
+ ></lit-icon-button>
341
+ </div>
278
342
  ${this.startDate
279
- ? html `
280
- <div
281
- class="custom-icon-date"
343
+ ? html `
344
+ <div
345
+ class="custom-icon-date"
282
346
  @click=${() => {
283
347
  this.startDate = undefined;
284
348
  this.handleFilterDateChange(this.startDate, this.endDate);
285
349
  this.startDatePicker.clear();
286
- }}
287
- >
288
- <lit-icon-button
289
- icon="close"
290
- size="small"
291
- variant="text"
292
- ></lit-icon-button>
293
- </div>
350
+ }}
351
+ >
352
+ <lit-icon-button
353
+ icon="close"
354
+ size="small"
355
+ variant="text"
356
+ ></lit-icon-button>
357
+ </div>
294
358
  `
295
- : ''}
296
- </div>
297
-
298
- <div class="custom-icon-wrapper" style="min-width: 70px">
299
- <input
300
- id="endDateInput"
301
- class="inputs"
302
- type="text"
303
- placeholder="${msg('Do')}"
304
- value="${this.endDate || ''}"
305
- readonly
306
- @click=${() => this.switchDatePickers('end')}
307
- tabindex="0"
308
- @keydown="${this.handleTabSwitch}"
309
- />
310
- <div
311
- class="events-icon"
359
+ : ''}
360
+ </div>
361
+
362
+ <div class="custom-icon-wrapper" style="min-width: 70px">
363
+ <input
364
+ id="endDateInput"
365
+ class="inputs"
366
+ type="text"
367
+ placeholder="${msg('Do')}"
368
+ value="${this.endDate || ''}"
369
+ @click=${() => this.switchDatePickers('end')}
370
+ tabindex="0"
371
+ @keydown="${this.handleTabSwitch}"
372
+ @input=${this.handleDateInputEnd}
373
+ />
374
+ <div
375
+ class="events-icon"
312
376
  @click=${() => {
313
377
  this.endDatePicker.show();
314
378
  this.switchDatePickers('end');
315
- }}
316
- >
317
- <lit-icon-button
318
- icon="events"
319
- size="small"
320
- variant="text"
321
- ></lit-icon-button>
322
- </div>
379
+ }}
380
+ >
381
+ <lit-icon-button
382
+ icon="events"
383
+ size="small"
384
+ variant="text"
385
+ ></lit-icon-button>
386
+ </div>
323
387
  ${this.endDate
324
- ? html `
325
- <div
326
- class="custom-icon-date"
388
+ ? html `
389
+ <div
390
+ class="custom-icon-date"
327
391
  @click=${() => {
328
392
  this.endDate = undefined;
329
393
  this.handleFilterDateChange(this.startDate, this.endDate);
330
394
  this.endDatePicker.clear();
331
- }}
332
- >
333
- <lit-icon-button
334
- icon="close"
335
- size="small"
336
- variant="text"
337
- ></lit-icon-button>
338
- </div>
395
+ }}
396
+ >
397
+ <lit-icon-button
398
+ icon="close"
399
+ size="small"
400
+ variant="text"
401
+ ></lit-icon-button>
402
+ </div>
339
403
  `
340
- : ''}
341
- </div>
342
- </div>
404
+ : ''}
405
+ </div>
406
+ </div>
343
407
  `;
344
408
  }
345
409
  renderTextInput() {
346
- return html `
347
- <div class="custom-icon-wrapper">
348
- <input
349
- class="inputs"
350
- type="text"
410
+ return html `
411
+ <div class="custom-icon-wrapper">
412
+ <input
413
+ class="inputs"
414
+ type="text"
351
415
  @input=${(e) => {
352
416
  const value = e.target.value;
353
417
  this.debouncedSetTextFilter(value);
354
- }}
355
- .value="${this.column?.getFilterValue() || ''}"
356
- tabindex="0"
357
- @keydown="${this.handleTabSwitch}"
358
- />
359
- ${this.renderClearButton()}
360
- </div>
418
+ }}
419
+ .value="${this.column?.getFilterValue() || ''}"
420
+ tabindex="0"
421
+ @keydown="${this.handleTabSwitch}"
422
+ />
423
+ ${this.renderClearButton()}
424
+ </div>
361
425
  `;
362
426
  }
363
427
  renderClearButton(rangeIndex) {
364
- return html `
428
+ return html `
365
429
  ${rangeIndex === undefined
366
430
  ? this.column?.getFilterValue()
367
- ? html `
368
- <div
369
- class="custom-icon"
431
+ ? html `
432
+ <div
433
+ class="custom-icon"
370
434
  @click=${() => {
371
435
  this.column?.setFilterValue(''); // Vymaže textový filter
372
436
  this.requestUpdate();
373
- }}
374
- style="cursor: pointer; pointer-events: auto"
375
- >
376
- <lit-icon-button
377
- icon="close"
378
- size="small"
379
- variant="text"
380
- ></lit-icon-button>
381
- </div>
437
+ }}
438
+ style="cursor: pointer; pointer-events: auto"
439
+ >
440
+ <lit-icon-button
441
+ icon="close"
442
+ size="small"
443
+ variant="text"
444
+ ></lit-icon-button>
445
+ </div>
382
446
  `
383
447
  : ''
384
448
  : this.column?.getFilterValue()?.[rangeIndex] !== undefined
385
- ? html `
386
- <div
387
- class="custom-icon"
449
+ ? html `
450
+ <div
451
+ class="custom-icon"
388
452
  @click=${() => {
389
453
  const currentValues = this.column.getFilterValue() || [];
390
454
  currentValues[rangeIndex] = undefined; // Vymaž hodnotu pre daný index
391
455
  this.column.setFilterValue(currentValues);
392
456
  this.requestUpdate();
393
- }}
394
- style="cursor: pointer; pointer-events: auto"
395
- xmlns="http://www.w3.org/1999/html"
396
- >
397
- <lit-icon-button
398
- icon="close"
399
- size="small"
400
- variant="text"
401
- ></lit-icon-button>
402
- </div>
457
+ }}
458
+ style="cursor: pointer; pointer-events: auto"
459
+ xmlns="http://www.w3.org/1999/html"
460
+ >
461
+ <lit-icon-button
462
+ icon="close"
463
+ size="small"
464
+ variant="text"
465
+ ></lit-icon-button>
466
+ </div>
403
467
  `
404
- : ''}
468
+ : ''}
405
469
  `;
406
470
  }
407
471
  };
408
- FilterInputs.styles = css `
409
- .range {
410
- display: flex;
411
- gap: 0.3125rem;
412
- }
413
-
414
- input {
415
- padding: 0.5rem 0.75rem 0.5rem 0.75rem;
416
- border: 0.0625rem solid var(--color-divider, #d0d3db);
417
- border-radius: 0.25rem;
418
- min-width: 0;
419
- width: -webkit-fill-available;
420
- }
421
-
422
- input[type='number']::-webkit-inner-spin-button,
423
- input[type='number']::-webkit-outer-spin-button {
424
- -webkit-appearance: none;
425
- margin: 0;
426
- }
427
-
428
- input:hover {
429
- border: 0.0625rem solid var(--color-secondary-main, #111827);
430
- }
431
-
432
- input:focus {
433
- outline: none;
434
- border: 0.0625rem solid var(--color-secondary-dark, #010204);
435
- }
436
-
437
- select {
438
- width: -webkit-fill-available;
439
- padding: 0.5rem 0.75rem 0.5rem 0.75rem;
440
- border: 0.0625rem solid var(--color-divider, #d0d3db);
441
- border-radius: 0.25rem;
442
- appearance: none;
443
- -webkit-appearance: none; /* pre Safari */
444
- -moz-appearance: none; /* pre Firefox */
445
- }
446
-
447
- .custom-icon-wrapper {
448
- position: relative;
449
- width: 100%;
450
- display: inline-block;
451
- }
452
-
453
- .custom-icon-wrapper .custom-icon {
454
- display: none;
455
- position: absolute;
456
- right: 10px;
457
- top: 50%;
458
- transform: translateY(-50%);
459
- cursor: pointer;
460
- pointer-events: auto;
461
- background: var(--background-paper);
462
- }
463
-
464
- .custom-icon-wrapper:hover .custom-icon {
465
- display: block;
466
- }
467
-
468
- .custom-icon-wrapper .custom-icon-date {
469
- display: none;
470
- position: absolute;
471
- right: 30px;
472
- top: 50%;
473
- transform: translateY(-50%);
474
- cursor: pointer;
475
- pointer-events: auto;
476
- background: var(--background-paper);
477
- }
478
-
479
- .custom-icon-wrapper:hover .custom-icon-date {
480
- display: inline-block;
481
- }
482
-
483
- .custom-icon-wrapper .events-icon {
484
- position: absolute;
485
- right: 10px;
486
- top: 50%;
487
- transform: translateY(-50%);
488
- z-index: 0;
489
- cursor: pointer;
490
- pointer-events: auto;
491
- background: var(--background-paper);
492
- }
493
-
494
- .custom-icon-wrapper select:focus {
495
- border: 0.0625rem solid var(--color-secondary-dark, #010204) !important;
496
- outline: none;
497
- }
498
-
499
- select:hover {
500
- border: 0.0625rem solid var(--color-secondary-main, #111827);
501
- }
502
- .customCell {
503
- --adp-cell-background-color-selected: red;
504
- }
472
+ FilterInputs.styles = css `
473
+ .range {
474
+ display: flex;
475
+ gap: 0.3125rem;
476
+ }
477
+
478
+ input {
479
+ padding: 0.5rem 0.75rem 0.5rem 0.75rem;
480
+ border: 0.0625rem solid var(--color-divider, #d0d3db);
481
+ border-radius: 0.25rem;
482
+ min-width: 0;
483
+ width: -webkit-fill-available;
484
+ }
485
+
486
+ input[type='number']::-webkit-inner-spin-button,
487
+ input[type='number']::-webkit-outer-spin-button {
488
+ -webkit-appearance: none;
489
+ margin: 0;
490
+ }
491
+
492
+ input:hover {
493
+ border: 0.0625rem solid var(--color-secondary-main, #111827);
494
+ }
495
+
496
+ input:focus {
497
+ outline: none;
498
+ border: 0.0625rem solid var(--color-secondary-dark, #010204);
499
+ }
500
+
501
+ select {
502
+ width: -webkit-fill-available;
503
+ padding: 0.5rem 0.75rem 0.5rem 0.75rem;
504
+ border: 0.0625rem solid var(--color-divider, #d0d3db);
505
+ border-radius: 0.25rem;
506
+ appearance: none;
507
+ -webkit-appearance: none; /* pre Safari */
508
+ -moz-appearance: none; /* pre Firefox */
509
+ }
510
+
511
+ .custom-icon-wrapper {
512
+ position: relative;
513
+ width: 100%;
514
+ display: inline-block;
515
+ }
516
+
517
+ .custom-icon-wrapper .custom-icon {
518
+ display: none;
519
+ position: absolute;
520
+ right: 10px;
521
+ top: 50%;
522
+ transform: translateY(-50%);
523
+ cursor: pointer;
524
+ pointer-events: auto;
525
+ background: var(--background-paper);
526
+ }
527
+
528
+ .custom-icon-wrapper:hover .custom-icon {
529
+ display: block;
530
+ }
531
+
532
+ .custom-icon-wrapper .custom-icon-date {
533
+ display: none;
534
+ position: absolute;
535
+ right: 30px;
536
+ top: 50%;
537
+ transform: translateY(-50%);
538
+ cursor: pointer;
539
+ pointer-events: auto;
540
+ background: var(--background-paper);
541
+ }
542
+
543
+ .custom-icon-wrapper:hover .custom-icon-date {
544
+ display: inline-block;
545
+ }
546
+
547
+ .custom-icon-wrapper .events-icon {
548
+ position: absolute;
549
+ right: 10px;
550
+ top: 50%;
551
+ transform: translateY(-50%);
552
+ z-index: 0;
553
+ cursor: pointer;
554
+ pointer-events: auto;
555
+ background: var(--background-paper);
556
+ }
557
+
558
+ .custom-icon-wrapper select:focus {
559
+ border: 0.0625rem solid var(--color-secondary-dark, #010204) !important;
560
+ outline: none;
561
+ }
562
+
563
+ select:hover {
564
+ border: 0.0625rem solid var(--color-secondary-main, #111827);
565
+ }
566
+ .customCell {
567
+ --adp-cell-background-color-selected: red;
568
+ }
505
569
  `;
506
570
  __decorate([
507
571
  property({ type: Object })