inviton-powerduck 0.0.182 → 0.0.184

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.
@@ -68,7 +68,31 @@ function fromDateImpl(this: typeof Temporal.PlainDateTime, date: Date): Temporal
68
68
 
69
69
  export const utcEpochMilliseconds = Symbol('utcEpochMilliseconds');
70
70
  function utcEpochMillisecondsImpl(this: Temporal.PlainDateTime): number {
71
- return this.toZonedDateTime('UTC').epochMilliseconds;
71
+ if (this == null) {
72
+ return null;
73
+ }
74
+
75
+ let y = this.year;
76
+ let m = this.month;
77
+ if (m <= 2) {
78
+ y -= 1;
79
+ m += 12;
80
+ }
81
+
82
+ // Algorithm from Howard Hinnant's civil date conversion
83
+ const era = Math.floor(y / 400);
84
+ const yoe = y - era * 400;
85
+ const doy = Math.floor((153 * (m - 3) + 2) / 5) + this.day - 1;
86
+ const doe = yoe * 365 + Math.floor(yoe / 4) - Math.floor(yoe / 100) + doy;
87
+ const daysSinceEpoch = era * 146097 + doe - 719468;
88
+
89
+ const msOfDay
90
+ = this.hour * 3_600_000
91
+ + this.minute * 60_000
92
+ + this.second * 1_000
93
+ + (this.millisecond ?? 0);
94
+
95
+ return daysSinceEpoch * 86_400_000 + msOfDay;
72
96
  }
73
97
 
74
98
  export const toJsDate = Symbol('toJsDate');
@@ -38,6 +38,43 @@ export default class TemporalUtils {
38
38
  }
39
39
 
40
40
  static fromEpochMs(val: number): Temporal.PlainDateTime {
41
- return Temporal.Instant.fromEpochMilliseconds(val).toZonedDateTimeISO('UTC').toPlainDateTime();
41
+ const MS_PER_DAY = 86_400_000;
42
+
43
+ let daysSinceEpoch = Math.floor(val / MS_PER_DAY);
44
+ let msInDay = val - daysSinceEpoch * MS_PER_DAY;
45
+ if (msInDay < 0) {
46
+ msInDay += MS_PER_DAY;
47
+ daysSinceEpoch -= 1;
48
+ }
49
+
50
+ // Convert daysSinceEpoch → Y-M-D
51
+ const z = daysSinceEpoch + 719468;
52
+ const era = Math.floor(z / 146097);
53
+ const doe = z - era * 146097;
54
+ const yoe = Math.floor((doe - Math.floor(doe / 1460) + Math.floor(doe / 36524) - Math.floor(doe / 146096)) / 365);
55
+ const y = yoe + era * 400;
56
+ const doy = doe - (365 * yoe + Math.floor(yoe / 4) - Math.floor(yoe / 100));
57
+ const mp = Math.floor((5 * doy + 2) / 153);
58
+ const day = doy - Math.floor((153 * mp + 2) / 5) + 1;
59
+ const month = mp + (mp < 10 ? 3 : -9);
60
+ const year = y + (month <= 2 ? 1 : 0);
61
+
62
+ // Compute time from milliseconds in day
63
+ const hour = Math.floor(msInDay / 3_600_000);
64
+ const minute = Math.floor((msInDay % 3_600_000) / 60_000);
65
+ const second = Math.floor((msInDay % 60_000) / 1000);
66
+ const millisecond = msInDay % 1000;
67
+
68
+ return new Temporal.PlainDateTime(
69
+ year,
70
+ month,
71
+ day,
72
+ hour,
73
+ minute,
74
+ second,
75
+ millisecond,
76
+ 0,
77
+ 0,
78
+ );
42
79
  }
43
80
  }
@@ -1,9 +1,9 @@
1
1
  import type { DropdownButtonItemArgs } from '../dropdown-button/dropdown-button-item';
2
2
  import type { FormItemWrapperArgs, MarginType } from '../form/form-item-wrapper';
