UNPKG

reka-ui

Version:

Vue port for Radix UI Primitives.

222 lines (204 loc) 6.58 kB
/* * Implementation ported from from from https://github.com/melt-ui/melt-ui/blob/develop/src/lib/internal/helpers/date/placeholders.ts */ const supportedLocales = [ 'ach', 'af', 'am', 'an', 'ar', 'ast', 'az', 'be', 'bg', 'bn', 'br', 'bs', 'ca', 'cak', 'ckb', 'cs', 'cy', 'da', 'de', 'dsb', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fr', 'fy', 'ga', 'gd', 'gl', 'he', 'hr', 'hsb', 'hu', 'ia', 'id', 'it', 'ja', 'ka', 'kk', 'kn', 'ko', 'lb', 'lo', 'lt', 'lv', 'meh', 'ml', 'ms', 'nl', 'nn', 'no', 'oc', 'pl', 'pt', 'rm', 'ro', 'ru', 'sc', 'scn', 'sk', 'sl', 'sr', 'sv', 'szl', 'tg', 'th', 'tr', 'uk', 'zh-CN', 'zh-TW', ] as const const placeholderFields = ['year', 'month', 'day'] as const type PlaceholderField = (typeof placeholderFields)[number] export type SupportedLocale = (typeof supportedLocales)[number] export type PlaceholderMap = Record<SupportedLocale, Record<PlaceholderField, string>> const placeholders: PlaceholderMap = { 'ach': { year: 'mwaka', month: 'dwe', day: 'nino' }, 'af': { year: 'jjjj', month: 'mm', day: 'dd' }, 'am': { year: 'ዓዓዓዓ', month: 'ሚሜ', day: 'ቀቀ' }, 'an': { year: 'aaaa', month: 'mm', day: 'dd' }, 'ar': { year: 'سنة', month: 'شهر', day: 'يوم' }, 'ast': { year: 'aaaa', month: 'mm', day: 'dd' }, 'az': { year: 'iiii', month: 'aa', day: 'gg' }, 'be': { year: 'гггг', month: 'мм', day: 'дд' }, 'bg': { year: 'гггг', month: 'мм', day: 'дд' }, 'bn': { year: 'yyyy', month: 'মিমি', day: 'dd' }, 'br': { year: 'bbbb', month: 'mm', day: 'dd' }, 'bs': { year: 'gggg', month: 'mm', day: 'dd' }, 'ca': { year: 'aaaa', month: 'mm', day: 'dd' }, 'cak': { year: 'jjjj', month: 'ii', day: 'q\'q\'' }, 'ckb': { year: 'ساڵ', month: 'مانگ', day: 'ڕۆژ' }, 'cs': { year: 'rrrr', month: 'mm', day: 'dd' }, 'cy': { year: 'bbbb', month: 'mm', day: 'dd' }, 'da': { year: 'åååå', month: 'mm', day: 'dd' }, 'de': { year: 'jjjj', month: 'mm', day: 'tt' }, 'dsb': { year: 'llll', month: 'mm', day: 'źź' }, 'el': { year: 'εεεε', month: 'μμ', day: 'ηη' }, 'en': { year: 'yyyy', month: 'mm', day: 'dd' }, 'eo': { year: 'jjjj', month: 'mm', day: 'tt' }, 'es': { year: 'aaaa', month: 'mm', day: 'dd' }, 'et': { year: 'aaaa', month: 'kk', day: 'pp' }, 'eu': { year: 'uuuu', month: 'hh', day: 'ee' }, 'fa': { year: 'سال', month: 'ماه', day: 'روز' }, 'ff': { year: 'hhhh', month: 'll', day: 'ññ' }, 'fi': { year: 'vvvv', month: 'kk', day: 'pp' }, 'fr': { year: 'aaaa', month: 'mm', day: 'jj' }, 'fy': { year: 'jjjj', month: 'mm', day: 'dd' }, 'ga': { year: 'bbbb', month: 'mm', day: 'll' }, 'gd': { year: 'bbbb', month: 'mm', day: 'll' }, 'gl': { year: 'aaaa', month: 'mm', day: 'dd' }, 'he': { year: 'שנה', month: 'חודש', day: 'יום' }, 'hr': { year: 'gggg', month: 'mm', day: 'dd' }, 'hsb': { year: 'llll', month: 'mm', day: 'dd' }, 'hu': { year: 'éééé', month: 'hh', day: 'nn' }, 'ia': { year: 'aaaa', month: 'mm', day: 'dd' }, 'id': { year: 'tttt', month: 'bb', day: 'hh' }, 'it': { year: 'aaaa', month: 'mm', day: 'gg' }, 'ja': { year: ' 年 ', month: '月', day: '日' }, 'ka': { year: 'წწწწ', month: 'თთ', day: 'რრ' }, 'kk': { year: 'жжжж', month: 'аа', day: 'кк' }, 'kn': { year: 'ವವವವ', month: 'ಮಿಮೀ', day: 'ದಿದಿ' }, 'ko': { year: '연도', month: '월', day: '일' }, 'lb': { year: 'jjjj', month: 'mm', day: 'dd' }, 'lo': { year: 'ປປປປ', month: 'ດດ', day: 'ວວ' }, 'lt': { year: 'mmmm', month: 'mm', day: 'dd' }, 'lv': { year: 'gggg', month: 'mm', day: 'dd' }, 'meh': { year: 'aaaa', month: 'mm', day: 'dd' }, 'ml': { year: 'വർഷം', month: 'മാസം', day: 'തീയതി' }, 'ms': { year: 'tttt', month: 'mm', day: 'hh' }, 'nl': { year: 'jjjj', month: 'mm', day: 'dd' }, 'nn': { year: 'åååå', month: 'mm', day: 'dd' }, 'no': { year: 'åååå', month: 'mm', day: 'dd' }, 'oc': { year: 'aaaa', month: 'mm', day: 'jj' }, 'pl': { year: 'rrrr', month: 'mm', day: 'dd' }, 'pt': { year: 'aaaa', month: 'mm', day: 'dd' }, 'rm': { year: 'oooo', month: 'mm', day: 'dd' }, 'ro': { year: 'aaaa', month: 'll', day: 'zz' }, 'ru': { year: 'гггг', month: 'мм', day: 'дд' }, 'sc': { year: 'aaaa', month: 'mm', day: 'dd' }, 'scn': { year: 'aaaa', month: 'mm', day: 'jj' }, 'sk': { year: 'rrrr', month: 'mm', day: 'dd' }, 'sl': { year: 'llll', month: 'mm', day: 'dd' }, 'sr': { year: 'гггг', month: 'мм', day: 'дд' }, 'sv': { year: 'åååå', month: 'mm', day: 'dd' }, 'szl': { year: 'rrrr', month: 'mm', day: 'dd' }, 'tg': { year: 'сссс', month: 'мм', day: 'рр' }, 'th': { year: 'ปปปป', month: 'ดด', day: 'วว' }, 'tr': { year: 'yyyy', month: 'aa', day: 'gg' }, 'uk': { year: 'рррр', month: 'мм', day: 'дд' }, 'zh-CN': { year: '年', month: '月', day: '日' }, 'zh-TW': { year: '年', month: '月', day: '日' }, } function getPlaceholderObj(locale: SupportedLocale | (string & {})) { if (!isSupportedLocale(locale)) { const localeLanguage = getLocaleLanguage(locale) if (!isSupportedLocale(localeLanguage)) return placeholders.en else return placeholders[localeLanguage] } else { return placeholders[locale] } } type Field = 'era' | 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'dayPeriod' export function getPlaceholder( field: Field, value: string, locale: SupportedLocale | (string & {}), ) { if (isPlaceholderField(field)) return getPlaceholderObj(locale)[field] if (isDefaultField(field)) return value if (isTimeField(field)) return '––' return '' } function isSupportedLocale(locale: string): locale is SupportedLocale { return supportedLocales.includes(locale as SupportedLocale) } function isPlaceholderField(field: unknown): field is PlaceholderField { return placeholderFields.includes(field as PlaceholderField) } function isTimeField(field: unknown): field is 'hour' | 'minute' | 'second' { return field === 'hour' || field === 'minute' || field === 'second' } function isDefaultField(field: unknown): field is 'era' | 'dayPeriod' { return field === 'era' || field === 'dayPeriod' } function getLocaleLanguage(locale: string) { if (Intl.Locale) return new Intl.Locale(locale).language return locale.split('-')[0] }