@chayns-components/date 5.0.0-beta.1219 → 5.0.0-beta.1220
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/lib/cjs/types/dateinfo.js.map +1 -1
- package/lib/cjs/utils/dateInfo.js +7 -6
- package/lib/cjs/utils/dateInfo.js.map +1 -1
- package/lib/esm/types/dateinfo.js.map +1 -1
- package/lib/esm/utils/dateInfo.js +7 -6
- package/lib/esm/utils/dateInfo.js.map +1 -1
- package/lib/types/types/dateinfo.d.ts +10 -5
- package/lib/types/utils/dateInfo.d.ts +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateinfo.js","names":[],"sources":["../../../src/types/dateinfo.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"dateinfo.js","names":[],"sources":["../../../src/types/dateinfo.ts"],"sourcesContent":["import type { Language } from 'chayns-api';\n\nexport interface UseDateInfoOptions {\n /**\n * The date that should be displayed\n */\n date: Date;\n /**\n * The language that should be used for the date. Defaults to the active language given by chayns api.\n */\n language?: Language;\n /**\n * Additional text for the \"shouldShowDateToNowDifference\" prop. Writes a text before the calculated time.\n */\n preText?: string;\n /**\n * Adds the current year to the display\n */\n shouldShowYear?: boolean;\n /**\n * Adds the time to the display.\n */\n shouldShowTime?: boolean;\n /**\n * Whether the relative day of the week to today should be shown (today, yesterday or tomorrow).\n */\n shouldShowRelativeDayOfWeek?: boolean;\n /**\n * Shortens the day and month text to the maximum three digits\n */\n shouldUseShortText?: boolean;\n /**\n * Adds the day of the week to the display\n */\n shouldShowDayOfWeek?: boolean;\n /**\n * Shows the difference from the date to now. The component handles updates itself.\n */\n shouldShowDateToNowDifference?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -8,6 +8,7 @@ var _chaynsApi = require("chayns-api");
|
|
|
8
8
|
var _date = require("./date");
|
|
9
9
|
const getDateInfo = ({
|
|
10
10
|
date,
|
|
11
|
+
language,
|
|
11
12
|
shouldShowYear,
|
|
12
13
|
shouldShowTime,
|
|
13
14
|
shouldShowDayOfWeek,
|
|
@@ -15,11 +16,11 @@ const getDateInfo = ({
|
|
|
15
16
|
shouldUseShortText
|
|
16
17
|
}) => {
|
|
17
18
|
const {
|
|
18
|
-
active:
|
|
19
|
+
active: activeLanguage
|
|
19
20
|
} = (0, _chaynsApi.getLanguage)();
|
|
20
21
|
let dayPart = '';
|
|
21
22
|
if (shouldShowRelativeDayOfWeek) {
|
|
22
|
-
const rtf = new Intl.RelativeTimeFormat(language, {
|
|
23
|
+
const rtf = new Intl.RelativeTimeFormat(language ?? activeLanguage, {
|
|
23
24
|
numeric: 'auto'
|
|
24
25
|
});
|
|
25
26
|
if ((0, _date.isToday)(date)) {
|
|
@@ -33,7 +34,7 @@ const getDateInfo = ({
|
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
if (!dayPart && shouldShowDayOfWeek) {
|
|
36
|
-
dayPart = date.toLocaleDateString(language, {
|
|
37
|
+
dayPart = date.toLocaleDateString(language ?? activeLanguage, {
|
|
37
38
|
weekday: shouldUseShortText ? 'short' : 'long'
|
|
38
39
|
});
|
|
39
40
|
}
|
|
@@ -51,15 +52,15 @@ const getDateInfo = ({
|
|
|
51
52
|
}
|
|
52
53
|
let formattedTime = '';
|
|
53
54
|
if (Object.keys(timeParts).length > 0) {
|
|
54
|
-
formattedTime = `, ${date.toLocaleTimeString(language, {
|
|
55
|
+
formattedTime = `, ${date.toLocaleTimeString(language ?? activeLanguage, {
|
|
55
56
|
...timeParts
|
|
56
57
|
})}`;
|
|
57
58
|
}
|
|
58
59
|
const hourWord = getTimeString({
|
|
59
|
-
language
|
|
60
|
+
language: language ?? activeLanguage
|
|
60
61
|
});
|
|
61
62
|
formattedTime += shouldShowTime ? ` ${hourWord}` : '';
|
|
62
|
-
const formattedDate = `${date.toLocaleDateString(language, dateParts)}${formattedTime}`;
|
|
63
|
+
const formattedDate = `${date.toLocaleDateString(language ?? activeLanguage, dateParts)}${formattedTime}`;
|
|
63
64
|
return `${dayPart}${dayPart ? ', ' : ''}${formattedDate}`;
|
|
64
65
|
};
|
|
65
66
|
exports.getDateInfo = getDateInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateInfo.js","names":["_chaynsApi","require","_date","getDateInfo","date","shouldShowYear","shouldShowTime","shouldShowDayOfWeek","shouldShowRelativeDayOfWeek","shouldUseShortText","active","
|
|
1
|
+
{"version":3,"file":"dateInfo.js","names":["_chaynsApi","require","_date","getDateInfo","date","language","shouldShowYear","shouldShowTime","shouldShowDayOfWeek","shouldShowRelativeDayOfWeek","shouldUseShortText","active","activeLanguage","getLanguage","dayPart","rtf","Intl","RelativeTimeFormat","numeric","isToday","capitalizeFirstLetter","format","isTomorrow","isYesterday","toLocaleDateString","weekday","dateParts","day","month","isCurrentYear","year","timeParts","hour","minute","formattedTime","Object","keys","length","toLocaleTimeString","hourWord","getTimeString","formattedDate","exports","text","charAt","toUpperCase","slice","getTimeTillNow","currentDate","Language","English","diffInSeconds","Math","floor","getTime","isPast","units","label","seconds","absDiff","abs","find","u","count","formatter","getFormattedTime","shouldShowSeconds","timeOptions","second","undefined","replace","trim","map","nl","fr","de","es","it","pt","pl","tr","uk","en"],"sources":["../../../src/utils/dateInfo.ts"],"sourcesContent":["import { getLanguage, Language } from 'chayns-api';\nimport { UseDateInfoOptions } from '../types/dateinfo';\nimport { isCurrentYear, isToday, isTomorrow, isYesterday } from './date';\n\nexport const getDateInfo = ({\n date,\n language,\n shouldShowYear,\n shouldShowTime,\n shouldShowDayOfWeek,\n shouldShowRelativeDayOfWeek,\n shouldUseShortText,\n}: Omit<UseDateInfoOptions, 'shouldShowDateToNowDifference' & 'preText'>) => {\n const { active: activeLanguage } = getLanguage();\n\n let dayPart = '';\n\n if (shouldShowRelativeDayOfWeek) {\n const rtf = new Intl.RelativeTimeFormat(language ?? activeLanguage, { numeric: 'auto' });\n\n if (isToday(date)) {\n dayPart = capitalizeFirstLetter(rtf.format(0, 'day'));\n }\n\n if (isTomorrow(date)) {\n dayPart = capitalizeFirstLetter(rtf.format(1, 'day'));\n }\n\n if (isYesterday(date)) {\n dayPart = capitalizeFirstLetter(rtf.format(-1, 'day'));\n }\n }\n\n if (!dayPart && shouldShowDayOfWeek) {\n dayPart = date.toLocaleDateString(language ?? activeLanguage, {\n weekday: shouldUseShortText ? 'short' : 'long',\n });\n }\n\n const dateParts: Intl.DateTimeFormatOptions = {\n day: '2-digit',\n month: shouldUseShortText ? 'short' : 'long',\n };\n\n if (shouldShowYear && !isCurrentYear(date)) {\n dateParts.year = 'numeric';\n }\n\n const timeParts: Intl.DateTimeFormatOptions = {};\n\n if (shouldShowTime) {\n timeParts.hour = '2-digit';\n timeParts.minute = '2-digit';\n }\n\n let formattedTime = '';\n if (Object.keys(timeParts).length > 0) {\n formattedTime = `, ${date.toLocaleTimeString(language ?? activeLanguage, { ...timeParts })}`;\n }\n\n const hourWord = getTimeString({ language: language ?? activeLanguage });\n\n formattedTime += shouldShowTime ? ` ${hourWord}` : '';\n\n const formattedDate = `${date.toLocaleDateString(language ?? activeLanguage, dateParts)}${formattedTime}`;\n\n return `${dayPart}${dayPart ? ', ' : ''}${formattedDate}`;\n};\n\nconst capitalizeFirstLetter = (text: string): string =>\n text.charAt(0).toUpperCase() + text.slice(1);\n\ntype RelativeTimeUnit = 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second';\n\ninterface GetTimeTillNow {\n date: Date;\n currentDate: Date;\n language: Language;\n}\n\nexport const getTimeTillNow = ({\n date,\n currentDate,\n language = Language.English,\n}: GetTimeTillNow): string => {\n const diffInSeconds = Math.floor((currentDate.getTime() - date.getTime()) / 1000);\n const isPast = diffInSeconds > 0;\n\n const units: { label: RelativeTimeUnit; seconds: number }[] = [\n { label: 'year', seconds: 31536000 },\n { label: 'month', seconds: 2592000 },\n { label: 'day', seconds: 86400 },\n { label: 'hour', seconds: 3600 },\n { label: 'minute', seconds: 60 },\n { label: 'second', seconds: 1 },\n ];\n\n const absDiff = Math.abs(diffInSeconds);\n const { label, seconds } = units.find((u) => absDiff >= u.seconds) || {\n label: 'second',\n seconds: 1,\n };\n const count = Math.floor(absDiff / seconds);\n\n const formatter = new Intl.RelativeTimeFormat(language, { numeric: 'auto' });\n\n return formatter.format(isPast ? -count : count, label);\n};\n\ninterface GetFormattedTimeOptions {\n date: Date;\n shouldShowSeconds?: boolean;\n}\n\nexport const getFormattedTime = ({\n date,\n shouldShowSeconds = false,\n}: GetFormattedTimeOptions): string => {\n const { active: language } = getLanguage();\n\n const timeOptions: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n minute: '2-digit',\n second: shouldShowSeconds ? '2-digit' : undefined,\n };\n\n const formattedTime = date.toLocaleTimeString(language, timeOptions).replace(/^0/, '');\n\n const hourWord = getTimeString({ language });\n\n return `${formattedTime} ${hourWord}`.trim();\n};\n\ninterface GetTimeStringProps {\n language?: Language;\n}\n\nexport const getTimeString = ({ language }: GetTimeStringProps) => {\n const map: { [key: string]: string } = {\n nl: 'uur',\n fr: 'heures',\n de: 'Uhr',\n es: 'horas',\n it: 'ore',\n pt: 'horas',\n pl: 'godzina',\n tr: 'saat',\n uk: 'година',\n en: '',\n };\n\n return map[language ?? ''] ?? '';\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateinfo.js","names":[],"sources":["../../../src/types/dateinfo.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"dateinfo.js","names":[],"sources":["../../../src/types/dateinfo.ts"],"sourcesContent":["import type { Language } from 'chayns-api';\n\nexport interface UseDateInfoOptions {\n /**\n * The date that should be displayed\n */\n date: Date;\n /**\n * The language that should be used for the date. Defaults to the active language given by chayns api.\n */\n language?: Language;\n /**\n * Additional text for the \"shouldShowDateToNowDifference\" prop. Writes a text before the calculated time.\n */\n preText?: string;\n /**\n * Adds the current year to the display\n */\n shouldShowYear?: boolean;\n /**\n * Adds the time to the display.\n */\n shouldShowTime?: boolean;\n /**\n * Whether the relative day of the week to today should be shown (today, yesterday or tomorrow).\n */\n shouldShowRelativeDayOfWeek?: boolean;\n /**\n * Shortens the day and month text to the maximum three digits\n */\n shouldUseShortText?: boolean;\n /**\n * Adds the day of the week to the display\n */\n shouldShowDayOfWeek?: boolean;\n /**\n * Shows the difference from the date to now. The component handles updates itself.\n */\n shouldShowDateToNowDifference?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@ import { getLanguage, Language } from 'chayns-api';
|
|
|
2
2
|
import { isCurrentYear, isToday, isTomorrow, isYesterday } from './date';
|
|
3
3
|
export const getDateInfo = ({
|
|
4
4
|
date,
|
|
5
|
+
language,
|
|
5
6
|
shouldShowYear,
|
|
6
7
|
shouldShowTime,
|
|
7
8
|
shouldShowDayOfWeek,
|
|
@@ -9,11 +10,11 @@ export const getDateInfo = ({
|
|
|
9
10
|
shouldUseShortText
|
|
10
11
|
}) => {
|
|
11
12
|
const {
|
|
12
|
-
active:
|
|
13
|
+
active: activeLanguage
|
|
13
14
|
} = getLanguage();
|
|
14
15
|
let dayPart = '';
|
|
15
16
|
if (shouldShowRelativeDayOfWeek) {
|
|
16
|
-
const rtf = new Intl.RelativeTimeFormat(language, {
|
|
17
|
+
const rtf = new Intl.RelativeTimeFormat(language ?? activeLanguage, {
|
|
17
18
|
numeric: 'auto'
|
|
18
19
|
});
|
|
19
20
|
if (isToday(date)) {
|
|
@@ -27,7 +28,7 @@ export const getDateInfo = ({
|
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
if (!dayPart && shouldShowDayOfWeek) {
|
|
30
|
-
dayPart = date.toLocaleDateString(language, {
|
|
31
|
+
dayPart = date.toLocaleDateString(language ?? activeLanguage, {
|
|
31
32
|
weekday: shouldUseShortText ? 'short' : 'long'
|
|
32
33
|
});
|
|
33
34
|
}
|
|
@@ -45,15 +46,15 @@ export const getDateInfo = ({
|
|
|
45
46
|
}
|
|
46
47
|
let formattedTime = '';
|
|
47
48
|
if (Object.keys(timeParts).length > 0) {
|
|
48
|
-
formattedTime = `, ${date.toLocaleTimeString(language, {
|
|
49
|
+
formattedTime = `, ${date.toLocaleTimeString(language ?? activeLanguage, {
|
|
49
50
|
...timeParts
|
|
50
51
|
})}`;
|
|
51
52
|
}
|
|
52
53
|
const hourWord = getTimeString({
|
|
53
|
-
language
|
|
54
|
+
language: language ?? activeLanguage
|
|
54
55
|
});
|
|
55
56
|
formattedTime += shouldShowTime ? ` ${hourWord}` : '';
|
|
56
|
-
const formattedDate = `${date.toLocaleDateString(language, dateParts)}${formattedTime}`;
|
|
57
|
+
const formattedDate = `${date.toLocaleDateString(language ?? activeLanguage, dateParts)}${formattedTime}`;
|
|
57
58
|
return `${dayPart}${dayPart ? ', ' : ''}${formattedDate}`;
|
|
58
59
|
};
|
|
59
60
|
const capitalizeFirstLetter = text => text.charAt(0).toUpperCase() + text.slice(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateInfo.js","names":["getLanguage","Language","isCurrentYear","isToday","isTomorrow","isYesterday","getDateInfo","date","shouldShowYear","shouldShowTime","shouldShowDayOfWeek","shouldShowRelativeDayOfWeek","shouldUseShortText","active","
|
|
1
|
+
{"version":3,"file":"dateInfo.js","names":["getLanguage","Language","isCurrentYear","isToday","isTomorrow","isYesterday","getDateInfo","date","language","shouldShowYear","shouldShowTime","shouldShowDayOfWeek","shouldShowRelativeDayOfWeek","shouldUseShortText","active","activeLanguage","dayPart","rtf","Intl","RelativeTimeFormat","numeric","capitalizeFirstLetter","format","toLocaleDateString","weekday","dateParts","day","month","year","timeParts","hour","minute","formattedTime","Object","keys","length","toLocaleTimeString","hourWord","getTimeString","formattedDate","text","charAt","toUpperCase","slice","getTimeTillNow","currentDate","English","diffInSeconds","Math","floor","getTime","isPast","units","label","seconds","absDiff","abs","find","u","count","formatter","getFormattedTime","shouldShowSeconds","timeOptions","second","undefined","replace","trim","map","nl","fr","de","es","it","pt","pl","tr","uk","en"],"sources":["../../../src/utils/dateInfo.ts"],"sourcesContent":["import { getLanguage, Language } from 'chayns-api';\nimport { UseDateInfoOptions } from '../types/dateinfo';\nimport { isCurrentYear, isToday, isTomorrow, isYesterday } from './date';\n\nexport const getDateInfo = ({\n date,\n language,\n shouldShowYear,\n shouldShowTime,\n shouldShowDayOfWeek,\n shouldShowRelativeDayOfWeek,\n shouldUseShortText,\n}: Omit<UseDateInfoOptions, 'shouldShowDateToNowDifference' & 'preText'>) => {\n const { active: activeLanguage } = getLanguage();\n\n let dayPart = '';\n\n if (shouldShowRelativeDayOfWeek) {\n const rtf = new Intl.RelativeTimeFormat(language ?? activeLanguage, { numeric: 'auto' });\n\n if (isToday(date)) {\n dayPart = capitalizeFirstLetter(rtf.format(0, 'day'));\n }\n\n if (isTomorrow(date)) {\n dayPart = capitalizeFirstLetter(rtf.format(1, 'day'));\n }\n\n if (isYesterday(date)) {\n dayPart = capitalizeFirstLetter(rtf.format(-1, 'day'));\n }\n }\n\n if (!dayPart && shouldShowDayOfWeek) {\n dayPart = date.toLocaleDateString(language ?? activeLanguage, {\n weekday: shouldUseShortText ? 'short' : 'long',\n });\n }\n\n const dateParts: Intl.DateTimeFormatOptions = {\n day: '2-digit',\n month: shouldUseShortText ? 'short' : 'long',\n };\n\n if (shouldShowYear && !isCurrentYear(date)) {\n dateParts.year = 'numeric';\n }\n\n const timeParts: Intl.DateTimeFormatOptions = {};\n\n if (shouldShowTime) {\n timeParts.hour = '2-digit';\n timeParts.minute = '2-digit';\n }\n\n let formattedTime = '';\n if (Object.keys(timeParts).length > 0) {\n formattedTime = `, ${date.toLocaleTimeString(language ?? activeLanguage, { ...timeParts })}`;\n }\n\n const hourWord = getTimeString({ language: language ?? activeLanguage });\n\n formattedTime += shouldShowTime ? ` ${hourWord}` : '';\n\n const formattedDate = `${date.toLocaleDateString(language ?? activeLanguage, dateParts)}${formattedTime}`;\n\n return `${dayPart}${dayPart ? ', ' : ''}${formattedDate}`;\n};\n\nconst capitalizeFirstLetter = (text: string): string =>\n text.charAt(0).toUpperCase() + text.slice(1);\n\ntype RelativeTimeUnit = 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second';\n\ninterface GetTimeTillNow {\n date: Date;\n currentDate: Date;\n language: Language;\n}\n\nexport const getTimeTillNow = ({\n date,\n currentDate,\n language = Language.English,\n}: GetTimeTillNow): string => {\n const diffInSeconds = Math.floor((currentDate.getTime() - date.getTime()) / 1000);\n const isPast = diffInSeconds > 0;\n\n const units: { label: RelativeTimeUnit; seconds: number }[] = [\n { label: 'year', seconds: 31536000 },\n { label: 'month', seconds: 2592000 },\n { label: 'day', seconds: 86400 },\n { label: 'hour', seconds: 3600 },\n { label: 'minute', seconds: 60 },\n { label: 'second', seconds: 1 },\n ];\n\n const absDiff = Math.abs(diffInSeconds);\n const { label, seconds } = units.find((u) => absDiff >= u.seconds) || {\n label: 'second',\n seconds: 1,\n };\n const count = Math.floor(absDiff / seconds);\n\n const formatter = new Intl.RelativeTimeFormat(language, { numeric: 'auto' });\n\n return formatter.format(isPast ? -count : count, label);\n};\n\ninterface GetFormattedTimeOptions {\n date: Date;\n shouldShowSeconds?: boolean;\n}\n\nexport const getFormattedTime = ({\n date,\n shouldShowSeconds = false,\n}: GetFormattedTimeOptions): string => {\n const { active: language } = getLanguage();\n\n const timeOptions: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n minute: '2-digit',\n second: shouldShowSeconds ? '2-digit' : undefined,\n };\n\n const formattedTime = date.toLocaleTimeString(language, timeOptions).replace(/^0/, '');\n\n const hourWord = getTimeString({ language });\n\n return `${formattedTime} ${hourWord}`.trim();\n};\n\ninterface GetTimeStringProps {\n language?: Language;\n}\n\nexport const getTimeString = ({ language }: GetTimeStringProps) => {\n const map: { [key: string]: string } = {\n nl: 'uur',\n fr: 'heures',\n de: 'Uhr',\n es: 'horas',\n it: 'ore',\n pt: 'horas',\n pl: 'godzina',\n tr: 'saat',\n uk: 'година',\n en: '',\n };\n\n return map[language ?? ''] ?? '';\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
import type { Language } from 'chayns-api';
|
|
1
2
|
export interface UseDateInfoOptions {
|
|
2
3
|
/**
|
|
3
|
-
* The date
|
|
4
|
+
* The date that should be displayed
|
|
4
5
|
*/
|
|
5
6
|
date: Date;
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
+
* The language that should be used for the date. Defaults to the active language given by chayns api.
|
|
9
|
+
*/
|
|
10
|
+
language?: Language;
|
|
11
|
+
/**
|
|
12
|
+
* Additional text for the "shouldShowDateToNowDifference" prop. Writes a text before the calculated time.
|
|
8
13
|
*/
|
|
9
14
|
preText?: string;
|
|
10
15
|
/**
|
|
@@ -16,15 +21,15 @@ export interface UseDateInfoOptions {
|
|
|
16
21
|
*/
|
|
17
22
|
shouldShowTime?: boolean;
|
|
18
23
|
/**
|
|
19
|
-
* Whether the relative day of week to today should be shown (today, yesterday or tomorrow).
|
|
24
|
+
* Whether the relative day of the week to today should be shown (today, yesterday or tomorrow).
|
|
20
25
|
*/
|
|
21
26
|
shouldShowRelativeDayOfWeek?: boolean;
|
|
22
27
|
/**
|
|
23
|
-
* Shortens the day and month text to maximum three digits
|
|
28
|
+
* Shortens the day and month text to the maximum three digits
|
|
24
29
|
*/
|
|
25
30
|
shouldUseShortText?: boolean;
|
|
26
31
|
/**
|
|
27
|
-
* Adds the day of week to the display
|
|
32
|
+
* Adds the day of the week to the display
|
|
28
33
|
*/
|
|
29
34
|
shouldShowDayOfWeek?: boolean;
|
|
30
35
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Language } from 'chayns-api';
|
|
2
2
|
import { UseDateInfoOptions } from '../types/dateinfo';
|
|
3
|
-
export declare const getDateInfo: ({ date, shouldShowYear, shouldShowTime, shouldShowDayOfWeek, shouldShowRelativeDayOfWeek, shouldUseShortText, }: Omit<UseDateInfoOptions, "shouldShowDateToNowDifference" & "preText">) => string;
|
|
3
|
+
export declare const getDateInfo: ({ date, language, shouldShowYear, shouldShowTime, shouldShowDayOfWeek, shouldShowRelativeDayOfWeek, shouldUseShortText, }: Omit<UseDateInfoOptions, "shouldShowDateToNowDifference" & "preText">) => string;
|
|
4
4
|
interface GetTimeTillNow {
|
|
5
5
|
date: Date;
|
|
6
6
|
currentDate: Date;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chayns-components/date",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.1220",
|
|
4
4
|
"description": "A set of beautiful React components for developing your own applications with chayns.",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"browserslist": [
|
|
@@ -82,5 +82,5 @@
|
|
|
82
82
|
"publishConfig": {
|
|
83
83
|
"access": "public"
|
|
84
84
|
},
|
|
85
|
-
"gitHead": "
|
|
85
|
+
"gitHead": "678b34bf296096d6c94cd5d0bfd71b9ff831180e"
|
|
86
86
|
}
|