3
- import { globalState } from '../../app/global-state';
4
3
  import Sortable from 'sortablejs';
5
4
  import { h as _h, h, render, VNodeChild } from 'vue';
6
5
  import { Prop, toNative } from 'vue-facing-decorator';
6
+ import { globalState } from '../../app/global-state';
7
7
  import PowerduckState from '../../app/powerduck-state';
8
8
  import TsxComponent, { Component } from '../../app/vuetsx';
9
9
  import { remove } from '../../common/extensions/array-extensions';
@@ -327,16 +327,30 @@ class DropdownListComponent extends TsxComponent<DropdownListArgs> implements Dr
327
327
  return retArr;
328
328
  }
329
329
 
330
- getMobileSelectionText(): string {
330
+ getMobileSelectionText(): { text: string; placeholder: boolean } {
331
331
  const opts = this.getOptions();
332
332
  const selectedItems = this.getSelectedItems();
333
333
 
334
334
  if (selectedItems.length > 2 || (this.mobileShortMode == true && selectedItems.length > 0)) {
335
- return PowerduckState.getResourceValue('itemsOutOfArray').replace('{0}', selectedItems.length.toString()).replace('{1}', opts.length.toString());
335
+ return {
336
+ text: PowerduckState.getResourceValue('itemsOutOfArray').replace('{0}', selectedItems.length.toString()).replace('{1}', opts.length.toString()),
337
+ placeholder: false,
338
+ };
336
339
  } else if (selectedItems.length == 1) {
337
- return selectedItems[0].text;
340
+ return {
341
+ placeholder: false,
342
+ text: selectedItems[0].text,
343
+ };
344
+ } else if ((selectedItems == null || selectedItems.length == 0) && this.placeholder?.length > 0) {
345
+ return {
346
+ placeholder: true,
347
+ text: this.placeholder,
348
+ };
338
349
  } else {
339
- return selectedItems.map(p => p.text).join(', ');
350
+ return {
351
+ placeholder: false,
352
+ text: selectedItems.map(p => p.text).join(', '),
353
+ };
340
354
  }
341
355
  }
342
356
 
@@ -418,21 +432,14 @@ class DropdownListComponent extends TsxComponent<DropdownListArgs> implements Dr
418
432
  }
419
433
 
