@ui5/webcomponents 2.22.0-rc.2 → 2.22.0-rc.3
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 +23 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/ColorPalette.d.ts +8 -8
- package/dist/ColorPalette.js +7 -5
- package/dist/ColorPalette.js.map +1 -1
- package/dist/ColorPaletteItem.d.ts +9 -0
- package/dist/ColorPaletteItem.js +33 -0
- package/dist/ColorPaletteItem.js.map +1 -1
- package/dist/ColorPaletteItemTemplate.js +1 -1
- package/dist/ColorPaletteItemTemplate.js.map +1 -1
- package/dist/ColorPalettePopover.js +1 -1
- package/dist/ColorPalettePopover.js.map +1 -1
- package/dist/ComboBox.js +1 -1
- package/dist/ComboBox.js.map +1 -1
- package/dist/ComboBoxPopoverTemplate.js +2 -1
- package/dist/ComboBoxPopoverTemplate.js.map +1 -1
- package/dist/DateRangePicker.d.ts +12 -1
- package/dist/DateRangePicker.js +31 -1
- package/dist/DateRangePicker.js.map +1 -1
- package/dist/Input.js +8 -6
- package/dist/Input.js.map +1 -1
- package/dist/MultiComboBox.js +1 -1
- package/dist/MultiComboBox.js.map +1 -1
- package/dist/MultiInputTemplate.js +1 -1
- package/dist/MultiInputTemplate.js.map +1 -1
- package/dist/SegmentedButton.js +6 -4
- package/dist/SegmentedButton.js.map +1 -1
- package/dist/SegmentedButtonItem.d.ts +8 -0
- package/dist/SegmentedButtonItem.js +26 -1
- package/dist/SegmentedButtonItem.js.map +1 -1
- package/dist/TextArea.d.ts +10 -0
- package/dist/TextArea.js +37 -0
- package/dist/TextArea.js.map +1 -1
- package/dist/Tokenizer.d.ts +6 -0
- package/dist/Tokenizer.js +4 -1
- package/dist/Tokenizer.js.map +1 -1
- package/dist/css/themes/CardHeader.css +1 -1
- package/dist/css/themes/Select.css +1 -1
- package/dist/custom-elements-internal.json +96 -4
- package/dist/custom-elements.json +33 -1
- package/dist/features/InputComposition.d.ts +1 -1
- package/dist/features/InputComposition.js.map +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +3 -1
- package/dist/generated/i18n/i18n-defaults.js +3 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/themes/CardHeader.css.d.ts +1 -1
- package/dist/generated/themes/CardHeader.css.js +1 -1
- package/dist/generated/themes/CardHeader.css.js.map +1 -1
- package/dist/generated/themes/Select.css.d.ts +1 -1
- package/dist/generated/themes/Select.css.js +1 -1
- package/dist/generated/themes/Select.css.js.map +1 -1
- package/dist/vscode.html-custom-data.json +3 -3
- package/dist/web-types.json +28 -8
- package/package.json +9 -9
- package/src/ColorPaletteItemTemplate.tsx +1 -0
- package/src/ComboBoxPopoverTemplate.tsx +8 -1
- package/src/MultiInputTemplate.tsx +1 -0
- package/src/i18n/messagebundle.properties +6 -0
- package/src/themes/CardHeader.css +0 -1
- package/src/themes/Select.css +25 -0
package/dist/DateRangePicker.js
CHANGED
|
@@ -28,7 +28,10 @@ const DEFAULT_DELIMITER = "-";
|
|
|
28
28
|
* ### Usage
|
|
29
29
|
* The user can enter a date by:
|
|
30
30
|
* Using the calendar that opens in a popup or typing it in directly in the input field (not available for mobile devices).
|
|
31
|
-
* For the `ui5-daterange-picker
|
|
31
|
+
* For the `ui5-daterange-picker`:
|
|
32
|
+
*
|
|
33
|
+
* **Note:** Relative date values such as "today", "yesterday", or "tomorrow" are not supported.
|
|
34
|
+
* Entering a relative date sets the component to an error state.
|
|
32
35
|
* ### ES6 Module Import
|
|
33
36
|
*
|
|
34
37
|
* `import "@ui5/webcomponents/dist/DateRangePicker.js";`
|
|
@@ -114,6 +117,24 @@ let DateRangePicker = DateRangePicker_1 = class DateRangePicker extends DatePick
|
|
|
114
117
|
this.showTwoMonths = false;
|
|
115
118
|
this._prevDelimiter = null;
|
|
116
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Checks if a date string is a relative date (e.g. "today", "tomorrow")
|
|
122
|
+
* that would be resolved by DateFormat.parseRelative().
|
|
123
|
+
* Relative dates are not supported in DateRangePicker.
|
|
124
|
+
* @private
|
|
125
|
+
*/
|
|
126
|
+
_isRelativeValue(dateString, format) {
|
|
127
|
+
const trimmed = dateString.trim();
|
|
128
|
+
if (!trimmed) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
const parsed = format.parse(trimmed);
|
|
132
|
+
if (!parsed) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
const formatted = format.format(parsed);
|
|
136
|
+
return formatted !== trimmed;
|
|
137
|
+
}
|
|
117
138
|
/**
|
|
118
139
|
* **Note:** The getter method is inherited and not supported. If called it will return an empty value.
|
|
119
140
|
* @public
|
|
@@ -261,6 +282,9 @@ let DateRangePicker = DateRangePicker_1 = class DateRangePicker extends DatePick
|
|
|
261
282
|
*/
|
|
262
283
|
isValid(value) {
|
|
263
284
|
const parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== "");
|
|
285
|
+
if (parts.some(dateString => this._isRelativeValue(dateString, this.getFormat()))) {
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
264
288
|
return parts.length <= 2 && parts.every(dateString => super.isValid(dateString)); // must be at most 2 dates and each must be valid
|
|
265
289
|
}
|
|
266
290
|
/**
|
|
@@ -270,6 +294,9 @@ let DateRangePicker = DateRangePicker_1 = class DateRangePicker extends DatePick
|
|
|
270
294
|
*/
|
|
271
295
|
isValidValue(value) {
|
|
272
296
|
const parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== "");
|
|
297
|
+
if (parts.some(dateString => this._isRelativeValue(dateString, this.getValueFormat()))) {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
273
300
|
return parts.length <= 2 && parts.every(dateString => super.isValidValue(dateString)); // must be at most 2 dates and each must be valid
|
|
274
301
|
}
|
|
275
302
|
/**
|
|
@@ -279,6 +306,9 @@ let DateRangePicker = DateRangePicker_1 = class DateRangePicker extends DatePick
|
|
|
279
306
|
*/
|
|
280
307
|
isValidDisplayValue(value) {
|
|
281
308
|
const parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== "");
|
|
309
|
+
if (parts.some(dateString => this._isRelativeValue(dateString, this.getDisplayFormat()))) {
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
282
312
|
return parts.length <= 2 && parts.every(dateString => super.isValidDisplayValue(dateString)); // must be at most 2 dates and each must be valid
|
|
283
313
|
}
|
|
284
314
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateRangePicker.js","sourceRoot":"","sources":["../src/DateRangePicker.ts"],"names":[],"mappings":"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","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport { renderFinished } from \"@ui5/webcomponents-base/dist/Render.js\";\nimport type { IFormInputElement } from \"@ui5/webcomponents-base/dist/features/InputElementsFormSupport.js\";\nimport CalendarDate from \"@ui5/webcomponents-localization/dist/dates/CalendarDate.js\";\nimport UI5Date from \"@ui5/webcomponents-localization/dist/dates/UI5Date.js\";\nimport modifyDateBy from \"@ui5/webcomponents-localization/dist/dates/modifyDateBy.js\";\nimport getTodayUTCTimestamp from \"@ui5/webcomponents-localization/dist/dates/getTodayUTCTimestamp.js\";\nimport {\n\tDATERANGE_DESCRIPTION,\n\tDATERANGEPICKER_POPOVER_ACCESSIBLE_NAME,\n\tDATETIME_COMPONENTS_PLACEHOLDER_PREFIX,\n\tDATERANGE_VALUE_MISSING,\n\tDATERANGE_PATTERN_MISMATCH,\n\tDATERANGE_UNDERFLOW,\n\tDATERANGE_OVERFLOW,\n\tCALENDAR_FOOTER_CANCEL_BUTTON,\n\tCALENDAR_FOOTER_OK_BUTTON,\n} from \"./generated/i18n/i18n-defaults.js\";\nimport DateRangePickerTemplate from \"./DateRangePickerTemplate.js\";\n\n// Styles\nimport DateRangePickerCss from \"./generated/themes/DateRangePicker.css.js\";\nimport DatePicker from \"./DatePicker.js\";\n\nimport type {\n\tDatePickerChangeEventDetail as DateRangePickerChangeEventDetail,\n\tDatePickerInputEventDetail as DateRangePickerInputEventDetail,\n} from \"./DatePicker.js\";\nimport type { CalendarSelectionChangeEventDetail } from \"./Calendar.js\";\nimport type CalendarSelectionMode from \"./types/CalendarSelectionMode.js\";\nimport { isPhone } from \"@ui5/webcomponents-base/dist/Device.js\";\n\nconst DEFAULT_DELIMITER = \"-\";\n\n/**\n * @class\n *\n * ### Overview\n * The DateRangePicker enables the users to enter a localized date range using touch, mouse, keyboard input, or by selecting a date range in the calendar.\n *\n * ### Usage\n * The user can enter a date by:\n * Using the calendar that opens in a popup or typing it in directly in the input field (not available for mobile devices).\n * For the `ui5-daterange-picker`\n * ### ES6 Module Import\n *\n * `import \"@ui5/webcomponents/dist/DateRangePicker.js\";`\n *\n * ### Keyboard Handling\n * The `ui5-daterange-picker` provides advanced keyboard handling.\n *\n * When the `ui5-daterange-picker` input field is focused the user can\n * increment or decrement respectively the range start or end date, depending on where the cursor is.\n * The following shortcuts are available:\n *\n * - [Page Down] - Decrements the corresponding day of the month by one\n * - [Shift] + [Page Down] - Decrements the corresponding month by one\n * - [Shift] + [Ctrl] + [Page Down] - Decrements the corresponding year by one\n * - [Page Up] - Increments the corresponding day of the month by one\n * - [Shift] + [Page Up] - Increments the corresponding month by one\n * - [Shift] + [Ctrl] + [Page Up] - Increments the corresponding year by one\n * @constructor\n * @extends DatePicker\n * @since 1.0.0-rc.8\n * @public\n */\n@customElement({\n\ttag: \"ui5-daterange-picker\",\n\tstyles: [DatePicker.styles, DateRangePickerCss],\n\ttemplate: DateRangePickerTemplate,\n})\nclass DateRangePicker extends DatePicker implements IFormInputElement {\n\t /**\n\t * Determines the symbol which separates the dates.\n\t * If not supplied, the default time interval delimiter for the current locale will be used.\n\t * @default \"-\"\n\t * @public\n\t */\n\t@property()\n\tdelimiter = \"-\";\n\n\t/**\n\t * Defines whether the component displays two months side by side in the picker popup.\n\t *\n\t * When enabled, two consecutive months are shown, making it easier to select date ranges\n\t * that span multiple months without the need to navigate between months.\n\t *\n\t * **Note:** On mobile devices only a single month\n\t * will be displayed regardless of this setting.\n\t *\n\t * @default false\n\t * @public\n\t * @since 2.22.0\n\t */\n\t@property({ type: Boolean })\n\tshowTwoMonths = false;\n\n\t /**\n\t * The first date in the range during selection (this is a temporary value, not the first date in the value range)\n\t * @private\n\t */\n\t@property()\n\t_tempValue?: string;\n\n\tprivate _prevDelimiter: string | null;\n\n\tget formValidityMessage() {\n\t\tconst validity = this.formValidity;\n\n\t\tif (validity.valueMissing) {\n\t\t\t// @ts-ignore oFormatOptions is a private API of DateFormat\n\t\t\treturn DateRangePicker.i18nBundle.getText(DATERANGE_VALUE_MISSING, this.getFormat().oFormatOptions.pattern as string);\n\t\t}\n\t\tif (validity.patternMismatch) {\n\t\t\t// @ts-ignore oFormatOptions is a private API of DateFormat\n\t\t\treturn DateRangePicker.i18nBundle.getText(DATERANGE_PATTERN_MISMATCH, this.getFormat().oFormatOptions.pattern as string);\n\t\t}\n\t\tif (validity.rangeUnderflow) {\n\t\t\treturn DateRangePicker.i18nBundle.getText(DATERANGE_UNDERFLOW, this.minDate);\n\t\t}\n\t\tif (validity.rangeOverflow) {\n\t\t\treturn DateRangePicker.i18nBundle.getText(DATERANGE_OVERFLOW, this.maxDate);\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tget formValidity(): ValidityStateFlags {\n\t\treturn {\n\t\t\tvalueMissing: this.required && !this.value,\n\t\t\tpatternMismatch: !!this.value && !this.isValidValue(this.value),\n\t\t\trangeUnderflow: !!this.value && !this.isValidMin(this.value),\n\t\t\trangeOverflow: !!this.value && !this.isValidMax(this.value),\n\t\t};\n\t}\n\n\tget formFormattedValue() {\n\t\tconst values = this._splitValueByDelimiter(this.value || \"\").filter(Boolean);\n\n\t\tif (values.length && this.name) {\n\t\t\tconst formData = new FormData();\n\n\t\t\tfor (let i = 0; i < values.length; i++) {\n\t\t\t\tformData.append(this.name, values[i]);\n\t\t\t}\n\n\t\t\treturn formData;\n\t\t}\n\n\t\treturn this.value;\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis._prevDelimiter = null;\n\t}\n\n\t/**\n\t * **Note:** The getter method is inherited and not supported. If called it will return an empty value.\n\t * @public\n\t * @default null\n\t */\n\tget dateValue(): Date | null {\n\t\treturn null;\n\t}\n\n\t/**\n\t * **Note:** The getter method is inherited and not supported. If called it will return an empty value.\n\t * @public\n\t * @default null\n\t */\n\tget dateValueUTC(): Date | null {\n\t\treturn null;\n\t}\n\n\tget _startDateTimestamp() {\n\t\treturn this._extractFirstTimestamp(this.value);\n\t}\n\n\tget _endDateTimestamp() {\n\t\treturn this._extractLastTimestamp(this.value);\n\t}\n\n\tget _tempTimestamp() {\n\t\treturn this._tempValue && (this.getValueFormat().parse(this._tempValue, true) as Date).getTime() / 1000; // valueformat\n\t}\n\n\t/**\n\t * Required by DatePicker.js\n\t * @override\n\t */\n\tget _calendarSelectionMode(): `${CalendarSelectionMode}` {\n\t\treturn \"Range\";\n\t}\n\n\t/**\n\t * Required by DatePicker.js - set the calendar focus on the first selected date (or today if not set)\n\t * @override\n\t */\n\tget _calendarTimestamp() {\n\t\treturn this._tempTimestamp || this._startDateTimestamp || getTodayUTCTimestamp(this._primaryCalendarType);\n\t}\n\n\t/**\n\t * Required by DatePicker.js\n\t * @override\n\t */\n\tget _calendarSelectedDates() {\n\t\tif (this._tempValue) {\n\t\t\treturn [this._tempValue];\n\t\t}\n\t\tif (this.value && this._checkValueValidity(this.value)) {\n\t\t\treturn this._splitValueByDelimiter(this.value);\n\t\t}\n\t\treturn [];\n\t}\n\n\tget _isPhone() {\n\t\treturn isPhone();\n\t}\n\n\t/**\n\t * Returns the start date of the currently selected range as JavaScript Date instance.\n\t * @public\n\t * @default null\n\t */\n\tget startDateValue(): Date | null {\n\t\treturn CalendarDate.fromTimestamp(this._startDateTimestamp! * 1000).toLocalJSDate();\n\t}\n\n\t/**\n\t * Returns the end date of the currently selected range as JavaScript Date instance.\n\t * @public\n\t * @default null\n\t */\n\tget endDateValue(): Date | null {\n\t\treturn CalendarDate.fromTimestamp(this._endDateTimestamp! * 1000).toLocalJSDate();\n\t}\n\n\tget startValue(): string {\n\t\treturn this._calendarSelectedDates[0] || \"\";\n\t}\n\n\tget endValue(): string {\n\t\treturn this._calendarSelectedDates[1] || \"\";\n\t}\n\n\tget _lastDateRangeForTheCurrentYear() {\n\t\tconst currentYear = UI5Date.getInstance().getFullYear();\n\t\tconst lastDayOfTheYear = UI5Date.getInstance(currentYear, 11, 31, 23, 59, 59);\n\t\tconst sevenDaysBeforeLastDayOfYear = UI5Date.getInstance(currentYear, 11, 24, 23, 59, 59);\n\n\t\treturn `${this.getFormat().format(sevenDaysBeforeLastDayOfYear)} ${this._effectiveDelimiter} ${this.getFormat().format(lastDayOfTheYear)}`;\n\t}\n\n\t/**\n\t * @override\n\t */\n\tget _placeholder() {\n\t\tif (this.placeholder) {\n\t\t\treturn this.placeholder;\n\t\t}\n\n\t\t// translatable placeholder – for example \"e.g. 2025-12-27 - 2025-12-31\"\n\t\treturn `${DateRangePicker.i18nBundle.getText(DATETIME_COMPONENTS_PLACEHOLDER_PREFIX)} ${this._lastDateRangeForTheCurrentYear}`;\n\t}\n\n\tget _submitDisabled() {\n\t\treturn !this._startDateTimestamp || !this._endDateTimestamp;\n\t}\n\n\tget _cancelButtonText() {\n\t\treturn DateRangePicker.i18nBundle.getText(CALENDAR_FOOTER_CANCEL_BUTTON);\n\t}\n\n\tget _okButtonText() {\n\t\treturn DateRangePicker.i18nBundle.getText(CALENDAR_FOOTER_OK_BUTTON);\n\t}\n\n\t/**\n\t * Handles clicking on the `submit` button, within the picker`s footer in mobile devices.\n\t */\n\t_submitClick() {\n\t\tif (!this._startDateTimestamp || !this._endDateTimestamp) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newValue = this._buildValue(this._startDateTimestamp, this._endDateTimestamp);\n\t\tthis._updateValueAndFireEvents(newValue, true, [\"change\", \"value-changed\"]);\n\t\tthis._togglePicker();\n\t}\n\n\t/**\n\t * Handles clicking on the `cancel` button, within the picker`s footer,\n\t * that would disregard the user selection.\n\t */\n\t_cancelClick() {\n\t\tthis._tempValue = \"\";\n\t\tthis._togglePicker();\n\t}\n\n\t/**\n\t * @override\n\t */\n\tget roleDescription() {\n\t\treturn DateRangePicker.i18nBundle.getText(DATERANGE_DESCRIPTION);\n\t}\n\n\t/**\n\t * @override\n\t */\n\tget pickerAccessibleName() {\n\t\treturn DateRangePicker.i18nBundle.getText(DATERANGEPICKER_POPOVER_ACCESSIBLE_NAME, this.ariaLabelText);\n\t}\n\n\t/**\n\t * @override\n\t */\n\t onResponsivePopoverAfterClose() {\n\t\tthis._tempValue = \"\"; // reset _tempValue on popover close\n\t\tsuper.onResponsivePopoverAfterClose();\n\t}\n\n\t/**\n\t * Checks if a value is valid against the current date format of the DatePicker.\n\t * @public\n\t * @param value A value to be tested against the current date format\n\t */\n\tisValid(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isValid(dateString)); // must be at most 2 dates and each must be valid\n\t}\n\n\t/**\n\t * Checks if a value is valid against the current date format of the DatePicker.\n\t * @public\n\t * @param value A value to be tested against the current date format\n\t */\n\tisValidValue(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isValidValue(dateString)); // must be at most 2 dates and each must be valid\n\t}\n\n\t/**\n\t * Checks if a value is valid against the current date format of the DatePicker.\n\t * @public\n\t * @param value A value to be tested against the current date format\n\t */\n\tisValidDisplayValue(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isValidDisplayValue(dateString)); // must be at most 2 dates and each must be valid\n\t}\n\n\t/**\n\t * Checks if a date is between the minimum and maximum date.\n\t * @public\n\t * @param value A value to be checked\n\t */\n\tisInValidRange(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isInValidRange(dateString));\n\t}\n\n\tisValidMin(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isValidMin(dateString));\n\t}\n\n\tisValidMax(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isValidMax(dateString));\n\t}\n\n\t/**\n\t * Extract both dates as timestamps, flip if necessary, and build (which will use the desired format so we enforce the format too)\n\t * @override\n\t */\n\tnormalizeValue(value: string) {\n\t\tconst firstDateTimestamp = this._extractFirstTimestamp(value);\n\t\tconst lastDateTimestamp = this._extractLastTimestamp(value);\n\t\tif (firstDateTimestamp && lastDateTimestamp && firstDateTimestamp > lastDateTimestamp) { // if both are timestamps (not undefined), flip if necessary\n\t\t\treturn this._buildValue(lastDateTimestamp, firstDateTimestamp);\n\t\t}\n\t\treturn this._buildValue(firstDateTimestamp, lastDateTimestamp);\n\t}\n\n\t/**\n\t * The parser understands many formats, but we need one format\n\t * @override\n\t * @protected\n\t */\n\tnormalizeDisplayValue(value: string) {\n\t\tconst values = this._splitValueByDelimiter(value);\n\t\tconst firstDateTimestamp = this._exctractDisplayTimestamp(values[0]);\n\t\tconst lastDateTimestamp = this._exctractDisplayTimestamp(values[1]);\n\n\t\tif (!firstDateTimestamp || !lastDateTimestamp) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (firstDateTimestamp && lastDateTimestamp && firstDateTimestamp > lastDateTimestamp) { // if both are timestamps (not undefined), flip if necessary\n\t\t\treturn this._buildDisplayValue(lastDateTimestamp, firstDateTimestamp);\n\t\t}\n\n\t\treturn this._buildDisplayValue(firstDateTimestamp, lastDateTimestamp);\n\t}\n\n\t/**\n\t * @override\n\t */\n\tgetValueFromDisplayValue(value: string): string {\n\t\tconst values = this._splitValueByDelimiter(value);\n\t\tlet firstDateString = \"\";\n\t\tlet lastDateString = \"\";\n\n\t\tfirstDateString = this._getValueStringFromTimestamp((this._exctractDisplayTimestamp(values[0]) as number) * 1000);\n\t\tlastDateString = this._getValueStringFromTimestamp((this._exctractDisplayTimestamp(values[1]) as number) * 1000);\n\n\t\tif (!firstDateString || !lastDateString) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn `${firstDateString} ${this._effectiveDelimiter} ${lastDateString}`;\n\t}\n\n\t/**\n\t * @override\n\t */\n\tonSelectedDatesChange(event: CustomEvent<CalendarSelectionChangeEventDetail>) {\n\t\tevent.preventDefault(); // never let the calendar update its own dates, the parent component controls them\n\t\tconst values = event.detail.selectedValues;\n\n\t\tif (values.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (values.length === 1) { // Do nothing until the user selects 2 dates, we don't change any state at all for one date\n\t\t\tthis._tempValue = values[0];\n\t\t\treturn;\n\t\t}\n\t\tconst newValue = this._buildValue(event.detail.selectedDates[0], event.detail.selectedDates[1]); // the value will be normalized so we don't need to order them here\n\t\tif (!this._isPhone) { // on desktop we update the value immediately, on mobile we wait for the user to confirm the selection with the \"OK\" button\n\t\t\tthis._updateValueAndFireEvents(newValue, true, [\"change\", \"value-changed\"]);\n\t\t\tthis._togglePicker();\n\t\t} else {\n\t\t\tthis._updateValueAndFireEvents(newValue, true, [\"value-changed\"]); // fire value-changed immediately on mobile so the app can react to the change (e.g. update the input field), but wait with firing \"change\" until the user clicks \"OK\"\n\t\t}\n\t}\n\n\t/**\n\t * @override\n\t */\n\tasync _modifyDateValue(amount: number, unit: string, preserveDate?: boolean) {\n\t\tif (!this._endDateTimestamp) { // If empty or only one date -> treat as datepicker entirely\n\t\t\treturn super._modifyDateValue(amount, unit, preserveDate);\n\t\t}\n\n\t\tlet caretPos: number = this._dateTimeInput.getCaretPosition()!; // caret position is always number for input of type text;\n\t\tlet newValue: string;\n\n\t\tif (caretPos <= this.value.indexOf(this._effectiveDelimiter)) { // The user is focusing the first date -> change it and keep the second date\n\t\t\tconst startDateModified = modifyDateBy(CalendarDate.fromTimestamp(this._startDateTimestamp! * 1000), amount, unit, preserveDate, this._minDate, this._maxDate);\n\t\t\tconst newStartDateTimestamp = startDateModified.valueOf() / 1000;\n\t\t\tif (newStartDateTimestamp > this._endDateTimestamp) { // dates flipped -> move the caret to the same position but on the last date\n\t\t\t\tcaretPos += Math.ceil(this.value.length / 2);\n\t\t\t}\n\t\t\tnewValue = this._buildValue(newStartDateTimestamp, this._endDateTimestamp); // the value will be normalized so we don't try to order them here\n\t\t} else {\n\t\t\tconst endDateModified = modifyDateBy(CalendarDate.fromTimestamp(this._endDateTimestamp * 1000), amount, unit, preserveDate, this._minDate, this._maxDate);\n\t\t\tconst newEndDateTimestamp = endDateModified.valueOf() / 1000;\n\t\t\tnewValue = this._buildValue(this._startDateTimestamp, newEndDateTimestamp); // the value will be normalized so we don't try to order them here\n\t\t\tif (newEndDateTimestamp < this._startDateTimestamp!) { // dates flipped -> move the caret to the same position but on the first date\n\t\t\t\tcaretPos -= Math.ceil(this.value.length / 2);\n\t\t\t}\n\t\t}\n\t\tthis._updateValueAndFireEvents(newValue, true, [\"change\", \"value-changed\"]);\n\n\t\tawait renderFinished();\n\t\tthis._dateTimeInput.setCaretPosition(caretPos); // Return the caret to the previous (or the adjusted, if dates flipped) position after rendering\n\t}\n\n\tget _effectiveDelimiter(): string {\n\t\treturn this.delimiter || DEFAULT_DELIMITER;\n\t}\n\n\t_splitValueByDelimiter(value: string) {\n\t\tconst valuesArray: Array<string> = [];\n\t\tconst partsArray = value.split(this._prevDelimiter || this._effectiveDelimiter);\n\t\t// if format successfully parse the value, the value contains only single date\n\t\tif (this.getValueFormat().parse(value)) {\n\t\t\tvaluesArray[0] = partsArray.join(this._effectiveDelimiter);\n\t\t\tvaluesArray[1] = \"\";\n\t\t} else {\n\t\t\tvaluesArray[0] = partsArray.slice(0, partsArray.length / 2).join(this._effectiveDelimiter);\n\t\t\tvaluesArray[1] = partsArray.slice(partsArray.length / 2).join(this._effectiveDelimiter);\n\t\t}\n\n\t\treturn valuesArray;\n\t}\n\n\t/**\n\t * The parser understands many formats, but we need one format\n\t * @protected\n\t */\n\tnormalizeFormattedValue(value: string) {\n\t\tif (value === \"\") {\n\t\t\treturn value;\n\t\t}\n\n\t\tlet firstDateString = \"\";\n\t\tlet lastDateString = \"\";\n\n\t\tfirstDateString = this._getValueStringFromTimestamp((this._extractFirstTimestamp(value) as number) * 1000);\n\t\tlastDateString = this._getValueStringFromTimestamp((this._extractLastTimestamp(value) as number) * 1000);\n\n\t\tif (!firstDateString && !lastDateString) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn `${firstDateString} ${this._effectiveDelimiter} ${lastDateString}`;\n\t}\n\n\t/**\n\t * Returns a UTC timestamp, representing the first date in the value string or undefined if the value is empty\n\t * @private\n\t */\n\t_extractFirstTimestamp(value: string) {\n\t\tif (!value || !this._checkValueValidity(value)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst dateStrings = this._splitValueByDelimiter(value); // at least one item guaranteed due to the checks above (non-empty and valid)\n\n\t\tconst parsedDate = this.getValueFormat().parse(dateStrings[0], true) as Date;\n\n\t\treturn parsedDate.getTime() / 1000;\n\t}\n\n\t/**\n\t * Returns a UTC timestamp, representing the last date in the value string or undefined if the value is empty or there is just one date\n\t * @private\n\t */\n\t_extractLastTimestamp(value: string) {\n\t\tif (!value || !this._checkValueValidity(value)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet dateStrings = this._splitValueByDelimiter(value);\n\t\tdateStrings = dateStrings.filter(str => str !== \" \"); // remove empty strings\n\t\tif (dateStrings[1]) {\n\t\t\tconst parsedDate = this.getValueFormat().parse(dateStrings[1], true) as Date;\n\n\t\t\treturn parsedDate.getTime() / 1000;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t_exctractDisplayTimestamp(value: string) {\n\t\tif (!value || !this._checkDisplayValueValidity(value)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (value) {\n\t\t\tconst parsedDate = this.getDisplayFormat().parse(value, true) as Date;\n\n\t\t\treturn parsedDate.getTime() / 1000;\n\t\t}\n\t}\n\n\t/**\n\t * Builds a string value out of two UTC timestamps - this method is the counterpart to _extractFirstTimestamp/_extractLastTimestamp\n\t * @private\n\t */\n\t_buildValue(firstDateTimestamp: number | undefined, lastDateTimestamp: number | undefined): string {\n\t\tthis._prevDelimiter = this._effectiveDelimiter;\n\t\tif (firstDateTimestamp) {\n\t\t\tconst firstDateString = this._getValueStringFromTimestamp(firstDateTimestamp * 1000);\n\n\t\t\tif (!lastDateTimestamp) {\n\t\t\t\treturn firstDateString;\n\t\t\t}\n\n\t\t\tconst lastDateString = this._getValueStringFromTimestamp(lastDateTimestamp * 1000);\n\t\t\treturn `${firstDateString} ${this._effectiveDelimiter} ${lastDateString}`;\n\t\t}\n\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Builds a string value out of two UTC timestamps - this method is the counterpart to _extractFirstTimestamp/_extractLastTimestamp\n\t * @private\n\t */\n\t_buildDisplayValue(firstDateTimestamp: number | undefined, lastDateTimestamp: number | undefined) {\n\t\tthis._prevDelimiter = this._effectiveDelimiter;\n\t\tif (firstDateTimestamp) {\n\t\t\tconst firstDateString = this._getDisplayStringFromTimestamp(firstDateTimestamp * 1000);\n\n\t\t\tif (!lastDateTimestamp) {\n\t\t\t\treturn firstDateString;\n\t\t\t}\n\n\t\t\tconst lastDateString = this._getDisplayStringFromTimestamp(lastDateTimestamp * 1000);\n\t\t\treturn `${firstDateString} ${this._effectiveDelimiter} ${lastDateString}`;\n\t\t}\n\n\t\treturn \"\";\n\t}\n\n\tgetDisplayValueFromValue(value: string): string {\n\t\tif (this.isLiveUpdate) {\n\t\t\treturn value;\n\t\t}\n\n\t\tlet firstDateString = \"\";\n\t\tlet lastDateString = \"\";\n\n\t\tfirstDateString = this._getDisplayStringFromTimestamp((this._extractFirstTimestamp(value) as number) * 1000);\n\t\tlastDateString = this._getDisplayStringFromTimestamp((this._extractLastTimestamp(value) as number) * 1000);\n\n\t\tif (!firstDateString || !lastDateString) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn `${firstDateString} ${this._effectiveDelimiter} ${lastDateString}`;\n\t}\n\n\tget displayValue() : string {\n\t\tif (!this.value) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn this.getDisplayValueFromValue(this.value);\n\t}\n}\n\nDateRangePicker.define();\n\nexport default DateRangePicker;\nexport type {\n\tDateRangePickerChangeEventDetail,\n\tDateRangePickerInputEventDetail,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"DateRangePicker.js","sourceRoot":"","sources":["../src/DateRangePicker.ts"],"names":[],"mappings":"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","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport { renderFinished } from \"@ui5/webcomponents-base/dist/Render.js\";\nimport type { IFormInputElement } from \"@ui5/webcomponents-base/dist/features/InputElementsFormSupport.js\";\nimport CalendarDate from \"@ui5/webcomponents-localization/dist/dates/CalendarDate.js\";\nimport UI5Date from \"@ui5/webcomponents-localization/dist/dates/UI5Date.js\";\nimport modifyDateBy from \"@ui5/webcomponents-localization/dist/dates/modifyDateBy.js\";\nimport getTodayUTCTimestamp from \"@ui5/webcomponents-localization/dist/dates/getTodayUTCTimestamp.js\";\nimport type DateFormat from \"@ui5/webcomponents-localization/dist/DateFormat.js\";\nimport {\n\tDATERANGE_DESCRIPTION,\n\tDATERANGEPICKER_POPOVER_ACCESSIBLE_NAME,\n\tDATETIME_COMPONENTS_PLACEHOLDER_PREFIX,\n\tDATERANGE_VALUE_MISSING,\n\tDATERANGE_PATTERN_MISMATCH,\n\tDATERANGE_UNDERFLOW,\n\tDATERANGE_OVERFLOW,\n\tCALENDAR_FOOTER_CANCEL_BUTTON,\n\tCALENDAR_FOOTER_OK_BUTTON,\n} from \"./generated/i18n/i18n-defaults.js\";\nimport DateRangePickerTemplate from \"./DateRangePickerTemplate.js\";\n\n// Styles\nimport DateRangePickerCss from \"./generated/themes/DateRangePicker.css.js\";\nimport DatePicker from \"./DatePicker.js\";\n\nimport type {\n\tDatePickerChangeEventDetail as DateRangePickerChangeEventDetail,\n\tDatePickerInputEventDetail as DateRangePickerInputEventDetail,\n} from \"./DatePicker.js\";\nimport type { CalendarSelectionChangeEventDetail } from \"./Calendar.js\";\nimport type CalendarSelectionMode from \"./types/CalendarSelectionMode.js\";\nimport { isPhone } from \"@ui5/webcomponents-base/dist/Device.js\";\n\nconst DEFAULT_DELIMITER = \"-\";\n\n/**\n * @class\n *\n * ### Overview\n * The DateRangePicker enables the users to enter a localized date range using touch, mouse, keyboard input, or by selecting a date range in the calendar.\n *\n * ### Usage\n * The user can enter a date by:\n * Using the calendar that opens in a popup or typing it in directly in the input field (not available for mobile devices).\n * For the `ui5-daterange-picker`:\n *\n * **Note:** Relative date values such as \"today\", \"yesterday\", or \"tomorrow\" are not supported.\n * Entering a relative date sets the component to an error state.\n * ### ES6 Module Import\n *\n * `import \"@ui5/webcomponents/dist/DateRangePicker.js\";`\n *\n * ### Keyboard Handling\n * The `ui5-daterange-picker` provides advanced keyboard handling.\n *\n * When the `ui5-daterange-picker` input field is focused the user can\n * increment or decrement respectively the range start or end date, depending on where the cursor is.\n * The following shortcuts are available:\n *\n * - [Page Down] - Decrements the corresponding day of the month by one\n * - [Shift] + [Page Down] - Decrements the corresponding month by one\n * - [Shift] + [Ctrl] + [Page Down] - Decrements the corresponding year by one\n * - [Page Up] - Increments the corresponding day of the month by one\n * - [Shift] + [Page Up] - Increments the corresponding month by one\n * - [Shift] + [Ctrl] + [Page Up] - Increments the corresponding year by one\n * @constructor\n * @extends DatePicker\n * @since 1.0.0-rc.8\n * @public\n */\n@customElement({\n\ttag: \"ui5-daterange-picker\",\n\tstyles: [DatePicker.styles, DateRangePickerCss],\n\ttemplate: DateRangePickerTemplate,\n})\nclass DateRangePicker extends DatePicker implements IFormInputElement {\n\t /**\n\t * Determines the symbol which separates the dates.\n\t * If not supplied, the default time interval delimiter for the current locale will be used.\n\t * @default \"-\"\n\t * @public\n\t */\n\t@property()\n\tdelimiter = \"-\";\n\n\t/**\n\t * Defines whether the component displays two months side by side in the picker popup.\n\t *\n\t * When enabled, two consecutive months are shown, making it easier to select date ranges\n\t * that span multiple months without the need to navigate between months.\n\t *\n\t * **Note:** On mobile devices only a single month\n\t * will be displayed regardless of this setting.\n\t *\n\t * @default false\n\t * @public\n\t * @since 2.22.0\n\t */\n\t@property({ type: Boolean })\n\tshowTwoMonths = false;\n\n\t /**\n\t * The first date in the range during selection (this is a temporary value, not the first date in the value range)\n\t * @private\n\t */\n\t@property()\n\t_tempValue?: string;\n\n\tprivate _prevDelimiter: string | null;\n\n\tget formValidityMessage() {\n\t\tconst validity = this.formValidity;\n\n\t\tif (validity.valueMissing) {\n\t\t\t// @ts-ignore oFormatOptions is a private API of DateFormat\n\t\t\treturn DateRangePicker.i18nBundle.getText(DATERANGE_VALUE_MISSING, this.getFormat().oFormatOptions.pattern as string);\n\t\t}\n\t\tif (validity.patternMismatch) {\n\t\t\t// @ts-ignore oFormatOptions is a private API of DateFormat\n\t\t\treturn DateRangePicker.i18nBundle.getText(DATERANGE_PATTERN_MISMATCH, this.getFormat().oFormatOptions.pattern as string);\n\t\t}\n\t\tif (validity.rangeUnderflow) {\n\t\t\treturn DateRangePicker.i18nBundle.getText(DATERANGE_UNDERFLOW, this.minDate);\n\t\t}\n\t\tif (validity.rangeOverflow) {\n\t\t\treturn DateRangePicker.i18nBundle.getText(DATERANGE_OVERFLOW, this.maxDate);\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tget formValidity(): ValidityStateFlags {\n\t\treturn {\n\t\t\tvalueMissing: this.required && !this.value,\n\t\t\tpatternMismatch: !!this.value && !this.isValidValue(this.value),\n\t\t\trangeUnderflow: !!this.value && !this.isValidMin(this.value),\n\t\t\trangeOverflow: !!this.value && !this.isValidMax(this.value),\n\t\t};\n\t}\n\n\tget formFormattedValue() {\n\t\tconst values = this._splitValueByDelimiter(this.value || \"\").filter(Boolean);\n\n\t\tif (values.length && this.name) {\n\t\t\tconst formData = new FormData();\n\n\t\t\tfor (let i = 0; i < values.length; i++) {\n\t\t\t\tformData.append(this.name, values[i]);\n\t\t\t}\n\n\t\t\treturn formData;\n\t\t}\n\n\t\treturn this.value;\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis._prevDelimiter = null;\n\t}\n\n\t/**\n\t * Checks if a date string is a relative date (e.g. \"today\", \"tomorrow\")\n\t * that would be resolved by DateFormat.parseRelative().\n\t * Relative dates are not supported in DateRangePicker.\n\t * @private\n\t */\n\t_isRelativeValue(dateString: string, format: DateFormat): boolean {\n\t\tconst trimmed = dateString.trim();\n\t\tif (!trimmed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst parsed = format.parse(trimmed);\n\t\tif (!parsed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst formatted = format.format(parsed);\n\t\treturn formatted !== trimmed;\n\t}\n\n\t/**\n\t * **Note:** The getter method is inherited and not supported. If called it will return an empty value.\n\t * @public\n\t * @default null\n\t */\n\tget dateValue(): Date | null {\n\t\treturn null;\n\t}\n\n\t/**\n\t * **Note:** The getter method is inherited and not supported. If called it will return an empty value.\n\t * @public\n\t * @default null\n\t */\n\tget dateValueUTC(): Date | null {\n\t\treturn null;\n\t}\n\n\tget _startDateTimestamp() {\n\t\treturn this._extractFirstTimestamp(this.value);\n\t}\n\n\tget _endDateTimestamp() {\n\t\treturn this._extractLastTimestamp(this.value);\n\t}\n\n\tget _tempTimestamp() {\n\t\treturn this._tempValue && (this.getValueFormat().parse(this._tempValue, true) as Date).getTime() / 1000; // valueformat\n\t}\n\n\t/**\n\t * Required by DatePicker.js\n\t * @override\n\t */\n\tget _calendarSelectionMode(): `${CalendarSelectionMode}` {\n\t\treturn \"Range\";\n\t}\n\n\t/**\n\t * Required by DatePicker.js - set the calendar focus on the first selected date (or today if not set)\n\t * @override\n\t */\n\tget _calendarTimestamp() {\n\t\treturn this._tempTimestamp || this._startDateTimestamp || getTodayUTCTimestamp(this._primaryCalendarType);\n\t}\n\n\t/**\n\t * Required by DatePicker.js\n\t * @override\n\t */\n\tget _calendarSelectedDates() {\n\t\tif (this._tempValue) {\n\t\t\treturn [this._tempValue];\n\t\t}\n\t\tif (this.value && this._checkValueValidity(this.value)) {\n\t\t\treturn this._splitValueByDelimiter(this.value);\n\t\t}\n\t\treturn [];\n\t}\n\n\tget _isPhone() {\n\t\treturn isPhone();\n\t}\n\n\t/**\n\t * Returns the start date of the currently selected range as JavaScript Date instance.\n\t * @public\n\t * @default null\n\t */\n\tget startDateValue(): Date | null {\n\t\treturn CalendarDate.fromTimestamp(this._startDateTimestamp! * 1000).toLocalJSDate();\n\t}\n\n\t/**\n\t * Returns the end date of the currently selected range as JavaScript Date instance.\n\t * @public\n\t * @default null\n\t */\n\tget endDateValue(): Date | null {\n\t\treturn CalendarDate.fromTimestamp(this._endDateTimestamp! * 1000).toLocalJSDate();\n\t}\n\n\tget startValue(): string {\n\t\treturn this._calendarSelectedDates[0] || \"\";\n\t}\n\n\tget endValue(): string {\n\t\treturn this._calendarSelectedDates[1] || \"\";\n\t}\n\n\tget _lastDateRangeForTheCurrentYear() {\n\t\tconst currentYear = UI5Date.getInstance().getFullYear();\n\t\tconst lastDayOfTheYear = UI5Date.getInstance(currentYear, 11, 31, 23, 59, 59);\n\t\tconst sevenDaysBeforeLastDayOfYear = UI5Date.getInstance(currentYear, 11, 24, 23, 59, 59);\n\n\t\treturn `${this.getFormat().format(sevenDaysBeforeLastDayOfYear)} ${this._effectiveDelimiter} ${this.getFormat().format(lastDayOfTheYear)}`;\n\t}\n\n\t/**\n\t * @override\n\t */\n\tget _placeholder() {\n\t\tif (this.placeholder) {\n\t\t\treturn this.placeholder;\n\t\t}\n\n\t\t// translatable placeholder – for example \"e.g. 2025-12-27 - 2025-12-31\"\n\t\treturn `${DateRangePicker.i18nBundle.getText(DATETIME_COMPONENTS_PLACEHOLDER_PREFIX)} ${this._lastDateRangeForTheCurrentYear}`;\n\t}\n\n\tget _submitDisabled() {\n\t\treturn !this._startDateTimestamp || !this._endDateTimestamp;\n\t}\n\n\tget _cancelButtonText() {\n\t\treturn DateRangePicker.i18nBundle.getText(CALENDAR_FOOTER_CANCEL_BUTTON);\n\t}\n\n\tget _okButtonText() {\n\t\treturn DateRangePicker.i18nBundle.getText(CALENDAR_FOOTER_OK_BUTTON);\n\t}\n\n\t/**\n\t * Handles clicking on the `submit` button, within the picker`s footer in mobile devices.\n\t */\n\t_submitClick() {\n\t\tif (!this._startDateTimestamp || !this._endDateTimestamp) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newValue = this._buildValue(this._startDateTimestamp, this._endDateTimestamp);\n\t\tthis._updateValueAndFireEvents(newValue, true, [\"change\", \"value-changed\"]);\n\t\tthis._togglePicker();\n\t}\n\n\t/**\n\t * Handles clicking on the `cancel` button, within the picker`s footer,\n\t * that would disregard the user selection.\n\t */\n\t_cancelClick() {\n\t\tthis._tempValue = \"\";\n\t\tthis._togglePicker();\n\t}\n\n\t/**\n\t * @override\n\t */\n\tget roleDescription() {\n\t\treturn DateRangePicker.i18nBundle.getText(DATERANGE_DESCRIPTION);\n\t}\n\n\t/**\n\t * @override\n\t */\n\tget pickerAccessibleName() {\n\t\treturn DateRangePicker.i18nBundle.getText(DATERANGEPICKER_POPOVER_ACCESSIBLE_NAME, this.ariaLabelText);\n\t}\n\n\t/**\n\t * @override\n\t */\n\t onResponsivePopoverAfterClose() {\n\t\tthis._tempValue = \"\"; // reset _tempValue on popover close\n\t\tsuper.onResponsivePopoverAfterClose();\n\t}\n\n\t/**\n\t * Checks if a value is valid against the current date format of the DatePicker.\n\t * @public\n\t * @param value A value to be tested against the current date format\n\t */\n\tisValid(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\tif (parts.some(dateString => this._isRelativeValue(dateString, this.getFormat()))) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isValid(dateString)); // must be at most 2 dates and each must be valid\n\t}\n\n\t/**\n\t * Checks if a value is valid against the current date format of the DatePicker.\n\t * @public\n\t * @param value A value to be tested against the current date format\n\t */\n\tisValidValue(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\tif (parts.some(dateString => this._isRelativeValue(dateString, this.getValueFormat()))) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isValidValue(dateString)); // must be at most 2 dates and each must be valid\n\t}\n\n\t/**\n\t * Checks if a value is valid against the current date format of the DatePicker.\n\t * @public\n\t * @param value A value to be tested against the current date format\n\t */\n\tisValidDisplayValue(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\tif (parts.some(dateString => this._isRelativeValue(dateString, this.getDisplayFormat()))) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isValidDisplayValue(dateString)); // must be at most 2 dates and each must be valid\n\t}\n\n\t/**\n\t * Checks if a date is between the minimum and maximum date.\n\t * @public\n\t * @param value A value to be checked\n\t */\n\tisInValidRange(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isInValidRange(dateString));\n\t}\n\n\tisValidMin(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isValidMin(dateString));\n\t}\n\n\tisValidMax(value: string): boolean {\n\t\tconst parts = this._splitValueByDelimiter(value).filter(str => str.trim() !== \"\");\n\n\t\treturn parts.length <= 2 && parts.every(dateString => super.isValidMax(dateString));\n\t}\n\n\t/**\n\t * Extract both dates as timestamps, flip if necessary, and build (which will use the desired format so we enforce the format too)\n\t * @override\n\t */\n\tnormalizeValue(value: string) {\n\t\tconst firstDateTimestamp = this._extractFirstTimestamp(value);\n\t\tconst lastDateTimestamp = this._extractLastTimestamp(value);\n\t\tif (firstDateTimestamp && lastDateTimestamp && firstDateTimestamp > lastDateTimestamp) { // if both are timestamps (not undefined), flip if necessary\n\t\t\treturn this._buildValue(lastDateTimestamp, firstDateTimestamp);\n\t\t}\n\t\treturn this._buildValue(firstDateTimestamp, lastDateTimestamp);\n\t}\n\n\t/**\n\t * The parser understands many formats, but we need one format\n\t * @override\n\t * @protected\n\t */\n\tnormalizeDisplayValue(value: string) {\n\t\tconst values = this._splitValueByDelimiter(value);\n\t\tconst firstDateTimestamp = this._exctractDisplayTimestamp(values[0]);\n\t\tconst lastDateTimestamp = this._exctractDisplayTimestamp(values[1]);\n\n\t\tif (!firstDateTimestamp || !lastDateTimestamp) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (firstDateTimestamp && lastDateTimestamp && firstDateTimestamp > lastDateTimestamp) { // if both are timestamps (not undefined), flip if necessary\n\t\t\treturn this._buildDisplayValue(lastDateTimestamp, firstDateTimestamp);\n\t\t}\n\n\t\treturn this._buildDisplayValue(firstDateTimestamp, lastDateTimestamp);\n\t}\n\n\t/**\n\t * @override\n\t */\n\tgetValueFromDisplayValue(value: string): string {\n\t\tconst values = this._splitValueByDelimiter(value);\n\t\tlet firstDateString = \"\";\n\t\tlet lastDateString = \"\";\n\n\t\tfirstDateString = this._getValueStringFromTimestamp((this._exctractDisplayTimestamp(values[0]) as number) * 1000);\n\t\tlastDateString = this._getValueStringFromTimestamp((this._exctractDisplayTimestamp(values[1]) as number) * 1000);\n\n\t\tif (!firstDateString || !lastDateString) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn `${firstDateString} ${this._effectiveDelimiter} ${lastDateString}`;\n\t}\n\n\t/**\n\t * @override\n\t */\n\tonSelectedDatesChange(event: CustomEvent<CalendarSelectionChangeEventDetail>) {\n\t\tevent.preventDefault(); // never let the calendar update its own dates, the parent component controls them\n\t\tconst values = event.detail.selectedValues;\n\n\t\tif (values.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (values.length === 1) { // Do nothing until the user selects 2 dates, we don't change any state at all for one date\n\t\t\tthis._tempValue = values[0];\n\t\t\treturn;\n\t\t}\n\t\tconst newValue = this._buildValue(event.detail.selectedDates[0], event.detail.selectedDates[1]); // the value will be normalized so we don't need to order them here\n\t\tif (!this._isPhone) { // on desktop we update the value immediately, on mobile we wait for the user to confirm the selection with the \"OK\" button\n\t\t\tthis._updateValueAndFireEvents(newValue, true, [\"change\", \"value-changed\"]);\n\t\t\tthis._togglePicker();\n\t\t} else {\n\t\t\tthis._updateValueAndFireEvents(newValue, true, [\"value-changed\"]); // fire value-changed immediately on mobile so the app can react to the change (e.g. update the input field), but wait with firing \"change\" until the user clicks \"OK\"\n\t\t}\n\t}\n\n\t/**\n\t * @override\n\t */\n\tasync _modifyDateValue(amount: number, unit: string, preserveDate?: boolean) {\n\t\tif (!this._endDateTimestamp) { // If empty or only one date -> treat as datepicker entirely\n\t\t\treturn super._modifyDateValue(amount, unit, preserveDate);\n\t\t}\n\n\t\tlet caretPos: number = this._dateTimeInput.getCaretPosition()!; // caret position is always number for input of type text;\n\t\tlet newValue: string;\n\n\t\tif (caretPos <= this.value.indexOf(this._effectiveDelimiter)) { // The user is focusing the first date -> change it and keep the second date\n\t\t\tconst startDateModified = modifyDateBy(CalendarDate.fromTimestamp(this._startDateTimestamp! * 1000), amount, unit, preserveDate, this._minDate, this._maxDate);\n\t\t\tconst newStartDateTimestamp = startDateModified.valueOf() / 1000;\n\t\t\tif (newStartDateTimestamp > this._endDateTimestamp) { // dates flipped -> move the caret to the same position but on the last date\n\t\t\t\tcaretPos += Math.ceil(this.value.length / 2);\n\t\t\t}\n\t\t\tnewValue = this._buildValue(newStartDateTimestamp, this._endDateTimestamp); // the value will be normalized so we don't try to order them here\n\t\t} else {\n\t\t\tconst endDateModified = modifyDateBy(CalendarDate.fromTimestamp(this._endDateTimestamp * 1000), amount, unit, preserveDate, this._minDate, this._maxDate);\n\t\t\tconst newEndDateTimestamp = endDateModified.valueOf() / 1000;\n\t\t\tnewValue = this._buildValue(this._startDateTimestamp, newEndDateTimestamp); // the value will be normalized so we don't try to order them here\n\t\t\tif (newEndDateTimestamp < this._startDateTimestamp!) { // dates flipped -> move the caret to the same position but on the first date\n\t\t\t\tcaretPos -= Math.ceil(this.value.length / 2);\n\t\t\t}\n\t\t}\n\t\tthis._updateValueAndFireEvents(newValue, true, [\"change\", \"value-changed\"]);\n\n\t\tawait renderFinished();\n\t\tthis._dateTimeInput.setCaretPosition(caretPos); // Return the caret to the previous (or the adjusted, if dates flipped) position after rendering\n\t}\n\n\tget _effectiveDelimiter(): string {\n\t\treturn this.delimiter || DEFAULT_DELIMITER;\n\t}\n\n\t_splitValueByDelimiter(value: string) {\n\t\tconst valuesArray: Array<string> = [];\n\t\tconst partsArray = value.split(this._prevDelimiter || this._effectiveDelimiter);\n\t\t// if format successfully parse the value, the value contains only single date\n\t\tif (this.getValueFormat().parse(value)) {\n\t\t\tvaluesArray[0] = partsArray.join(this._effectiveDelimiter);\n\t\t\tvaluesArray[1] = \"\";\n\t\t} else {\n\t\t\tvaluesArray[0] = partsArray.slice(0, partsArray.length / 2).join(this._effectiveDelimiter);\n\t\t\tvaluesArray[1] = partsArray.slice(partsArray.length / 2).join(this._effectiveDelimiter);\n\t\t}\n\n\t\treturn valuesArray;\n\t}\n\n\t/**\n\t * The parser understands many formats, but we need one format\n\t * @protected\n\t */\n\tnormalizeFormattedValue(value: string) {\n\t\tif (value === \"\") {\n\t\t\treturn value;\n\t\t}\n\n\t\tlet firstDateString = \"\";\n\t\tlet lastDateString = \"\";\n\n\t\tfirstDateString = this._getValueStringFromTimestamp((this._extractFirstTimestamp(value) as number) * 1000);\n\t\tlastDateString = this._getValueStringFromTimestamp((this._extractLastTimestamp(value) as number) * 1000);\n\n\t\tif (!firstDateString && !lastDateString) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn `${firstDateString} ${this._effectiveDelimiter} ${lastDateString}`;\n\t}\n\n\t/**\n\t * Returns a UTC timestamp, representing the first date in the value string or undefined if the value is empty\n\t * @private\n\t */\n\t_extractFirstTimestamp(value: string) {\n\t\tif (!value || !this._checkValueValidity(value)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst dateStrings = this._splitValueByDelimiter(value); // at least one item guaranteed due to the checks above (non-empty and valid)\n\n\t\tconst parsedDate = this.getValueFormat().parse(dateStrings[0], true) as Date;\n\n\t\treturn parsedDate.getTime() / 1000;\n\t}\n\n\t/**\n\t * Returns a UTC timestamp, representing the last date in the value string or undefined if the value is empty or there is just one date\n\t * @private\n\t */\n\t_extractLastTimestamp(value: string) {\n\t\tif (!value || !this._checkValueValidity(value)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet dateStrings = this._splitValueByDelimiter(value);\n\t\tdateStrings = dateStrings.filter(str => str !== \" \"); // remove empty strings\n\t\tif (dateStrings[1]) {\n\t\t\tconst parsedDate = this.getValueFormat().parse(dateStrings[1], true) as Date;\n\n\t\t\treturn parsedDate.getTime() / 1000;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t_exctractDisplayTimestamp(value: string) {\n\t\tif (!value || !this._checkDisplayValueValidity(value)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (value) {\n\t\t\tconst parsedDate = this.getDisplayFormat().parse(value, true) as Date;\n\n\t\t\treturn parsedDate.getTime() / 1000;\n\t\t}\n\t}\n\n\t/**\n\t * Builds a string value out of two UTC timestamps - this method is the counterpart to _extractFirstTimestamp/_extractLastTimestamp\n\t * @private\n\t */\n\t_buildValue(firstDateTimestamp: number | undefined, lastDateTimestamp: number | undefined): string {\n\t\tthis._prevDelimiter = this._effectiveDelimiter;\n\t\tif (firstDateTimestamp) {\n\t\t\tconst firstDateString = this._getValueStringFromTimestamp(firstDateTimestamp * 1000);\n\n\t\t\tif (!lastDateTimestamp) {\n\t\t\t\treturn firstDateString;\n\t\t\t}\n\n\t\t\tconst lastDateString = this._getValueStringFromTimestamp(lastDateTimestamp * 1000);\n\t\t\treturn `${firstDateString} ${this._effectiveDelimiter} ${lastDateString}`;\n\t\t}\n\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Builds a string value out of two UTC timestamps - this method is the counterpart to _extractFirstTimestamp/_extractLastTimestamp\n\t * @private\n\t */\n\t_buildDisplayValue(firstDateTimestamp: number | undefined, lastDateTimestamp: number | undefined) {\n\t\tthis._prevDelimiter = this._effectiveDelimiter;\n\t\tif (firstDateTimestamp) {\n\t\t\tconst firstDateString = this._getDisplayStringFromTimestamp(firstDateTimestamp * 1000);\n\n\t\t\tif (!lastDateTimestamp) {\n\t\t\t\treturn firstDateString;\n\t\t\t}\n\n\t\t\tconst lastDateString = this._getDisplayStringFromTimestamp(lastDateTimestamp * 1000);\n\t\t\treturn `${firstDateString} ${this._effectiveDelimiter} ${lastDateString}`;\n\t\t}\n\n\t\treturn \"\";\n\t}\n\n\tgetDisplayValueFromValue(value: string): string {\n\t\tif (this.isLiveUpdate) {\n\t\t\treturn value;\n\t\t}\n\n\t\tlet firstDateString = \"\";\n\t\tlet lastDateString = \"\";\n\n\t\tfirstDateString = this._getDisplayStringFromTimestamp((this._extractFirstTimestamp(value) as number) * 1000);\n\t\tlastDateString = this._getDisplayStringFromTimestamp((this._extractLastTimestamp(value) as number) * 1000);\n\n\t\tif (!firstDateString || !lastDateString) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn `${firstDateString} ${this._effectiveDelimiter} ${lastDateString}`;\n\t}\n\n\tget displayValue() : string {\n\t\tif (!this.value) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn this.getDisplayValueFromValue(this.value);\n\t}\n}\n\nDateRangePicker.define();\n\nexport default DateRangePicker;\nexport type {\n\tDateRangePickerChangeEventDetail,\n\tDateRangePickerInputEventDetail,\n};\n"]}
|
package/dist/Input.js
CHANGED
|
@@ -29,7 +29,7 @@ import InputType from "./types/InputType.js";
|
|
|
29
29
|
// Templates
|
|
30
30
|
import InputTemplate from "./InputTemplate.js";
|
|
31
31
|
import * as Filters from "./Filters.js";
|
|
32
|
-
import { VALUE_STATE_SUCCESS, VALUE_STATE_INFORMATION, VALUE_STATE_ERROR, VALUE_STATE_WARNING, VALUE_STATE_TYPE_SUCCESS, VALUE_STATE_TYPE_INFORMATION, VALUE_STATE_TYPE_ERROR, VALUE_STATE_TYPE_WARNING, VALUE_STATE_LINK, VALUE_STATE_LINKS, VALUE_STATE_LINK_MAC, VALUE_STATE_LINKS_MAC, INPUT_SUGGESTIONS, INPUT_SUGGESTIONS_TITLE, INPUT_SUGGESTIONS_ONE_HIT, INPUT_SUGGESTIONS_MORE_HITS, INPUT_SUGGESTIONS_NO_HIT, INPUT_CLEAR_ICON_ACC_NAME, INPUT_AVALIABLE_VALUES, INPUT_SUGGESTIONS_OK_BUTTON, INPUT_SUGGESTIONS_CANCEL_BUTTON, } from "./generated/i18n/i18n-defaults.js";
|
|
32
|
+
import { VALUE_STATE_SUCCESS, VALUE_STATE_INFORMATION, VALUE_STATE_ERROR, VALUE_STATE_WARNING, VALUE_STATE_TYPE_SUCCESS, VALUE_STATE_TYPE_INFORMATION, VALUE_STATE_TYPE_ERROR, VALUE_STATE_TYPE_WARNING, VALUE_STATE_LINK, VALUE_STATE_LINKS, VALUE_STATE_LINK_MAC, VALUE_STATE_LINKS_MAC, INPUT_SUGGESTIONS, INPUT_SUGGESTIONS_TITLE, INPUT_SUGGESTIONS_ONE_HIT, INPUT_SUGGESTIONS_MORE_HITS, INPUT_SUGGESTIONS_NO_HIT, INPUT_CLEAR_ICON_ACC_NAME, INPUT_AVALIABLE_VALUES, INPUT_SUGGESTIONS_OK_BUTTON, INPUT_SUGGESTIONS_CANCEL_BUTTON, INPUT_SUGGESTIONS_EXPANDED, INPUT_SUGGESTIONS_COLLAPSED, } from "./generated/i18n/i18n-defaults.js";
|
|
33
33
|
// Styles
|
|
34
34
|
import inputStyles from "./generated/themes/Input.css.js";
|
|
35
35
|
import ResponsivePopoverCommonCss from "./generated/themes/ResponsivePopoverCommon.css.js";
|
|
@@ -1123,7 +1123,7 @@ let Input = Input_1 = class Input extends UI5Element {
|
|
|
1123
1123
|
return this.readonly && !this.disabled;
|
|
1124
1124
|
}
|
|
1125
1125
|
get _headerTitleText() {
|
|
1126
|
-
return Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
|
|
1126
|
+
return this._associatedLabelsTexts || Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
|
|
1127
1127
|
}
|
|
1128
1128
|
get _suggestionsOkButtonText() {
|
|
1129
1129
|
return Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_OK_BUTTON);
|
|
@@ -1308,16 +1308,18 @@ let Input = Input_1 = class Input extends UI5Element {
|
|
|
1308
1308
|
get availableSuggestionsCount() {
|
|
1309
1309
|
if (this.showSuggestions && (this.value || this.Suggestions?.isOpened())) {
|
|
1310
1310
|
const nonGroupItems = this._selectableItems;
|
|
1311
|
+
const isOpened = this.Suggestions?.isOpened();
|
|
1312
|
+
const stateText = isOpened ? Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_EXPANDED) : Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_COLLAPSED);
|
|
1311
1313
|
switch (nonGroupItems.length) {
|
|
1312
1314
|
case 0:
|
|
1313
|
-
return Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_NO_HIT)
|
|
1315
|
+
return `${Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_NO_HIT)} ${stateText}`;
|
|
1314
1316
|
case 1:
|
|
1315
|
-
return Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_ONE_HIT)
|
|
1317
|
+
return `${Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_ONE_HIT)} ${stateText}`;
|
|
1316
1318
|
default:
|
|
1317
|
-
return Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_MORE_HITS, nonGroupItems.length)
|
|
1319
|
+
return `${Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_MORE_HITS, nonGroupItems.length)} ${stateText}`;
|
|
1318
1320
|
}
|
|
1319
1321
|
}
|
|
1320
|
-
return undefined;
|
|
1322
|
+
return this.showSuggestions ? Input_1.i18nBundle.getText(INPUT_SUGGESTIONS_COLLAPSED) : undefined;
|
|
1321
1323
|
}
|
|
1322
1324
|
get step() {
|
|
1323
1325
|
return this.isTypeNumber ? "any" : undefined;
|