@refinitiv-ui/elements 7.9.1 → 7.10.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [7.10.1](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/elements@7.10.0...@refinitiv-ui/elements@7.10.1) (2024-01-02)
7
+
8
+ **Note:** Version bump only for package @refinitiv-ui/elements
9
+
10
+ # [7.10.0](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/elements@7.9.1...@refinitiv-ui/elements@7.10.0) (2023-12-12)
11
+
12
+ ### Bug Fixes
13
+
14
+ - **combo-box:** cannot set value in free text when data is empty ([#1046](https://github.com/Refinitiv/refinitiv-ui/issues/1046)) ([abdc6fc](https://github.com/Refinitiv/refinitiv-ui/commit/abdc6fca9c5f0991d0fdc69697624fabcdb81cdb))
15
+ - resolve SonarCloud findings ([#1020](https://github.com/Refinitiv/refinitiv-ui/issues/1020)) ([81f65f9](https://github.com/Refinitiv/refinitiv-ui/commit/81f65f90f7c2fb69bbf68ec9e0d1f672618ff734))
16
+ - voiceover and safari does not annouce selected value ([#1025](https://github.com/Refinitiv/refinitiv-ui/issues/1025)) ([21a946d](https://github.com/Refinitiv/refinitiv-ui/commit/21a946dfd2e509611364cca4748070b7baedf4dc))
17
+
18
+ ### Features
19
+
20
+ - **datetime-picker:** cascade custom cell slot to calendar ([#1037](https://github.com/Refinitiv/refinitiv-ui/issues/1037)) ([a558478](https://github.com/Refinitiv/refinitiv-ui/commit/a55847877f11a8e4d4cf8dae7a8bb97e8d0eb968))
21
+ - **slider:** support custom label ([#1021](https://github.com/Refinitiv/refinitiv-ui/issues/1021)) ([e2004dd](https://github.com/Refinitiv/refinitiv-ui/commit/e2004ddd95be2c62f9957fd6465c18c68f879042)), closes [#1022](https://github.com/Refinitiv/refinitiv-ui/issues/1022)
22
+
6
23
  ## [7.9.1](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/elements@7.9.0...@refinitiv-ui/elements@7.9.1) (2023-11-13)
7
24
 
8
25
  ### Bug Fixes
@@ -25,13 +25,13 @@ custom rendering, pagination, asynchronous data request, etc.
25
25
 
26
26
  ## Methods
27
27
 
28
- | Method | Type | Description |
29
- |----------------------|----------------------|--------------------------------------------------|
30
- | `onInputBlur` | `(event: any): void` | Run when input has lost focus<br /><br />**event**: by default `blur` event is listened |
31
- | `onInputFocus` | `(event: any): void` | Run when input received focus<br /><br />**event**: by default `focus` event is listened |
32
- | `onInputKeyDown` | `(event: any): void` | Run when input key down event has happened<br /><br />**event**: by default `keydown` event is listened |
33
- | `onInputValueChange` | `(event: any): void` | Run when attach target value changes.<br /><br />**event**: by default `value-changed` event is listened |
34
- | `refit` | `(): void` | Set the width |
28
+ | Method | Type | Description |
29
+ |----------------------|--------------------------------|--------------------------------------------------|
30
+ | `onInputBlur` | `(event: FocusEvent): void` | Run when input has lost focus<br /><br />**event**: by default `blur` event is listened |
31
+ | `onInputFocus` | `(event: FocusEvent): void` | Run when input received focus<br /><br />**event**: by default `focus` event is listened |
32
+ | `onInputKeyDown` | `(event: KeyboardEvent): void` | Run when input key down event has happened<br /><br />**event**: by default `keydown` event is listened |
33
+ | `onInputValueChange` | `(event: Event): void` | Run when attach target value changes.<br /><br />**event**: by default `value-changed` event is listened |
34
+ | `refit` | `(): void` | Set the width |
35
35
 
36
36
  ## Events
37
37
 
@@ -196,7 +196,7 @@
196
196
  ],
197
197
  "slots": [
198
198
  {
199
- "name": "yyyy-mm-dd",
199
+ "name": "yyyy-MM-dd",
200
200
  "description": "Adds slotted content into the specific date which use value in `ISO8601` date string format as a key e.g. `yyyy-MM-dd`, `yyyy-MM` and `yyyy`"
201
201
  },
202
202
  {
@@ -34,4 +34,4 @@ Standard calendar element
34
34
  | Name | Description |
35
35
  |--------------|--------------------------------------------------|
36
36
  | `footer` | Adds slotted content into the footer of the calendar control |
37
- | `yyyy-mm-dd` | Adds slotted content into the specific date which use value in `ISO8601` date string format as a key e.g. `yyyy-MM-dd`, `yyyy-MM` and `yyyy` |
37
+ | `yyyy-MM-dd` | Adds slotted content into the specific date which use value in `ISO8601` date string format as a key e.g. `yyyy-MM-dd`, `yyyy-MM` and `yyyy` |
@@ -22,7 +22,7 @@ export type { CalendarFilter, BeforeCellRenderEvent };
22
22
  * @attr {boolean} disabled - Set disabled state
23
23
  * @prop {boolean} [disabled=false] - Set disabled state
24
24
  *
25
- * @slot yyyy-mm-dd - Adds slotted content into the specific date which use value in `ISO8601` date string format as a key e.g. `yyyy-MM-dd`, `yyyy-MM` and `yyyy`
25
+ * @slot yyyy-MM-dd - Adds slotted content into the specific date which use value in `ISO8601` date string format as a key e.g. `yyyy-MM-dd`, `yyyy-MM` and `yyyy`
26
26
  * @slot footer - Adds slotted content into the footer of the calendar control
27
27
  */
28
28
  export declare class Calendar extends ControlElement implements MultiValue {
@@ -29,7 +29,7 @@ export { CalendarRenderView };
29
29
  * @attr {boolean} disabled - Set disabled state
30
30
  * @prop {boolean} [disabled=false] - Set disabled state
31
31
  *
32
- * @slot yyyy-mm-dd - Adds slotted content into the specific date which use value in `ISO8601` date string format as a key e.g. `yyyy-MM-dd`, `yyyy-MM` and `yyyy`
32
+ * @slot yyyy-MM-dd - Adds slotted content into the specific date which use value in `ISO8601` date string format as a key e.g. `yyyy-MM-dd`, `yyyy-MM` and `yyyy`
33
33
  * @slot footer - Adds slotted content into the footer of the calendar control
34
34
  */
35
35
  let Calendar = class Calendar extends ControlElement {
@@ -1154,7 +1154,8 @@ let Calendar = class Calendar extends ControlElement {
1154
1154
  cancelable: false,
1155
1155
  composed: true,
1156
1156
  detail: {
1157
- cell: calendarCell
1157
+ cell: calendarCell,
1158
+ calendar: this
1158
1159
  }
1159
1160
  });
1160
1161
  this.dispatchEvent(event);
@@ -1,5 +1,6 @@
1
1
  import { CellIndex } from '@refinitiv-ui/utils/navigation.js';
2
2
  import { CalendarRenderView } from './constants.js';
3
+ import type { Calendar } from './index.js';
3
4
  export interface CellSelectionModel {
4
5
  selected?: boolean;
5
6
  range?: boolean;
@@ -48,4 +49,5 @@ export type CalendarCell = {
48
49
  };
49
50
  export type BeforeCellRenderEvent = CustomEvent<{
50
51
  cell: CalendarCell;
52
+ calendar: Calendar;
51
53
  }>;
@@ -421,7 +421,8 @@ let Chart = class Chart extends BasicElement {
421
421
  * @returns The value as a number, or, undefined if NaN.
422
422
  */
423
423
  cssVarAsNumber(...args) {
424
- const result = Number(this.getComputedVariable(...args).replace(/\D/g, ''));
424
+ const cssComputeVar = this.getComputedVariable(...args);
425
+ const result = parseFloat(cssComputeVar);
425
426
  return isNaN(result) ? undefined : result;
426
427
  }
427
428
  /**
@@ -242,6 +242,10 @@ let ComboBox = class ComboBox extends FormFieldElement {
242
242
  this.values = [value];
243
243
  }
244
244
  else {
245
+ if (this.freeText && this.freeTextValue !== value) {
246
+ this.freeTextValue = value;
247
+ this.requestUpdate();
248
+ }
245
249
  this.cachedValue = value;
246
250
  }
247
251
  }
@@ -37,10 +37,10 @@ A form control element for datetime input.
37
37
 
38
38
  ## Methods
39
39
 
40
- | Method | Type | Description |
41
- |-----------------|----------------------------------|--------------------------------------------------|
42
- | `checkValidity` | `(): boolean` | Returns true if an input element contains valid data. |
43
- | `willUpdate` | `(changedProperties: any): void` | Updates the element<br /><br />**changedProperties**: Properties that has changed |
40
+ | Method | Type | Description |
41
+ |-----------------|---------------------------------------------|--------------------------------------------------|
42
+ | `checkValidity` | `(): boolean` | Returns true if an input element contains valid data. |
43
+ | `willUpdate` | `(changedProperties: PropertyValues): void` | Updates the element<br /><br />**changedProperties**: Properties that has changed |
44
44
 
45
45
  ## Events
46
46
 
@@ -348,6 +348,18 @@
348
348
  {
349
349
  "name": "left",
350
350
  "description": "Slot to add custom contents at the left of popup"
351
+ },
352
+ {
353
+ "name": "yyyy-MM-dd",
354
+ "description": "Slot to add custom contents on any date cells e.g. `2023-01-01`. Use `yyyy` or `yyyy-MM` if the cell is year or month."
355
+ },
356
+ {
357
+ "name": "from-yyyy-MM-dd",
358
+ "description": "Slot to add custom contents on any date cells of left calendar in `duplex` mode e.g. `from-2023-01-01`. Use `from-yyyy` or `from-yyyy-MM` if the cell is year or month"
359
+ },
360
+ {
361
+ "name": "to-yyyy-MM-dd",
362
+ "description": "Slot to add custom contents on any date cells of right calendar in `duplex` mode e.g. `to-2023-01-01`. Use `to-yyyy` or `to-yyyy-MM` if the cell is year or month"
351
363
  }
352
364
  ],
353
365
  "methods": [
@@ -355,6 +367,11 @@
355
367
  "name": "validateInput",
356
368
  "description": "Validates the input, marking the element as invalid if its value does not meet the validation criteria.",
357
369
  "params": []
370
+ },
371
+ {
372
+ "name": "updateCalendarSlot",
373
+ "description": "Request to update slot on the calendar while the overlay is open",
374
+ "params": []
358
375
  }
359
376
  ]
360
377
  }
@@ -34,9 +34,10 @@ Control to pick date and time
34
34
 
35
35
  ## Methods
36
36
 
37
- | Method | Type | Description |
38
- |-----------------|------------|--------------------------------------------------|
39
- | `validateInput` | `(): void` | Validates the input, marking the element as invalid if its value does not meet the validation criteria. |
37
+ | Method | Type | Description |
38
+ |----------------------|------------|--------------------------------------------------|
39
+ | `updateCalendarSlot` | `(): void` | Request to update slot on the calendar while the overlay is open |
40
+ | `validateInput` | `(): void` | Validates the input, marking the element as invalid if its value does not meet the validation criteria. |
40
41
 
41
42
  ## Events
42
43
 
@@ -49,9 +50,12 @@ Control to pick date and time
49
50
 
50
51
  ## Slots
51
52
 
52
- | Name | Description |
53
- |----------|--------------------------------------------------|
54
- | `footer` | Slot to add custom contents at the bottom of popup |
55
- | `header` | Slot to add custom contents at the top of popup |
56
- | `left` | Slot to add custom contents at the left of popup |
57
- | `right` | Slot to add custom contents at the right of popup |
53
+ | Name | Description |
54
+ |-------------------|--------------------------------------------------|
55
+ | `footer` | Slot to add custom contents at the bottom of popup |
56
+ | `from-yyyy-MM-dd` | Slot to add custom contents on any date cells of left calendar in `duplex` mode e.g. `from-2023-01-01`. Use `from-yyyy` or `from-yyyy-MM` if the cell is year or month |
57
+ | `header` | Slot to add custom contents at the top of popup |
58
+ | `left` | Slot to add custom contents at the left of popup |
59
+ | `right` | Slot to add custom contents at the right of popup |
60
+ | `to-yyyy-MM-dd` | Slot to add custom contents on any date cells of right calendar in `duplex` mode e.g. `to-2023-01-01`. Use `to-yyyy` or `to-yyyy-MM` if the cell is year or month |
61
+ | `yyyy-MM-dd` | Slot to add custom contents on any date cells e.g. `2023-01-01`. Use `yyyy` or `yyyy-MM` if the cell is year or month. |
@@ -26,6 +26,9 @@ export type { DatetimePickerFilter, DatetimePickerDuplex };
26
26
  * @slot right - Slot to add custom contents at the right of popup
27
27
  * @slot footer - Slot to add custom contents at the bottom of popup
28
28
  * @slot left - Slot to add custom contents at the left of popup
29
+ * @slot yyyy-MM-dd - Slot to add custom contents on any date cells e.g. `2023-01-01`. Use `yyyy` or `yyyy-MM` if the cell is year or month.
30
+ * @slot from-yyyy-MM-dd - Slot to add custom contents on any date cells of left calendar in `duplex` mode e.g. `from-2023-01-01`. Use `from-yyyy` or `from-yyyy-MM` if the cell is year or month
31
+ * @slot to-yyyy-MM-dd - Slot to add custom contents on any date cells of right calendar in `duplex` mode e.g. `to-2023-01-01`. Use `to-yyyy` or `to-yyyy-MM` if the cell is year or month
29
32
  */
30
33
  export declare class DatetimePicker extends ControlElement implements MultiValue {
31
34
  /**
@@ -203,10 +206,13 @@ export declare class DatetimePicker extends ControlElement implements MultiValue
203
206
  private iconEl;
204
207
  private popupEl?;
205
208
  private timepickerEl?;
209
+ private timepickerFromEl?;
206
210
  private timepickerToEl?;
207
211
  private calendarEl?;
212
+ private calendarFromEl?;
208
213
  private calendarToEl?;
209
214
  private inputEl?;
215
+ private inputFromEl?;
210
216
  private inputToEl?;
211
217
  /**
212
218
  * Updates the element
@@ -444,6 +450,11 @@ export declare class DatetimePicker extends ControlElement implements MultiValue
444
450
  * @returns {void}
445
451
  */
446
452
  private resetViews;
453
+ /**
454
+ * Request to update slot on the calendar while the overlay is open
455
+ * @returns void
456
+ */
457
+ updateCalendarSlot(): void;
447
458
  /**
448
459
  * Get time picker template
449
460
  * @param id Timepicker identifier
@@ -451,6 +462,12 @@ export declare class DatetimePicker extends ControlElement implements MultiValue
451
462
  * @returns template result
452
463
  */
453
464
  private getTimepickerTemplate;
465
+ /**
466
+ * Create calendar slot
467
+ * @param calendarId Calendar identifier
468
+ * @returns calendarSlots slots that will cascade to calendar
469
+ */
470
+ private createCalendarSlots;
454
471
  /**
455
472
  * Get calendar template
456
473
  * @param id Calendar identifier
@@ -24,6 +24,16 @@ const INPUT_FORMAT = {
24
24
  DATETIME_SECONDS: 'dd-MMM-yyyy HH:mm:ss',
25
25
  DATETIME_SECONDS_AM_PM: 'dd-MMM-yyyy hh:mm:ss aaa'
26
26
  };
27
+ // public API
28
+ const CALENDAR_ID = 'calendar';
29
+ const CALENDAR_FROM_ID = 'calendar-from';
30
+ const CALENDAR_TO_ID = 'calendar-to';
31
+ const TIMEPICKER_ID = 'timepicker';
32
+ const TIMEPICKER_FROM_ID = 'timepicker-from';
33
+ const TIMEPICKER_TO_ID = 'timepicker-to';
34
+ const INPUT_ID = 'input';
35
+ const INPUT_FROM_ID = 'input-from';
36
+ const INPUT_TO_ID = 'input-to';
27
37
  /**
28
38
  * Control to pick date and time
29
39
  *
@@ -42,6 +52,9 @@ const INPUT_FORMAT = {
42
52
  * @slot right - Slot to add custom contents at the right of popup
43
53
  * @slot footer - Slot to add custom contents at the bottom of popup
44
54
  * @slot left - Slot to add custom contents at the left of popup
55
+ * @slot yyyy-MM-dd - Slot to add custom contents on any date cells e.g. `2023-01-01`. Use `yyyy` or `yyyy-MM` if the cell is year or month.
56
+ * @slot from-yyyy-MM-dd - Slot to add custom contents on any date cells of left calendar in `duplex` mode e.g. `from-2023-01-01`. Use `from-yyyy` or `from-yyyy-MM` if the cell is year or month
57
+ * @slot to-yyyy-MM-dd - Slot to add custom contents on any date cells of right calendar in `duplex` mode e.g. `to-2023-01-01`. Use `to-yyyy` or `to-yyyy-MM` if the cell is year or month
45
58
  */
46
59
  let DatetimePicker = class DatetimePicker extends ControlElement {
47
60
  constructor() {
@@ -750,13 +763,19 @@ let DatetimePicker = class DatetimePicker extends ControlElement {
750
763
  this.submitInterimSegments();
751
764
  // in duplex mode, avoid jumping on views
752
765
  // Therefore if any of values have changed, save the current view
753
- if (this.isDuplex() && this.calendarEl && this.calendarToEl) {
754
- this.notifyViewsChange([this.calendarEl?.view, this.calendarToEl?.view]);
766
+ if (this.isDuplex() && this.calendarFromEl && this.calendarToEl) {
767
+ this.notifyViewsChange([this.calendarFromEl.view, this.calendarToEl.view]);
755
768
  }
756
769
  // Close popup if there is no time picker
757
770
  const newValues = this.values;
758
771
  if (!this.timepicker && newValues[0] && (this.range ? newValues[1] : true)) {
759
772
  this.setOpened(false);
773
+ /**
774
+ * Custom cell selection delegates focus back to the text field when the overlay is closed,
775
+ * causing a sync problem between the calendar and text field.
776
+ * A workaround involves blurring the text field again.
777
+ */
778
+ this.isDuplex() ? this.inputFromEl?.blur() : this.inputEl?.blur();
760
779
  }
761
780
  }
762
781
  /**
@@ -929,6 +948,15 @@ let DatetimePicker = class DatetimePicker extends ControlElement {
929
948
  resetViews() {
930
949
  this.notifyViewsChange([]);
931
950
  }
951
+ /**
952
+ * Request to update slot on the calendar while the overlay is open
953
+ * @returns void
954
+ */
955
+ updateCalendarSlot() {
956
+ if (this.opened) {
957
+ this.requestUpdate();
958
+ }
959
+ }
932
960
  /**
933
961
  * Get time picker template
934
962
  * @param id Timepicker identifier
@@ -945,6 +973,33 @@ let DatetimePicker = class DatetimePicker extends ControlElement {
945
973
  @value-changed=${this.onTimePickerValueChanged}
946
974
  ></ef-time-picker>`;
947
975
  }
976
+ /**
977
+ * Create calendar slot
978
+ * @param calendarId Calendar identifier
979
+ * @returns calendarSlots slots that will cascade to calendar
980
+ */
981
+ createCalendarSlots(calendarId) {
982
+ if (!this.opened) {
983
+ return null;
984
+ }
985
+ const isValidDateSlot = (slot, prefix = '') => {
986
+ return new RegExp(`^${prefix}-?\\d{1,6}(-\\d{2}(-\\d{2})?)?$`).test(slot.slot);
987
+ };
988
+ const querySlots = Array.from(this.querySelectorAll('[slot]'));
989
+ return querySlots
990
+ .filter((slot) => {
991
+ const isToSlot = calendarId === CALENDAR_TO_ID && isValidDateSlot(slot, 'to-');
992
+ const isFromSlot = calendarId === CALENDAR_FROM_ID && isValidDateSlot(slot, 'from-');
993
+ const isISODateSlot = calendarId === CALENDAR_ID && isValidDateSlot(slot);
994
+ return isToSlot || isFromSlot || isISODateSlot;
995
+ })
996
+ .map((slot) => {
997
+ const newSlot = document.createElement('slot');
998
+ newSlot.name = slot.slot;
999
+ newSlot.slot = slot.slot.replace(/^(to|from)-/, '');
1000
+ return newSlot;
1001
+ });
1002
+ }
948
1003
  /**
949
1004
  * Get calendar template
950
1005
  * @param id Calendar identifier
@@ -952,6 +1007,7 @@ let DatetimePicker = class DatetimePicker extends ControlElement {
952
1007
  * @returns template result
953
1008
  */
954
1009
  getCalendarTemplate(id, view = '') {
1010
+ const slotContent = this.createCalendarSlots(id);
955
1011
  return html `<ef-calendar
956
1012
  part="calendar"
957
1013
  id=${id}
@@ -970,15 +1026,16 @@ let DatetimePicker = class DatetimePicker extends ControlElement {
970
1026
  @keydown=${this.onCalendarKeyDown}
971
1027
  @view-changed=${this.onCalendarViewChanged}
972
1028
  @value-changed=${this.onCalendarValueChanged}
973
- ></ef-calendar>`;
1029
+ >${slotContent}</ef-calendar
1030
+ >`;
974
1031
  }
975
1032
  /**
976
1033
  * Get calendar templates
977
1034
  */
978
1035
  get calendarsTemplate() {
979
1036
  return html `
980
- ${this.getCalendarTemplate('calendar', this.views[0])}
981
- ${this.isDuplex() ? this.getCalendarTemplate('calendar-to', this.views[1]) : undefined}
1037
+ ${this.getCalendarTemplate(this.isDuplex() ? CALENDAR_FROM_ID : CALENDAR_ID, this.views[0])}
1038
+ ${this.isDuplex() ? this.getCalendarTemplate(CALENDAR_TO_ID, this.views[1]) : undefined}
982
1039
  `;
983
1040
  }
984
1041
  /**
@@ -988,9 +1045,9 @@ let DatetimePicker = class DatetimePicker extends ControlElement {
988
1045
  // TODO: how can we add support timepicker with multiple?
989
1046
  const values = this.timepickerValues;
990
1047
  return html `
991
- ${this.getTimepickerTemplate('timepicker', values[0])}
1048
+ ${this.getTimepickerTemplate(this.range ? TIMEPICKER_FROM_ID : TIMEPICKER_ID, values[0])}
992
1049
  ${this.range ? html `<div part="input-separator"></div>` : undefined}
993
- ${this.range ? this.getTimepickerTemplate('timepicker-to', values[1]) : undefined}
1050
+ ${this.range ? this.getTimepickerTemplate(TIMEPICKER_TO_ID, values[1]) : undefined}
994
1051
  `;
995
1052
  }
996
1053
  /**
@@ -1030,9 +1087,9 @@ let DatetimePicker = class DatetimePicker extends ControlElement {
1030
1087
  const values = this.inputValues;
1031
1088
  return html `
1032
1089
  <div part="input-wrapper">
1033
- ${this.getInputTemplate('input', values[0])}
1090
+ ${this.getInputTemplate(this.range ? INPUT_FROM_ID : INPUT_ID, values[0])}
1034
1091
  ${this.range ? html `<div part="input-separator"></div>` : undefined}
1035
- ${this.range ? this.getInputTemplate('input-to', values[1]) : undefined}
1092
+ ${this.range ? this.getInputTemplate(INPUT_TO_ID, values[1]) : undefined}
1036
1093
  </div>
1037
1094
  `;
1038
1095
  }
@@ -1169,18 +1226,27 @@ __decorate([
1169
1226
  __decorate([
1170
1227
  query('#timepicker')
1171
1228
  ], DatetimePicker.prototype, "timepickerEl", void 0);
1229
+ __decorate([
1230
+ query('#timepicker-from')
1231
+ ], DatetimePicker.prototype, "timepickerFromEl", void 0);
1172
1232
  __decorate([
1173
1233
  query('#timepicker-to')
1174
1234
  ], DatetimePicker.prototype, "timepickerToEl", void 0);
1175
1235
  __decorate([
1176
1236
  query('#calendar')
1177
1237
  ], DatetimePicker.prototype, "calendarEl", void 0);
1238
+ __decorate([
1239
+ query('#calendar-from')
1240
+ ], DatetimePicker.prototype, "calendarFromEl", void 0);
1178
1241
  __decorate([
1179
1242
  query('#calendar-to')
1180
1243
  ], DatetimePicker.prototype, "calendarToEl", void 0);
1181
1244
  __decorate([
1182
1245
  query('#input')
1183
1246
  ], DatetimePicker.prototype, "inputEl", void 0);
1247
+ __decorate([
1248
+ query('#input-from')
1249
+ ], DatetimePicker.prototype, "inputFromEl", void 0);
1184
1250
  __decorate([
1185
1251
  query('#input-to')
1186
1252
  ], DatetimePicker.prototype, "inputToEl", void 0);
@@ -973,7 +973,7 @@ let InteractiveChart = InteractiveChart_1 = class InteractiveChart extends Respo
973
973
  cssVarAsNumber(...args) {
974
974
  args[args.length] = '';
975
975
  const cssComputeVar = this.getComputedVariable(...args);
976
- const result = parseFloat(cssComputeVar.replace(/\D+$/, ''));
976
+ const result = parseFloat(cssComputeVar);
977
977
  return cssComputeVar && !isNaN(result) ? result : undefined;
978
978
  }
979
979
  /**
@@ -25,9 +25,9 @@ An input control component to display a selection of pills
25
25
 
26
26
  | Method | Type | Description |
27
27
  |---------------------|--------------------------------------------------|--------------------------------------------------|
28
- | `add` | `(item: any): MultiInputDataItem \| null` | Add a new item to the input. Return newly added object or null if added invalid object.<br /><br />**item**: to add. Object must have at least value and label |
28
+ | `add` | `(item: MultiInputDataItem): MultiInputDataItem \| null` | Add a new item to the input. Return newly added object or null if added invalid object.<br /><br />**item**: to add. Object must have at least value and label |
29
29
  | `removeByIndex` | `(index: number): MultiInputDataItem \| null` | Removes pill by index. Returns item that removed or null if list was empty<br /><br />**index**: of pill to be removed |
30
- | `removeByValue` | `(value: string): string` | Removes the item by the value and returns array of removed items<br /><br />**value**: Value of item to remove |
30
+ | `removeByValue` | `(value: string): MultiInputData` | Removes the item by the value and returns array of removed items<br /><br />**value**: Value of item to remove |
31
31
  | `removeLastItem` | `(): MultiInputDataItem \| null` | Removes last item. Returns item that removed or null if list was empty |
32
32
  | `select` | `(): void` | Select the contents of input |
33
33
  | `setSelectionRange` | `(startSelection: number, endSelection: number): void` | Set the selection range<br /><br />**startSelection**: Start of selection<br />**endSelection**: End of the selection |
@@ -5,12 +5,6 @@
5
5
  "name": "ef-select",
6
6
  "description": "Expands upon the native select element,\nproviding a fully themeable dropdown element.",
7
7
  "attributes": [
8
- {
9
- "name": "placeholder",
10
- "description": "Placeholder to display when no value is set",
11
- "type": "string",
12
- "default": "\"\""
13
- },
14
8
  {
15
9
  "name": "opened",
16
10
  "description": "Toggles the opened state of the list",
@@ -18,20 +12,26 @@
18
12
  "default": "false"
19
13
  },
20
14
  {
21
- "name": "error",
22
- "description": "Set error state",
15
+ "name": "disabled",
16
+ "description": "Set disabled state",
23
17
  "type": "boolean",
24
18
  "default": "false"
25
19
  },
26
20
  {
27
- "name": "warning",
28
- "description": "Set warning state",
21
+ "name": "placeholder",
22
+ "description": "Set placeholder text",
23
+ "type": "string",
24
+ "default": "\"\""
25
+ },
26
+ {
27
+ "name": "error",
28
+ "description": "Set error state",
29
29
  "type": "boolean",
30
30
  "default": "false"
31
31
  },
32
32
  {
33
- "name": "disabled",
34
- "description": "Set disabled state",
33
+ "name": "warning",
34
+ "description": "Set warning state",
35
35
  "type": "boolean",
36
36
  "default": "false"
37
37
  }
@@ -42,13 +42,6 @@
42
42
  "description": "Current text content of the selected value",
43
43
  "type": "string | undefined"
44
44
  },
45
- {
46
- "name": "placeholder",
47
- "attribute": "placeholder",
48
- "description": "Placeholder to display when no value is set",
49
- "type": "string",
50
- "default": "\"\""
51
- },
52
45
  {
53
46
  "name": "opened",
54
47
  "attribute": "opened",
@@ -56,20 +49,6 @@
56
49
  "type": "boolean",
57
50
  "default": "false"
58
51
  },
59
- {
60
- "name": "error",
61
- "attribute": "error",
62
- "description": "Set error state",
63
- "type": "boolean",
64
- "default": "false"
65
- },
66
- {
67
- "name": "warning",
68
- "attribute": "warning",
69
- "description": "Set warning state",
70
- "type": "boolean",
71
- "default": "false"
72
- },
73
52
  {
74
53
  "name": "data",
75
54
  "description": "Construct the menu from data object. Cannot be used with slotted content",
@@ -87,6 +66,27 @@
87
66
  "description": "Set disabled state",
88
67
  "type": "boolean",
89
68
  "default": "false"
69
+ },
70
+ {
71
+ "name": "placeholder",
72
+ "attribute": "placeholder",
73
+ "description": "Set placeholder text",
74
+ "type": "string",
75
+ "default": "\"\""
76
+ },
77
+ {
78
+ "name": "error",
79
+ "attribute": "error",
80
+ "description": "Set error state",
81
+ "type": "boolean",
82
+ "default": "false"
83
+ },
84
+ {
85
+ "name": "warning",
86
+ "attribute": "warning",
87
+ "description": "Set warning state",
88
+ "type": "boolean",
89
+ "default": "false"
90
90
  }
91
91
  ],
92
92
  "events": [
@@ -12,7 +12,7 @@ providing a fully themeable dropdown element.
12
12
  | `error` | `error` | `boolean` | false | Set error state |
13
13
  | `label (readonly)` | | `string \| undefined` | | Current text content of the selected value |
14
14
  | `opened` | `opened` | `boolean` | false | Toggles the opened state of the list |
15
- | `placeholder` | `placeholder` | `string` | "" | Placeholder to display when no value is set |
15
+ | `placeholder` | `placeholder` | `string` | "" | Set placeholder text |
16
16
  | `value` | | `string` | "" | Value of the element |
17
17
  | `warning` | `warning` | `boolean` | false | Set warning state |
18
18