420
434
  renderMobileComponent(h) {
421
- let selectedText = this.getMobileSelectionText();
422
- if (selectedText == null || selectedText.length == 0) {
423
- selectedText = this.placeholder || '';
424
- }
425
-
426
- if (isNullOrEmpty(selectedText) && this.multiselect == true) {
427
- selectedText = `[${PowerduckState.getResourceValue('all')}]`;
428
- }
435
+ const selText = this.getMobileSelectionText();
429
436
 
430
437
  return (
431
438
  <span ref="mobileModeRoot" onClick={e => this.showMobilePicker(h)} class={`select2 select2-container select2-container--default s2-pseudo maxwidth-input ${this.getRootBaseCssClass()}`} dir="ltr">
432
439
  <span class="selection">
433
440
  <span class="select2-selection select2-selection--single" role="combobox" aria-haspopup="true">
434
- <span class="select2-selection__rendered mbl-ddl-text" title={selectedText} style="font-size: inherit;">
435
- {selectedText}
441
+ <span class={`select2-selection__rendered mbl-ddl-text ${selText.placeholder ? 'mbl-ddl-placeholder' : 'mbl-ddl-selval'}`} title={selText.text} style="font-size: inherit;">
442
+ {selText.text}
436
443
  </span>
437
444
  <span class="select2-selection__arrow" role="presentation">
438
445
  <b role="presentation"></b>
@@ -449,10 +456,10 @@ class DropdownListComponent extends TsxComponent<DropdownListArgs> implements Dr
449
456
  const self = this;
450
457
  return (row) => {
451
458
  const retVal = $(`<span class="s2-ri-withtb">${row.text
452
- }<button class="s2-trailing-button ${self.trailingButton.cssClass || ''
453
- } btn-sm">${self.trailingButton.icon != null ? `<i class="${self.trailingButton.icon}"></i> ` : ''
454
- }${self.trailingButton.text || ''
455
- }</button></span>`);
459
+ }<button class="s2-trailing-button ${self.trailingButton.cssClass || ''
460
+ } btn-sm">${self.trailingButton.icon != null ? `<i class="${self.trailingButton.icon}"></i> ` : ''
461
+ }${self.trailingButton.text || ''
462
+ }</button></span>`);
456
463
  retVal.find('button').click((e) => {
457
464
  try {
458
465
  clearTimeout(self.preventDefaultTimeout);
@@ -543,10 +550,10 @@ class DropdownListComponent extends TsxComponent<DropdownListArgs> implements Dr
543
550
  useListviewBuilder: false,
544
551
  formatSelection: this.customRenderSelectionResult != null
545
552
  ? this.handleCustomRenderResult(
546
- h,
547
- this.customRenderSelectionResult,
548
- 'mobile',
549
- )
553
+ h,
554
+ this.customRenderSelectionResult,
555
+ 'mobile',
556
+ )
550
557
  : null,
551
558
  formatResult: this.getCustomFormatOptions(h, 'mobile'),
552
559
  onItemSelected: (items, exclusivity) => {
@@ -566,16 +573,17 @@ class DropdownListComponent extends TsxComponent<DropdownListArgs> implements Dr
566
573
 
567
574
  setMobilePickerInputText(h: any, items: DropdownDisplayArgs[]): void {
568
575
  this.$nextTick(() => {
569
- let selectedText = this.getMobileSelectionText();
576
+ const textVal = this.getMobileSelectionText();
570
577
  const textContext = $(this.$el).find('.mbl-ddl-text') as any;
571
- const isPlaceholder = (items || []).length == 0;
572
-
573
- if (isNullOrEmpty(selectedText)) {
574
- selectedText = this.placeholder;
575
- }
578
+ const isPlaceholder = textVal.placeholder;
579
+ const selectedText = textVal.text;
576
580
 
577
- if (isNullOrEmpty(selectedText) && this.multiselect == true) {
578
- selectedText = `[${PowerduckState.getResourceValue('all')}]`;
581
+ if (isPlaceholder) {
582
+ textContext.text(selectedText);
583
+ textContext.addClass('mbl-ddl-placeholder').removeClass('mbl-ddl-selval');
584
+ return;
585
+ } else {
586
+ textContext.removeClass('mbl-ddl-placeholder').addClass('mbl-ddl-selval');
579
587
  }
580
588
 
581
589
  if (this.customRenderSelectionResult == null) {
@@ -1,3 +1,5 @@
1
+ /* eslint-disable no-useless-call */
2
+ /* eslint-disable ts/no-this-alias */
1
3
  import type { DropdownButtonItemArgs } from '../dropdown-button/dropdown-button-item';
2
4
  import type { FormItemWrapperArgs, MarginType } from '../form/form-item-wrapper';
3
5
  import { Temporal } from '@js-temporal/polyfill';
@@ -47,6 +49,7 @@ interface DaterangePickerArgs extends FormItemWrapperArgs {
47
49
  minDate?: Temporal.PlainDateTime;
48
50
  alwaysOpen?: boolean;
49
51
  singleDate?: boolean;
52
+ pickerRootCssClass?: string
50
53
  maxDate?: Temporal.PlainDateTime;
51
54
  prevIcon?: string;
52
55
  nextIcon?: string;
@@ -71,6 +74,7 @@ export interface DaterangeChangedArgs {
71
74
  }
72
75
 
73
76
  const DATE_FORMAT_FOR_RANGE_PICKER = (() => {
77
+ // eslint-disable-next-line no-restricted-syntax
74
78
  const dummyDate = new Date(Date.UTC(
75
79
  2022,
76
80
  11,
@@ -101,6 +105,7 @@ class DaterangePickerComponent extends TsxComponent<DaterangePickerArgs> impleme
101
105
  @Prop() inputReadOnly?: boolean;
102
106
  @Prop() alwaysOpen!: boolean;
103
107
  @Prop() singleDate!: boolean;
108
+ @Prop() pickerRootCssClass!: string
104
109
  @Prop() wrap!: boolean;
105
110
  @Prop() hint: string;
106
111
  @Prop() appendIcon: string;
@@ -239,6 +244,7 @@ class DaterangePickerComponent extends TsxComponent<DaterangePickerArgs> impleme
239
244
  singleMonth: singleMonth == true,
240
245
  alwaysOpen: alwaysOpen == true,
241
246
  singleDate: this.singleDate == true,
247
+ rootCssClass: this.pickerRootCssClass,
242
248
  startOfWeek: DateInputHelper.getStartOfWeek() == 0 ? 'sunday' : 'monday',
243
249
  separator: self.getSeparator(),
244
250
  hideYearInMonthName: this.hideYearInMonthName == true,
@@ -253,9 +259,7 @@ class DaterangePickerComponent extends TsxComponent<DaterangePickerArgs> impleme
253
259
  maxDaysTooltip: this.maxDaysTooltip,
254
260
  calendarPlacement,
255
261
  container,
256
- displayMode: () => {
257
- return 'below-input';
258
- },
262
+ displayMode: () => 'below-input',
259
263
  leftOffset: () => {
260
264
  if (this.prependIcon == null) {
261
265
  return 0;
@@ -169,7 +169,7 @@
169
169
  height: 20px;
170
170
  }
171
171
 
172
- .date-range-picker-wrapper .month-wrapper > table {
172
+ .date-range-picker-wrapper .month-wrapper>table {
173
173
  padding-top: 15px;
174
174
  }
175
175
 
@@ -557,7 +557,7 @@
557
557
  border-right: 0.667px solid #dfe3f1;
558
558
  }
559
559
 
560
- .date-range-picker-wrapper .month-wrapper table td > div {
560
+ .date-range-picker-wrapper .month-wrapper table td>div {
561
561
  background-color: inherit !important;
562
562
  line-height: 1.9;
563
563
  margin-left: 5px;
@@ -626,21 +626,8 @@
626
626
  }
627
627
 
628
628
  .date-range-picker-wrapper table .caption,
629
- .daterangepicker-modal
630
- .date-range-picker-root.inline-wrapper.drpc-inline
631
- .month-wrapper
632
- .month-wrapper-inner-common
633
- table
634
- th
635
- > span.select-wrapper,
636
- .daterangepicker-modal
637
- .date-range-picker-root.inline-wrapper.drpc-inline
638
- .month-wrapper
639
- .month-wrapper-inner-common
640
- table
641
- th
642
- > span.select-wrapper
643
- select {
629
+ .daterangepicker-modal .date-range-picker-root.inline-wrapper.drpc-inline .month-wrapper .month-wrapper-inner-common table th>span.select-wrapper,
630
+ .daterangepicker-modal .date-range-picker-root.inline-wrapper.drpc-inline .month-wrapper .month-wrapper-inner-common table th>span.select-wrapper select {
644
631
  height: 40px;
645
632
  color: #393562;
646
633
  height: 36px;
@@ -667,65 +654,25 @@
667
654
 
668
655
  .daterangepicker-dummy-row-item {
669
656
  visibility: hidden;
670
- pointer-events: none;
671
657
  }
672
658
 
673
- .daterangepicker-modal .date-range-picker-root.inline-wrapper.drpc-inline .month-wrapper .month-wrapper-inner-common {
674
- }
659
+ .daterangepicker-modal .date-range-picker-root.inline-wrapper.drpc-inline .month-wrapper .month-wrapper-inner-common {}
675
660
 
676
- .daterangepicker-modal
677
- .date-range-picker-root.inline-wrapper.drpc-inline
678
- .month-wrapper
679
- .month-wrapper-inner-common
680
- table {
661
+ .daterangepicker-modal .date-range-picker-root.inline-wrapper.drpc-inline .month-wrapper .month-wrapper-inner-common table {
681
662
  width: 100%;
682
663
  }
683
664
 
684
- .daterangepicker-modal
685
- .date-range-picker-root.inline-wrapper.drpc-inline
686
- .month-wrapper
687
- .month-wrapper-inner-common
688
- table
689
- td,
690
- .daterangepicker-modal
691
- .date-range-picker-root.inline-wrapper.drpc-inline
692
- .month-wrapper
693
- .month-wrapper-inner-common
694
- table
695
- th {
665
+ .daterangepicker-modal .date-range-picker-root.inline-wrapper.drpc-inline .month-wrapper .month-wrapper-inner-common table td,
666
+ .daterangepicker-modal .date-range-picker-root.inline-wrapper.drpc-inline .month-wrapper .month-wrapper-inner-common table th {
696
667
  width: 99999px;
697
668
  text-align: center;
698
669
  font-weight: 400;
699
670
  }
700
671
 
701
- .daterangepicker-modal
702
- .date-range-picker-root.inline-wrapper.drpc-inline
703
- .month-wrapper
704
- .month-wrapper-inner-common
705
- table
706
- td
707
- > div,
708
- .daterangepicker-modal
709
- .date-range-picker-root.inline-wrapper.drpc-inline
710
- .month-wrapper
711
- .month-wrapper-inner-common
712
- table
713
- th
714
- > div,
715
- .daterangepicker-modal
716
- .date-range-picker-root.inline-wrapper.drpc-inline
717
- .month-wrapper
718
- .month-wrapper-inner-common
719
- table
720
- td
721
- > span,
722
- .daterangepicker-modal
723
- .date-range-picker-root.inline-wrapper.drpc-inline
724
- .month-wrapper
725
- .month-wrapper-inner-common
726
- table
727
- th
728
- > span {
672
+ .daterangepicker-modal .date-range-picker-root.inline-wrapper.drpc-inline .month-wrapper .month-wrapper-inner-common table td>div,
673
+ .daterangepicker-modal .date-range-picker-root.inline-wrapper.drpc-inline .month-wrapper .month-wrapper-inner-common table th>div,
674
+ .daterangepicker-modal .date-range-picker-root.inline-wrapper.drpc-inline .month-wrapper .month-wrapper-inner-common table td>span,
675
+ .daterangepicker-modal .date-range-picker-root.inline-wrapper.drpc-inline .month-wrapper .month-wrapper-inner-common table th>span {
729
676
  margin: 0;
730
677
  margin: auto;
731
678
  font-size: 14px;
@@ -748,4 +695,4 @@
748
695
  bottom: 0;
749
696
  height: auto !important;
750
697
  opacity: 0.001;
751
- }
698
+ }
@@ -386,6 +386,7 @@ import { globalState } from '../../../../app/global-state';
386
386
  // attribute bags for day cells are unknown
387
387
  dayDivAttrs: any[];
388
388
  dayTdAttrs: any[];
389
+ rootCssClass: string
389
390
 
390
391
  selectForward: boolean;
391
392
  selectBackward: boolean;
@@ -2551,7 +2552,7 @@ import { globalState } from '../../../../app/global-state';
2551
2552
  }
2552
2553
 
2553
2554
  function createDom() {
2554
- let html = '<div class="date-range-picker-root"><div class="drpc-modal-close-button">x</div><div class="date-range-picker-wrapper';
2555
+ let html = '<div class="date-range-picker-root ' + (opt.rootCssClass || '') + '"><div class="drpc-modal-close-button">x</div><div class="date-range-picker-wrapper';
2555
2556
  if (opt.extraClass) { html += ` ${opt.extraClass} `; }
2556
2557
 
2557
2558
  if (opt.singleDate) { html += ' single-date '; }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "inviton-powerduck",
3
3
  "type": "module",
4
- "version": "0.0.182",
4
+ "version": "0.0.184",
5
5
  "files": [
6
6
  "app/",
7
7
  "common/",