@povio/ui 3.3.0-rc.3 → 3.3.0-rc.4
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/dist/components/buttons/Button/button.cva.d.ts +1 -1
- package/dist/components/inputs/Checkbox/CheckboxGroup.d.ts +5 -1
- package/dist/components/inputs/Checkbox/CheckboxGroup.js +234 -201
- package/dist/components/inputs/DateTime/DateRangePicker/DateRangePicker.d.ts +1 -0
- package/dist/components/inputs/DateTime/DateRangePicker/DateRangePicker.js +142 -127
- package/dist/components/inputs/DateTime/DateTimePicker/DateTimePicker.js +2 -17
- package/dist/components/inputs/DateTime/shared/DateField.js +92 -87
- package/dist/components/inputs/DateTime/shared/DatePickerInput.js +2 -0
- package/dist/components/inputs/DateTime/shared/TimePickerInput.js +144 -134
- package/dist/components/inputs/DateTime/shared/useFirefoxDateSegmentSelectionGuard.d.ts +2 -0
- package/dist/components/inputs/DateTime/shared/useFirefoxDateSegmentSelectionGuard.js +33 -0
- package/dist/components/inputs/Input/NumberInput/NumberInput.js +2 -1
- package/dist/components/inputs/Input/NumberRangeInput/NumberRangeInput.js +2 -1
- package/dist/components/inputs/Selection/Autocomplete/QueryAutocomplete.js +56 -2
- package/dist/components/inputs/Selection/Select/QuerySelect.js +69 -15
- package/dist/components/inputs/Selection/shared/querySelect.utils.d.ts +1 -0
- package/dist/components/inputs/Selection/shared/querySelect.utils.js +1 -0
- package/dist/components/inputs/Selection/shared/select.context.js +19 -9
- package/dist/components/inputs/shared/input.cva.js +1 -1
- package/dist/components/shared/pagination/minWidth.cva.d.ts +1 -1
- package/dist/config/uiConfig.context.d.ts +1 -0
- package/dist/config/uiConfig.context.js +2 -1
- package/dist/helpers/dynamicColumns.js +2 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -1
- package/dist/utils/date-time.utils.d.ts +0 -1
- package/dist/utils/date-time.utils.js +21 -45
- package/dist/utils/intl.utils.d.ts +7 -0
- package/dist/utils/intl.utils.js +38 -0
- package/dist/utils/intl.utils.spec.d.ts +1 -0
- package/package.json +1 -1
|
@@ -135,16 +135,26 @@ var SelectContext;
|
|
|
135
135
|
triggerBlurOnChange
|
|
136
136
|
]);
|
|
137
137
|
const onClear = useCallback(() => {
|
|
138
|
-
if (
|
|
139
|
-
|
|
140
|
-
...
|
|
141
|
-
inputValue: ""
|
|
142
|
-
|
|
138
|
+
if (selectedIds.length === 0) {
|
|
139
|
+
const newFieldState_2 = {
|
|
140
|
+
...fieldState,
|
|
141
|
+
inputValue: "",
|
|
142
|
+
searchValue: ""
|
|
143
|
+
};
|
|
144
|
+
setFieldState(newFieldState_2);
|
|
145
|
+
emitStateChanges(newFieldState_2, true);
|
|
146
|
+
setShowAll(true);
|
|
143
147
|
return;
|
|
144
148
|
}
|
|
145
149
|
if (isMultiple) onChange([]);
|
|
146
150
|
else onChange(null);
|
|
147
|
-
}, [
|
|
151
|
+
}, [
|
|
152
|
+
emitStateChanges,
|
|
153
|
+
fieldState,
|
|
154
|
+
isMultiple,
|
|
155
|
+
onChange,
|
|
156
|
+
selectedIds.length
|
|
157
|
+
]);
|
|
148
158
|
const onSelectAll = useCallback(() => {
|
|
149
159
|
onChange(selectableListItems.map(({ id: id_4 }) => id_4));
|
|
150
160
|
}, [selectableListItems, onChange]);
|
|
@@ -157,13 +167,13 @@ var SelectContext;
|
|
|
157
167
|
]);
|
|
158
168
|
const onBlur = useCallback(() => {
|
|
159
169
|
if (props.isSearchable && isMultiple && fieldState.searchValue !== "") {
|
|
160
|
-
const
|
|
170
|
+
const newFieldState_3 = {
|
|
161
171
|
...fieldState,
|
|
162
172
|
inputValue: "",
|
|
163
173
|
searchValue: ""
|
|
164
174
|
};
|
|
165
|
-
setFieldState(
|
|
166
|
-
emitStateChanges(
|
|
175
|
+
setFieldState(newFieldState_3);
|
|
176
|
+
emitStateChanges(newFieldState_3);
|
|
167
177
|
setShowAll(true);
|
|
168
178
|
}
|
|
169
179
|
fieldOnBlur?.({});
|
|
@@ -48,6 +48,7 @@ export declare namespace UIConfig {
|
|
|
48
48
|
setDateValueOnDateSelection?: boolean;
|
|
49
49
|
timeZone?: string;
|
|
50
50
|
todayIconButtonComponent?: DatePickerProps["todayIconButtonComponent"];
|
|
51
|
+
allowPartialRange?: boolean;
|
|
51
52
|
};
|
|
52
53
|
actionModal: Pick<ActionModalProps, "titleTypography" | "descriptionTypography">;
|
|
53
54
|
bottomSheet: Pick<BottomSheetProps, "closeDragThreshold" | "closeVelocityThreshold" | "hideThumb" | "headerTypography">;
|
|
@@ -78,7 +78,8 @@ var UIConfig;
|
|
|
78
78
|
setDateValueOnDateSelection: false,
|
|
79
79
|
timeZone: "clientLocal",
|
|
80
80
|
granularity: "day",
|
|
81
|
-
shouldUpdateDateOnMonthYearChange: false
|
|
81
|
+
shouldUpdateDateOnMonthYearChange: false,
|
|
82
|
+
allowPartialRange: false
|
|
82
83
|
},
|
|
83
84
|
actionModal: {
|
|
84
85
|
titleTypography: {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IntlUtils } from "../utils/intl.utils.js";
|
|
1
2
|
import { StringUtils } from "../utils/string.utils.js";
|
|
2
3
|
import { ZodUtils } from "../utils/zod.utils.js";
|
|
3
4
|
import { DateUtils } from "../utils/date.utils.js";
|
|
@@ -11,7 +12,7 @@ var FORMAT_MAP = {
|
|
|
11
12
|
return `${DateUtils.formatDate(new Date(value.start))} - ${DateUtils.formatDate(new Date(value.end))}`;
|
|
12
13
|
},
|
|
13
14
|
enum: (value) => StringUtils.capitalize(value),
|
|
14
|
-
number: (value) =>
|
|
15
|
+
number: (value) => IntlUtils.getNumberFormatter(i18next.language).format(value),
|
|
15
16
|
string: (value) => String(value),
|
|
16
17
|
boolean: (value) => {
|
|
17
18
|
const key = `${DEFAULT_NAMESPACE}.${value ? "yes" : "no"}`;
|
package/dist/index.d.ts
CHANGED
|
@@ -254,6 +254,7 @@ export { DateTimeUtils } from './utils/date-time.utils';
|
|
|
254
254
|
export { DomUtils } from './utils/dom.utils';
|
|
255
255
|
export { FileUtils } from './utils/file.utils';
|
|
256
256
|
export { isEqual } from './utils/isEqual';
|
|
257
|
+
export { IntlUtils } from './utils/intl.utils';
|
|
257
258
|
export { logger } from './utils/logger';
|
|
258
259
|
export { ObjectUtils } from './utils/object.utils';
|
|
259
260
|
export { QueriesUtils } from './utils/queries.utils';
|
package/dist/index.js
CHANGED
|
@@ -83,6 +83,7 @@ import { inputBaseDefinition, inputClearClassDefinition, inputContentWrapperDefi
|
|
|
83
83
|
import { CheckboxGroup } from "./components/inputs/Checkbox/CheckboxGroup.js";
|
|
84
84
|
import { useLongPressRepeat } from "./hooks/useLongPressRepeat.js";
|
|
85
85
|
import { useScrollableListBox } from "./hooks/useScrollableListBox.js";
|
|
86
|
+
import { IntlUtils } from "./utils/intl.utils.js";
|
|
86
87
|
import { DateTimeUtils } from "./utils/date-time.utils.js";
|
|
87
88
|
import { datePickerInputContentRowDefinition } from "./components/inputs/DateTime/shared/datePickerInput.cva.js";
|
|
88
89
|
import { popoverDefinition } from "./components/shared/popover.cva.js";
|
|
@@ -177,4 +178,4 @@ import { useSorting } from "./hooks/useSorting.js";
|
|
|
177
178
|
import { useTableColumnConfig } from "./hooks/useTableColumnConfig.js";
|
|
178
179
|
import { ArrayUtils } from "./utils/array.utils.js";
|
|
179
180
|
import { QueriesUtils } from "./utils/queries.utils.js";
|
|
180
|
-
export { Accordion, ActionModal, Alert, AlignCenterIcon, AlignLeftIcon, AlignLeftRightIcon, AlignRightIcon, ArrayUtils, ArrowDropDownIcon, ArrowDropUpIcon, ArrowLeftIcon, ArrowRightIcon, Autocomplete, BoldIcon, BottomSheet, Breadcrumbs, BulletedListIcon, Button, CalendarIcon, CellText, CheckIcon, Checkbox, CheckboxCheckmarkIcon, CheckboxGroup, CheckboxIndeterminateIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsLeftIcon, ChevronsRightIcon, ClockIcon, CloseIcon, ColumnConfigModal, Confirmation, DatePicker, DateRangePicker, DateTimeIcon, DateTimePicker, DateTimeUtils, DateUtils, DomUtils, Drawer, FileUpload, FileUploadContainer, FileUtils, Form, FormField, HeaderText, HighlightIcon, HighlightOnIcon, HomeIcon, IconButton, InfiniteTable, InfoIcon, InlineIconButton, InputUpload, Inputs, ItalicIcon, Link, LinkContext, LinkIcon, Loader, Menu, MenuIcon, MenuItem, MenuPopover, Modal, NumberInput, NumberRangeInput, NumberedListIcon, ObjectUtils, PaginatedTable, Pagination, PaginationList, PasswordInput, Pill, PillButton, PointerHorizontalIcon, PointerVerticalIcon, ProgressBar, QueriesUtils, QueryAutocomplete, QuerySelect, RadioGroup, ResponsivePopover, RestUtils, RoutingUtils, Segment, Select, SendIcon, Slider, SplitButton, Stepper, StrikethroughIcon, StringUtils, Table, Tag, TextArea, TextButton, TextColorIcon, TextInput, ThemeContext, TimePicker, Toast, ToastContainer, Toggle, ToggleButton, Tooltip, TooltipEllipsis, Typography, UIConfig, UIOverrides, UIRouter, UnderlinedIcon, VisibilityIcon, VisibilityOffIcon, ZodUtils, accordionChevronDefinition, accordionDefinition, accordionHeadingDefinition, accordionHeadingSubtitleDefinition, accordionHeadingTitleDefinition, accordionIconDefinition, accordionItemDefinition, accordionPanelContentDefinition, accordionPanelDefinition, accordionTriggerDefinition, alertDefinition, breadcrumbChevronDefinition, breadcrumbIconDefinition, breadcrumbItemDefinition, breadcrumbSegmentDefinition, breadcrumbsDefinition, buttonContentDefinition, buttonDefinition, buttonIconSizeDefinition, buttonSizeDefinition, checkboxContentRowDefinition, checkboxContentWrapperDefinition, checkboxDefinition, checkboxGroupLabelDefinition, checkboxIconDefinition, compoundMapper, createKeyInteractionsHandler, datePickerInputContentRowDefinition, dynamicColumns, dynamicInputs, fileUploadDropZoneDefinition, formFieldDefinition, formFieldErrorDefinition, formFieldHeaderDefinition, formFieldHelperDefinition, getKeyInteractionAction, inputBaseDefinition, inputClearClassDefinition, inputContentWrapperDefinition, inputSideDefinition, inputSizeDefinition, inputUploadButtonDefinition, inputUploadDropZoneDefinition, isEqual, labelDefinition, linkDefinition, loaderDefinition, loaderWrapperDefinition, logger, menuDefinition, menuItemDefinition, menuPopoverDefinition, menuPopoverWrapperDefinition, modalContentDefinition, modalMainDefinition, modalOverlayDefinition, ns, pillButtonContentDefinition, pillButtonDefinition, popoverDefinition, progressBarDefinition, progressBarFillDefinition, progressBarTrackDefinition, progressBarTrackWrapperDefinition, progressBarValueDefinition, radioContentRowDefinition, radioContentWrapperDefinition, radioDefinition, resources, segmentDefinition, segmentItemDefinition, selectInputTagsContentWrapperDefinition, selectListBoxItemDefinition, selectPopoverDefinition, statusIconDefinition, statusSeparatorDefinition, stepperDefinition, stepperIconDefinition, stepperItemDefinition, stepperNumberDefinition, stepperSeparatorDefinition, stepperSubtextDefinition, stepperTitleDefinition, tableCellTextDefinition, tableDataDefinition, tableHeadDataDefinition, tableHeadRowDefinition, tableHeaderTextDefinition, tableRowDefinition, tagDefinition, textAreaWrapperDefinition, toastDefinition, statusIconDefinition$1 as toastStatusIconDefinition, statusSeparatorDefinition$1 as toastStatusSeparatorDefinition, toggleDefinition, tooltipDefinition, tooltipPointerHorizontalDefinition, tooltipPointerVerticalDefinition, tooltipTextDefinition, tooltipWrapperTriggerDefinition, typographyDefinition, uiOutlineClass, useAutosave, useBreakpoint, useDebounceCallback, useDeepCompareEffect, useDeepCompareLayoutEffect, useDeepCompareMemo, useFilters, useForm, useFormAutosave, useIntersectionObserver, useKeyInteractions, useLocalStorage, useLongPressRepeat, usePagination, useScrollableListBox, useSorting, useStateAndRef, useTableColumnConfig, useTableNav, useToast, useTranslationMemo };
|
|
181
|
+
export { Accordion, ActionModal, Alert, AlignCenterIcon, AlignLeftIcon, AlignLeftRightIcon, AlignRightIcon, ArrayUtils, ArrowDropDownIcon, ArrowDropUpIcon, ArrowLeftIcon, ArrowRightIcon, Autocomplete, BoldIcon, BottomSheet, Breadcrumbs, BulletedListIcon, Button, CalendarIcon, CellText, CheckIcon, Checkbox, CheckboxCheckmarkIcon, CheckboxGroup, CheckboxIndeterminateIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsLeftIcon, ChevronsRightIcon, ClockIcon, CloseIcon, ColumnConfigModal, Confirmation, DatePicker, DateRangePicker, DateTimeIcon, DateTimePicker, DateTimeUtils, DateUtils, DomUtils, Drawer, FileUpload, FileUploadContainer, FileUtils, Form, FormField, HeaderText, HighlightIcon, HighlightOnIcon, HomeIcon, IconButton, InfiniteTable, InfoIcon, InlineIconButton, InputUpload, Inputs, IntlUtils, ItalicIcon, Link, LinkContext, LinkIcon, Loader, Menu, MenuIcon, MenuItem, MenuPopover, Modal, NumberInput, NumberRangeInput, NumberedListIcon, ObjectUtils, PaginatedTable, Pagination, PaginationList, PasswordInput, Pill, PillButton, PointerHorizontalIcon, PointerVerticalIcon, ProgressBar, QueriesUtils, QueryAutocomplete, QuerySelect, RadioGroup, ResponsivePopover, RestUtils, RoutingUtils, Segment, Select, SendIcon, Slider, SplitButton, Stepper, StrikethroughIcon, StringUtils, Table, Tag, TextArea, TextButton, TextColorIcon, TextInput, ThemeContext, TimePicker, Toast, ToastContainer, Toggle, ToggleButton, Tooltip, TooltipEllipsis, Typography, UIConfig, UIOverrides, UIRouter, UnderlinedIcon, VisibilityIcon, VisibilityOffIcon, ZodUtils, accordionChevronDefinition, accordionDefinition, accordionHeadingDefinition, accordionHeadingSubtitleDefinition, accordionHeadingTitleDefinition, accordionIconDefinition, accordionItemDefinition, accordionPanelContentDefinition, accordionPanelDefinition, accordionTriggerDefinition, alertDefinition, breadcrumbChevronDefinition, breadcrumbIconDefinition, breadcrumbItemDefinition, breadcrumbSegmentDefinition, breadcrumbsDefinition, buttonContentDefinition, buttonDefinition, buttonIconSizeDefinition, buttonSizeDefinition, checkboxContentRowDefinition, checkboxContentWrapperDefinition, checkboxDefinition, checkboxGroupLabelDefinition, checkboxIconDefinition, compoundMapper, createKeyInteractionsHandler, datePickerInputContentRowDefinition, dynamicColumns, dynamicInputs, fileUploadDropZoneDefinition, formFieldDefinition, formFieldErrorDefinition, formFieldHeaderDefinition, formFieldHelperDefinition, getKeyInteractionAction, inputBaseDefinition, inputClearClassDefinition, inputContentWrapperDefinition, inputSideDefinition, inputSizeDefinition, inputUploadButtonDefinition, inputUploadDropZoneDefinition, isEqual, labelDefinition, linkDefinition, loaderDefinition, loaderWrapperDefinition, logger, menuDefinition, menuItemDefinition, menuPopoverDefinition, menuPopoverWrapperDefinition, modalContentDefinition, modalMainDefinition, modalOverlayDefinition, ns, pillButtonContentDefinition, pillButtonDefinition, popoverDefinition, progressBarDefinition, progressBarFillDefinition, progressBarTrackDefinition, progressBarTrackWrapperDefinition, progressBarValueDefinition, radioContentRowDefinition, radioContentWrapperDefinition, radioDefinition, resources, segmentDefinition, segmentItemDefinition, selectInputTagsContentWrapperDefinition, selectListBoxItemDefinition, selectPopoverDefinition, statusIconDefinition, statusSeparatorDefinition, stepperDefinition, stepperIconDefinition, stepperItemDefinition, stepperNumberDefinition, stepperSeparatorDefinition, stepperSubtextDefinition, stepperTitleDefinition, tableCellTextDefinition, tableDataDefinition, tableHeadDataDefinition, tableHeadRowDefinition, tableHeaderTextDefinition, tableRowDefinition, tagDefinition, textAreaWrapperDefinition, toastDefinition, statusIconDefinition$1 as toastStatusIconDefinition, statusSeparatorDefinition$1 as toastStatusSeparatorDefinition, toggleDefinition, tooltipDefinition, tooltipPointerHorizontalDefinition, tooltipPointerVerticalDefinition, tooltipTextDefinition, tooltipWrapperTriggerDefinition, typographyDefinition, uiOutlineClass, useAutosave, useBreakpoint, useDebounceCallback, useDeepCompareEffect, useDeepCompareLayoutEffect, useDeepCompareMemo, useFilters, useForm, useFormAutosave, useIntersectionObserver, useKeyInteractions, useLocalStorage, useLongPressRepeat, usePagination, useScrollableListBox, useSorting, useStateAndRef, useTableColumnConfig, useTableNav, useToast, useTranslationMemo };
|
|
@@ -38,6 +38,5 @@ export declare namespace DateTimeUtils {
|
|
|
38
38
|
export function fromUTCISOToCalendarDate(isoString: string): CalendarDate;
|
|
39
39
|
export function fromCalendarDateTimeToUTCISO(calendarDateTime: CalendarDateTime): string;
|
|
40
40
|
export function fromUTCISOToCalendarDateTime(isoString: string, timeZone?: string): CalendarDateTime;
|
|
41
|
-
export function formatTextDateToCalendarDateTime(textDate: string | null, timeZone?: string, locale?: string): CalendarDateTime | null;
|
|
42
41
|
export {};
|
|
43
42
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IntlUtils } from "./intl.utils.js";
|
|
1
2
|
import { CalendarDate, CalendarDateTime, DateFormatter, fromDate, getLocalTimeZone, parseAbsolute } from "@internationalized/date";
|
|
2
3
|
import { DateTime } from "luxon";
|
|
3
4
|
//#region src/utils/date-time.utils.ts
|
|
@@ -5,33 +6,42 @@ var DateTimeUtils;
|
|
|
5
6
|
(function(_DateTimeUtils) {
|
|
6
7
|
const DATE_SAMPLE_DATE_UTC = new Date(Date.UTC(2e3, 10, 22));
|
|
7
8
|
const TIME_SAMPLE_DATE_UTC = new Date(Date.UTC(2e3, 10, 22, 6, 45));
|
|
9
|
+
const timeFormatters = /* @__PURE__ */ new Map();
|
|
8
10
|
const getDayMonthFormat = (shouldForceLeadingZeros = false) => shouldForceLeadingZeros ? "2-digit" : "numeric";
|
|
9
11
|
const getTimeHourFormat = (shouldForceLeadingZeros = false) => shouldForceLeadingZeros ? "2-digit" : "numeric";
|
|
10
|
-
const getDatePlaceholderFormatter = (locale, options) =>
|
|
12
|
+
const getDatePlaceholderFormatter = (locale, options) => IntlUtils.getDateTimeFormatter(locale, {
|
|
11
13
|
day: getDayMonthFormat(options?.shouldForceLeadingZeros),
|
|
12
14
|
month: getDayMonthFormat(options?.shouldForceLeadingZeros),
|
|
13
15
|
year: "numeric"
|
|
14
16
|
});
|
|
15
|
-
const getTimePlaceholderFormatter = (locale) =>
|
|
17
|
+
const getTimePlaceholderFormatter = (locale) => IntlUtils.getDateTimeFormatter(locale, {
|
|
16
18
|
hour: "2-digit",
|
|
17
19
|
minute: "2-digit"
|
|
18
20
|
});
|
|
19
21
|
const getResolvedLocale = (locale) => {
|
|
20
22
|
if (locale) return locale;
|
|
21
|
-
return
|
|
23
|
+
return IntlUtils.getDateTimeFormatter().resolvedOptions().locale;
|
|
22
24
|
};
|
|
23
|
-
const getDateFormatter = (locale, options) =>
|
|
25
|
+
const getDateFormatter = (locale, options) => IntlUtils.getDateTimeFormatter(getResolvedLocale(locale), {
|
|
24
26
|
day: getDayMonthFormat(options?.shouldForceLeadingZeros),
|
|
25
27
|
month: getDayMonthFormat(options?.shouldForceLeadingZeros),
|
|
26
28
|
year: "numeric",
|
|
27
29
|
timeZone: "UTC"
|
|
28
30
|
});
|
|
29
|
-
const getTimeFormatter = (locale, options) =>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
const getTimeFormatter = (locale, options) => {
|
|
32
|
+
const resolvedLocale = getResolvedLocale(locale);
|
|
33
|
+
const key = `${resolvedLocale}|${options?.shouldForceLeadingZeros ?? false}`;
|
|
34
|
+
const cachedFormatter = timeFormatters.get(key);
|
|
35
|
+
if (cachedFormatter) return cachedFormatter;
|
|
36
|
+
const formatter = new DateFormatter(resolvedLocale, {
|
|
37
|
+
hour: getTimeHourFormat(options?.shouldForceLeadingZeros),
|
|
38
|
+
minute: "2-digit",
|
|
39
|
+
timeZone: "UTC"
|
|
40
|
+
});
|
|
41
|
+
timeFormatters.set(key, formatter);
|
|
42
|
+
return formatter;
|
|
43
|
+
};
|
|
44
|
+
const getDateTimeFormatter = (locale, options) => IntlUtils.getDateTimeFormatter(getResolvedLocale(locale), {
|
|
35
45
|
day: getDayMonthFormat(options?.shouldForceLeadingZeros),
|
|
36
46
|
month: getDayMonthFormat(options?.shouldForceLeadingZeros),
|
|
37
47
|
year: "numeric",
|
|
@@ -39,22 +49,8 @@ var DateTimeUtils;
|
|
|
39
49
|
minute: "2-digit",
|
|
40
50
|
timeZone: "UTC"
|
|
41
51
|
});
|
|
42
|
-
const getLocaleDateFormat = (locale) => {
|
|
43
|
-
const sampleDate = new Date(Date.UTC(2e3, 10, 22));
|
|
44
|
-
return new Intl.DateTimeFormat(locale, {
|
|
45
|
-
day: "2-digit",
|
|
46
|
-
month: "2-digit",
|
|
47
|
-
year: "numeric",
|
|
48
|
-
timeZone: "UTC"
|
|
49
|
-
}).formatToParts(sampleDate).map((part) => {
|
|
50
|
-
if (part.type === "day") return "dd";
|
|
51
|
-
if (part.type === "month") return "MM";
|
|
52
|
-
if (part.type === "year") return "yyyy";
|
|
53
|
-
return part.value;
|
|
54
|
-
}).join("");
|
|
55
|
-
};
|
|
56
52
|
const repeatLocalizedFieldLabel = (type, length, locale) => {
|
|
57
|
-
const placeholderChar =
|
|
53
|
+
const placeholderChar = IntlUtils.getDisplayNamesFormatter(getResolvedLocale(locale), { type: "dateTimeField" }).of(type)?.trim().charAt(0).toLocaleLowerCase(getResolvedLocale(locale));
|
|
58
54
|
if (!placeholderChar) return null;
|
|
59
55
|
return placeholderChar.repeat(length);
|
|
60
56
|
};
|
|
@@ -191,26 +187,6 @@ var DateTimeUtils;
|
|
|
191
187
|
return new CalendarDateTime(zonedDateTime.year, zonedDateTime.month, zonedDateTime.day, zonedDateTime.hour, zonedDateTime.minute, zonedDateTime.second, zonedDateTime.millisecond);
|
|
192
188
|
}
|
|
193
189
|
_DateTimeUtils.fromUTCISOToCalendarDateTime = fromUTCISOToCalendarDateTime;
|
|
194
|
-
function formatTextDateToCalendarDateTime(textDate, timeZone, locale) {
|
|
195
|
-
if (!textDate?.includes("hh")) return null;
|
|
196
|
-
const datePart = textDate.split(",").at(0)?.trim();
|
|
197
|
-
if (!datePart) return null;
|
|
198
|
-
const resolvedTimeZone = resolveTimeZone(timeZone);
|
|
199
|
-
const resolvedLocale = locale || Intl.DateTimeFormat().resolvedOptions().locale;
|
|
200
|
-
const localeDateFormat = getLocaleDateFormat(resolvedLocale);
|
|
201
|
-
const parseOptions = {
|
|
202
|
-
zone: resolvedTimeZone,
|
|
203
|
-
locale: resolvedLocale
|
|
204
|
-
};
|
|
205
|
-
let parsedDateTime = DateTime.fromFormat(datePart, localeDateFormat, parseOptions);
|
|
206
|
-
if (!parsedDateTime.isValid && localeDateFormat.includes("yyyy")) {
|
|
207
|
-
const shortYearFormat = localeDateFormat.replace("yyyy", "yy");
|
|
208
|
-
parsedDateTime = DateTime.fromFormat(datePart, shortYearFormat, parseOptions);
|
|
209
|
-
}
|
|
210
|
-
if (!parsedDateTime.isValid) return null;
|
|
211
|
-
return new CalendarDateTime(parsedDateTime.year, parsedDateTime.month, parsedDateTime.day, 0, 0, 0, 0);
|
|
212
|
-
}
|
|
213
|
-
_DateTimeUtils.formatTextDateToCalendarDateTime = formatTextDateToCalendarDateTime;
|
|
214
190
|
})(DateTimeUtils || (DateTimeUtils = {}));
|
|
215
191
|
//#endregion
|
|
216
192
|
export { DateTimeUtils };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type IntlLocale = Intl.LocalesArgument;
|
|
2
|
+
export declare namespace IntlUtils {
|
|
3
|
+
const getDateTimeFormatter: (locale?: IntlLocale, options?: Intl.DateTimeFormatOptions) => Intl.DateTimeFormat;
|
|
4
|
+
const getDisplayNamesFormatter: (locale: IntlLocale, options: Intl.DisplayNamesOptions) => Intl.DisplayNames;
|
|
5
|
+
const getNumberFormatter: (locale?: IntlLocale, options?: Intl.NumberFormatOptions) => Intl.NumberFormat;
|
|
6
|
+
}
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/utils/intl.utils.ts
|
|
2
|
+
var formatterCacheKey = (locale, options) => {
|
|
3
|
+
const locales = Array.isArray(locale) ? locale.map(String) : locale ? [String(locale)] : [];
|
|
4
|
+
const normalizedOptions = Object.entries(options ?? {}).sort(([left], [right]) => left.localeCompare(right));
|
|
5
|
+
return JSON.stringify([locales, normalizedOptions]);
|
|
6
|
+
};
|
|
7
|
+
var IntlUtils;
|
|
8
|
+
(function(_IntlUtils) {
|
|
9
|
+
const dateTimeFormatters = /* @__PURE__ */ new Map();
|
|
10
|
+
const displayNamesFormatters = /* @__PURE__ */ new Map();
|
|
11
|
+
const numberFormatters = /* @__PURE__ */ new Map();
|
|
12
|
+
_IntlUtils.getDateTimeFormatter = (locale, options) => {
|
|
13
|
+
const key = formatterCacheKey(locale, options);
|
|
14
|
+
const cachedFormatter = dateTimeFormatters.get(key);
|
|
15
|
+
if (cachedFormatter) return cachedFormatter;
|
|
16
|
+
const formatter = new Intl.DateTimeFormat(locale, options);
|
|
17
|
+
dateTimeFormatters.set(key, formatter);
|
|
18
|
+
return formatter;
|
|
19
|
+
};
|
|
20
|
+
_IntlUtils.getDisplayNamesFormatter = (locale, options) => {
|
|
21
|
+
const key = formatterCacheKey(locale, options);
|
|
22
|
+
const cachedFormatter = displayNamesFormatters.get(key);
|
|
23
|
+
if (cachedFormatter) return cachedFormatter;
|
|
24
|
+
const formatter = new Intl.DisplayNames(locale, options);
|
|
25
|
+
displayNamesFormatters.set(key, formatter);
|
|
26
|
+
return formatter;
|
|
27
|
+
};
|
|
28
|
+
_IntlUtils.getNumberFormatter = (locale, options) => {
|
|
29
|
+
const key = formatterCacheKey(locale, options);
|
|
30
|
+
const cachedFormatter = numberFormatters.get(key);
|
|
31
|
+
if (cachedFormatter) return cachedFormatter;
|
|
32
|
+
const formatter = new Intl.NumberFormat(locale, options);
|
|
33
|
+
numberFormatters.set(key, formatter);
|
|
34
|
+
return formatter;
|
|
35
|
+
};
|
|
36
|
+
})(IntlUtils || (IntlUtils = {}));
|
|
37
|
+
//#endregion
|
|
38
|
+
export { IntlUtils };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|