@zag-js/i18n-utils 0.65.1 → 0.66.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +13 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -165,6 +165,7 @@ function zone(str) {
|
|
|
165
165
|
function getFormat(date, options) {
|
|
166
166
|
const { locale, format, timeZone } = options;
|
|
167
167
|
switch (format) {
|
|
168
|
+
// era
|
|
168
169
|
case "G":
|
|
169
170
|
case "GG":
|
|
170
171
|
case "GGG":
|
|
@@ -173,6 +174,7 @@ function getFormat(date, options) {
|
|
|
173
174
|
return date.toLocaleString(locale, { era: "long" });
|
|
174
175
|
case "GGGGG":
|
|
175
176
|
return date.toLocaleString(locale, { era: "narrow" });
|
|
177
|
+
// year
|
|
176
178
|
case "y":
|
|
177
179
|
case "Y":
|
|
178
180
|
return date.getFullYear();
|
|
@@ -188,6 +190,7 @@ function getFormat(date, options) {
|
|
|
188
190
|
case "yyyy":
|
|
189
191
|
case "YYYY":
|
|
190
192
|
return date.toLocaleString(locale, { year: "numeric" }).padStart(4, "0");
|
|
193
|
+
// quarter
|
|
191
194
|
case "Q":
|
|
192
195
|
case "QQQQQ":
|
|
193
196
|
return Math.ceil((date.getMonth() + 1) / 3);
|
|
@@ -201,6 +204,7 @@ function getFormat(date, options) {
|
|
|
201
204
|
const base = ordinal(String(Math.ceil((date.getMonth() + 1) / 3)));
|
|
202
205
|
return `${base} quarter`;
|
|
203
206
|
}
|
|
207
|
+
// month
|
|
204
208
|
case "M":
|
|
205
209
|
return date.getMonth() + 1;
|
|
206
210
|
case "Mo":
|
|
@@ -213,12 +217,14 @@ function getFormat(date, options) {
|
|
|
213
217
|
return date.toLocaleString(locale, { month: "long" });
|
|
214
218
|
case "MMMMM":
|
|
215
219
|
return date.toLocaleString(locale, { month: "narrow" });
|
|
220
|
+
// week
|
|
216
221
|
case "w":
|
|
217
222
|
return Math.ceil(date.getDate() / 7);
|
|
218
223
|
case "wo":
|
|
219
224
|
return ordinal(Math.ceil(date.getDate() / 7));
|
|
220
225
|
case "ww":
|
|
221
226
|
return pad(Math.ceil(date.getDate() / 7), 2);
|
|
227
|
+
// day
|
|
222
228
|
case "d":
|
|
223
229
|
case "D":
|
|
224
230
|
return date.getDate();
|
|
@@ -230,6 +236,7 @@ function getFormat(date, options) {
|
|
|
230
236
|
return date.toLocaleString(locale, { day: "2-digit" });
|
|
231
237
|
case "DDD":
|
|
232
238
|
return pad(date.getDate(), 3);
|
|
239
|
+
// weekday
|
|
233
240
|
case "E":
|
|
234
241
|
case "EE":
|
|
235
242
|
case "EEE":
|
|
@@ -240,6 +247,7 @@ function getFormat(date, options) {
|
|
|
240
247
|
return date.toLocaleString(locale, { weekday: "narrow" });
|
|
241
248
|
case "EEEEEE":
|
|
242
249
|
return date.toLocaleString(locale, { weekday: "short" }).slice(0, 2);
|
|
250
|
+
// hour
|
|
243
251
|
case "h":
|
|
244
252
|
return date.toLocaleString(locale, { hour: "numeric", hour12: true });
|
|
245
253
|
case "ho":
|
|
@@ -252,20 +260,24 @@ function getFormat(date, options) {
|
|
|
252
260
|
return ordinal(+date.toLocaleString(locale, { hour: "numeric", hour12: false }));
|
|
253
261
|
case "HH":
|
|
254
262
|
return date.toLocaleString(locale, { hour: "2-digit", hour12: false });
|
|
263
|
+
// minute
|
|
255
264
|
case "m":
|
|
256
265
|
return date.toLocaleString(locale, { minute: "numeric" });
|
|
257
266
|
case "mo":
|
|
258
267
|
return ordinal(date.toLocaleString(locale, { minute: "numeric" }));
|
|
259
268
|
case "mm":
|
|
260
269
|
return date.toLocaleString(locale, { minute: "2-digit" });
|
|
270
|
+
// second
|
|
261
271
|
case "s":
|
|
262
272
|
return date.toLocaleString(locale, { second: "numeric" });
|
|
263
273
|
case "so":
|
|
264
274
|
return ordinal(date.toLocaleString(locale, { second: "numeric" }));
|
|
265
275
|
case "ss":
|
|
266
276
|
return date.toLocaleString(locale, { second: "2-digit" });
|
|
277
|
+
// timestamp
|
|
267
278
|
case "T":
|
|
268
279
|
return date.getTime();
|
|
280
|
+
// day period
|
|
269
281
|
case "a":
|
|
270
282
|
case "aa":
|
|
271
283
|
case "aaa":
|
|
@@ -274,6 +286,7 @@ function getFormat(date, options) {
|
|
|
274
286
|
return date.toLocaleString(locale, { hour: "numeric", hour12: true }).toLocaleLowerCase();
|
|
275
287
|
case "aaaaa":
|
|
276
288
|
return date.toLocaleString(locale, { hour: "numeric", hour12: true }).charAt(0);
|
|
289
|
+
// TODO:Revise this
|
|
277
290
|
case "z":
|
|
278
291
|
case "zz":
|
|
279
292
|
case "zzz": {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/cache.ts","../src/format-number.ts","../src/format-bytes.ts","../src/format-date.ts","../src/format-list.ts","../src/format-relative-time.ts","../src/is-rtl.ts","../src/locale.ts","../src/track-locale.ts"],"sourcesContent":["export * from \"./format-bytes\"\nexport * from \"./format-date\"\nexport * from \"./format-list\"\nexport * from \"./format-number\"\nexport * from \"./format-relative-time\"\nexport { getLocaleDir, isRTL } from \"./is-rtl\"\nexport { getDefaultLocale } from \"./locale\"\nexport type { Locale } from \"./locale\"\nexport { trackLocale } from \"./track-locale\"\nexport type { LocaleOptions } from \"./track-locale\"\n","type FormatOptions<T> = T extends Intl.NumberFormat\n ? Intl.NumberFormatOptions\n : T extends Intl.DateTimeFormat\n ? Intl.DateTimeFormatOptions\n : T extends Intl.RelativeTimeFormat\n ? Intl.RelativeTimeFormatOptions\n : T extends Intl.ListFormat\n ? Intl.ListFormatOptions\n : T extends Intl.PluralRules\n ? Intl.PluralRulesOptions\n : never\n\nexport function i18nCache<T extends abstract new (...args: any) => any>(Ins: T) {\n const formatterCache = new Map<string, T>()\n\n return function create(locale: string, options?: FormatOptions<InstanceType<T>>): InstanceType<T> {\n const cacheKey =\n locale +\n (options\n ? Object.entries(options)\n .sort((a, b) => (a[0] < b[0] ? -1 : 1))\n .join()\n : \"\")\n\n if (formatterCache.has(cacheKey)) {\n return formatterCache.get(cacheKey) as any\n }\n\n // @ts-ignore\n let formatter = new Ins(locale, options)\n formatterCache.set(cacheKey, formatter)\n\n return formatter as any\n }\n}\n","import { i18nCache } from \"./cache\"\n\nconst getNumberFormatter = i18nCache(Intl.NumberFormat)\n\nexport function formatNumber(v: number, locale: string, options: Intl.NumberFormatOptions = {}) {\n const formatter = getNumberFormatter(locale, options)\n return formatter.format(v)\n}\n","import { formatNumber } from \"./format-number\"\n\nconst bitPrefixes = [\"\", \"kilo\", \"mega\", \"giga\", \"tera\"]\nconst bytePrefixes = [\"\", \"kilo\", \"mega\", \"giga\", \"tera\", \"peta\"]\n\nexport interface FormatBytesOptions {\n unit?: \"bit\" | \"byte\"\n unitDisplay?: \"long\" | \"short\" | \"narrow\"\n}\n\nexport const formatBytes = (bytes: number, locale = \"en-US\", options: FormatBytesOptions = {}) => {\n if (isNaN(bytes)) return \"\"\n if (bytes === 0) return \"0 B\"\n\n const { unit = \"byte\", unitDisplay = \"short\" } = options\n\n const prefix = unit === \"bit\" ? bitPrefixes : bytePrefixes\n const index = Math.max(0, Math.min(Math.floor(Math.log10(bytes) / 3), prefix.length - 1))\n\n const _unit = prefix[index] + unit\n const _unitDisplay = unitDisplay || \"short\"\n\n const v = parseFloat((bytes / Math.pow(1000, index)).toPrecision(3))\n\n return formatNumber(v, locale, {\n style: \"unit\",\n unit: _unit,\n unitDisplay: _unitDisplay,\n })\n}\n","const symbols = \"\\\\s|\\\\.|-|/|\\\\\\\\|,|\\\\$|\\\\!|\\\\?|:|;\"\n\nfunction createRegEx(sign: string) {\n return new RegExp(\"(^|>|\" + symbols + \")(\" + sign + \")($|<|\" + symbols + \")\", \"g\")\n}\n\n// prettier-ignore\nconst FORMATS = [\n\"G\",\"GG\",\"GGG\",\"GGGG\",\"GGGGG\",\n\"y\",\"yo\",\"yy\",\"yyy\",\"yyyy\",\n\"Y\",\"Yo\",\"YY\",\"YYY\",\"YYYY\",\n\"Q\",\"Qo\",\"QQ\",\"QQQ\",\"QQQQ\",\"QQQQQ\",\n\"M\",\"Mo\",\"MM\",\"MMM\",\"MMMM\",\"MMMMM\",\n\"E\",\"EE\",\"EEE\",\"EEEE\",\"EEEEE\",\"EEEEEE\",\n\"a\",\"aa\",\"aaa\",\"aaaa\",\"aaaaa\",\n\"d\",\"do\",\"dd\",\n\"D\",\"Do\",\"DD\",\"DDD\",\n\"w\",\"wo\",\"ww\",\n\"s\",\"so\",\"ss\",\n\"m\",\"mo\",\"mm\",\n\"h\",\"ho\",\"hh\",\n\"H\",\"Ho\",\"HH\",\n\"z\",\"zz\",\"zzz\",\"zzzz\",\n\"T\",\n] as const\n\ntype Format = (typeof FORMATS)[number]\n\ninterface FormatDateOptions {\n locale: string\n format: Format\n timeZone?: string\n}\n\nfunction ordinal(num: string | number) {\n const n = typeof num === \"string\" ? parseFloat(num) : num\n let suffix = \"th\"\n if (n % 10 === 1 && n % 100 !== 11) {\n suffix = \"st\"\n } else if (n % 10 === 2 && n % 100 !== 12) {\n suffix = \"nd\"\n } else if (n % 10 === 3 && n % 100 !== 13) {\n suffix = \"rd\"\n }\n return `${n}${suffix}`\n}\n\nfunction pad(num: number, length: number) {\n return String(num).padStart(length, \"0\")\n}\n\nfunction zone(str: string) {\n return str.split(/AM|PM/)[1].trim()\n}\n\nfunction getFormat(date: Date, options: FormatDateOptions) {\n const { locale, format, timeZone } = options\n\n switch (format) {\n // era\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return date.toLocaleString(locale, { era: \"short\" })\n case \"GGGG\":\n return date.toLocaleString(locale, { era: \"long\" })\n case \"GGGGG\":\n return date.toLocaleString(locale, { era: \"narrow\" })\n\n // year\n case \"y\":\n case \"Y\":\n return date.getFullYear()\n case \"yo\":\n case \"Yo\":\n return ordinal(date.toLocaleString(locale, { year: \"numeric\" }))\n case \"yy\":\n case \"YY\":\n return date.toLocaleString(locale, { year: \"2-digit\" })\n case \"yyy\":\n case \"YYY\":\n return date.toLocaleString(locale, { year: \"numeric\" }).padStart(3, \"0\")\n case \"yyyy\":\n case \"YYYY\":\n return date.toLocaleString(locale, { year: \"numeric\" }).padStart(4, \"0\")\n\n // quarter\n case \"Q\":\n case \"QQQQQ\":\n return Math.ceil((date.getMonth() + 1) / 3)\n case \"Qo\":\n return ordinal(Math.ceil((date.getMonth() + 1) / 3))\n case \"QQ\":\n return pad(Math.ceil((date.getMonth() + 1) / 3), 2)\n case \"QQQ\":\n return `Q${Math.ceil((date.getMonth() + 1) / 3)}`\n case \"QQQQ\": {\n const base = ordinal(String(Math.ceil((date.getMonth() + 1) / 3)))\n return `${base} quarter`\n }\n\n // month\n case \"M\":\n return date.getMonth() + 1\n case \"Mo\":\n return ordinal(date.getMonth() + 1)\n case \"MM\":\n return date.toLocaleString(locale, { month: \"2-digit\" })\n case \"MMM\":\n return date.toLocaleString(locale, { month: \"short\" })\n case \"MMMM\":\n return date.toLocaleString(locale, { month: \"long\" })\n case \"MMMMM\":\n return date.toLocaleString(locale, { month: \"narrow\" })\n\n // week\n case \"w\":\n return Math.ceil(date.getDate() / 7)\n case \"wo\":\n return ordinal(Math.ceil(date.getDate() / 7))\n case \"ww\":\n return pad(Math.ceil(date.getDate() / 7), 2)\n\n // day\n case \"d\":\n case \"D\":\n return date.getDate()\n case \"do\":\n case \"Do\":\n return ordinal(date.getDate())\n case \"dd\":\n case \"DD\":\n return date.toLocaleString(locale, { day: \"2-digit\" })\n case \"DDD\":\n return pad(date.getDate(), 3)\n\n // weekday\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return date.toLocaleString(locale, { weekday: \"short\" })\n case \"EEEE\":\n return date.toLocaleString(locale, { weekday: \"long\" })\n case \"EEEEE\":\n return date.toLocaleString(locale, { weekday: \"narrow\" })\n case \"EEEEEE\":\n return date.toLocaleString(locale, { weekday: \"short\" }).slice(0, 2)\n\n // hour\n case \"h\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true })\n case \"ho\":\n return ordinal(date.toLocaleString(locale, { hour: \"2-digit\", hour12: true }))\n case \"hh\":\n return date.toLocaleString(locale, { hour: \"2-digit\", hour12: true })\n case \"H\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: false })\n case \"Ho\":\n return ordinal(+date.toLocaleString(locale, { hour: \"numeric\", hour12: false }))\n case \"HH\":\n return date.toLocaleString(locale, { hour: \"2-digit\", hour12: false })\n\n // minute\n case \"m\":\n return date.toLocaleString(locale, { minute: \"numeric\" })\n case \"mo\":\n return ordinal(date.toLocaleString(locale, { minute: \"numeric\" }))\n case \"mm\":\n return date.toLocaleString(locale, { minute: \"2-digit\" })\n\n // second\n case \"s\":\n return date.toLocaleString(locale, { second: \"numeric\" })\n case \"so\":\n return ordinal(date.toLocaleString(locale, { second: \"numeric\" }))\n case \"ss\":\n return date.toLocaleString(locale, { second: \"2-digit\" })\n\n // timestamp\n case \"T\":\n return date.getTime()\n\n // day period\n case \"a\":\n case \"aa\":\n case \"aaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).toLocaleUpperCase()\n case \"aaaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).toLocaleLowerCase()\n case \"aaaaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).charAt(0)\n\n // TODO:Revise this\n case \"z\":\n case \"zz\":\n case \"zzz\": {\n return zone(date.toLocaleString(locale, { timeZone, timeZoneName: \"shortOffset\" }))\n }\n case \"zzzz\":\n return zone(date.toLocaleString(locale, { timeZone, timeZoneName: \"longOffset\" }))\n\n default:\n throw new Error(`Unknown format: ${format}`)\n }\n}\n\n/**\n * Formats a date using the given format string as defined in:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n */\nexport function formatDate(date: Date, format: string, locale: string, timeZone?: string) {\n let result = format\n for (const key of FORMATS) {\n const res = getFormat(date, { locale, format: key, timeZone })\n result = result.replace(createRegEx(key), \"$1\" + res + \"$3\")\n }\n return result\n}\n","import { i18nCache } from \"./cache\"\n\nconst getListFormatter = i18nCache(Intl.ListFormat)\n\nexport function formatList(list: string[], locale: string, options: Intl.ListFormatOptions = {}) {\n const formatter = getListFormatter(locale, options)\n return formatter.format(list)\n}\n","import { i18nCache } from \"./cache\"\n\nconst getRelativeTimeFormatter = i18nCache(Intl.RelativeTimeFormat)\n\nexport function formatRelativeTime(value: Date, locale: string, options: Intl.RelativeTimeFormatOptions = {}) {\n const rtf = getRelativeTimeFormatter(locale, options)\n\n const now = new Date()\n const diff = getDistance(now, value)\n\n if (diff.years > 0) return rtf.format(diff.years * diff.sign, \"year\")\n if (diff.months > 0) return rtf.format(diff.months * diff.sign, \"month\")\n if (diff.weeks > 0) return rtf.format(diff.weeks * diff.sign, \"week\")\n if (diff.days > 0) return rtf.format(diff.days * diff.sign, \"day\")\n if (diff.hours > 0) return rtf.format(diff.hours * diff.sign, \"hour\")\n if (diff.minutes > 0) return rtf.format(diff.minutes * diff.sign, \"minute\")\n\n return rtf.format(diff.seconds * diff.sign, \"second\")\n}\n\nconst SECOND_TO_MS = 1000\nconst MINUTE_TO_MS = 1000 * 60\nconst HOUR_TO_MS = 1000 * 60 * 60\nconst DAY_TO_MS = 1000 * 60 * 60 * 24\nconst WEEK_TO_MS = 1000 * 60 * 60 * 24 * 7\nconst MONTH_TO_MS = 1000 * 60 * 60 * 24 * 30\nconst YEAR_TO_MS = 1000 * 60 * 60 * 24 * 365\n\nfunction getDistance(startDate: Date, endDate: Date) {\n const endTime = endDate.getTime()\n const startTime = startDate.getTime()\n const distance = Math.abs(endTime - startTime)\n\n return {\n sign: Math.sign(endTime - startTime),\n days: Math.floor(distance / DAY_TO_MS),\n hours: Math.floor((distance % DAY_TO_MS) / HOUR_TO_MS),\n minutes: Math.floor((distance % HOUR_TO_MS) / MINUTE_TO_MS),\n seconds: Math.floor((distance % MINUTE_TO_MS) / SECOND_TO_MS),\n weeks: Math.floor(distance / WEEK_TO_MS),\n months: Math.floor(distance / MONTH_TO_MS),\n years: Math.floor(distance / YEAR_TO_MS),\n }\n}\n","const RTL_SCRIPTS = new Set([\n \"Avst\",\n \"Arab\",\n \"Armi\",\n \"Syrc\",\n \"Samr\",\n \"Mand\",\n \"Thaa\",\n \"Mend\",\n \"Nkoo\",\n \"Adlm\",\n \"Rohg\",\n \"Hebr\",\n])\n\nconst RTL_LANGS = new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\",\n])\n\nexport function isRTL(locale: string) {\n if (Intl.Locale) {\n const script = new Intl.Locale(locale).maximize().script ?? \"\"\n return RTL_SCRIPTS.has(script)\n }\n\n const lang = locale.split(\"-\")[0]\n return RTL_LANGS.has(lang)\n}\n\nexport function getLocaleDir(locale: string) {\n return isRTL(locale) ? \"rtl\" : \"ltr\"\n}\n","import { isRTL } from \"./is-rtl\"\n\nexport type Direction = \"rtl\" | \"ltr\"\n\nexport interface Locale {\n locale: string\n dir: Direction\n}\n\ndeclare global {\n interface Navigator {\n userLanguage?: string\n }\n}\n\nexport function getDefaultLocale(): Locale {\n let locale = (typeof navigator !== \"undefined\" && (navigator.language || navigator.userLanguage)) || \"en-US\"\n\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale])\n } catch {\n locale = \"en-US\"\n }\n\n return {\n locale,\n dir: isRTL(locale) ? \"rtl\" : \"ltr\",\n }\n}\n","import { getWindow } from \"@zag-js/dom-query\"\nimport { getDefaultLocale, type Locale } from \"./locale\"\n\nexport interface LocaleOptions {\n locale?: string\n getRootNode?: () => ShadowRoot | Document | Node\n onLocaleChange?: (locale: Locale) => void\n}\n\nexport function trackLocale(options: LocaleOptions = {}) {\n const { getRootNode, onLocaleChange } = options\n\n onLocaleChange?.(getDefaultLocale())\n\n const handleLocaleChange = () => {\n onLocaleChange?.(getDefaultLocale())\n }\n\n const win = getRootNode ? getWindow(getRootNode()) : window\n\n win.addEventListener(\"languagechange\", handleLocaleChange)\n\n return () => {\n win.removeEventListener(\"languagechange\", handleLocaleChange)\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/cache.ts","../src/format-number.ts","../src/format-bytes.ts","../src/format-date.ts","../src/format-list.ts","../src/format-relative-time.ts","../src/is-rtl.ts","../src/locale.ts","../src/track-locale.ts"],"sourcesContent":["export * from \"./format-bytes\"\nexport * from \"./format-date\"\nexport * from \"./format-list\"\nexport * from \"./format-number\"\nexport * from \"./format-relative-time\"\nexport { getLocaleDir, isRTL } from \"./is-rtl\"\nexport { getDefaultLocale } from \"./locale\"\nexport type { Locale } from \"./locale\"\nexport { trackLocale } from \"./track-locale\"\nexport type { LocaleOptions } from \"./track-locale\"\n","type FormatOptions<T> = T extends Intl.NumberFormat\n ? Intl.NumberFormatOptions\n : T extends Intl.DateTimeFormat\n ? Intl.DateTimeFormatOptions\n : T extends Intl.RelativeTimeFormat\n ? Intl.RelativeTimeFormatOptions\n : T extends Intl.ListFormat\n ? Intl.ListFormatOptions\n : T extends Intl.PluralRules\n ? Intl.PluralRulesOptions\n : never\n\nexport function i18nCache<T extends abstract new (...args: any) => any>(Ins: T) {\n const formatterCache = new Map<string, T>()\n\n return function create(locale: string, options?: FormatOptions<InstanceType<T>>): InstanceType<T> {\n const cacheKey =\n locale +\n (options\n ? Object.entries(options)\n .sort((a, b) => (a[0] < b[0] ? -1 : 1))\n .join()\n : \"\")\n\n if (formatterCache.has(cacheKey)) {\n return formatterCache.get(cacheKey) as any\n }\n\n // @ts-ignore\n let formatter = new Ins(locale, options)\n formatterCache.set(cacheKey, formatter)\n\n return formatter as any\n }\n}\n","import { i18nCache } from \"./cache\"\n\nconst getNumberFormatter = i18nCache(Intl.NumberFormat)\n\nexport function formatNumber(v: number, locale: string, options: Intl.NumberFormatOptions = {}) {\n const formatter = getNumberFormatter(locale, options)\n return formatter.format(v)\n}\n","import { formatNumber } from \"./format-number\"\n\nconst bitPrefixes = [\"\", \"kilo\", \"mega\", \"giga\", \"tera\"]\nconst bytePrefixes = [\"\", \"kilo\", \"mega\", \"giga\", \"tera\", \"peta\"]\n\nexport interface FormatBytesOptions {\n unit?: \"bit\" | \"byte\"\n unitDisplay?: \"long\" | \"short\" | \"narrow\"\n}\n\nexport const formatBytes = (bytes: number, locale = \"en-US\", options: FormatBytesOptions = {}) => {\n if (isNaN(bytes)) return \"\"\n if (bytes === 0) return \"0 B\"\n\n const { unit = \"byte\", unitDisplay = \"short\" } = options\n\n const prefix = unit === \"bit\" ? bitPrefixes : bytePrefixes\n const index = Math.max(0, Math.min(Math.floor(Math.log10(bytes) / 3), prefix.length - 1))\n\n const _unit = prefix[index] + unit\n const _unitDisplay = unitDisplay || \"short\"\n\n const v = parseFloat((bytes / Math.pow(1000, index)).toPrecision(3))\n\n return formatNumber(v, locale, {\n style: \"unit\",\n unit: _unit,\n unitDisplay: _unitDisplay,\n })\n}\n","const symbols = \"\\\\s|\\\\.|-|/|\\\\\\\\|,|\\\\$|\\\\!|\\\\?|:|;\"\n\nfunction createRegEx(sign: string) {\n return new RegExp(\"(^|>|\" + symbols + \")(\" + sign + \")($|<|\" + symbols + \")\", \"g\")\n}\n\n// prettier-ignore\nconst FORMATS = [\n\"G\",\"GG\",\"GGG\",\"GGGG\",\"GGGGG\",\n\"y\",\"yo\",\"yy\",\"yyy\",\"yyyy\",\n\"Y\",\"Yo\",\"YY\",\"YYY\",\"YYYY\",\n\"Q\",\"Qo\",\"QQ\",\"QQQ\",\"QQQQ\",\"QQQQQ\",\n\"M\",\"Mo\",\"MM\",\"MMM\",\"MMMM\",\"MMMMM\",\n\"E\",\"EE\",\"EEE\",\"EEEE\",\"EEEEE\",\"EEEEEE\",\n\"a\",\"aa\",\"aaa\",\"aaaa\",\"aaaaa\",\n\"d\",\"do\",\"dd\",\n\"D\",\"Do\",\"DD\",\"DDD\",\n\"w\",\"wo\",\"ww\",\n\"s\",\"so\",\"ss\",\n\"m\",\"mo\",\"mm\",\n\"h\",\"ho\",\"hh\",\n\"H\",\"Ho\",\"HH\",\n\"z\",\"zz\",\"zzz\",\"zzzz\",\n\"T\",\n] as const\n\ntype Format = (typeof FORMATS)[number]\n\ninterface FormatDateOptions {\n locale: string\n format: Format\n timeZone?: string\n}\n\nfunction ordinal(num: string | number) {\n const n = typeof num === \"string\" ? parseFloat(num) : num\n let suffix = \"th\"\n if (n % 10 === 1 && n % 100 !== 11) {\n suffix = \"st\"\n } else if (n % 10 === 2 && n % 100 !== 12) {\n suffix = \"nd\"\n } else if (n % 10 === 3 && n % 100 !== 13) {\n suffix = \"rd\"\n }\n return `${n}${suffix}`\n}\n\nfunction pad(num: number, length: number) {\n return String(num).padStart(length, \"0\")\n}\n\nfunction zone(str: string) {\n return str.split(/AM|PM/)[1].trim()\n}\n\nfunction getFormat(date: Date, options: FormatDateOptions) {\n const { locale, format, timeZone } = options\n\n switch (format) {\n // era\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return date.toLocaleString(locale, { era: \"short\" })\n case \"GGGG\":\n return date.toLocaleString(locale, { era: \"long\" })\n case \"GGGGG\":\n return date.toLocaleString(locale, { era: \"narrow\" })\n\n // year\n case \"y\":\n case \"Y\":\n return date.getFullYear()\n case \"yo\":\n case \"Yo\":\n return ordinal(date.toLocaleString(locale, { year: \"numeric\" }))\n case \"yy\":\n case \"YY\":\n return date.toLocaleString(locale, { year: \"2-digit\" })\n case \"yyy\":\n case \"YYY\":\n return date.toLocaleString(locale, { year: \"numeric\" }).padStart(3, \"0\")\n case \"yyyy\":\n case \"YYYY\":\n return date.toLocaleString(locale, { year: \"numeric\" }).padStart(4, \"0\")\n\n // quarter\n case \"Q\":\n case \"QQQQQ\":\n return Math.ceil((date.getMonth() + 1) / 3)\n case \"Qo\":\n return ordinal(Math.ceil((date.getMonth() + 1) / 3))\n case \"QQ\":\n return pad(Math.ceil((date.getMonth() + 1) / 3), 2)\n case \"QQQ\":\n return `Q${Math.ceil((date.getMonth() + 1) / 3)}`\n case \"QQQQ\": {\n const base = ordinal(String(Math.ceil((date.getMonth() + 1) / 3)))\n return `${base} quarter`\n }\n\n // month\n case \"M\":\n return date.getMonth() + 1\n case \"Mo\":\n return ordinal(date.getMonth() + 1)\n case \"MM\":\n return date.toLocaleString(locale, { month: \"2-digit\" })\n case \"MMM\":\n return date.toLocaleString(locale, { month: \"short\" })\n case \"MMMM\":\n return date.toLocaleString(locale, { month: \"long\" })\n case \"MMMMM\":\n return date.toLocaleString(locale, { month: \"narrow\" })\n\n // week\n case \"w\":\n return Math.ceil(date.getDate() / 7)\n case \"wo\":\n return ordinal(Math.ceil(date.getDate() / 7))\n case \"ww\":\n return pad(Math.ceil(date.getDate() / 7), 2)\n\n // day\n case \"d\":\n case \"D\":\n return date.getDate()\n case \"do\":\n case \"Do\":\n return ordinal(date.getDate())\n case \"dd\":\n case \"DD\":\n return date.toLocaleString(locale, { day: \"2-digit\" })\n case \"DDD\":\n return pad(date.getDate(), 3)\n\n // weekday\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return date.toLocaleString(locale, { weekday: \"short\" })\n case \"EEEE\":\n return date.toLocaleString(locale, { weekday: \"long\" })\n case \"EEEEE\":\n return date.toLocaleString(locale, { weekday: \"narrow\" })\n case \"EEEEEE\":\n return date.toLocaleString(locale, { weekday: \"short\" }).slice(0, 2)\n\n // hour\n case \"h\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true })\n case \"ho\":\n return ordinal(date.toLocaleString(locale, { hour: \"2-digit\", hour12: true }))\n case \"hh\":\n return date.toLocaleString(locale, { hour: \"2-digit\", hour12: true })\n case \"H\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: false })\n case \"Ho\":\n return ordinal(+date.toLocaleString(locale, { hour: \"numeric\", hour12: false }))\n case \"HH\":\n return date.toLocaleString(locale, { hour: \"2-digit\", hour12: false })\n\n // minute\n case \"m\":\n return date.toLocaleString(locale, { minute: \"numeric\" })\n case \"mo\":\n return ordinal(date.toLocaleString(locale, { minute: \"numeric\" }))\n case \"mm\":\n return date.toLocaleString(locale, { minute: \"2-digit\" })\n\n // second\n case \"s\":\n return date.toLocaleString(locale, { second: \"numeric\" })\n case \"so\":\n return ordinal(date.toLocaleString(locale, { second: \"numeric\" }))\n case \"ss\":\n return date.toLocaleString(locale, { second: \"2-digit\" })\n\n // timestamp\n case \"T\":\n return date.getTime()\n\n // day period\n case \"a\":\n case \"aa\":\n case \"aaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).toLocaleUpperCase()\n case \"aaaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).toLocaleLowerCase()\n case \"aaaaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).charAt(0)\n\n // TODO:Revise this\n case \"z\":\n case \"zz\":\n case \"zzz\": {\n return zone(date.toLocaleString(locale, { timeZone, timeZoneName: \"shortOffset\" }))\n }\n case \"zzzz\":\n return zone(date.toLocaleString(locale, { timeZone, timeZoneName: \"longOffset\" }))\n\n default:\n throw new Error(`Unknown format: ${format}`)\n }\n}\n\n/**\n * Formats a date using the given format string as defined in:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n */\nexport function formatDate(date: Date, format: string, locale: string, timeZone?: string) {\n let result = format\n for (const key of FORMATS) {\n const res = getFormat(date, { locale, format: key, timeZone })\n result = result.replace(createRegEx(key), \"$1\" + res + \"$3\")\n }\n return result\n}\n","import { i18nCache } from \"./cache\"\n\nconst getListFormatter = i18nCache(Intl.ListFormat)\n\nexport function formatList(list: string[], locale: string, options: Intl.ListFormatOptions = {}) {\n const formatter = getListFormatter(locale, options)\n return formatter.format(list)\n}\n","import { i18nCache } from \"./cache\"\n\nconst getRelativeTimeFormatter = i18nCache(Intl.RelativeTimeFormat)\n\nexport function formatRelativeTime(value: Date, locale: string, options: Intl.RelativeTimeFormatOptions = {}) {\n const rtf = getRelativeTimeFormatter(locale, options)\n\n const now = new Date()\n const diff = getDistance(now, value)\n\n if (diff.years > 0) return rtf.format(diff.years * diff.sign, \"year\")\n if (diff.months > 0) return rtf.format(diff.months * diff.sign, \"month\")\n if (diff.weeks > 0) return rtf.format(diff.weeks * diff.sign, \"week\")\n if (diff.days > 0) return rtf.format(diff.days * diff.sign, \"day\")\n if (diff.hours > 0) return rtf.format(diff.hours * diff.sign, \"hour\")\n if (diff.minutes > 0) return rtf.format(diff.minutes * diff.sign, \"minute\")\n\n return rtf.format(diff.seconds * diff.sign, \"second\")\n}\n\nconst SECOND_TO_MS = 1000\nconst MINUTE_TO_MS = 1000 * 60\nconst HOUR_TO_MS = 1000 * 60 * 60\nconst DAY_TO_MS = 1000 * 60 * 60 * 24\nconst WEEK_TO_MS = 1000 * 60 * 60 * 24 * 7\nconst MONTH_TO_MS = 1000 * 60 * 60 * 24 * 30\nconst YEAR_TO_MS = 1000 * 60 * 60 * 24 * 365\n\nfunction getDistance(startDate: Date, endDate: Date) {\n const endTime = endDate.getTime()\n const startTime = startDate.getTime()\n const distance = Math.abs(endTime - startTime)\n\n return {\n sign: Math.sign(endTime - startTime),\n days: Math.floor(distance / DAY_TO_MS),\n hours: Math.floor((distance % DAY_TO_MS) / HOUR_TO_MS),\n minutes: Math.floor((distance % HOUR_TO_MS) / MINUTE_TO_MS),\n seconds: Math.floor((distance % MINUTE_TO_MS) / SECOND_TO_MS),\n weeks: Math.floor(distance / WEEK_TO_MS),\n months: Math.floor(distance / MONTH_TO_MS),\n years: Math.floor(distance / YEAR_TO_MS),\n }\n}\n","const RTL_SCRIPTS = new Set([\n \"Avst\",\n \"Arab\",\n \"Armi\",\n \"Syrc\",\n \"Samr\",\n \"Mand\",\n \"Thaa\",\n \"Mend\",\n \"Nkoo\",\n \"Adlm\",\n \"Rohg\",\n \"Hebr\",\n])\n\nconst RTL_LANGS = new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\",\n])\n\nexport function isRTL(locale: string) {\n if (Intl.Locale) {\n const script = new Intl.Locale(locale).maximize().script ?? \"\"\n return RTL_SCRIPTS.has(script)\n }\n\n const lang = locale.split(\"-\")[0]\n return RTL_LANGS.has(lang)\n}\n\nexport function getLocaleDir(locale: string) {\n return isRTL(locale) ? \"rtl\" : \"ltr\"\n}\n","import { isRTL } from \"./is-rtl\"\n\nexport type Direction = \"rtl\" | \"ltr\"\n\nexport interface Locale {\n locale: string\n dir: Direction\n}\n\ndeclare global {\n interface Navigator {\n userLanguage?: string\n }\n}\n\nexport function getDefaultLocale(): Locale {\n let locale = (typeof navigator !== \"undefined\" && (navigator.language || navigator.userLanguage)) || \"en-US\"\n\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale])\n } catch {\n locale = \"en-US\"\n }\n\n return {\n locale,\n dir: isRTL(locale) ? \"rtl\" : \"ltr\",\n }\n}\n","import { getWindow } from \"@zag-js/dom-query\"\nimport { getDefaultLocale, type Locale } from \"./locale\"\n\nexport interface LocaleOptions {\n locale?: string\n getRootNode?: () => ShadowRoot | Document | Node\n onLocaleChange?: (locale: Locale) => void\n}\n\nexport function trackLocale(options: LocaleOptions = {}) {\n const { getRootNode, onLocaleChange } = options\n\n onLocaleChange?.(getDefaultLocale())\n\n const handleLocaleChange = () => {\n onLocaleChange?.(getDefaultLocale())\n }\n\n const win = getRootNode ? getWindow(getRootNode()) : window\n\n win.addEventListener(\"languagechange\", handleLocaleChange)\n\n return () => {\n win.removeEventListener(\"languagechange\", handleLocaleChange)\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -131,6 +131,7 @@ function zone(str) {
|
|
|
131
131
|
function getFormat(date, options) {
|
|
132
132
|
const { locale, format, timeZone } = options;
|
|
133
133
|
switch (format) {
|
|
134
|
+
// era
|
|
134
135
|
case "G":
|
|
135
136
|
case "GG":
|
|
136
137
|
case "GGG":
|
|
@@ -139,6 +140,7 @@ function getFormat(date, options) {
|
|
|
139
140
|
return date.toLocaleString(locale, { era: "long" });
|
|
140
141
|
case "GGGGG":
|
|
141
142
|
return date.toLocaleString(locale, { era: "narrow" });
|
|
143
|
+
// year
|
|
142
144
|
case "y":
|
|
143
145
|
case "Y":
|
|
144
146
|
return date.getFullYear();
|
|
@@ -154,6 +156,7 @@ function getFormat(date, options) {
|
|
|
154
156
|
case "yyyy":
|
|
155
157
|
case "YYYY":
|
|
156
158
|
return date.toLocaleString(locale, { year: "numeric" }).padStart(4, "0");
|
|
159
|
+
// quarter
|
|
157
160
|
case "Q":
|
|
158
161
|
case "QQQQQ":
|
|
159
162
|
return Math.ceil((date.getMonth() + 1) / 3);
|
|
@@ -167,6 +170,7 @@ function getFormat(date, options) {
|
|
|
167
170
|
const base = ordinal(String(Math.ceil((date.getMonth() + 1) / 3)));
|
|
168
171
|
return `${base} quarter`;
|
|
169
172
|
}
|
|
173
|
+
// month
|
|
170
174
|
case "M":
|
|
171
175
|
return date.getMonth() + 1;
|
|
172
176
|
case "Mo":
|
|
@@ -179,12 +183,14 @@ function getFormat(date, options) {
|
|
|
179
183
|
return date.toLocaleString(locale, { month: "long" });
|
|
180
184
|
case "MMMMM":
|
|
181
185
|
return date.toLocaleString(locale, { month: "narrow" });
|
|
186
|
+
// week
|
|
182
187
|
case "w":
|
|
183
188
|
return Math.ceil(date.getDate() / 7);
|
|
184
189
|
case "wo":
|
|
185
190
|
return ordinal(Math.ceil(date.getDate() / 7));
|
|
186
191
|
case "ww":
|
|
187
192
|
return pad(Math.ceil(date.getDate() / 7), 2);
|
|
193
|
+
// day
|
|
188
194
|
case "d":
|
|
189
195
|
case "D":
|
|
190
196
|
return date.getDate();
|
|
@@ -196,6 +202,7 @@ function getFormat(date, options) {
|
|
|
196
202
|
return date.toLocaleString(locale, { day: "2-digit" });
|
|
197
203
|
case "DDD":
|
|
198
204
|
return pad(date.getDate(), 3);
|
|
205
|
+
// weekday
|
|
199
206
|
case "E":
|
|
200
207
|
case "EE":
|
|
201
208
|
case "EEE":
|
|
@@ -206,6 +213,7 @@ function getFormat(date, options) {
|
|
|
206
213
|
return date.toLocaleString(locale, { weekday: "narrow" });
|
|
207
214
|
case "EEEEEE":
|
|
208
215
|
return date.toLocaleString(locale, { weekday: "short" }).slice(0, 2);
|
|
216
|
+
// hour
|
|
209
217
|
case "h":
|
|
210
218
|
return date.toLocaleString(locale, { hour: "numeric", hour12: true });
|
|
211
219
|
case "ho":
|
|
@@ -218,20 +226,24 @@ function getFormat(date, options) {
|
|
|
218
226
|
return ordinal(+date.toLocaleString(locale, { hour: "numeric", hour12: false }));
|
|
219
227
|
case "HH":
|
|
220
228
|
return date.toLocaleString(locale, { hour: "2-digit", hour12: false });
|
|
229
|
+
// minute
|
|
221
230
|
case "m":
|
|
222
231
|
return date.toLocaleString(locale, { minute: "numeric" });
|
|
223
232
|
case "mo":
|
|
224
233
|
return ordinal(date.toLocaleString(locale, { minute: "numeric" }));
|
|
225
234
|
case "mm":
|
|
226
235
|
return date.toLocaleString(locale, { minute: "2-digit" });
|
|
236
|
+
// second
|
|
227
237
|
case "s":
|
|
228
238
|
return date.toLocaleString(locale, { second: "numeric" });
|
|
229
239
|
case "so":
|
|
230
240
|
return ordinal(date.toLocaleString(locale, { second: "numeric" }));
|
|
231
241
|
case "ss":
|
|
232
242
|
return date.toLocaleString(locale, { second: "2-digit" });
|
|
243
|
+
// timestamp
|
|
233
244
|
case "T":
|
|
234
245
|
return date.getTime();
|
|
246
|
+
// day period
|
|
235
247
|
case "a":
|
|
236
248
|
case "aa":
|
|
237
249
|
case "aaa":
|
|
@@ -240,6 +252,7 @@ function getFormat(date, options) {
|
|
|
240
252
|
return date.toLocaleString(locale, { hour: "numeric", hour12: true }).toLocaleLowerCase();
|
|
241
253
|
case "aaaaa":
|
|
242
254
|
return date.toLocaleString(locale, { hour: "numeric", hour12: true }).charAt(0);
|
|
255
|
+
// TODO:Revise this
|
|
243
256
|
case "z":
|
|
244
257
|
case "zz":
|
|
245
258
|
case "zzz": {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cache.ts","../src/format-number.ts","../src/format-bytes.ts","../src/format-date.ts","../src/format-list.ts","../src/format-relative-time.ts","../src/is-rtl.ts","../src/locale.ts","../src/track-locale.ts"],"sourcesContent":["type FormatOptions<T> = T extends Intl.NumberFormat\n ? Intl.NumberFormatOptions\n : T extends Intl.DateTimeFormat\n ? Intl.DateTimeFormatOptions\n : T extends Intl.RelativeTimeFormat\n ? Intl.RelativeTimeFormatOptions\n : T extends Intl.ListFormat\n ? Intl.ListFormatOptions\n : T extends Intl.PluralRules\n ? Intl.PluralRulesOptions\n : never\n\nexport function i18nCache<T extends abstract new (...args: any) => any>(Ins: T) {\n const formatterCache = new Map<string, T>()\n\n return function create(locale: string, options?: FormatOptions<InstanceType<T>>): InstanceType<T> {\n const cacheKey =\n locale +\n (options\n ? Object.entries(options)\n .sort((a, b) => (a[0] < b[0] ? -1 : 1))\n .join()\n : \"\")\n\n if (formatterCache.has(cacheKey)) {\n return formatterCache.get(cacheKey) as any\n }\n\n // @ts-ignore\n let formatter = new Ins(locale, options)\n formatterCache.set(cacheKey, formatter)\n\n return formatter as any\n }\n}\n","import { i18nCache } from \"./cache\"\n\nconst getNumberFormatter = i18nCache(Intl.NumberFormat)\n\nexport function formatNumber(v: number, locale: string, options: Intl.NumberFormatOptions = {}) {\n const formatter = getNumberFormatter(locale, options)\n return formatter.format(v)\n}\n","import { formatNumber } from \"./format-number\"\n\nconst bitPrefixes = [\"\", \"kilo\", \"mega\", \"giga\", \"tera\"]\nconst bytePrefixes = [\"\", \"kilo\", \"mega\", \"giga\", \"tera\", \"peta\"]\n\nexport interface FormatBytesOptions {\n unit?: \"bit\" | \"byte\"\n unitDisplay?: \"long\" | \"short\" | \"narrow\"\n}\n\nexport const formatBytes = (bytes: number, locale = \"en-US\", options: FormatBytesOptions = {}) => {\n if (isNaN(bytes)) return \"\"\n if (bytes === 0) return \"0 B\"\n\n const { unit = \"byte\", unitDisplay = \"short\" } = options\n\n const prefix = unit === \"bit\" ? bitPrefixes : bytePrefixes\n const index = Math.max(0, Math.min(Math.floor(Math.log10(bytes) / 3), prefix.length - 1))\n\n const _unit = prefix[index] + unit\n const _unitDisplay = unitDisplay || \"short\"\n\n const v = parseFloat((bytes / Math.pow(1000, index)).toPrecision(3))\n\n return formatNumber(v, locale, {\n style: \"unit\",\n unit: _unit,\n unitDisplay: _unitDisplay,\n })\n}\n","const symbols = \"\\\\s|\\\\.|-|/|\\\\\\\\|,|\\\\$|\\\\!|\\\\?|:|;\"\n\nfunction createRegEx(sign: string) {\n return new RegExp(\"(^|>|\" + symbols + \")(\" + sign + \")($|<|\" + symbols + \")\", \"g\")\n}\n\n// prettier-ignore\nconst FORMATS = [\n\"G\",\"GG\",\"GGG\",\"GGGG\",\"GGGGG\",\n\"y\",\"yo\",\"yy\",\"yyy\",\"yyyy\",\n\"Y\",\"Yo\",\"YY\",\"YYY\",\"YYYY\",\n\"Q\",\"Qo\",\"QQ\",\"QQQ\",\"QQQQ\",\"QQQQQ\",\n\"M\",\"Mo\",\"MM\",\"MMM\",\"MMMM\",\"MMMMM\",\n\"E\",\"EE\",\"EEE\",\"EEEE\",\"EEEEE\",\"EEEEEE\",\n\"a\",\"aa\",\"aaa\",\"aaaa\",\"aaaaa\",\n\"d\",\"do\",\"dd\",\n\"D\",\"Do\",\"DD\",\"DDD\",\n\"w\",\"wo\",\"ww\",\n\"s\",\"so\",\"ss\",\n\"m\",\"mo\",\"mm\",\n\"h\",\"ho\",\"hh\",\n\"H\",\"Ho\",\"HH\",\n\"z\",\"zz\",\"zzz\",\"zzzz\",\n\"T\",\n] as const\n\ntype Format = (typeof FORMATS)[number]\n\ninterface FormatDateOptions {\n locale: string\n format: Format\n timeZone?: string\n}\n\nfunction ordinal(num: string | number) {\n const n = typeof num === \"string\" ? parseFloat(num) : num\n let suffix = \"th\"\n if (n % 10 === 1 && n % 100 !== 11) {\n suffix = \"st\"\n } else if (n % 10 === 2 && n % 100 !== 12) {\n suffix = \"nd\"\n } else if (n % 10 === 3 && n % 100 !== 13) {\n suffix = \"rd\"\n }\n return `${n}${suffix}`\n}\n\nfunction pad(num: number, length: number) {\n return String(num).padStart(length, \"0\")\n}\n\nfunction zone(str: string) {\n return str.split(/AM|PM/)[1].trim()\n}\n\nfunction getFormat(date: Date, options: FormatDateOptions) {\n const { locale, format, timeZone } = options\n\n switch (format) {\n // era\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return date.toLocaleString(locale, { era: \"short\" })\n case \"GGGG\":\n return date.toLocaleString(locale, { era: \"long\" })\n case \"GGGGG\":\n return date.toLocaleString(locale, { era: \"narrow\" })\n\n // year\n case \"y\":\n case \"Y\":\n return date.getFullYear()\n case \"yo\":\n case \"Yo\":\n return ordinal(date.toLocaleString(locale, { year: \"numeric\" }))\n case \"yy\":\n case \"YY\":\n return date.toLocaleString(locale, { year: \"2-digit\" })\n case \"yyy\":\n case \"YYY\":\n return date.toLocaleString(locale, { year: \"numeric\" }).padStart(3, \"0\")\n case \"yyyy\":\n case \"YYYY\":\n return date.toLocaleString(locale, { year: \"numeric\" }).padStart(4, \"0\")\n\n // quarter\n case \"Q\":\n case \"QQQQQ\":\n return Math.ceil((date.getMonth() + 1) / 3)\n case \"Qo\":\n return ordinal(Math.ceil((date.getMonth() + 1) / 3))\n case \"QQ\":\n return pad(Math.ceil((date.getMonth() + 1) / 3), 2)\n case \"QQQ\":\n return `Q${Math.ceil((date.getMonth() + 1) / 3)}`\n case \"QQQQ\": {\n const base = ordinal(String(Math.ceil((date.getMonth() + 1) / 3)))\n return `${base} quarter`\n }\n\n // month\n case \"M\":\n return date.getMonth() + 1\n case \"Mo\":\n return ordinal(date.getMonth() + 1)\n case \"MM\":\n return date.toLocaleString(locale, { month: \"2-digit\" })\n case \"MMM\":\n return date.toLocaleString(locale, { month: \"short\" })\n case \"MMMM\":\n return date.toLocaleString(locale, { month: \"long\" })\n case \"MMMMM\":\n return date.toLocaleString(locale, { month: \"narrow\" })\n\n // week\n case \"w\":\n return Math.ceil(date.getDate() / 7)\n case \"wo\":\n return ordinal(Math.ceil(date.getDate() / 7))\n case \"ww\":\n return pad(Math.ceil(date.getDate() / 7), 2)\n\n // day\n case \"d\":\n case \"D\":\n return date.getDate()\n case \"do\":\n case \"Do\":\n return ordinal(date.getDate())\n case \"dd\":\n case \"DD\":\n return date.toLocaleString(locale, { day: \"2-digit\" })\n case \"DDD\":\n return pad(date.getDate(), 3)\n\n // weekday\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return date.toLocaleString(locale, { weekday: \"short\" })\n case \"EEEE\":\n return date.toLocaleString(locale, { weekday: \"long\" })\n case \"EEEEE\":\n return date.toLocaleString(locale, { weekday: \"narrow\" })\n case \"EEEEEE\":\n return date.toLocaleString(locale, { weekday: \"short\" }).slice(0, 2)\n\n // hour\n case \"h\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true })\n case \"ho\":\n return ordinal(date.toLocaleString(locale, { hour: \"2-digit\", hour12: true }))\n case \"hh\":\n return date.toLocaleString(locale, { hour: \"2-digit\", hour12: true })\n case \"H\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: false })\n case \"Ho\":\n return ordinal(+date.toLocaleString(locale, { hour: \"numeric\", hour12: false }))\n case \"HH\":\n return date.toLocaleString(locale, { hour: \"2-digit\", hour12: false })\n\n // minute\n case \"m\":\n return date.toLocaleString(locale, { minute: \"numeric\" })\n case \"mo\":\n return ordinal(date.toLocaleString(locale, { minute: \"numeric\" }))\n case \"mm\":\n return date.toLocaleString(locale, { minute: \"2-digit\" })\n\n // second\n case \"s\":\n return date.toLocaleString(locale, { second: \"numeric\" })\n case \"so\":\n return ordinal(date.toLocaleString(locale, { second: \"numeric\" }))\n case \"ss\":\n return date.toLocaleString(locale, { second: \"2-digit\" })\n\n // timestamp\n case \"T\":\n return date.getTime()\n\n // day period\n case \"a\":\n case \"aa\":\n case \"aaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).toLocaleUpperCase()\n case \"aaaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).toLocaleLowerCase()\n case \"aaaaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).charAt(0)\n\n // TODO:Revise this\n case \"z\":\n case \"zz\":\n case \"zzz\": {\n return zone(date.toLocaleString(locale, { timeZone, timeZoneName: \"shortOffset\" }))\n }\n case \"zzzz\":\n return zone(date.toLocaleString(locale, { timeZone, timeZoneName: \"longOffset\" }))\n\n default:\n throw new Error(`Unknown format: ${format}`)\n }\n}\n\n/**\n * Formats a date using the given format string as defined in:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n */\nexport function formatDate(date: Date, format: string, locale: string, timeZone?: string) {\n let result = format\n for (const key of FORMATS) {\n const res = getFormat(date, { locale, format: key, timeZone })\n result = result.replace(createRegEx(key), \"$1\" + res + \"$3\")\n }\n return result\n}\n","import { i18nCache } from \"./cache\"\n\nconst getListFormatter = i18nCache(Intl.ListFormat)\n\nexport function formatList(list: string[], locale: string, options: Intl.ListFormatOptions = {}) {\n const formatter = getListFormatter(locale, options)\n return formatter.format(list)\n}\n","import { i18nCache } from \"./cache\"\n\nconst getRelativeTimeFormatter = i18nCache(Intl.RelativeTimeFormat)\n\nexport function formatRelativeTime(value: Date, locale: string, options: Intl.RelativeTimeFormatOptions = {}) {\n const rtf = getRelativeTimeFormatter(locale, options)\n\n const now = new Date()\n const diff = getDistance(now, value)\n\n if (diff.years > 0) return rtf.format(diff.years * diff.sign, \"year\")\n if (diff.months > 0) return rtf.format(diff.months * diff.sign, \"month\")\n if (diff.weeks > 0) return rtf.format(diff.weeks * diff.sign, \"week\")\n if (diff.days > 0) return rtf.format(diff.days * diff.sign, \"day\")\n if (diff.hours > 0) return rtf.format(diff.hours * diff.sign, \"hour\")\n if (diff.minutes > 0) return rtf.format(diff.minutes * diff.sign, \"minute\")\n\n return rtf.format(diff.seconds * diff.sign, \"second\")\n}\n\nconst SECOND_TO_MS = 1000\nconst MINUTE_TO_MS = 1000 * 60\nconst HOUR_TO_MS = 1000 * 60 * 60\nconst DAY_TO_MS = 1000 * 60 * 60 * 24\nconst WEEK_TO_MS = 1000 * 60 * 60 * 24 * 7\nconst MONTH_TO_MS = 1000 * 60 * 60 * 24 * 30\nconst YEAR_TO_MS = 1000 * 60 * 60 * 24 * 365\n\nfunction getDistance(startDate: Date, endDate: Date) {\n const endTime = endDate.getTime()\n const startTime = startDate.getTime()\n const distance = Math.abs(endTime - startTime)\n\n return {\n sign: Math.sign(endTime - startTime),\n days: Math.floor(distance / DAY_TO_MS),\n hours: Math.floor((distance % DAY_TO_MS) / HOUR_TO_MS),\n minutes: Math.floor((distance % HOUR_TO_MS) / MINUTE_TO_MS),\n seconds: Math.floor((distance % MINUTE_TO_MS) / SECOND_TO_MS),\n weeks: Math.floor(distance / WEEK_TO_MS),\n months: Math.floor(distance / MONTH_TO_MS),\n years: Math.floor(distance / YEAR_TO_MS),\n }\n}\n","const RTL_SCRIPTS = new Set([\n \"Avst\",\n \"Arab\",\n \"Armi\",\n \"Syrc\",\n \"Samr\",\n \"Mand\",\n \"Thaa\",\n \"Mend\",\n \"Nkoo\",\n \"Adlm\",\n \"Rohg\",\n \"Hebr\",\n])\n\nconst RTL_LANGS = new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\",\n])\n\nexport function isRTL(locale: string) {\n if (Intl.Locale) {\n const script = new Intl.Locale(locale).maximize().script ?? \"\"\n return RTL_SCRIPTS.has(script)\n }\n\n const lang = locale.split(\"-\")[0]\n return RTL_LANGS.has(lang)\n}\n\nexport function getLocaleDir(locale: string) {\n return isRTL(locale) ? \"rtl\" : \"ltr\"\n}\n","import { isRTL } from \"./is-rtl\"\n\nexport type Direction = \"rtl\" | \"ltr\"\n\nexport interface Locale {\n locale: string\n dir: Direction\n}\n\ndeclare global {\n interface Navigator {\n userLanguage?: string\n }\n}\n\nexport function getDefaultLocale(): Locale {\n let locale = (typeof navigator !== \"undefined\" && (navigator.language || navigator.userLanguage)) || \"en-US\"\n\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale])\n } catch {\n locale = \"en-US\"\n }\n\n return {\n locale,\n dir: isRTL(locale) ? \"rtl\" : \"ltr\",\n }\n}\n","import { getWindow } from \"@zag-js/dom-query\"\nimport { getDefaultLocale, type Locale } from \"./locale\"\n\nexport interface LocaleOptions {\n locale?: string\n getRootNode?: () => ShadowRoot | Document | Node\n onLocaleChange?: (locale: Locale) => void\n}\n\nexport function trackLocale(options: LocaleOptions = {}) {\n const { getRootNode, onLocaleChange } = options\n\n onLocaleChange?.(getDefaultLocale())\n\n const handleLocaleChange = () => {\n onLocaleChange?.(getDefaultLocale())\n }\n\n const win = getRootNode ? getWindow(getRootNode()) : window\n\n win.addEventListener(\"languagechange\", handleLocaleChange)\n\n return () => {\n win.removeEventListener(\"languagechange\", handleLocaleChange)\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/cache.ts","../src/format-number.ts","../src/format-bytes.ts","../src/format-date.ts","../src/format-list.ts","../src/format-relative-time.ts","../src/is-rtl.ts","../src/locale.ts","../src/track-locale.ts"],"sourcesContent":["type FormatOptions<T> = T extends Intl.NumberFormat\n ? Intl.NumberFormatOptions\n : T extends Intl.DateTimeFormat\n ? Intl.DateTimeFormatOptions\n : T extends Intl.RelativeTimeFormat\n ? Intl.RelativeTimeFormatOptions\n : T extends Intl.ListFormat\n ? Intl.ListFormatOptions\n : T extends Intl.PluralRules\n ? Intl.PluralRulesOptions\n : never\n\nexport function i18nCache<T extends abstract new (...args: any) => any>(Ins: T) {\n const formatterCache = new Map<string, T>()\n\n return function create(locale: string, options?: FormatOptions<InstanceType<T>>): InstanceType<T> {\n const cacheKey =\n locale +\n (options\n ? Object.entries(options)\n .sort((a, b) => (a[0] < b[0] ? -1 : 1))\n .join()\n : \"\")\n\n if (formatterCache.has(cacheKey)) {\n return formatterCache.get(cacheKey) as any\n }\n\n // @ts-ignore\n let formatter = new Ins(locale, options)\n formatterCache.set(cacheKey, formatter)\n\n return formatter as any\n }\n}\n","import { i18nCache } from \"./cache\"\n\nconst getNumberFormatter = i18nCache(Intl.NumberFormat)\n\nexport function formatNumber(v: number, locale: string, options: Intl.NumberFormatOptions = {}) {\n const formatter = getNumberFormatter(locale, options)\n return formatter.format(v)\n}\n","import { formatNumber } from \"./format-number\"\n\nconst bitPrefixes = [\"\", \"kilo\", \"mega\", \"giga\", \"tera\"]\nconst bytePrefixes = [\"\", \"kilo\", \"mega\", \"giga\", \"tera\", \"peta\"]\n\nexport interface FormatBytesOptions {\n unit?: \"bit\" | \"byte\"\n unitDisplay?: \"long\" | \"short\" | \"narrow\"\n}\n\nexport const formatBytes = (bytes: number, locale = \"en-US\", options: FormatBytesOptions = {}) => {\n if (isNaN(bytes)) return \"\"\n if (bytes === 0) return \"0 B\"\n\n const { unit = \"byte\", unitDisplay = \"short\" } = options\n\n const prefix = unit === \"bit\" ? bitPrefixes : bytePrefixes\n const index = Math.max(0, Math.min(Math.floor(Math.log10(bytes) / 3), prefix.length - 1))\n\n const _unit = prefix[index] + unit\n const _unitDisplay = unitDisplay || \"short\"\n\n const v = parseFloat((bytes / Math.pow(1000, index)).toPrecision(3))\n\n return formatNumber(v, locale, {\n style: \"unit\",\n unit: _unit,\n unitDisplay: _unitDisplay,\n })\n}\n","const symbols = \"\\\\s|\\\\.|-|/|\\\\\\\\|,|\\\\$|\\\\!|\\\\?|:|;\"\n\nfunction createRegEx(sign: string) {\n return new RegExp(\"(^|>|\" + symbols + \")(\" + sign + \")($|<|\" + symbols + \")\", \"g\")\n}\n\n// prettier-ignore\nconst FORMATS = [\n\"G\",\"GG\",\"GGG\",\"GGGG\",\"GGGGG\",\n\"y\",\"yo\",\"yy\",\"yyy\",\"yyyy\",\n\"Y\",\"Yo\",\"YY\",\"YYY\",\"YYYY\",\n\"Q\",\"Qo\",\"QQ\",\"QQQ\",\"QQQQ\",\"QQQQQ\",\n\"M\",\"Mo\",\"MM\",\"MMM\",\"MMMM\",\"MMMMM\",\n\"E\",\"EE\",\"EEE\",\"EEEE\",\"EEEEE\",\"EEEEEE\",\n\"a\",\"aa\",\"aaa\",\"aaaa\",\"aaaaa\",\n\"d\",\"do\",\"dd\",\n\"D\",\"Do\",\"DD\",\"DDD\",\n\"w\",\"wo\",\"ww\",\n\"s\",\"so\",\"ss\",\n\"m\",\"mo\",\"mm\",\n\"h\",\"ho\",\"hh\",\n\"H\",\"Ho\",\"HH\",\n\"z\",\"zz\",\"zzz\",\"zzzz\",\n\"T\",\n] as const\n\ntype Format = (typeof FORMATS)[number]\n\ninterface FormatDateOptions {\n locale: string\n format: Format\n timeZone?: string\n}\n\nfunction ordinal(num: string | number) {\n const n = typeof num === \"string\" ? parseFloat(num) : num\n let suffix = \"th\"\n if (n % 10 === 1 && n % 100 !== 11) {\n suffix = \"st\"\n } else if (n % 10 === 2 && n % 100 !== 12) {\n suffix = \"nd\"\n } else if (n % 10 === 3 && n % 100 !== 13) {\n suffix = \"rd\"\n }\n return `${n}${suffix}`\n}\n\nfunction pad(num: number, length: number) {\n return String(num).padStart(length, \"0\")\n}\n\nfunction zone(str: string) {\n return str.split(/AM|PM/)[1].trim()\n}\n\nfunction getFormat(date: Date, options: FormatDateOptions) {\n const { locale, format, timeZone } = options\n\n switch (format) {\n // era\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return date.toLocaleString(locale, { era: \"short\" })\n case \"GGGG\":\n return date.toLocaleString(locale, { era: \"long\" })\n case \"GGGGG\":\n return date.toLocaleString(locale, { era: \"narrow\" })\n\n // year\n case \"y\":\n case \"Y\":\n return date.getFullYear()\n case \"yo\":\n case \"Yo\":\n return ordinal(date.toLocaleString(locale, { year: \"numeric\" }))\n case \"yy\":\n case \"YY\":\n return date.toLocaleString(locale, { year: \"2-digit\" })\n case \"yyy\":\n case \"YYY\":\n return date.toLocaleString(locale, { year: \"numeric\" }).padStart(3, \"0\")\n case \"yyyy\":\n case \"YYYY\":\n return date.toLocaleString(locale, { year: \"numeric\" }).padStart(4, \"0\")\n\n // quarter\n case \"Q\":\n case \"QQQQQ\":\n return Math.ceil((date.getMonth() + 1) / 3)\n case \"Qo\":\n return ordinal(Math.ceil((date.getMonth() + 1) / 3))\n case \"QQ\":\n return pad(Math.ceil((date.getMonth() + 1) / 3), 2)\n case \"QQQ\":\n return `Q${Math.ceil((date.getMonth() + 1) / 3)}`\n case \"QQQQ\": {\n const base = ordinal(String(Math.ceil((date.getMonth() + 1) / 3)))\n return `${base} quarter`\n }\n\n // month\n case \"M\":\n return date.getMonth() + 1\n case \"Mo\":\n return ordinal(date.getMonth() + 1)\n case \"MM\":\n return date.toLocaleString(locale, { month: \"2-digit\" })\n case \"MMM\":\n return date.toLocaleString(locale, { month: \"short\" })\n case \"MMMM\":\n return date.toLocaleString(locale, { month: \"long\" })\n case \"MMMMM\":\n return date.toLocaleString(locale, { month: \"narrow\" })\n\n // week\n case \"w\":\n return Math.ceil(date.getDate() / 7)\n case \"wo\":\n return ordinal(Math.ceil(date.getDate() / 7))\n case \"ww\":\n return pad(Math.ceil(date.getDate() / 7), 2)\n\n // day\n case \"d\":\n case \"D\":\n return date.getDate()\n case \"do\":\n case \"Do\":\n return ordinal(date.getDate())\n case \"dd\":\n case \"DD\":\n return date.toLocaleString(locale, { day: \"2-digit\" })\n case \"DDD\":\n return pad(date.getDate(), 3)\n\n // weekday\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return date.toLocaleString(locale, { weekday: \"short\" })\n case \"EEEE\":\n return date.toLocaleString(locale, { weekday: \"long\" })\n case \"EEEEE\":\n return date.toLocaleString(locale, { weekday: \"narrow\" })\n case \"EEEEEE\":\n return date.toLocaleString(locale, { weekday: \"short\" }).slice(0, 2)\n\n // hour\n case \"h\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true })\n case \"ho\":\n return ordinal(date.toLocaleString(locale, { hour: \"2-digit\", hour12: true }))\n case \"hh\":\n return date.toLocaleString(locale, { hour: \"2-digit\", hour12: true })\n case \"H\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: false })\n case \"Ho\":\n return ordinal(+date.toLocaleString(locale, { hour: \"numeric\", hour12: false }))\n case \"HH\":\n return date.toLocaleString(locale, { hour: \"2-digit\", hour12: false })\n\n // minute\n case \"m\":\n return date.toLocaleString(locale, { minute: \"numeric\" })\n case \"mo\":\n return ordinal(date.toLocaleString(locale, { minute: \"numeric\" }))\n case \"mm\":\n return date.toLocaleString(locale, { minute: \"2-digit\" })\n\n // second\n case \"s\":\n return date.toLocaleString(locale, { second: \"numeric\" })\n case \"so\":\n return ordinal(date.toLocaleString(locale, { second: \"numeric\" }))\n case \"ss\":\n return date.toLocaleString(locale, { second: \"2-digit\" })\n\n // timestamp\n case \"T\":\n return date.getTime()\n\n // day period\n case \"a\":\n case \"aa\":\n case \"aaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).toLocaleUpperCase()\n case \"aaaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).toLocaleLowerCase()\n case \"aaaaa\":\n return date.toLocaleString(locale, { hour: \"numeric\", hour12: true }).charAt(0)\n\n // TODO:Revise this\n case \"z\":\n case \"zz\":\n case \"zzz\": {\n return zone(date.toLocaleString(locale, { timeZone, timeZoneName: \"shortOffset\" }))\n }\n case \"zzzz\":\n return zone(date.toLocaleString(locale, { timeZone, timeZoneName: \"longOffset\" }))\n\n default:\n throw new Error(`Unknown format: ${format}`)\n }\n}\n\n/**\n * Formats a date using the given format string as defined in:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n */\nexport function formatDate(date: Date, format: string, locale: string, timeZone?: string) {\n let result = format\n for (const key of FORMATS) {\n const res = getFormat(date, { locale, format: key, timeZone })\n result = result.replace(createRegEx(key), \"$1\" + res + \"$3\")\n }\n return result\n}\n","import { i18nCache } from \"./cache\"\n\nconst getListFormatter = i18nCache(Intl.ListFormat)\n\nexport function formatList(list: string[], locale: string, options: Intl.ListFormatOptions = {}) {\n const formatter = getListFormatter(locale, options)\n return formatter.format(list)\n}\n","import { i18nCache } from \"./cache\"\n\nconst getRelativeTimeFormatter = i18nCache(Intl.RelativeTimeFormat)\n\nexport function formatRelativeTime(value: Date, locale: string, options: Intl.RelativeTimeFormatOptions = {}) {\n const rtf = getRelativeTimeFormatter(locale, options)\n\n const now = new Date()\n const diff = getDistance(now, value)\n\n if (diff.years > 0) return rtf.format(diff.years * diff.sign, \"year\")\n if (diff.months > 0) return rtf.format(diff.months * diff.sign, \"month\")\n if (diff.weeks > 0) return rtf.format(diff.weeks * diff.sign, \"week\")\n if (diff.days > 0) return rtf.format(diff.days * diff.sign, \"day\")\n if (diff.hours > 0) return rtf.format(diff.hours * diff.sign, \"hour\")\n if (diff.minutes > 0) return rtf.format(diff.minutes * diff.sign, \"minute\")\n\n return rtf.format(diff.seconds * diff.sign, \"second\")\n}\n\nconst SECOND_TO_MS = 1000\nconst MINUTE_TO_MS = 1000 * 60\nconst HOUR_TO_MS = 1000 * 60 * 60\nconst DAY_TO_MS = 1000 * 60 * 60 * 24\nconst WEEK_TO_MS = 1000 * 60 * 60 * 24 * 7\nconst MONTH_TO_MS = 1000 * 60 * 60 * 24 * 30\nconst YEAR_TO_MS = 1000 * 60 * 60 * 24 * 365\n\nfunction getDistance(startDate: Date, endDate: Date) {\n const endTime = endDate.getTime()\n const startTime = startDate.getTime()\n const distance = Math.abs(endTime - startTime)\n\n return {\n sign: Math.sign(endTime - startTime),\n days: Math.floor(distance / DAY_TO_MS),\n hours: Math.floor((distance % DAY_TO_MS) / HOUR_TO_MS),\n minutes: Math.floor((distance % HOUR_TO_MS) / MINUTE_TO_MS),\n seconds: Math.floor((distance % MINUTE_TO_MS) / SECOND_TO_MS),\n weeks: Math.floor(distance / WEEK_TO_MS),\n months: Math.floor(distance / MONTH_TO_MS),\n years: Math.floor(distance / YEAR_TO_MS),\n }\n}\n","const RTL_SCRIPTS = new Set([\n \"Avst\",\n \"Arab\",\n \"Armi\",\n \"Syrc\",\n \"Samr\",\n \"Mand\",\n \"Thaa\",\n \"Mend\",\n \"Nkoo\",\n \"Adlm\",\n \"Rohg\",\n \"Hebr\",\n])\n\nconst RTL_LANGS = new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\",\n])\n\nexport function isRTL(locale: string) {\n if (Intl.Locale) {\n const script = new Intl.Locale(locale).maximize().script ?? \"\"\n return RTL_SCRIPTS.has(script)\n }\n\n const lang = locale.split(\"-\")[0]\n return RTL_LANGS.has(lang)\n}\n\nexport function getLocaleDir(locale: string) {\n return isRTL(locale) ? \"rtl\" : \"ltr\"\n}\n","import { isRTL } from \"./is-rtl\"\n\nexport type Direction = \"rtl\" | \"ltr\"\n\nexport interface Locale {\n locale: string\n dir: Direction\n}\n\ndeclare global {\n interface Navigator {\n userLanguage?: string\n }\n}\n\nexport function getDefaultLocale(): Locale {\n let locale = (typeof navigator !== \"undefined\" && (navigator.language || navigator.userLanguage)) || \"en-US\"\n\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale])\n } catch {\n locale = \"en-US\"\n }\n\n return {\n locale,\n dir: isRTL(locale) ? \"rtl\" : \"ltr\",\n }\n}\n","import { getWindow } from \"@zag-js/dom-query\"\nimport { getDefaultLocale, type Locale } from \"./locale\"\n\nexport interface LocaleOptions {\n locale?: string\n getRootNode?: () => ShadowRoot | Document | Node\n onLocaleChange?: (locale: Locale) => void\n}\n\nexport function trackLocale(options: LocaleOptions = {}) {\n const { getRootNode, onLocaleChange } = options\n\n onLocaleChange?.(getDefaultLocale())\n\n const handleLocaleChange = () => {\n onLocaleChange?.(getDefaultLocale())\n }\n\n const win = getRootNode ? getWindow(getRootNode()) : window\n\n win.addEventListener(\"languagechange\", handleLocaleChange)\n\n return () => {\n win.removeEventListener(\"languagechange\", handleLocaleChange)\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zag-js/i18n-utils",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.66.1",
|
|
4
4
|
"description": "Interationalization utilities for Zag.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
},
|
|
25
25
|
"clean-package": "../../../clean-package.config.json",
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@zag-js/dom-query": "0.
|
|
27
|
+
"@zag-js/dom-query": "0.66.1"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"clean-package": "2.2.0",
|