@vinaverse/tokens 0.1.0-alpha.11 → 0.1.0-alpha.13

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.
@@ -5,6 +5,7 @@ var en = {
5
5
  disclosureFallback: "You're chatting with an AI agent. Powered by Vinaverse.",
6
6
  agentLabel: "AI agent",
7
7
  agentFallbackName: "the agent",
8
+ askingAbout: "Asking about",
8
9
  you: "You",
9
10
  staffLabel: "{by} \xB7 person",
10
11
  staffFallbackRole: "the team",
@@ -103,6 +104,7 @@ var es = {
103
104
  disclosureFallback: "Est\xE1s hablando con un agente de IA. Con la tecnolog\xEDa de Vinaverse.",
104
105
  agentLabel: "Agente de IA",
105
106
  agentFallbackName: "el agente",
107
+ askingAbout: "Preguntas sobre",
106
108
  you: "T\xFA",
107
109
  staffLabel: "{by} \xB7 persona",
108
110
  staffFallbackRole: "el equipo",
@@ -197,6 +199,7 @@ var ptBR = {
197
199
  disclosureFallback: "Voc\xEA est\xE1 conversando com um agente de IA. Com tecnologia Vinaverse.",
198
200
  agentLabel: "Agente de IA",
199
201
  agentFallbackName: "o agente",
202
+ askingAbout: "Perguntando sobre",
200
203
  you: "Voc\xEA",
201
204
  staffLabel: "{by} \xB7 pessoa",
202
205
  staffFallbackRole: "a equipe",
@@ -301,6 +304,9 @@ function discloses(key, value) {
301
304
  if (!AI_MARK.test(value)) return false;
302
305
  return key !== "disclosureFallback" || value.includes("Vinaverse");
303
306
  }
307
+ function isDisclosure(text) {
308
+ return discloses("disclosureFallback", text);
309
+ }
304
310
  function builtIn(locale) {
305
311
  const language = (locale ?? "en").split(/[-_]/)[0]?.toLowerCase();
306
312
  if (language === "en") return COPY.en;
@@ -463,6 +469,7 @@ exports.formatDateTime = formatDateTime;
463
469
  exports.formatDayTime = formatDayTime;
464
470
  exports.formatMoney = formatMoney;
465
471
  exports.formatTimeRange = formatTimeRange;
472
+ exports.isDisclosure = isDisclosure;
466
473
  exports.textDirection = textDirection;
467
474
  //# sourceMappingURL=index.cjs.map
468
475
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/copy/copy.ts","../../src/copy/format.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["// The words a Vinaverse UI says, in English, Spanish and Brazilian Portuguese, each overridable by the tenant except\n// the fallback disclosure. People first: \"agent\", never \"assistant\"; a person from the business is a person, by role.\n// `{name}` placeholders are filled from `vars`. A key with a `One` form (`historyMessagesOne`) says it for a `count` of 1.\n\nconst en = {\n disclosureFallback: \"You're chatting with an AI agent. Powered by Vinaverse.\",\n agentLabel: 'AI agent',\n agentFallbackName: 'the agent',\n you: 'You',\n staffLabel: '{by} · person',\n staffFallbackRole: 'the team',\n composerPlaceholder: 'Message {agent}',\n composerPlaceholderTakeover: 'Message {by}',\n send: 'Send',\n stop: 'Stop',\n typeAnswerBelow: 'Type your answer below.',\n bannerConnecting: 'Connecting…',\n bannerReconnecting: 'Reconnecting…',\n bannerOffline: \"You're offline. Messages send when you're back.\",\n bannerContinuedElsewhere: 'This conversation continued on another device.',\n bannerUnavailable: \"Couldn't connect.\",\n continueHere: 'Continue here',\n tryAgain: 'Try again',\n talkToPerson: 'Talk to a person',\n messageSending: 'Sending',\n messageHeld: 'Sends when you continue',\n messageNotSent: 'Not sent',\n messageDelivered: 'Delivered',\n messageCutOff: 'This reply was cut off.',\n takeoverStarted: 'A person from {by} is replying now.',\n takeoverEnded: '{agent} is back.',\n handoffCreated: \"We've passed this to the team. They'll reply {expected}.\",\n handoffCreatedNoTime: \"We've passed this to the team. They'll reply soon.\",\n flowSent: 'Your answers were sent.',\n flowNotSent: \"Your answers couldn't be sent yet.\",\n turnFailed: 'Something went wrong.',\n working: '{agent} is working on it…',\n proposalConfirm: 'Confirm',\n proposalDecline: 'Decline',\n proposalChange: 'Change',\n proposalConfirmed: 'Confirmed',\n proposalDeclined: 'Declined',\n proposalFailed: \"Couldn't be confirmed\",\n proposalExpired: 'Expired',\n proposalSettled: 'No longer open',\n questionSubmit: 'Send',\n questionSkip: 'Skip',\n questionOther: 'Other',\n questionSearch: 'Search',\n questionAnswered: 'Answered',\n questionReplaced: 'Replaced by a newer question',\n questionStep: 'Question {step} of {total}',\n questionAddPhoto: 'Add a photo',\n questionCharactersLeft: '{count} characters left',\n questionCharactersLeftOne: '{count} character left',\n priceFrom: 'From {price}',\n /** A listing with no rating yet; empty draws nothing, a tenant's word (\"New\") draws in the rating's place. */\n ratingNone: '',\n nextAvailable: 'Next: {time}',\n /** A time today and tomorrow, as `nextAvailable` says it (`{time}`: \"10:00 AM\"). */\n today: 'today, {time}',\n tomorrow: 'tomorrow, {time}',\n agentEnded: 'This conversation ended',\n agentEndedBody: 'Start a new one whenever you like.',\n agentStartOver: 'Start a new conversation',\n agentUnreachable: \"Couldn't reach {agent}\",\n agentUnreachableBody: 'Check your connection and try again.',\n agentOff: \"{agent} isn't available right now\",\n agentOffBody: 'Please try again later.',\n helpful: 'Was this helpful?',\n helpfulYes: 'Yes',\n helpfulNo: 'No',\n helpfulThanks: 'Thanks for telling us.',\n launcherOpen: 'Open {agent}',\n launcherGreeting: \"Hi, I'm {agent}. Ask me what you need.\",\n close: 'Close',\n welcomeFallback: \"Hi, I'm {agent}. How can I help?\",\n privacy: 'Privacy',\n cardsInRow: '{count} results, swipe for more',\n cardsInRowOne: '{count} result',\n open: 'Open',\n /** History: the person's past conversations, and reading one back. */\n historyEmpty: 'No conversations yet',\n historyEmptyBody: 'Your conversations with {agent} will show here.',\n historyFailed: \"Couldn't load your conversations.\",\n historyOff: 'History is not available.',\n historyMessages: '{count} messages',\n historyMessagesOne: '{count} message',\n historyEnded: 'Ended',\n historyContinue: 'Continue',\n historyDelete: 'Delete',\n historyDeleteTitle: 'Delete this conversation?',\n historyDeleteBody: \"It's removed from your history everywhere.\",\n historyDeleteFailed: \"Couldn't delete this conversation.\",\n cancel: 'Cancel',\n transcriptFailed: \"Couldn't load this conversation.\",\n transcriptGone: 'This conversation is no longer available.',\n transcriptEarlier: 'Earlier messages',\n /** Under the person's message a guardrail refused. */\n messageRefused: 'Not answered',\n loading: 'Loading…',\n} as const;\n\nexport type CopyKey = keyof typeof en;\nexport type Copy = Readonly<Record<CopyKey, string>>;\n/** A tenant's words, by key; a key left out (or undefined) keeps the built-in one. */\nexport type CopyOverrides = { readonly [K in CopyKey]?: string | undefined };\n\nconst es: Copy = {\n disclosureFallback:\n 'Estás hablando con un agente de IA. Con la tecnología de Vinaverse.',\n agentLabel: 'Agente de IA',\n agentFallbackName: 'el agente',\n you: 'Tú',\n staffLabel: '{by} · persona',\n staffFallbackRole: 'el equipo',\n composerPlaceholder: 'Escribe a {agent}',\n composerPlaceholderTakeover: 'Escribe a {by}',\n send: 'Enviar',\n stop: 'Detener',\n typeAnswerBelow: 'Escribe tu respuesta abajo.',\n bannerConnecting: 'Conectando…',\n bannerReconnecting: 'Reconectando…',\n bannerOffline: 'Sin conexión. Los mensajes se envían cuando vuelvas.',\n bannerContinuedElsewhere: 'Esta conversación continuó en otro dispositivo.',\n bannerUnavailable: 'No se pudo conectar.',\n continueHere: 'Continuar aquí',\n tryAgain: 'Intentar de nuevo',\n talkToPerson: 'Hablar con una persona',\n messageSending: 'Enviando',\n messageHeld: 'Se envía cuando continúes',\n messageNotSent: 'No enviado',\n messageDelivered: 'Entregado',\n messageCutOff: 'Esta respuesta quedó incompleta.',\n takeoverStarted: 'Una persona de {by} está respondiendo.',\n takeoverEnded: '{agent} volvió.',\n handoffCreated: 'Le pasamos esto al equipo. Responderán {expected}.',\n handoffCreatedNoTime: 'Le pasamos esto al equipo. Responderán pronto.',\n flowSent: 'Tus respuestas se enviaron.',\n flowNotSent: 'Tus respuestas aún no se pudieron enviar.',\n turnFailed: 'Algo salió mal.',\n working: '{agent} está en ello…',\n proposalConfirm: 'Confirmar',\n proposalDecline: 'Rechazar',\n proposalChange: 'Cambiar',\n proposalConfirmed: 'Confirmado',\n proposalDeclined: 'Rechazado',\n proposalFailed: 'No se pudo confirmar',\n proposalExpired: 'Vencido',\n proposalSettled: 'Ya no está abierto',\n questionSubmit: 'Enviar',\n questionSkip: 'Omitir',\n questionOther: 'Otro',\n questionSearch: 'Buscar',\n questionAnswered: 'Respondida',\n questionReplaced: 'Reemplazada por una pregunta más reciente',\n questionStep: 'Pregunta {step} de {total}',\n questionAddPhoto: 'Agregar una foto',\n questionCharactersLeft: 'Quedan {count} caracteres',\n questionCharactersLeftOne: 'Queda {count} carácter',\n priceFrom: 'Desde {price}',\n ratingNone: '',\n nextAvailable: 'Próximo: {time}',\n today: 'hoy, {time}',\n tomorrow: 'mañana, {time}',\n agentEnded: 'Esta conversación terminó',\n agentEndedBody: 'Empieza una nueva cuando quieras.',\n agentStartOver: 'Empezar una conversación nueva',\n agentUnreachable: 'No se pudo contactar a {agent}',\n agentUnreachableBody: 'Revisa tu conexión e inténtalo de nuevo.',\n agentOff: '{agent} no está disponible ahora',\n agentOffBody: 'Inténtalo de nuevo más tarde.',\n helpful: '¿Te sirvió?',\n helpfulYes: 'Sí',\n helpfulNo: 'No',\n helpfulThanks: 'Gracias por contarnos.',\n launcherOpen: 'Abrir {agent}',\n launcherGreeting: 'Hola, soy {agent}. Pregúntame lo que necesites.',\n close: 'Cerrar',\n welcomeFallback: 'Hola, soy {agent}. ¿En qué te ayudo?',\n privacy: 'Privacidad',\n cardsInRow: '{count} resultados, desliza para ver más',\n cardsInRowOne: '{count} resultado',\n open: 'Abrir',\n historyEmpty: 'Aún no hay conversaciones',\n historyEmptyBody: 'Tus conversaciones con {agent} aparecerán aquí.',\n historyFailed: 'No se pudieron cargar tus conversaciones.',\n historyOff: 'El historial no está disponible.',\n historyMessages: '{count} mensajes',\n historyMessagesOne: '{count} mensaje',\n historyEnded: 'Terminada',\n historyContinue: 'Continuar',\n historyDelete: 'Eliminar',\n historyDeleteTitle: '¿Eliminar esta conversación?',\n historyDeleteBody: 'Se elimina de tu historial en todas partes.',\n historyDeleteFailed: 'No se pudo eliminar esta conversación.',\n cancel: 'Cancelar',\n transcriptFailed: 'No se pudo cargar esta conversación.',\n transcriptGone: 'Esta conversación ya no está disponible.',\n transcriptEarlier: 'Mensajes anteriores',\n messageRefused: 'Sin respuesta',\n loading: 'Cargando…',\n};\n\nconst ptBR: Copy = {\n disclosureFallback:\n 'Você está conversando com um agente de IA. Com tecnologia Vinaverse.',\n agentLabel: 'Agente de IA',\n agentFallbackName: 'o agente',\n you: 'Você',\n staffLabel: '{by} · pessoa',\n staffFallbackRole: 'a equipe',\n composerPlaceholder: 'Mensagem para {agent}',\n composerPlaceholderTakeover: 'Mensagem para {by}',\n send: 'Enviar',\n stop: 'Parar',\n typeAnswerBelow: 'Digite sua resposta abaixo.',\n bannerConnecting: 'Conectando…',\n bannerReconnecting: 'Reconectando…',\n bannerOffline: 'Sem conexão. As mensagens são enviadas quando você voltar.',\n bannerContinuedElsewhere: 'Esta conversa continuou em outro aparelho.',\n bannerUnavailable: 'Não foi possível conectar.',\n continueHere: 'Continuar aqui',\n tryAgain: 'Tentar de novo',\n talkToPerson: 'Falar com uma pessoa',\n messageSending: 'Enviando',\n messageHeld: 'Será enviada quando você continuar',\n messageNotSent: 'Não enviada',\n messageDelivered: 'Entregue',\n messageCutOff: 'Esta resposta foi interrompida.',\n takeoverStarted: 'Uma pessoa de {by} está respondendo agora.',\n takeoverEnded: '{agent} voltou.',\n handoffCreated: 'Passamos isso para a equipe. Eles vão responder {expected}.',\n handoffCreatedNoTime:\n 'Passamos isso para a equipe. Eles vão responder em breve.',\n flowSent: 'Suas respostas foram enviadas.',\n flowNotSent: 'Ainda não foi possível enviar suas respostas.',\n turnFailed: 'Algo deu errado.',\n working: '{agent} está cuidando disso…',\n proposalConfirm: 'Confirmar',\n proposalDecline: 'Recusar',\n proposalChange: 'Alterar',\n proposalConfirmed: 'Confirmado',\n proposalDeclined: 'Recusado',\n proposalFailed: 'Não foi possível confirmar',\n proposalExpired: 'Expirado',\n proposalSettled: 'Não está mais aberto',\n questionSubmit: 'Enviar',\n questionSkip: 'Pular',\n questionOther: 'Outro',\n questionSearch: 'Buscar',\n questionAnswered: 'Respondida',\n questionReplaced: 'Substituída por uma pergunta mais recente',\n questionStep: 'Pergunta {step} de {total}',\n questionAddPhoto: 'Adicionar uma foto',\n questionCharactersLeft: 'Restam {count} caracteres',\n questionCharactersLeftOne: 'Resta {count} caractere',\n priceFrom: 'A partir de {price}',\n ratingNone: '',\n nextAvailable: 'Próximo horário: {time}',\n today: 'hoje, {time}',\n tomorrow: 'amanhã, {time}',\n agentEnded: 'Esta conversa terminou',\n agentEndedBody: 'Comece uma nova quando quiser.',\n agentStartOver: 'Começar uma conversa nova',\n agentUnreachable: 'Não foi possível falar com {agent}',\n agentUnreachableBody: 'Verifique sua conexão e tente de novo.',\n agentOff: '{agent} não está disponível agora',\n agentOffBody: 'Tente de novo mais tarde.',\n helpful: 'Isso ajudou?',\n helpfulYes: 'Sim',\n helpfulNo: 'Não',\n helpfulThanks: 'Obrigado por avisar.',\n launcherOpen: 'Abrir {agent}',\n launcherGreeting: 'Oi, sou {agent}. Pergunte o que precisar.',\n close: 'Fechar',\n welcomeFallback: 'Oi, sou {agent}. Como posso ajudar?',\n privacy: 'Privacidade',\n cardsInRow: '{count} resultados, deslize para ver mais',\n cardsInRowOne: '{count} resultado',\n open: 'Abrir',\n historyEmpty: 'Nenhuma conversa ainda',\n historyEmptyBody: 'Suas conversas com {agent} vão aparecer aqui.',\n historyFailed: 'Não foi possível carregar suas conversas.',\n historyOff: 'O histórico não está disponível.',\n historyMessages: '{count} mensagens',\n historyMessagesOne: '{count} mensagem',\n historyEnded: 'Encerrada',\n historyContinue: 'Continuar',\n historyDelete: 'Excluir',\n historyDeleteTitle: 'Excluir esta conversa?',\n historyDeleteBody: 'Ela é removida do seu histórico em todos os lugares.',\n historyDeleteFailed: 'Não foi possível excluir esta conversa.',\n cancel: 'Cancelar',\n transcriptFailed: 'Não foi possível carregar esta conversa.',\n transcriptGone: 'Esta conversa não está mais disponível.',\n transcriptEarlier: 'Mensagens anteriores',\n messageRefused: 'Sem resposta',\n loading: 'Carregando…',\n};\n\n/** The built-in languages; any other locale falls back to English, its own `copy` overrides aside. */\nexport const COPY: Readonly<Record<'en' | 'es' | 'pt-BR', Copy>> = {\n en,\n es,\n 'pt-BR': ptBR,\n};\n\n/**\n * Keys a tenant may not override in a built-in language: the AI disclosure is the platform's, never removed or reworded.\n * In a language without built-in copy the tenant supplies them, translated, so the disclosure reads in the person's\n * language, and only a translation that still discloses is taken (`discloses`): the label says AI, the disclosure says\n * AI and names Vinaverse.\n */\nconst FIXED: ReadonlySet<CopyKey> = new Set([\n 'disclosureFallback',\n 'agentLabel',\n]);\n\n/**\n * \"AI\" as languages write it: AI, IA (es, pt, fr, it, ro), KI (de, nl, da, no, sv), SI (pl), YZ (tr), ИИ (ru), ШІ\n * (uk), and the words for it in Arabic, Hebrew, Hindi, Chinese, Japanese and Korean.\n */\nexport const AI_MARK =\n /(?:^|[^\\p{L}])(?:AI|IA|KI|SI|YZ|ИИ|ШІ)(?:$|[^\\p{L}])|الذكاء الاصطناعي|بالذكاء|בינה מלאכותית|एआई|कृत्रिम बुद्धि|人工智能|人工知能|인공지능/u;\n\n/**\n * Whether a tenant's text for a fixed key still makes the AI disclosure: the label says AI; the disclosure says AI\n * and names Vinaverse. A tenant's translation that does not is ignored, and the English built-in shows instead.\n */\nfunction discloses(key: string, value: string): boolean {\n if (!AI_MARK.test(value)) return false;\n return key !== 'disclosureFallback' || value.includes('Vinaverse');\n}\n\nexport type Translate = (\n key: CopyKey,\n vars?: Readonly<Record<string, string | number>>,\n) => string;\n\n/** The built-in copy for a locale: its language (`es-US` → `es`, `pt-PT` → `pt-BR`), else null. */\nfunction builtIn(locale: string | undefined): Copy | null {\n const language = (locale ?? 'en').split(/[-_]/)[0]?.toLowerCase();\n if (language === 'en') return COPY.en;\n if (language === 'es') return COPY.es;\n if (language === 'pt') return COPY['pt-BR'];\n return null;\n}\n\n/** The built-in copy for a locale, English when the language has none. */\nexport function builtInCopy(locale: string | undefined): Copy {\n return builtIn(locale) ?? COPY.en;\n}\n\n/** A translator for a locale, with the tenant's overrides on top (fixed keys excepted). */\nexport function createTranslate(\n locale: string | undefined,\n overrides: CopyOverrides = {},\n): Translate {\n const own = builtIn(locale);\n const merged: Record<string, string> = { ...(own ?? COPY.en) };\n for (const [key, value] of Object.entries(overrides)) {\n if (value === undefined) continue;\n if (FIXED.has(key as CopyKey) && !(own === null && discloses(key, value)))\n continue;\n merged[key] = value;\n // The tenant's words for a count, without their own `One` form: theirs for every count, never ours for 1.\n if (!(`${key}One` in overrides)) delete merged[`${key}One`];\n }\n return (key, vars) =>\n (\n (vars?.count === 1 ? merged[`${key}One`] : undefined) ??\n merged[key] ??\n en[key]\n ).replace(/\\{(\\w+)\\}/g, (all, name: string) =>\n vars && name in vars ? String(vars[name]) : all,\n );\n}\n\n/**\n * Words a Vinaverse UI never says to people (a tenant override that uses them gets a development warning): the\n * runtime is an agent, never an assistant or a bot; and never \"crew\".\n */\nexport const BANNED_WORDS: readonly RegExp[] = [\n /\\bassistant/i,\n /\\basistente/i,\n /\\bassistent/i,\n /\\bbot\\b/i,\n /\\bcrew\\b/i,\n];\n\n/** The overrides that use a banned word, by key. */\nexport function bannedWordsIn(overrides: CopyOverrides): CopyKey[] {\n return (Object.entries(overrides) as [CopyKey, string | undefined][])\n .filter(([, v]) => v !== undefined && BANNED_WORDS.some((w) => w.test(v)))\n .map(([k]) => k);\n}\n","// Dates, times, money and text direction in the person's locale, through Intl (Hermes has it), with a plain fallback\n// where a runtime lacks it.\n\n/** Languages and scripts written right to left. */\nconst RTL_LANGUAGES = new Set([\n 'ar',\n 'he',\n 'iw',\n 'fa',\n 'ur',\n 'ps',\n 'yi',\n 'dv',\n 'ckb',\n 'sd',\n 'ug',\n 'syr',\n]);\nconst RTL_SCRIPTS = new Set([\n 'arab',\n 'hebr',\n 'thaa',\n 'syrc',\n 'nkoo',\n 'adlm',\n 'rohg',\n]);\n\n/** `rtl` for Arabic, Hebrew, Persian, Urdu and the other right-to-left languages and scripts; `ltr` otherwise. */\nexport function textDirection(locale: string | undefined): 'ltr' | 'rtl' {\n const parts = (locale ?? '').toLowerCase().split(/[-_]/);\n if (parts.some((p) => p.length === 4 && RTL_SCRIPTS.has(p))) return 'rtl';\n return RTL_LANGUAGES.has(parts[0] ?? '') ? 'rtl' : 'ltr';\n}\n\n/** An amount in minor units (`amount` cents) in its currency: `$85.00`. */\nexport function formatMoney(\n amountMinor: number,\n currency: string,\n locale?: string,\n): string {\n try {\n const format = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n });\n const digits = format.resolvedOptions().maximumFractionDigits ?? 2;\n return format.format(amountMinor / 10 ** digits);\n } catch {\n return `${currency} ${(amountMinor / 100).toFixed(2)}`;\n }\n}\n\n/** A start and an end: \"Wed, Oct 14, 10:00 – 11:30 AM\" in the locale and time zone. */\nexport function formatTimeRange(\n start: string,\n end: string | undefined,\n locale?: string,\n timeZone?: string,\n): string {\n const from = new Date(start);\n if (Number.isNaN(from.getTime())) return start;\n const options: Intl.DateTimeFormatOptions = {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n };\n try {\n const format = new Intl.DateTimeFormat(locale, options);\n const to = end ? new Date(end) : null;\n if (!to || Number.isNaN(to.getTime())) return format.format(from);\n return typeof format.formatRange === 'function'\n ? format.formatRange(from, to)\n : `${format.format(from)} – ${format.format(to)}`;\n } catch {\n return from.toISOString();\n }\n}\n\n/** The day a moment falls on in a time zone, as a day count, so two days compare across DST. */\nfunction dayOf(at: Date, timeZone: string | undefined): number {\n const [y, m, d] = new Intl.DateTimeFormat('en-CA', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n })\n .format(at)\n .split('-')\n .map(Number);\n return Date.UTC(y as number, (m as number) - 1, d as number) / 86_400_000;\n}\n\n/**\n * A moment as a person says it: \"today, 10:00 AM\" and \"tomorrow, 10:00 AM\" (`today` and `tomorrow` are the copy's\n * words, with `{time}`), else the date and time (\"Fri, Oct 17, 10:00 AM\"), in the locale and time zone. `now` is the\n * clock it is judged by.\n */\nexport function formatDayTime(\n start: string,\n words: { readonly today: string; readonly tomorrow: string },\n locale?: string,\n timeZone?: string,\n now: number = Date.now(),\n): string {\n const at = new Date(start);\n if (Number.isNaN(at.getTime())) return start;\n try {\n const days = dayOf(at, timeZone) - dayOf(new Date(now), timeZone);\n const word = days === 0 ? words.today : days === 1 ? words.tomorrow : '';\n if (!word) return formatTimeRange(start, undefined, locale, timeZone);\n const time = new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n minute: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n }).format(at);\n return word.replace('{time}', time);\n } catch {\n return formatTimeRange(start, undefined, locale, timeZone);\n }\n}\n\n/** A calendar date (`YYYY-MM-DD`) in the locale: \"October 14, 2026\". */\nexport function formatDate(date: string, locale?: string): string {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(date);\n if (!m) return date;\n try {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n timeZone: 'UTC',\n }).format(new Date(Date.UTC(Number(m[1]), Number(m[2]) - 1, Number(m[3]))));\n } catch {\n return date;\n }\n}\n\n/** A moment with its date and time in the locale and zone: \"Oct 15, 2026, 9:30 AM\"; the text as given when it is not one. */\nexport function formatDateTime(\n at: string,\n locale?: string,\n timeZone?: string,\n): string {\n const date = new Date(at);\n if (Number.isNaN(date.getTime())) return at;\n try {\n return new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n timeStyle: 'short',\n ...(timeZone ? { timeZone } : {}),\n }).format(date);\n } catch {\n return date.toISOString();\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/copy/copy.ts","../../src/copy/format.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["// The words a Vinaverse UI says, in English, Spanish and Brazilian Portuguese, each overridable by the tenant except\n// the fallback disclosure. People first: \"agent\", never \"assistant\"; a person from the business is a person, by role.\n// `{name}` placeholders are filled from `vars`. A key with a `One` form (`historyMessagesOne`) says it for a `count` of 1.\n\nconst en = {\n disclosureFallback: \"You're chatting with an AI agent. Powered by Vinaverse.\",\n agentLabel: 'AI agent',\n agentFallbackName: 'the agent',\n askingAbout: 'Asking about',\n you: 'You',\n staffLabel: '{by} · person',\n staffFallbackRole: 'the team',\n composerPlaceholder: 'Message {agent}',\n composerPlaceholderTakeover: 'Message {by}',\n send: 'Send',\n stop: 'Stop',\n typeAnswerBelow: 'Type your answer below.',\n bannerConnecting: 'Connecting…',\n bannerReconnecting: 'Reconnecting…',\n bannerOffline: \"You're offline. Messages send when you're back.\",\n bannerContinuedElsewhere: 'This conversation continued on another device.',\n bannerUnavailable: \"Couldn't connect.\",\n continueHere: 'Continue here',\n tryAgain: 'Try again',\n talkToPerson: 'Talk to a person',\n messageSending: 'Sending',\n messageHeld: 'Sends when you continue',\n messageNotSent: 'Not sent',\n messageDelivered: 'Delivered',\n messageCutOff: 'This reply was cut off.',\n takeoverStarted: 'A person from {by} is replying now.',\n takeoverEnded: '{agent} is back.',\n handoffCreated: \"We've passed this to the team. They'll reply {expected}.\",\n handoffCreatedNoTime: \"We've passed this to the team. They'll reply soon.\",\n flowSent: 'Your answers were sent.',\n flowNotSent: \"Your answers couldn't be sent yet.\",\n turnFailed: 'Something went wrong.',\n working: '{agent} is working on it…',\n proposalConfirm: 'Confirm',\n proposalDecline: 'Decline',\n proposalChange: 'Change',\n proposalConfirmed: 'Confirmed',\n proposalDeclined: 'Declined',\n proposalFailed: \"Couldn't be confirmed\",\n proposalExpired: 'Expired',\n proposalSettled: 'No longer open',\n questionSubmit: 'Send',\n questionSkip: 'Skip',\n questionOther: 'Other',\n questionSearch: 'Search',\n questionAnswered: 'Answered',\n questionReplaced: 'Replaced by a newer question',\n questionStep: 'Question {step} of {total}',\n questionAddPhoto: 'Add a photo',\n questionCharactersLeft: '{count} characters left',\n questionCharactersLeftOne: '{count} character left',\n priceFrom: 'From {price}',\n /** A listing with no rating yet; empty draws nothing, a tenant's word (\"New\") draws in the rating's place. */\n ratingNone: '',\n nextAvailable: 'Next: {time}',\n /** A time today and tomorrow, as `nextAvailable` says it (`{time}`: \"10:00 AM\"). */\n today: 'today, {time}',\n tomorrow: 'tomorrow, {time}',\n agentEnded: 'This conversation ended',\n agentEndedBody: 'Start a new one whenever you like.',\n agentStartOver: 'Start a new conversation',\n agentUnreachable: \"Couldn't reach {agent}\",\n agentUnreachableBody: 'Check your connection and try again.',\n agentOff: \"{agent} isn't available right now\",\n agentOffBody: 'Please try again later.',\n helpful: 'Was this helpful?',\n helpfulYes: 'Yes',\n helpfulNo: 'No',\n helpfulThanks: 'Thanks for telling us.',\n launcherOpen: 'Open {agent}',\n launcherGreeting: \"Hi, I'm {agent}. Ask me what you need.\",\n close: 'Close',\n welcomeFallback: \"Hi, I'm {agent}. How can I help?\",\n privacy: 'Privacy',\n cardsInRow: '{count} results, swipe for more',\n cardsInRowOne: '{count} result',\n open: 'Open',\n /** History: the person's past conversations, and reading one back. */\n historyEmpty: 'No conversations yet',\n historyEmptyBody: 'Your conversations with {agent} will show here.',\n historyFailed: \"Couldn't load your conversations.\",\n historyOff: 'History is not available.',\n historyMessages: '{count} messages',\n historyMessagesOne: '{count} message',\n historyEnded: 'Ended',\n historyContinue: 'Continue',\n historyDelete: 'Delete',\n historyDeleteTitle: 'Delete this conversation?',\n historyDeleteBody: \"It's removed from your history everywhere.\",\n historyDeleteFailed: \"Couldn't delete this conversation.\",\n cancel: 'Cancel',\n transcriptFailed: \"Couldn't load this conversation.\",\n transcriptGone: 'This conversation is no longer available.',\n transcriptEarlier: 'Earlier messages',\n /** Under the person's message a guardrail refused. */\n messageRefused: 'Not answered',\n loading: 'Loading…',\n} as const;\n\nexport type CopyKey = keyof typeof en;\nexport type Copy = Readonly<Record<CopyKey, string>>;\n/** A tenant's words, by key; a key left out (or undefined) keeps the built-in one. */\nexport type CopyOverrides = { readonly [K in CopyKey]?: string | undefined };\n\nconst es: Copy = {\n disclosureFallback:\n 'Estás hablando con un agente de IA. Con la tecnología de Vinaverse.',\n agentLabel: 'Agente de IA',\n agentFallbackName: 'el agente',\n askingAbout: 'Preguntas sobre',\n you: 'Tú',\n staffLabel: '{by} · persona',\n staffFallbackRole: 'el equipo',\n composerPlaceholder: 'Escribe a {agent}',\n composerPlaceholderTakeover: 'Escribe a {by}',\n send: 'Enviar',\n stop: 'Detener',\n typeAnswerBelow: 'Escribe tu respuesta abajo.',\n bannerConnecting: 'Conectando…',\n bannerReconnecting: 'Reconectando…',\n bannerOffline: 'Sin conexión. Los mensajes se envían cuando vuelvas.',\n bannerContinuedElsewhere: 'Esta conversación continuó en otro dispositivo.',\n bannerUnavailable: 'No se pudo conectar.',\n continueHere: 'Continuar aquí',\n tryAgain: 'Intentar de nuevo',\n talkToPerson: 'Hablar con una persona',\n messageSending: 'Enviando',\n messageHeld: 'Se envía cuando continúes',\n messageNotSent: 'No enviado',\n messageDelivered: 'Entregado',\n messageCutOff: 'Esta respuesta quedó incompleta.',\n takeoverStarted: 'Una persona de {by} está respondiendo.',\n takeoverEnded: '{agent} volvió.',\n handoffCreated: 'Le pasamos esto al equipo. Responderán {expected}.',\n handoffCreatedNoTime: 'Le pasamos esto al equipo. Responderán pronto.',\n flowSent: 'Tus respuestas se enviaron.',\n flowNotSent: 'Tus respuestas aún no se pudieron enviar.',\n turnFailed: 'Algo salió mal.',\n working: '{agent} está en ello…',\n proposalConfirm: 'Confirmar',\n proposalDecline: 'Rechazar',\n proposalChange: 'Cambiar',\n proposalConfirmed: 'Confirmado',\n proposalDeclined: 'Rechazado',\n proposalFailed: 'No se pudo confirmar',\n proposalExpired: 'Vencido',\n proposalSettled: 'Ya no está abierto',\n questionSubmit: 'Enviar',\n questionSkip: 'Omitir',\n questionOther: 'Otro',\n questionSearch: 'Buscar',\n questionAnswered: 'Respondida',\n questionReplaced: 'Reemplazada por una pregunta más reciente',\n questionStep: 'Pregunta {step} de {total}',\n questionAddPhoto: 'Agregar una foto',\n questionCharactersLeft: 'Quedan {count} caracteres',\n questionCharactersLeftOne: 'Queda {count} carácter',\n priceFrom: 'Desde {price}',\n ratingNone: '',\n nextAvailable: 'Próximo: {time}',\n today: 'hoy, {time}',\n tomorrow: 'mañana, {time}',\n agentEnded: 'Esta conversación terminó',\n agentEndedBody: 'Empieza una nueva cuando quieras.',\n agentStartOver: 'Empezar una conversación nueva',\n agentUnreachable: 'No se pudo contactar a {agent}',\n agentUnreachableBody: 'Revisa tu conexión e inténtalo de nuevo.',\n agentOff: '{agent} no está disponible ahora',\n agentOffBody: 'Inténtalo de nuevo más tarde.',\n helpful: '¿Te sirvió?',\n helpfulYes: 'Sí',\n helpfulNo: 'No',\n helpfulThanks: 'Gracias por contarnos.',\n launcherOpen: 'Abrir {agent}',\n launcherGreeting: 'Hola, soy {agent}. Pregúntame lo que necesites.',\n close: 'Cerrar',\n welcomeFallback: 'Hola, soy {agent}. ¿En qué te ayudo?',\n privacy: 'Privacidad',\n cardsInRow: '{count} resultados, desliza para ver más',\n cardsInRowOne: '{count} resultado',\n open: 'Abrir',\n historyEmpty: 'Aún no hay conversaciones',\n historyEmptyBody: 'Tus conversaciones con {agent} aparecerán aquí.',\n historyFailed: 'No se pudieron cargar tus conversaciones.',\n historyOff: 'El historial no está disponible.',\n historyMessages: '{count} mensajes',\n historyMessagesOne: '{count} mensaje',\n historyEnded: 'Terminada',\n historyContinue: 'Continuar',\n historyDelete: 'Eliminar',\n historyDeleteTitle: '¿Eliminar esta conversación?',\n historyDeleteBody: 'Se elimina de tu historial en todas partes.',\n historyDeleteFailed: 'No se pudo eliminar esta conversación.',\n cancel: 'Cancelar',\n transcriptFailed: 'No se pudo cargar esta conversación.',\n transcriptGone: 'Esta conversación ya no está disponible.',\n transcriptEarlier: 'Mensajes anteriores',\n messageRefused: 'Sin respuesta',\n loading: 'Cargando…',\n};\n\nconst ptBR: Copy = {\n disclosureFallback:\n 'Você está conversando com um agente de IA. Com tecnologia Vinaverse.',\n agentLabel: 'Agente de IA',\n agentFallbackName: 'o agente',\n askingAbout: 'Perguntando sobre',\n you: 'Você',\n staffLabel: '{by} · pessoa',\n staffFallbackRole: 'a equipe',\n composerPlaceholder: 'Mensagem para {agent}',\n composerPlaceholderTakeover: 'Mensagem para {by}',\n send: 'Enviar',\n stop: 'Parar',\n typeAnswerBelow: 'Digite sua resposta abaixo.',\n bannerConnecting: 'Conectando…',\n bannerReconnecting: 'Reconectando…',\n bannerOffline: 'Sem conexão. As mensagens são enviadas quando você voltar.',\n bannerContinuedElsewhere: 'Esta conversa continuou em outro aparelho.',\n bannerUnavailable: 'Não foi possível conectar.',\n continueHere: 'Continuar aqui',\n tryAgain: 'Tentar de novo',\n talkToPerson: 'Falar com uma pessoa',\n messageSending: 'Enviando',\n messageHeld: 'Será enviada quando você continuar',\n messageNotSent: 'Não enviada',\n messageDelivered: 'Entregue',\n messageCutOff: 'Esta resposta foi interrompida.',\n takeoverStarted: 'Uma pessoa de {by} está respondendo agora.',\n takeoverEnded: '{agent} voltou.',\n handoffCreated: 'Passamos isso para a equipe. Eles vão responder {expected}.',\n handoffCreatedNoTime:\n 'Passamos isso para a equipe. Eles vão responder em breve.',\n flowSent: 'Suas respostas foram enviadas.',\n flowNotSent: 'Ainda não foi possível enviar suas respostas.',\n turnFailed: 'Algo deu errado.',\n working: '{agent} está cuidando disso…',\n proposalConfirm: 'Confirmar',\n proposalDecline: 'Recusar',\n proposalChange: 'Alterar',\n proposalConfirmed: 'Confirmado',\n proposalDeclined: 'Recusado',\n proposalFailed: 'Não foi possível confirmar',\n proposalExpired: 'Expirado',\n proposalSettled: 'Não está mais aberto',\n questionSubmit: 'Enviar',\n questionSkip: 'Pular',\n questionOther: 'Outro',\n questionSearch: 'Buscar',\n questionAnswered: 'Respondida',\n questionReplaced: 'Substituída por uma pergunta mais recente',\n questionStep: 'Pergunta {step} de {total}',\n questionAddPhoto: 'Adicionar uma foto',\n questionCharactersLeft: 'Restam {count} caracteres',\n questionCharactersLeftOne: 'Resta {count} caractere',\n priceFrom: 'A partir de {price}',\n ratingNone: '',\n nextAvailable: 'Próximo horário: {time}',\n today: 'hoje, {time}',\n tomorrow: 'amanhã, {time}',\n agentEnded: 'Esta conversa terminou',\n agentEndedBody: 'Comece uma nova quando quiser.',\n agentStartOver: 'Começar uma conversa nova',\n agentUnreachable: 'Não foi possível falar com {agent}',\n agentUnreachableBody: 'Verifique sua conexão e tente de novo.',\n agentOff: '{agent} não está disponível agora',\n agentOffBody: 'Tente de novo mais tarde.',\n helpful: 'Isso ajudou?',\n helpfulYes: 'Sim',\n helpfulNo: 'Não',\n helpfulThanks: 'Obrigado por avisar.',\n launcherOpen: 'Abrir {agent}',\n launcherGreeting: 'Oi, sou {agent}. Pergunte o que precisar.',\n close: 'Fechar',\n welcomeFallback: 'Oi, sou {agent}. Como posso ajudar?',\n privacy: 'Privacidade',\n cardsInRow: '{count} resultados, deslize para ver mais',\n cardsInRowOne: '{count} resultado',\n open: 'Abrir',\n historyEmpty: 'Nenhuma conversa ainda',\n historyEmptyBody: 'Suas conversas com {agent} vão aparecer aqui.',\n historyFailed: 'Não foi possível carregar suas conversas.',\n historyOff: 'O histórico não está disponível.',\n historyMessages: '{count} mensagens',\n historyMessagesOne: '{count} mensagem',\n historyEnded: 'Encerrada',\n historyContinue: 'Continuar',\n historyDelete: 'Excluir',\n historyDeleteTitle: 'Excluir esta conversa?',\n historyDeleteBody: 'Ela é removida do seu histórico em todos os lugares.',\n historyDeleteFailed: 'Não foi possível excluir esta conversa.',\n cancel: 'Cancelar',\n transcriptFailed: 'Não foi possível carregar esta conversa.',\n transcriptGone: 'Esta conversa não está mais disponível.',\n transcriptEarlier: 'Mensagens anteriores',\n messageRefused: 'Sem resposta',\n loading: 'Carregando…',\n};\n\n/** The built-in languages; any other locale falls back to English, its own `copy` overrides aside. */\nexport const COPY: Readonly<Record<'en' | 'es' | 'pt-BR', Copy>> = {\n en,\n es,\n 'pt-BR': ptBR,\n};\n\n/**\n * Keys a tenant may not override in a built-in language: the AI disclosure is the platform's, never removed or reworded.\n * In a language without built-in copy the tenant supplies them, translated, so the disclosure reads in the person's\n * language, and only a translation that still discloses is taken (`discloses`): the label says AI, the disclosure says\n * AI and names Vinaverse.\n */\nconst FIXED: ReadonlySet<CopyKey> = new Set([\n 'disclosureFallback',\n 'agentLabel',\n]);\n\n/**\n * \"AI\" as languages write it: AI, IA (es, pt, fr, it, ro), KI (de, nl, da, no, sv), SI (pl), YZ (tr), ИИ (ru), ШІ\n * (uk), and the words for it in Arabic, Hebrew, Hindi, Chinese, Japanese and Korean.\n */\nexport const AI_MARK =\n /(?:^|[^\\p{L}])(?:AI|IA|KI|SI|YZ|ИИ|ШІ)(?:$|[^\\p{L}])|الذكاء الاصطناعي|بالذكاء|בינה מלאכותית|एआई|कृत्रिम बुद्धि|人工智能|人工知能|인공지능/u;\n\n/**\n * Whether a tenant's text for a fixed key still makes the AI disclosure: the label says AI; the disclosure says AI\n * and names Vinaverse. A tenant's translation that does not is ignored, and the English built-in shows instead.\n */\nfunction discloses(key: string, value: string): boolean {\n if (!AI_MARK.test(value)) return false;\n return key !== 'disclosureFallback' || value.includes('Vinaverse');\n}\n\n/**\n * Whether a text is a disclosure a kit may draw: it says AI (`AI_MARK`, in the person's language) and names Vinaverse,\n * the rule a tenant's `disclosureFallback` passes. Words an app holds from before are drawn only when it holds.\n */\nexport function isDisclosure(text: string): boolean {\n return discloses('disclosureFallback', text);\n}\n\nexport type Translate = (\n key: CopyKey,\n vars?: Readonly<Record<string, string | number>>,\n) => string;\n\n/** The built-in copy for a locale: its language (`es-US` → `es`, `pt-PT` → `pt-BR`), else null. */\nfunction builtIn(locale: string | undefined): Copy | null {\n const language = (locale ?? 'en').split(/[-_]/)[0]?.toLowerCase();\n if (language === 'en') return COPY.en;\n if (language === 'es') return COPY.es;\n if (language === 'pt') return COPY['pt-BR'];\n return null;\n}\n\n/** The built-in copy for a locale, English when the language has none. */\nexport function builtInCopy(locale: string | undefined): Copy {\n return builtIn(locale) ?? COPY.en;\n}\n\n/** A translator for a locale, with the tenant's overrides on top (fixed keys excepted). */\nexport function createTranslate(\n locale: string | undefined,\n overrides: CopyOverrides = {},\n): Translate {\n const own = builtIn(locale);\n const merged: Record<string, string> = { ...(own ?? COPY.en) };\n for (const [key, value] of Object.entries(overrides)) {\n if (value === undefined) continue;\n if (FIXED.has(key as CopyKey) && !(own === null && discloses(key, value)))\n continue;\n merged[key] = value;\n // The tenant's words for a count, without their own `One` form: theirs for every count, never ours for 1.\n if (!(`${key}One` in overrides)) delete merged[`${key}One`];\n }\n return (key, vars) =>\n (\n (vars?.count === 1 ? merged[`${key}One`] : undefined) ??\n merged[key] ??\n en[key]\n ).replace(/\\{(\\w+)\\}/g, (all, name: string) =>\n vars && name in vars ? String(vars[name]) : all,\n );\n}\n\n/**\n * Words a Vinaverse UI never says to people (a tenant override that uses them gets a development warning): the\n * runtime is an agent, never an assistant or a bot; and never \"crew\".\n */\nexport const BANNED_WORDS: readonly RegExp[] = [\n /\\bassistant/i,\n /\\basistente/i,\n /\\bassistent/i,\n /\\bbot\\b/i,\n /\\bcrew\\b/i,\n];\n\n/** The overrides that use a banned word, by key. */\nexport function bannedWordsIn(overrides: CopyOverrides): CopyKey[] {\n return (Object.entries(overrides) as [CopyKey, string | undefined][])\n .filter(([, v]) => v !== undefined && BANNED_WORDS.some((w) => w.test(v)))\n .map(([k]) => k);\n}\n","// Dates, times, money and text direction in the person's locale, through Intl (Hermes has it), with a plain fallback\n// where a runtime lacks it.\n\n/** Languages and scripts written right to left. */\nconst RTL_LANGUAGES = new Set([\n 'ar',\n 'he',\n 'iw',\n 'fa',\n 'ur',\n 'ps',\n 'yi',\n 'dv',\n 'ckb',\n 'sd',\n 'ug',\n 'syr',\n]);\nconst RTL_SCRIPTS = new Set([\n 'arab',\n 'hebr',\n 'thaa',\n 'syrc',\n 'nkoo',\n 'adlm',\n 'rohg',\n]);\n\n/** `rtl` for Arabic, Hebrew, Persian, Urdu and the other right-to-left languages and scripts; `ltr` otherwise. */\nexport function textDirection(locale: string | undefined): 'ltr' | 'rtl' {\n const parts = (locale ?? '').toLowerCase().split(/[-_]/);\n if (parts.some((p) => p.length === 4 && RTL_SCRIPTS.has(p))) return 'rtl';\n return RTL_LANGUAGES.has(parts[0] ?? '') ? 'rtl' : 'ltr';\n}\n\n/** An amount in minor units (`amount` cents) in its currency: `$85.00`. */\nexport function formatMoney(\n amountMinor: number,\n currency: string,\n locale?: string,\n): string {\n try {\n const format = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n });\n const digits = format.resolvedOptions().maximumFractionDigits ?? 2;\n return format.format(amountMinor / 10 ** digits);\n } catch {\n return `${currency} ${(amountMinor / 100).toFixed(2)}`;\n }\n}\n\n/** A start and an end: \"Wed, Oct 14, 10:00 – 11:30 AM\" in the locale and time zone. */\nexport function formatTimeRange(\n start: string,\n end: string | undefined,\n locale?: string,\n timeZone?: string,\n): string {\n const from = new Date(start);\n if (Number.isNaN(from.getTime())) return start;\n const options: Intl.DateTimeFormatOptions = {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n };\n try {\n const format = new Intl.DateTimeFormat(locale, options);\n const to = end ? new Date(end) : null;\n if (!to || Number.isNaN(to.getTime())) return format.format(from);\n return typeof format.formatRange === 'function'\n ? format.formatRange(from, to)\n : `${format.format(from)} – ${format.format(to)}`;\n } catch {\n return from.toISOString();\n }\n}\n\n/** The day a moment falls on in a time zone, as a day count, so two days compare across DST. */\nfunction dayOf(at: Date, timeZone: string | undefined): number {\n const [y, m, d] = new Intl.DateTimeFormat('en-CA', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n })\n .format(at)\n .split('-')\n .map(Number);\n return Date.UTC(y as number, (m as number) - 1, d as number) / 86_400_000;\n}\n\n/**\n * A moment as a person says it: \"today, 10:00 AM\" and \"tomorrow, 10:00 AM\" (`today` and `tomorrow` are the copy's\n * words, with `{time}`), else the date and time (\"Fri, Oct 17, 10:00 AM\"), in the locale and time zone. `now` is the\n * clock it is judged by.\n */\nexport function formatDayTime(\n start: string,\n words: { readonly today: string; readonly tomorrow: string },\n locale?: string,\n timeZone?: string,\n now: number = Date.now(),\n): string {\n const at = new Date(start);\n if (Number.isNaN(at.getTime())) return start;\n try {\n const days = dayOf(at, timeZone) - dayOf(new Date(now), timeZone);\n const word = days === 0 ? words.today : days === 1 ? words.tomorrow : '';\n if (!word) return formatTimeRange(start, undefined, locale, timeZone);\n const time = new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n minute: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n }).format(at);\n return word.replace('{time}', time);\n } catch {\n return formatTimeRange(start, undefined, locale, timeZone);\n }\n}\n\n/** A calendar date (`YYYY-MM-DD`) in the locale: \"October 14, 2026\". */\nexport function formatDate(date: string, locale?: string): string {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(date);\n if (!m) return date;\n try {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n timeZone: 'UTC',\n }).format(new Date(Date.UTC(Number(m[1]), Number(m[2]) - 1, Number(m[3]))));\n } catch {\n return date;\n }\n}\n\n/** A moment with its date and time in the locale and zone: \"Oct 15, 2026, 9:30 AM\"; the text as given when it is not one. */\nexport function formatDateTime(\n at: string,\n locale?: string,\n timeZone?: string,\n): string {\n const date = new Date(at);\n if (Number.isNaN(date.getTime())) return at;\n try {\n return new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n timeStyle: 'short',\n ...(timeZone ? { timeZone } : {}),\n }).format(date);\n } catch {\n return date.toISOString();\n }\n}\n"]}
@@ -2,6 +2,7 @@ declare const en: {
2
2
  readonly disclosureFallback: "You're chatting with an AI agent. Powered by Vinaverse.";
3
3
  readonly agentLabel: "AI agent";
4
4
  readonly agentFallbackName: "the agent";
5
+ readonly askingAbout: "Asking about";
5
6
  readonly you: "You";
6
7
  readonly staffLabel: "{by} · person";
7
8
  readonly staffFallbackRole: "the team";
@@ -109,6 +110,11 @@ declare const COPY: Readonly<Record<'en' | 'es' | 'pt-BR', Copy>>;
109
110
  * (uk), and the words for it in Arabic, Hebrew, Hindi, Chinese, Japanese and Korean.
110
111
  */
111
112
  declare const AI_MARK: RegExp;
113
+ /**
114
+ * Whether a text is a disclosure a kit may draw: it says AI (`AI_MARK`, in the person's language) and names Vinaverse,
115
+ * the rule a tenant's `disclosureFallback` passes. Words an app holds from before are drawn only when it holds.
116
+ */
117
+ declare function isDisclosure(text: string): boolean;
112
118
  type Translate = (key: CopyKey, vars?: Readonly<Record<string, string | number>>) => string;
113
119
  /** The built-in copy for a locale, English when the language has none. */
114
120
  declare function builtInCopy(locale: string | undefined): Copy;
@@ -142,4 +148,4 @@ declare function formatDate(date: string, locale?: string): string;
142
148
  /** A moment with its date and time in the locale and zone: "Oct 15, 2026, 9:30 AM"; the text as given when it is not one. */
143
149
  declare function formatDateTime(at: string, locale?: string, timeZone?: string): string;
144
150
 
145
- export { AI_MARK, BANNED_WORDS, COPY, type Copy, type CopyKey, type CopyOverrides, type Translate, bannedWordsIn, builtInCopy, createTranslate, formatDate, formatDateTime, formatDayTime, formatMoney, formatTimeRange, textDirection };
151
+ export { AI_MARK, BANNED_WORDS, COPY, type Copy, type CopyKey, type CopyOverrides, type Translate, bannedWordsIn, builtInCopy, createTranslate, formatDate, formatDateTime, formatDayTime, formatMoney, formatTimeRange, isDisclosure, textDirection };
@@ -2,6 +2,7 @@ declare const en: {
2
2
  readonly disclosureFallback: "You're chatting with an AI agent. Powered by Vinaverse.";
3
3
  readonly agentLabel: "AI agent";
4
4
  readonly agentFallbackName: "the agent";
5
+ readonly askingAbout: "Asking about";
5
6
  readonly you: "You";
6
7
  readonly staffLabel: "{by} · person";
7
8
  readonly staffFallbackRole: "the team";
@@ -109,6 +110,11 @@ declare const COPY: Readonly<Record<'en' | 'es' | 'pt-BR', Copy>>;
109
110
  * (uk), and the words for it in Arabic, Hebrew, Hindi, Chinese, Japanese and Korean.
110
111
  */
111
112
  declare const AI_MARK: RegExp;
113
+ /**
114
+ * Whether a text is a disclosure a kit may draw: it says AI (`AI_MARK`, in the person's language) and names Vinaverse,
115
+ * the rule a tenant's `disclosureFallback` passes. Words an app holds from before are drawn only when it holds.
116
+ */
117
+ declare function isDisclosure(text: string): boolean;
112
118
  type Translate = (key: CopyKey, vars?: Readonly<Record<string, string | number>>) => string;
113
119
  /** The built-in copy for a locale, English when the language has none. */
114
120
  declare function builtInCopy(locale: string | undefined): Copy;
@@ -142,4 +148,4 @@ declare function formatDate(date: string, locale?: string): string;
142
148
  /** A moment with its date and time in the locale and zone: "Oct 15, 2026, 9:30 AM"; the text as given when it is not one. */
143
149
  declare function formatDateTime(at: string, locale?: string, timeZone?: string): string;
144
150
 
145
- export { AI_MARK, BANNED_WORDS, COPY, type Copy, type CopyKey, type CopyOverrides, type Translate, bannedWordsIn, builtInCopy, createTranslate, formatDate, formatDateTime, formatDayTime, formatMoney, formatTimeRange, textDirection };
151
+ export { AI_MARK, BANNED_WORDS, COPY, type Copy, type CopyKey, type CopyOverrides, type Translate, bannedWordsIn, builtInCopy, createTranslate, formatDate, formatDateTime, formatDayTime, formatMoney, formatTimeRange, isDisclosure, textDirection };
@@ -3,6 +3,7 @@ var en = {
3
3
  disclosureFallback: "You're chatting with an AI agent. Powered by Vinaverse.",
4
4
  agentLabel: "AI agent",
5
5
  agentFallbackName: "the agent",
6
+ askingAbout: "Asking about",
6
7
  you: "You",
7
8
  staffLabel: "{by} \xB7 person",
8
9
  staffFallbackRole: "the team",
@@ -101,6 +102,7 @@ var es = {
101
102
  disclosureFallback: "Est\xE1s hablando con un agente de IA. Con la tecnolog\xEDa de Vinaverse.",
102
103
  agentLabel: "Agente de IA",
103
104
  agentFallbackName: "el agente",
105
+ askingAbout: "Preguntas sobre",
104
106
  you: "T\xFA",
105
107
  staffLabel: "{by} \xB7 persona",
106
108
  staffFallbackRole: "el equipo",
@@ -195,6 +197,7 @@ var ptBR = {
195
197
  disclosureFallback: "Voc\xEA est\xE1 conversando com um agente de IA. Com tecnologia Vinaverse.",
196
198
  agentLabel: "Agente de IA",
197
199
  agentFallbackName: "o agente",
200
+ askingAbout: "Perguntando sobre",
198
201
  you: "Voc\xEA",
199
202
  staffLabel: "{by} \xB7 pessoa",
200
203
  staffFallbackRole: "a equipe",
@@ -299,6 +302,9 @@ function discloses(key, value) {
299
302
  if (!AI_MARK.test(value)) return false;
300
303
  return key !== "disclosureFallback" || value.includes("Vinaverse");
301
304
  }
305
+ function isDisclosure(text) {
306
+ return discloses("disclosureFallback", text);
307
+ }
302
308
  function builtIn(locale) {
303
309
  const language = (locale ?? "en").split(/[-_]/)[0]?.toLowerCase();
304
310
  if (language === "en") return COPY.en;
@@ -450,6 +456,6 @@ function formatDateTime(at, locale, timeZone) {
450
456
  }
451
457
  }
452
458
 
453
- export { AI_MARK, BANNED_WORDS, COPY, bannedWordsIn, builtInCopy, createTranslate, formatDate, formatDateTime, formatDayTime, formatMoney, formatTimeRange, textDirection };
459
+ export { AI_MARK, BANNED_WORDS, COPY, bannedWordsIn, builtInCopy, createTranslate, formatDate, formatDateTime, formatDayTime, formatMoney, formatTimeRange, isDisclosure, textDirection };
454
460
  //# sourceMappingURL=index.js.map
455
461
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/copy/copy.ts","../../src/copy/format.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// The words a Vinaverse UI says, in English, Spanish and Brazilian Portuguese, each overridable by the tenant except\n// the fallback disclosure. People first: \"agent\", never \"assistant\"; a person from the business is a person, by role.\n// `{name}` placeholders are filled from `vars`. A key with a `One` form (`historyMessagesOne`) says it for a `count` of 1.\n\nconst en = {\n disclosureFallback: \"You're chatting with an AI agent. Powered by Vinaverse.\",\n agentLabel: 'AI agent',\n agentFallbackName: 'the agent',\n you: 'You',\n staffLabel: '{by} · person',\n staffFallbackRole: 'the team',\n composerPlaceholder: 'Message {agent}',\n composerPlaceholderTakeover: 'Message {by}',\n send: 'Send',\n stop: 'Stop',\n typeAnswerBelow: 'Type your answer below.',\n bannerConnecting: 'Connecting…',\n bannerReconnecting: 'Reconnecting…',\n bannerOffline: \"You're offline. Messages send when you're back.\",\n bannerContinuedElsewhere: 'This conversation continued on another device.',\n bannerUnavailable: \"Couldn't connect.\",\n continueHere: 'Continue here',\n tryAgain: 'Try again',\n talkToPerson: 'Talk to a person',\n messageSending: 'Sending',\n messageHeld: 'Sends when you continue',\n messageNotSent: 'Not sent',\n messageDelivered: 'Delivered',\n messageCutOff: 'This reply was cut off.',\n takeoverStarted: 'A person from {by} is replying now.',\n takeoverEnded: '{agent} is back.',\n handoffCreated: \"We've passed this to the team. They'll reply {expected}.\",\n handoffCreatedNoTime: \"We've passed this to the team. They'll reply soon.\",\n flowSent: 'Your answers were sent.',\n flowNotSent: \"Your answers couldn't be sent yet.\",\n turnFailed: 'Something went wrong.',\n working: '{agent} is working on it…',\n proposalConfirm: 'Confirm',\n proposalDecline: 'Decline',\n proposalChange: 'Change',\n proposalConfirmed: 'Confirmed',\n proposalDeclined: 'Declined',\n proposalFailed: \"Couldn't be confirmed\",\n proposalExpired: 'Expired',\n proposalSettled: 'No longer open',\n questionSubmit: 'Send',\n questionSkip: 'Skip',\n questionOther: 'Other',\n questionSearch: 'Search',\n questionAnswered: 'Answered',\n questionReplaced: 'Replaced by a newer question',\n questionStep: 'Question {step} of {total}',\n questionAddPhoto: 'Add a photo',\n questionCharactersLeft: '{count} characters left',\n questionCharactersLeftOne: '{count} character left',\n priceFrom: 'From {price}',\n /** A listing with no rating yet; empty draws nothing, a tenant's word (\"New\") draws in the rating's place. */\n ratingNone: '',\n nextAvailable: 'Next: {time}',\n /** A time today and tomorrow, as `nextAvailable` says it (`{time}`: \"10:00 AM\"). */\n today: 'today, {time}',\n tomorrow: 'tomorrow, {time}',\n agentEnded: 'This conversation ended',\n agentEndedBody: 'Start a new one whenever you like.',\n agentStartOver: 'Start a new conversation',\n agentUnreachable: \"Couldn't reach {agent}\",\n agentUnreachableBody: 'Check your connection and try again.',\n agentOff: \"{agent} isn't available right now\",\n agentOffBody: 'Please try again later.',\n helpful: 'Was this helpful?',\n helpfulYes: 'Yes',\n helpfulNo: 'No',\n helpfulThanks: 'Thanks for telling us.',\n launcherOpen: 'Open {agent}',\n launcherGreeting: \"Hi, I'm {agent}. Ask me what you need.\",\n close: 'Close',\n welcomeFallback: \"Hi, I'm {agent}. How can I help?\",\n privacy: 'Privacy',\n cardsInRow: '{count} results, swipe for more',\n cardsInRowOne: '{count} result',\n open: 'Open',\n /** History: the person's past conversations, and reading one back. */\n historyEmpty: 'No conversations yet',\n historyEmptyBody: 'Your conversations with {agent} will show here.',\n historyFailed: \"Couldn't load your conversations.\",\n historyOff: 'History is not available.',\n historyMessages: '{count} messages',\n historyMessagesOne: '{count} message',\n historyEnded: 'Ended',\n historyContinue: 'Continue',\n historyDelete: 'Delete',\n historyDeleteTitle: 'Delete this conversation?',\n historyDeleteBody: \"It's removed from your history everywhere.\",\n historyDeleteFailed: \"Couldn't delete this conversation.\",\n cancel: 'Cancel',\n transcriptFailed: \"Couldn't load this conversation.\",\n transcriptGone: 'This conversation is no longer available.',\n transcriptEarlier: 'Earlier messages',\n /** Under the person's message a guardrail refused. */\n messageRefused: 'Not answered',\n loading: 'Loading…',\n} as const;\n\nexport type CopyKey = keyof typeof en;\nexport type Copy = Readonly<Record<CopyKey, string>>;\n/** A tenant's words, by key; a key left out (or undefined) keeps the built-in one. */\nexport type CopyOverrides = { readonly [K in CopyKey]?: string | undefined };\n\nconst es: Copy = {\n disclosureFallback:\n 'Estás hablando con un agente de IA. Con la tecnología de Vinaverse.',\n agentLabel: 'Agente de IA',\n agentFallbackName: 'el agente',\n you: 'Tú',\n staffLabel: '{by} · persona',\n staffFallbackRole: 'el equipo',\n composerPlaceholder: 'Escribe a {agent}',\n composerPlaceholderTakeover: 'Escribe a {by}',\n send: 'Enviar',\n stop: 'Detener',\n typeAnswerBelow: 'Escribe tu respuesta abajo.',\n bannerConnecting: 'Conectando…',\n bannerReconnecting: 'Reconectando…',\n bannerOffline: 'Sin conexión. Los mensajes se envían cuando vuelvas.',\n bannerContinuedElsewhere: 'Esta conversación continuó en otro dispositivo.',\n bannerUnavailable: 'No se pudo conectar.',\n continueHere: 'Continuar aquí',\n tryAgain: 'Intentar de nuevo',\n talkToPerson: 'Hablar con una persona',\n messageSending: 'Enviando',\n messageHeld: 'Se envía cuando continúes',\n messageNotSent: 'No enviado',\n messageDelivered: 'Entregado',\n messageCutOff: 'Esta respuesta quedó incompleta.',\n takeoverStarted: 'Una persona de {by} está respondiendo.',\n takeoverEnded: '{agent} volvió.',\n handoffCreated: 'Le pasamos esto al equipo. Responderán {expected}.',\n handoffCreatedNoTime: 'Le pasamos esto al equipo. Responderán pronto.',\n flowSent: 'Tus respuestas se enviaron.',\n flowNotSent: 'Tus respuestas aún no se pudieron enviar.',\n turnFailed: 'Algo salió mal.',\n working: '{agent} está en ello…',\n proposalConfirm: 'Confirmar',\n proposalDecline: 'Rechazar',\n proposalChange: 'Cambiar',\n proposalConfirmed: 'Confirmado',\n proposalDeclined: 'Rechazado',\n proposalFailed: 'No se pudo confirmar',\n proposalExpired: 'Vencido',\n proposalSettled: 'Ya no está abierto',\n questionSubmit: 'Enviar',\n questionSkip: 'Omitir',\n questionOther: 'Otro',\n questionSearch: 'Buscar',\n questionAnswered: 'Respondida',\n questionReplaced: 'Reemplazada por una pregunta más reciente',\n questionStep: 'Pregunta {step} de {total}',\n questionAddPhoto: 'Agregar una foto',\n questionCharactersLeft: 'Quedan {count} caracteres',\n questionCharactersLeftOne: 'Queda {count} carácter',\n priceFrom: 'Desde {price}',\n ratingNone: '',\n nextAvailable: 'Próximo: {time}',\n today: 'hoy, {time}',\n tomorrow: 'mañana, {time}',\n agentEnded: 'Esta conversación terminó',\n agentEndedBody: 'Empieza una nueva cuando quieras.',\n agentStartOver: 'Empezar una conversación nueva',\n agentUnreachable: 'No se pudo contactar a {agent}',\n agentUnreachableBody: 'Revisa tu conexión e inténtalo de nuevo.',\n agentOff: '{agent} no está disponible ahora',\n agentOffBody: 'Inténtalo de nuevo más tarde.',\n helpful: '¿Te sirvió?',\n helpfulYes: 'Sí',\n helpfulNo: 'No',\n helpfulThanks: 'Gracias por contarnos.',\n launcherOpen: 'Abrir {agent}',\n launcherGreeting: 'Hola, soy {agent}. Pregúntame lo que necesites.',\n close: 'Cerrar',\n welcomeFallback: 'Hola, soy {agent}. ¿En qué te ayudo?',\n privacy: 'Privacidad',\n cardsInRow: '{count} resultados, desliza para ver más',\n cardsInRowOne: '{count} resultado',\n open: 'Abrir',\n historyEmpty: 'Aún no hay conversaciones',\n historyEmptyBody: 'Tus conversaciones con {agent} aparecerán aquí.',\n historyFailed: 'No se pudieron cargar tus conversaciones.',\n historyOff: 'El historial no está disponible.',\n historyMessages: '{count} mensajes',\n historyMessagesOne: '{count} mensaje',\n historyEnded: 'Terminada',\n historyContinue: 'Continuar',\n historyDelete: 'Eliminar',\n historyDeleteTitle: '¿Eliminar esta conversación?',\n historyDeleteBody: 'Se elimina de tu historial en todas partes.',\n historyDeleteFailed: 'No se pudo eliminar esta conversación.',\n cancel: 'Cancelar',\n transcriptFailed: 'No se pudo cargar esta conversación.',\n transcriptGone: 'Esta conversación ya no está disponible.',\n transcriptEarlier: 'Mensajes anteriores',\n messageRefused: 'Sin respuesta',\n loading: 'Cargando…',\n};\n\nconst ptBR: Copy = {\n disclosureFallback:\n 'Você está conversando com um agente de IA. Com tecnologia Vinaverse.',\n agentLabel: 'Agente de IA',\n agentFallbackName: 'o agente',\n you: 'Você',\n staffLabel: '{by} · pessoa',\n staffFallbackRole: 'a equipe',\n composerPlaceholder: 'Mensagem para {agent}',\n composerPlaceholderTakeover: 'Mensagem para {by}',\n send: 'Enviar',\n stop: 'Parar',\n typeAnswerBelow: 'Digite sua resposta abaixo.',\n bannerConnecting: 'Conectando…',\n bannerReconnecting: 'Reconectando…',\n bannerOffline: 'Sem conexão. As mensagens são enviadas quando você voltar.',\n bannerContinuedElsewhere: 'Esta conversa continuou em outro aparelho.',\n bannerUnavailable: 'Não foi possível conectar.',\n continueHere: 'Continuar aqui',\n tryAgain: 'Tentar de novo',\n talkToPerson: 'Falar com uma pessoa',\n messageSending: 'Enviando',\n messageHeld: 'Será enviada quando você continuar',\n messageNotSent: 'Não enviada',\n messageDelivered: 'Entregue',\n messageCutOff: 'Esta resposta foi interrompida.',\n takeoverStarted: 'Uma pessoa de {by} está respondendo agora.',\n takeoverEnded: '{agent} voltou.',\n handoffCreated: 'Passamos isso para a equipe. Eles vão responder {expected}.',\n handoffCreatedNoTime:\n 'Passamos isso para a equipe. Eles vão responder em breve.',\n flowSent: 'Suas respostas foram enviadas.',\n flowNotSent: 'Ainda não foi possível enviar suas respostas.',\n turnFailed: 'Algo deu errado.',\n working: '{agent} está cuidando disso…',\n proposalConfirm: 'Confirmar',\n proposalDecline: 'Recusar',\n proposalChange: 'Alterar',\n proposalConfirmed: 'Confirmado',\n proposalDeclined: 'Recusado',\n proposalFailed: 'Não foi possível confirmar',\n proposalExpired: 'Expirado',\n proposalSettled: 'Não está mais aberto',\n questionSubmit: 'Enviar',\n questionSkip: 'Pular',\n questionOther: 'Outro',\n questionSearch: 'Buscar',\n questionAnswered: 'Respondida',\n questionReplaced: 'Substituída por uma pergunta mais recente',\n questionStep: 'Pergunta {step} de {total}',\n questionAddPhoto: 'Adicionar uma foto',\n questionCharactersLeft: 'Restam {count} caracteres',\n questionCharactersLeftOne: 'Resta {count} caractere',\n priceFrom: 'A partir de {price}',\n ratingNone: '',\n nextAvailable: 'Próximo horário: {time}',\n today: 'hoje, {time}',\n tomorrow: 'amanhã, {time}',\n agentEnded: 'Esta conversa terminou',\n agentEndedBody: 'Comece uma nova quando quiser.',\n agentStartOver: 'Começar uma conversa nova',\n agentUnreachable: 'Não foi possível falar com {agent}',\n agentUnreachableBody: 'Verifique sua conexão e tente de novo.',\n agentOff: '{agent} não está disponível agora',\n agentOffBody: 'Tente de novo mais tarde.',\n helpful: 'Isso ajudou?',\n helpfulYes: 'Sim',\n helpfulNo: 'Não',\n helpfulThanks: 'Obrigado por avisar.',\n launcherOpen: 'Abrir {agent}',\n launcherGreeting: 'Oi, sou {agent}. Pergunte o que precisar.',\n close: 'Fechar',\n welcomeFallback: 'Oi, sou {agent}. Como posso ajudar?',\n privacy: 'Privacidade',\n cardsInRow: '{count} resultados, deslize para ver mais',\n cardsInRowOne: '{count} resultado',\n open: 'Abrir',\n historyEmpty: 'Nenhuma conversa ainda',\n historyEmptyBody: 'Suas conversas com {agent} vão aparecer aqui.',\n historyFailed: 'Não foi possível carregar suas conversas.',\n historyOff: 'O histórico não está disponível.',\n historyMessages: '{count} mensagens',\n historyMessagesOne: '{count} mensagem',\n historyEnded: 'Encerrada',\n historyContinue: 'Continuar',\n historyDelete: 'Excluir',\n historyDeleteTitle: 'Excluir esta conversa?',\n historyDeleteBody: 'Ela é removida do seu histórico em todos os lugares.',\n historyDeleteFailed: 'Não foi possível excluir esta conversa.',\n cancel: 'Cancelar',\n transcriptFailed: 'Não foi possível carregar esta conversa.',\n transcriptGone: 'Esta conversa não está mais disponível.',\n transcriptEarlier: 'Mensagens anteriores',\n messageRefused: 'Sem resposta',\n loading: 'Carregando…',\n};\n\n/** The built-in languages; any other locale falls back to English, its own `copy` overrides aside. */\nexport const COPY: Readonly<Record<'en' | 'es' | 'pt-BR', Copy>> = {\n en,\n es,\n 'pt-BR': ptBR,\n};\n\n/**\n * Keys a tenant may not override in a built-in language: the AI disclosure is the platform's, never removed or reworded.\n * In a language without built-in copy the tenant supplies them, translated, so the disclosure reads in the person's\n * language, and only a translation that still discloses is taken (`discloses`): the label says AI, the disclosure says\n * AI and names Vinaverse.\n */\nconst FIXED: ReadonlySet<CopyKey> = new Set([\n 'disclosureFallback',\n 'agentLabel',\n]);\n\n/**\n * \"AI\" as languages write it: AI, IA (es, pt, fr, it, ro), KI (de, nl, da, no, sv), SI (pl), YZ (tr), ИИ (ru), ШІ\n * (uk), and the words for it in Arabic, Hebrew, Hindi, Chinese, Japanese and Korean.\n */\nexport const AI_MARK =\n /(?:^|[^\\p{L}])(?:AI|IA|KI|SI|YZ|ИИ|ШІ)(?:$|[^\\p{L}])|الذكاء الاصطناعي|بالذكاء|בינה מלאכותית|एआई|कृत्रिम बुद्धि|人工智能|人工知能|인공지능/u;\n\n/**\n * Whether a tenant's text for a fixed key still makes the AI disclosure: the label says AI; the disclosure says AI\n * and names Vinaverse. A tenant's translation that does not is ignored, and the English built-in shows instead.\n */\nfunction discloses(key: string, value: string): boolean {\n if (!AI_MARK.test(value)) return false;\n return key !== 'disclosureFallback' || value.includes('Vinaverse');\n}\n\nexport type Translate = (\n key: CopyKey,\n vars?: Readonly<Record<string, string | number>>,\n) => string;\n\n/** The built-in copy for a locale: its language (`es-US` → `es`, `pt-PT` → `pt-BR`), else null. */\nfunction builtIn(locale: string | undefined): Copy | null {\n const language = (locale ?? 'en').split(/[-_]/)[0]?.toLowerCase();\n if (language === 'en') return COPY.en;\n if (language === 'es') return COPY.es;\n if (language === 'pt') return COPY['pt-BR'];\n return null;\n}\n\n/** The built-in copy for a locale, English when the language has none. */\nexport function builtInCopy(locale: string | undefined): Copy {\n return builtIn(locale) ?? COPY.en;\n}\n\n/** A translator for a locale, with the tenant's overrides on top (fixed keys excepted). */\nexport function createTranslate(\n locale: string | undefined,\n overrides: CopyOverrides = {},\n): Translate {\n const own = builtIn(locale);\n const merged: Record<string, string> = { ...(own ?? COPY.en) };\n for (const [key, value] of Object.entries(overrides)) {\n if (value === undefined) continue;\n if (FIXED.has(key as CopyKey) && !(own === null && discloses(key, value)))\n continue;\n merged[key] = value;\n // The tenant's words for a count, without their own `One` form: theirs for every count, never ours for 1.\n if (!(`${key}One` in overrides)) delete merged[`${key}One`];\n }\n return (key, vars) =>\n (\n (vars?.count === 1 ? merged[`${key}One`] : undefined) ??\n merged[key] ??\n en[key]\n ).replace(/\\{(\\w+)\\}/g, (all, name: string) =>\n vars && name in vars ? String(vars[name]) : all,\n );\n}\n\n/**\n * Words a Vinaverse UI never says to people (a tenant override that uses them gets a development warning): the\n * runtime is an agent, never an assistant or a bot; and never \"crew\".\n */\nexport const BANNED_WORDS: readonly RegExp[] = [\n /\\bassistant/i,\n /\\basistente/i,\n /\\bassistent/i,\n /\\bbot\\b/i,\n /\\bcrew\\b/i,\n];\n\n/** The overrides that use a banned word, by key. */\nexport function bannedWordsIn(overrides: CopyOverrides): CopyKey[] {\n return (Object.entries(overrides) as [CopyKey, string | undefined][])\n .filter(([, v]) => v !== undefined && BANNED_WORDS.some((w) => w.test(v)))\n .map(([k]) => k);\n}\n","// Dates, times, money and text direction in the person's locale, through Intl (Hermes has it), with a plain fallback\n// where a runtime lacks it.\n\n/** Languages and scripts written right to left. */\nconst RTL_LANGUAGES = new Set([\n 'ar',\n 'he',\n 'iw',\n 'fa',\n 'ur',\n 'ps',\n 'yi',\n 'dv',\n 'ckb',\n 'sd',\n 'ug',\n 'syr',\n]);\nconst RTL_SCRIPTS = new Set([\n 'arab',\n 'hebr',\n 'thaa',\n 'syrc',\n 'nkoo',\n 'adlm',\n 'rohg',\n]);\n\n/** `rtl` for Arabic, Hebrew, Persian, Urdu and the other right-to-left languages and scripts; `ltr` otherwise. */\nexport function textDirection(locale: string | undefined): 'ltr' | 'rtl' {\n const parts = (locale ?? '').toLowerCase().split(/[-_]/);\n if (parts.some((p) => p.length === 4 && RTL_SCRIPTS.has(p))) return 'rtl';\n return RTL_LANGUAGES.has(parts[0] ?? '') ? 'rtl' : 'ltr';\n}\n\n/** An amount in minor units (`amount` cents) in its currency: `$85.00`. */\nexport function formatMoney(\n amountMinor: number,\n currency: string,\n locale?: string,\n): string {\n try {\n const format = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n });\n const digits = format.resolvedOptions().maximumFractionDigits ?? 2;\n return format.format(amountMinor / 10 ** digits);\n } catch {\n return `${currency} ${(amountMinor / 100).toFixed(2)}`;\n }\n}\n\n/** A start and an end: \"Wed, Oct 14, 10:00 – 11:30 AM\" in the locale and time zone. */\nexport function formatTimeRange(\n start: string,\n end: string | undefined,\n locale?: string,\n timeZone?: string,\n): string {\n const from = new Date(start);\n if (Number.isNaN(from.getTime())) return start;\n const options: Intl.DateTimeFormatOptions = {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n };\n try {\n const format = new Intl.DateTimeFormat(locale, options);\n const to = end ? new Date(end) : null;\n if (!to || Number.isNaN(to.getTime())) return format.format(from);\n return typeof format.formatRange === 'function'\n ? format.formatRange(from, to)\n : `${format.format(from)} – ${format.format(to)}`;\n } catch {\n return from.toISOString();\n }\n}\n\n/** The day a moment falls on in a time zone, as a day count, so two days compare across DST. */\nfunction dayOf(at: Date, timeZone: string | undefined): number {\n const [y, m, d] = new Intl.DateTimeFormat('en-CA', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n })\n .format(at)\n .split('-')\n .map(Number);\n return Date.UTC(y as number, (m as number) - 1, d as number) / 86_400_000;\n}\n\n/**\n * A moment as a person says it: \"today, 10:00 AM\" and \"tomorrow, 10:00 AM\" (`today` and `tomorrow` are the copy's\n * words, with `{time}`), else the date and time (\"Fri, Oct 17, 10:00 AM\"), in the locale and time zone. `now` is the\n * clock it is judged by.\n */\nexport function formatDayTime(\n start: string,\n words: { readonly today: string; readonly tomorrow: string },\n locale?: string,\n timeZone?: string,\n now: number = Date.now(),\n): string {\n const at = new Date(start);\n if (Number.isNaN(at.getTime())) return start;\n try {\n const days = dayOf(at, timeZone) - dayOf(new Date(now), timeZone);\n const word = days === 0 ? words.today : days === 1 ? words.tomorrow : '';\n if (!word) return formatTimeRange(start, undefined, locale, timeZone);\n const time = new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n minute: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n }).format(at);\n return word.replace('{time}', time);\n } catch {\n return formatTimeRange(start, undefined, locale, timeZone);\n }\n}\n\n/** A calendar date (`YYYY-MM-DD`) in the locale: \"October 14, 2026\". */\nexport function formatDate(date: string, locale?: string): string {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(date);\n if (!m) return date;\n try {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n timeZone: 'UTC',\n }).format(new Date(Date.UTC(Number(m[1]), Number(m[2]) - 1, Number(m[3]))));\n } catch {\n return date;\n }\n}\n\n/** A moment with its date and time in the locale and zone: \"Oct 15, 2026, 9:30 AM\"; the text as given when it is not one. */\nexport function formatDateTime(\n at: string,\n locale?: string,\n timeZone?: string,\n): string {\n const date = new Date(at);\n if (Number.isNaN(date.getTime())) return at;\n try {\n return new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n timeStyle: 'short',\n ...(timeZone ? { timeZone } : {}),\n }).format(date);\n } catch {\n return date.toISOString();\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/copy/copy.ts","../../src/copy/format.ts"],"names":[],"mappings":";AAIA,IAAM,EAAA,GAAK;AAAA,EACT,kBAAA,EAAoB,yDAAA;AAAA,EACpB,UAAA,EAAY,UAAA;AAAA,EACZ,iBAAA,EAAmB,WAAA;AAAA,EACnB,WAAA,EAAa,cAAA;AAAA,EACb,GAAA,EAAK,KAAA;AAAA,EACL,UAAA,EAAY,kBAAA;AAAA,EACZ,iBAAA,EAAmB,UAAA;AAAA,EACnB,mBAAA,EAAqB,iBAAA;AAAA,EACrB,2BAAA,EAA6B,cAAA;AAAA,EAC7B,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,eAAA,EAAiB,yBAAA;AAAA,EACjB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,aAAA,EAAe,iDAAA;AAAA,EACf,wBAAA,EAA0B,gDAAA;AAAA,EAC1B,iBAAA,EAAmB,mBAAA;AAAA,EACnB,YAAA,EAAc,eAAA;AAAA,EACd,QAAA,EAAU,WAAA;AAAA,EACV,YAAA,EAAc,kBAAA;AAAA,EACd,cAAA,EAAgB,SAAA;AAAA,EAChB,WAAA,EAAa,yBAAA;AAAA,EACb,cAAA,EAAgB,UAAA;AAAA,EAChB,gBAAA,EAAkB,WAAA;AAAA,EAClB,aAAA,EAAe,yBAAA;AAAA,EACf,eAAA,EAAiB,qCAAA;AAAA,EACjB,aAAA,EAAe,kBAAA;AAAA,EACf,cAAA,EAAgB,0DAAA;AAAA,EAChB,oBAAA,EAAsB,oDAAA;AAAA,EACtB,QAAA,EAAU,yBAAA;AAAA,EACV,WAAA,EAAa,oCAAA;AAAA,EACb,UAAA,EAAY,uBAAA;AAAA,EACZ,OAAA,EAAS,gCAAA;AAAA,EACT,eAAA,EAAiB,SAAA;AAAA,EACjB,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,QAAA;AAAA,EAChB,iBAAA,EAAmB,WAAA;AAAA,EACnB,gBAAA,EAAkB,UAAA;AAAA,EAClB,cAAA,EAAgB,uBAAA;AAAA,EAChB,eAAA,EAAiB,SAAA;AAAA,EACjB,eAAA,EAAiB,gBAAA;AAAA,EACjB,cAAA,EAAgB,MAAA;AAAA,EAChB,YAAA,EAAc,MAAA;AAAA,EACd,aAAA,EAAe,OAAA;AAAA,EACf,cAAA,EAAgB,QAAA;AAAA,EAChB,gBAAA,EAAkB,UAAA;AAAA,EAClB,gBAAA,EAAkB,8BAAA;AAAA,EAClB,YAAA,EAAc,4BAAA;AAAA,EACd,gBAAA,EAAkB,aAAA;AAAA,EAClB,sBAAA,EAAwB,yBAAA;AAAA,EACxB,yBAAA,EAA2B,wBAAA;AAAA,EAC3B,SAAA,EAAW,cAAA;AAAA;AAAA,EAEX,UAAA,EAAY,EAAA;AAAA,EACZ,aAAA,EAAe,cAAA;AAAA;AAAA,EAEf,KAAA,EAAO,eAAA;AAAA,EACP,QAAA,EAAU,kBAAA;AAAA,EACV,UAAA,EAAY,yBAAA;AAAA,EACZ,cAAA,EAAgB,oCAAA;AAAA,EAChB,cAAA,EAAgB,0BAAA;AAAA,EAChB,gBAAA,EAAkB,wBAAA;AAAA,EAClB,oBAAA,EAAsB,sCAAA;AAAA,EACtB,QAAA,EAAU,mCAAA;AAAA,EACV,YAAA,EAAc,yBAAA;AAAA,EACd,OAAA,EAAS,mBAAA;AAAA,EACT,UAAA,EAAY,KAAA;AAAA,EACZ,SAAA,EAAW,IAAA;AAAA,EACX,aAAA,EAAe,wBAAA;AAAA,EACf,YAAA,EAAc,cAAA;AAAA,EACd,gBAAA,EAAkB,wCAAA;AAAA,EAClB,KAAA,EAAO,OAAA;AAAA,EACP,eAAA,EAAiB,kCAAA;AAAA,EACjB,OAAA,EAAS,SAAA;AAAA,EACT,UAAA,EAAY,iCAAA;AAAA,EACZ,aAAA,EAAe,gBAAA;AAAA,EACf,IAAA,EAAM,MAAA;AAAA;AAAA,EAEN,YAAA,EAAc,sBAAA;AAAA,EACd,gBAAA,EAAkB,iDAAA;AAAA,EAClB,aAAA,EAAe,mCAAA;AAAA,EACf,UAAA,EAAY,2BAAA;AAAA,EACZ,eAAA,EAAiB,kBAAA;AAAA,EACjB,kBAAA,EAAoB,iBAAA;AAAA,EACpB,YAAA,EAAc,OAAA;AAAA,EACd,eAAA,EAAiB,UAAA;AAAA,EACjB,aAAA,EAAe,QAAA;AAAA,EACf,kBAAA,EAAoB,2BAAA;AAAA,EACpB,iBAAA,EAAmB,4CAAA;AAAA,EACnB,mBAAA,EAAqB,oCAAA;AAAA,EACrB,MAAA,EAAQ,QAAA;AAAA,EACR,gBAAA,EAAkB,kCAAA;AAAA,EAClB,cAAA,EAAgB,2CAAA;AAAA,EAChB,iBAAA,EAAmB,kBAAA;AAAA;AAAA,EAEnB,cAAA,EAAgB,cAAA;AAAA,EAChB,OAAA,EAAS;AACX,CAAA;AAOA,IAAM,EAAA,GAAW;AAAA,EACf,kBAAA,EACE,2EAAA;AAAA,EACF,UAAA,EAAY,cAAA;AAAA,EACZ,iBAAA,EAAmB,WAAA;AAAA,EACnB,WAAA,EAAa,iBAAA;AAAA,EACb,GAAA,EAAK,OAAA;AAAA,EACL,UAAA,EAAY,mBAAA;AAAA,EACZ,iBAAA,EAAmB,WAAA;AAAA,EACnB,mBAAA,EAAqB,mBAAA;AAAA,EACrB,2BAAA,EAA6B,gBAAA;AAAA,EAC7B,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,SAAA;AAAA,EACN,eAAA,EAAiB,6BAAA;AAAA,EACjB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,aAAA,EAAe,4DAAA;AAAA,EACf,wBAAA,EAA0B,uDAAA;AAAA,EAC1B,iBAAA,EAAmB,sBAAA;AAAA,EACnB,YAAA,EAAc,mBAAA;AAAA,EACd,QAAA,EAAU,mBAAA;AAAA,EACV,YAAA,EAAc,wBAAA;AAAA,EACd,cAAA,EAAgB,UAAA;AAAA,EAChB,WAAA,EAAa,iCAAA;AAAA,EACb,cAAA,EAAgB,YAAA;AAAA,EAChB,gBAAA,EAAkB,WAAA;AAAA,EAClB,aAAA,EAAe,qCAAA;AAAA,EACf,eAAA,EAAiB,2CAAA;AAAA,EACjB,aAAA,EAAe,oBAAA;AAAA,EACf,cAAA,EAAgB,uDAAA;AAAA,EAChB,oBAAA,EAAsB,mDAAA;AAAA,EACtB,QAAA,EAAU,6BAAA;AAAA,EACV,WAAA,EAAa,8CAAA;AAAA,EACb,UAAA,EAAY,oBAAA;AAAA,EACZ,OAAA,EAAS,+BAAA;AAAA,EACT,eAAA,EAAiB,WAAA;AAAA,EACjB,eAAA,EAAiB,UAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,iBAAA,EAAmB,YAAA;AAAA,EACnB,gBAAA,EAAkB,WAAA;AAAA,EAClB,cAAA,EAAgB,sBAAA;AAAA,EAChB,eAAA,EAAiB,SAAA;AAAA,EACjB,eAAA,EAAiB,uBAAA;AAAA,EACjB,cAAA,EAAgB,QAAA;AAAA,EAChB,YAAA,EAAc,QAAA;AAAA,EACd,aAAA,EAAe,MAAA;AAAA,EACf,cAAA,EAAgB,QAAA;AAAA,EAChB,gBAAA,EAAkB,YAAA;AAAA,EAClB,gBAAA,EAAkB,8CAAA;AAAA,EAClB,YAAA,EAAc,4BAAA;AAAA,EACd,gBAAA,EAAkB,kBAAA;AAAA,EAClB,sBAAA,EAAwB,2BAAA;AAAA,EACxB,yBAAA,EAA2B,2BAAA;AAAA,EAC3B,SAAA,EAAW,eAAA;AAAA,EACX,UAAA,EAAY,EAAA;AAAA,EACZ,aAAA,EAAe,oBAAA;AAAA,EACf,KAAA,EAAO,aAAA;AAAA,EACP,QAAA,EAAU,mBAAA;AAAA,EACV,UAAA,EAAY,iCAAA;AAAA,EACZ,cAAA,EAAgB,mCAAA;AAAA,EAChB,cAAA,EAAgB,mCAAA;AAAA,EAChB,gBAAA,EAAkB,gCAAA;AAAA,EAClB,oBAAA,EAAsB,gDAAA;AAAA,EACtB,QAAA,EAAU,qCAAA;AAAA,EACV,YAAA,EAAc,qCAAA;AAAA,EACd,OAAA,EAAS,mBAAA;AAAA,EACT,UAAA,EAAY,OAAA;AAAA,EACZ,SAAA,EAAW,IAAA;AAAA,EACX,aAAA,EAAe,wBAAA;AAAA,EACf,YAAA,EAAc,eAAA;AAAA,EACd,gBAAA,EAAkB,oDAAA;AAAA,EAClB,KAAA,EAAO,QAAA;AAAA,EACP,eAAA,EAAiB,4CAAA;AAAA,EACjB,OAAA,EAAS,YAAA;AAAA,EACT,UAAA,EAAY,6CAAA;AAAA,EACZ,aAAA,EAAe,mBAAA;AAAA,EACf,IAAA,EAAM,OAAA;AAAA,EACN,YAAA,EAAc,8BAAA;AAAA,EACd,gBAAA,EAAkB,uDAAA;AAAA,EAClB,aAAA,EAAe,2CAAA;AAAA,EACf,UAAA,EAAY,qCAAA;AAAA,EACZ,eAAA,EAAiB,kBAAA;AAAA,EACjB,kBAAA,EAAoB,iBAAA;AAAA,EACpB,YAAA,EAAc,WAAA;AAAA,EACd,eAAA,EAAiB,WAAA;AAAA,EACjB,aAAA,EAAe,UAAA;AAAA,EACf,kBAAA,EAAoB,oCAAA;AAAA,EACpB,iBAAA,EAAmB,6CAAA;AAAA,EACnB,mBAAA,EAAqB,2CAAA;AAAA,EACrB,MAAA,EAAQ,UAAA;AAAA,EACR,gBAAA,EAAkB,yCAAA;AAAA,EAClB,cAAA,EAAgB,gDAAA;AAAA,EAChB,iBAAA,EAAmB,qBAAA;AAAA,EACnB,cAAA,EAAgB,eAAA;AAAA,EAChB,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,IAAA,GAAa;AAAA,EACjB,kBAAA,EACE,4EAAA;AAAA,EACF,UAAA,EAAY,cAAA;AAAA,EACZ,iBAAA,EAAmB,UAAA;AAAA,EACnB,WAAA,EAAa,mBAAA;AAAA,EACb,GAAA,EAAK,SAAA;AAAA,EACL,UAAA,EAAY,kBAAA;AAAA,EACZ,iBAAA,EAAmB,UAAA;AAAA,EACnB,mBAAA,EAAqB,uBAAA;AAAA,EACrB,2BAAA,EAA6B,oBAAA;AAAA,EAC7B,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,OAAA;AAAA,EACN,eAAA,EAAiB,6BAAA;AAAA,EACjB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,aAAA,EAAe,qEAAA;AAAA,EACf,wBAAA,EAA0B,4CAAA;AAAA,EAC1B,iBAAA,EAAmB,kCAAA;AAAA,EACnB,YAAA,EAAc,gBAAA;AAAA,EACd,QAAA,EAAU,gBAAA;AAAA,EACV,YAAA,EAAc,sBAAA;AAAA,EACd,cAAA,EAAgB,UAAA;AAAA,EAChB,WAAA,EAAa,0CAAA;AAAA,EACb,cAAA,EAAgB,gBAAA;AAAA,EAChB,gBAAA,EAAkB,UAAA;AAAA,EAClB,aAAA,EAAe,iCAAA;AAAA,EACf,eAAA,EAAiB,+CAAA;AAAA,EACjB,aAAA,EAAe,iBAAA;AAAA,EACf,cAAA,EAAgB,gEAAA;AAAA,EAChB,oBAAA,EACE,8DAAA;AAAA,EACF,QAAA,EAAU,gCAAA;AAAA,EACV,WAAA,EAAa,qDAAA;AAAA,EACb,UAAA,EAAY,kBAAA;AAAA,EACZ,OAAA,EAAS,sCAAA;AAAA,EACT,eAAA,EAAiB,WAAA;AAAA,EACjB,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,iBAAA,EAAmB,YAAA;AAAA,EACnB,gBAAA,EAAkB,UAAA;AAAA,EAClB,cAAA,EAAgB,kCAAA;AAAA,EAChB,eAAA,EAAiB,UAAA;AAAA,EACjB,eAAA,EAAiB,4BAAA;AAAA,EACjB,cAAA,EAAgB,QAAA;AAAA,EAChB,YAAA,EAAc,OAAA;AAAA,EACd,aAAA,EAAe,OAAA;AAAA,EACf,cAAA,EAAgB,QAAA;AAAA,EAChB,gBAAA,EAAkB,YAAA;AAAA,EAClB,gBAAA,EAAkB,8CAAA;AAAA,EAClB,YAAA,EAAc,4BAAA;AAAA,EACd,gBAAA,EAAkB,oBAAA;AAAA,EAClB,sBAAA,EAAwB,2BAAA;AAAA,EACxB,yBAAA,EAA2B,yBAAA;AAAA,EAC3B,SAAA,EAAW,qBAAA;AAAA,EACX,UAAA,EAAY,EAAA;AAAA,EACZ,aAAA,EAAe,+BAAA;AAAA,EACf,KAAA,EAAO,cAAA;AAAA,EACP,QAAA,EAAU,mBAAA;AAAA,EACV,UAAA,EAAY,wBAAA;AAAA,EACZ,cAAA,EAAgB,gCAAA;AAAA,EAChB,cAAA,EAAgB,8BAAA;AAAA,EAChB,gBAAA,EAAkB,0CAAA;AAAA,EAClB,oBAAA,EAAsB,2CAAA;AAAA,EACtB,QAAA,EAAU,4CAAA;AAAA,EACV,YAAA,EAAc,2BAAA;AAAA,EACd,OAAA,EAAS,cAAA;AAAA,EACT,UAAA,EAAY,KAAA;AAAA,EACZ,SAAA,EAAW,QAAA;AAAA,EACX,aAAA,EAAe,sBAAA;AAAA,EACf,YAAA,EAAc,eAAA;AAAA,EACd,gBAAA,EAAkB,2CAAA;AAAA,EAClB,KAAA,EAAO,QAAA;AAAA,EACP,eAAA,EAAiB,qCAAA;AAAA,EACjB,OAAA,EAAS,aAAA;AAAA,EACT,UAAA,EAAY,2CAAA;AAAA,EACZ,aAAA,EAAe,mBAAA;AAAA,EACf,IAAA,EAAM,OAAA;AAAA,EACN,YAAA,EAAc,wBAAA;AAAA,EACd,gBAAA,EAAkB,kDAAA;AAAA,EAClB,aAAA,EAAe,iDAAA;AAAA,EACf,UAAA,EAAY,8CAAA;AAAA,EACZ,eAAA,EAAiB,mBAAA;AAAA,EACjB,kBAAA,EAAoB,kBAAA;AAAA,EACpB,YAAA,EAAc,WAAA;AAAA,EACd,eAAA,EAAiB,WAAA;AAAA,EACjB,aAAA,EAAe,SAAA;AAAA,EACf,kBAAA,EAAoB,wBAAA;AAAA,EACpB,iBAAA,EAAmB,4DAAA;AAAA,EACnB,mBAAA,EAAqB,+CAAA;AAAA,EACrB,MAAA,EAAQ,UAAA;AAAA,EACR,gBAAA,EAAkB,gDAAA;AAAA,EAClB,cAAA,EAAgB,kDAAA;AAAA,EAChB,iBAAA,EAAmB,sBAAA;AAAA,EACnB,cAAA,EAAgB,cAAA;AAAA,EAChB,OAAA,EAAS;AACX,CAAA;AAGO,IAAM,IAAA,GAAsD;AAAA,EACjE,EAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA,EAAS;AACX;AAQA,IAAM,KAAA,uBAAkC,GAAA,CAAI;AAAA,EAC1C,oBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAMM,IAAM,OAAA,GACX;AAMF,SAAS,SAAA,CAAU,KAAa,KAAA,EAAwB;AACtD,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,KAAK,GAAG,OAAO,KAAA;AACjC,EAAA,OAAO,GAAA,KAAQ,oBAAA,IAAwB,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA;AACnE;AAMO,SAAS,aAAa,IAAA,EAAuB;AAClD,EAAA,OAAO,SAAA,CAAU,sBAAsB,IAAI,CAAA;AAC7C;AAQA,SAAS,QAAQ,MAAA,EAAyC;AACxD,EAAA,MAAM,QAAA,GAAA,CAAY,UAAU,IAAA,EAAM,KAAA,CAAM,MAAM,CAAA,CAAE,CAAC,GAAG,WAAA,EAAY;AAChE,EAAA,IAAI,QAAA,KAAa,IAAA,EAAM,OAAO,IAAA,CAAK,EAAA;AACnC,EAAA,IAAI,QAAA,KAAa,IAAA,EAAM,OAAO,IAAA,CAAK,EAAA;AACnC,EAAA,IAAI,QAAA,KAAa,IAAA,EAAM,OAAO,IAAA,CAAK,OAAO,CAAA;AAC1C,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,YAAY,MAAA,EAAkC;AAC5D,EAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,IAAK,IAAA,CAAK,EAAA;AACjC;AAGO,SAAS,eAAA,CACd,MAAA,EACA,SAAA,GAA2B,EAAC,EACjB;AACX,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAM,CAAA;AAC1B,EAAA,MAAM,MAAA,GAAiC,EAAE,GAAI,GAAA,IAAO,KAAK,EAAA,EAAI;AAC7D,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AACpD,IAAA,IAAI,UAAU,MAAA,EAAW;AACzB,IAAA,IAAI,KAAA,CAAM,IAAI,GAAc,CAAA,IAAK,EAAE,GAAA,KAAQ,IAAA,IAAQ,SAAA,CAAU,GAAA,EAAK,KAAK,CAAA,CAAA;AACrE,MAAA;AACF,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAEd,IAAA,IAAI,EAAE,GAAG,GAAG,CAAA,GAAA,CAAA,IAAS,YAAY,OAAO,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA,GAAA,CAAK,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,CAAC,GAAA,EAAK,IAAA,KAAA,CAAA,CAER,IAAA,EAAM,KAAA,KAAU,IAAI,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA,GAAA,CAAK,IAAI,MAAA,KAC3C,MAAA,CAAO,GAAG,CAAA,IACV,EAAA,CAAG,GAAG,CAAA,EACN,OAAA;AAAA,IAAQ,YAAA;AAAA,IAAc,CAAC,GAAA,EAAK,IAAA,KAC5B,IAAA,IAAQ,IAAA,IAAQ,OAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,GAAI;AAAA,GAC9C;AACJ;AAMO,IAAM,YAAA,GAAkC;AAAA,EAC7C,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF;AAGO,SAAS,cAAc,SAAA,EAAqC;AACjE,EAAA,OAAQ,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,CAC7B,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAA,KAAM,MAAA,IAAa,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA,CACxE,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA,KAAM,CAAC,CAAA;AACnB;;;ACnZA,IAAM,aAAA,uBAAoB,GAAA,CAAI;AAAA,EAC5B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAC,CAAA;AACD,IAAM,WAAA,uBAAkB,GAAA,CAAI;AAAA,EAC1B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC,CAAA;AAGM,SAAS,cAAc,MAAA,EAA2C;AACvE,EAAA,MAAM,SAAS,MAAA,IAAU,EAAA,EAAI,WAAA,EAAY,CAAE,MAAM,MAAM,CAAA;AACvD,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,CAAA,IAAK,WAAA,CAAY,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AACpE,EAAA,OAAO,cAAc,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,IAAK,EAAE,IAAI,KAAA,GAAQ,KAAA;AACrD;AAGO,SAAS,WAAA,CACd,WAAA,EACA,QAAA,EACA,MAAA,EACQ;AACR,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAAA,MAC3C,KAAA,EAAO,UAAA;AAAA,MACP;AAAA,KACD,CAAA;AACD,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,eAAA,EAAgB,CAAE,qBAAA,IAAyB,CAAA;AACjE,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,WAAA,GAAc,EAAA,IAAM,MAAM,CAAA;AAAA,EACjD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAA,CAAK,cAAc,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,EACtD;AACF;AAGO,SAAS,eAAA,CACd,KAAA,EACA,GAAA,EACA,MAAA,EACA,QAAA,EACQ;AACR,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,EAAA,IAAI,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,GAAG,OAAO,KAAA;AACzC,EAAA,MAAM,OAAA,GAAsC;AAAA,IAC1C,OAAA,EAAS,OAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC,GACjC;AACA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,OAAO,CAAA;AACtD,IAAA,MAAM,EAAA,GAAK,GAAA,GAAM,IAAI,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA;AACjC,IAAA,IAAI,CAAC,EAAA,IAAM,MAAA,CAAO,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAA,EAAG,OAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAChE,IAAA,OAAO,OAAO,MAAA,CAAO,WAAA,KAAgB,aACjC,MAAA,CAAO,WAAA,CAAY,MAAM,EAAE,CAAA,GAC3B,CAAA,EAAG,MAAA,CAAO,OAAO,IAAI,CAAC,WAAM,MAAA,CAAO,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA;AAAA,EACnD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAK,WAAA,EAAY;AAAA,EAC1B;AACF;AAGA,SAAS,KAAA,CAAM,IAAU,QAAA,EAAsC;AAC7D,EAAA,MAAM,CAAC,GAAG,CAAA,EAAG,CAAC,IAAI,IAAI,IAAA,CAAK,eAAe,OAAA,EAAS;AAAA,IACjD,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC,GAChC,EACE,MAAA,CAAO,EAAE,EACT,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,MAAM,CAAA;AACb,EAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAc,CAAA,GAAe,CAAA,EAAG,CAAW,CAAA,GAAI,KAAA;AACjE;AAOO,SAAS,aAAA,CACd,OACA,KAAA,EACA,MAAA,EACA,UACA,GAAA,GAAc,IAAA,CAAK,KAAI,EACf;AACR,EAAA,MAAM,EAAA,GAAK,IAAI,IAAA,CAAK,KAAK,CAAA;AACzB,EAAA,IAAI,OAAO,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,GAAG,OAAO,KAAA;AACvC,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,EAAA,EAAI,QAAQ,CAAA,GAAI,MAAM,IAAI,IAAA,CAAK,GAAG,CAAA,EAAG,QAAQ,CAAA;AAChE,IAAA,MAAM,IAAA,GAAO,SAAS,CAAA,GAAI,KAAA,CAAM,QAAQ,IAAA,KAAS,CAAA,GAAI,MAAM,QAAA,GAAW,EAAA;AACtE,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,gBAAgB,KAAA,EAAO,KAAA,CAAA,EAAW,QAAQ,QAAQ,CAAA;AACpE,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ;AAAA,MAC3C,IAAA,EAAM,SAAA;AAAA,MACN,MAAA,EAAQ,SAAA;AAAA,MACR,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC,KAChC,CAAA,CAAE,MAAA,CAAO,EAAE,CAAA;AACZ,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,IAAI,CAAA;AAAA,EACpC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,MAAA,EAAW,MAAA,EAAQ,QAAQ,CAAA;AAAA,EAC3D;AACF;AAGO,SAAS,UAAA,CAAW,MAAc,MAAA,EAAyB;AAChE,EAAA,MAAM,CAAA,GAAI,2BAAA,CAA4B,IAAA,CAAK,IAAI,CAAA;AAC/C,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ;AAAA,MACrC,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,MAAA;AAAA,MACP,GAAA,EAAK,SAAA;AAAA,MACL,QAAA,EAAU;AAAA,KACX,CAAA,CAAE,MAAA,CAAO,IAAI,IAAA,CAAK,KAAK,GAAA,CAAI,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,OAAO,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,CAAA,EAAG,MAAA,CAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,EAC5E,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAGO,SAAS,cAAA,CACd,EAAA,EACA,MAAA,EACA,QAAA,EACQ;AACR,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,EAAE,CAAA;AACxB,EAAA,IAAI,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,GAAG,OAAO,EAAA;AACzC,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ;AAAA,MACrC,SAAA,EAAW,QAAA;AAAA,MACX,SAAA,EAAW,OAAA;AAAA,MACX,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC,KAChC,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,EAChB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAK,WAAA,EAAY;AAAA,EAC1B;AACF","file":"index.js","sourcesContent":["// The words a Vinaverse UI says, in English, Spanish and Brazilian Portuguese, each overridable by the tenant except\n// the fallback disclosure. People first: \"agent\", never \"assistant\"; a person from the business is a person, by role.\n// `{name}` placeholders are filled from `vars`. A key with a `One` form (`historyMessagesOne`) says it for a `count` of 1.\n\nconst en = {\n disclosureFallback: \"You're chatting with an AI agent. Powered by Vinaverse.\",\n agentLabel: 'AI agent',\n agentFallbackName: 'the agent',\n askingAbout: 'Asking about',\n you: 'You',\n staffLabel: '{by} · person',\n staffFallbackRole: 'the team',\n composerPlaceholder: 'Message {agent}',\n composerPlaceholderTakeover: 'Message {by}',\n send: 'Send',\n stop: 'Stop',\n typeAnswerBelow: 'Type your answer below.',\n bannerConnecting: 'Connecting…',\n bannerReconnecting: 'Reconnecting…',\n bannerOffline: \"You're offline. Messages send when you're back.\",\n bannerContinuedElsewhere: 'This conversation continued on another device.',\n bannerUnavailable: \"Couldn't connect.\",\n continueHere: 'Continue here',\n tryAgain: 'Try again',\n talkToPerson: 'Talk to a person',\n messageSending: 'Sending',\n messageHeld: 'Sends when you continue',\n messageNotSent: 'Not sent',\n messageDelivered: 'Delivered',\n messageCutOff: 'This reply was cut off.',\n takeoverStarted: 'A person from {by} is replying now.',\n takeoverEnded: '{agent} is back.',\n handoffCreated: \"We've passed this to the team. They'll reply {expected}.\",\n handoffCreatedNoTime: \"We've passed this to the team. They'll reply soon.\",\n flowSent: 'Your answers were sent.',\n flowNotSent: \"Your answers couldn't be sent yet.\",\n turnFailed: 'Something went wrong.',\n working: '{agent} is working on it…',\n proposalConfirm: 'Confirm',\n proposalDecline: 'Decline',\n proposalChange: 'Change',\n proposalConfirmed: 'Confirmed',\n proposalDeclined: 'Declined',\n proposalFailed: \"Couldn't be confirmed\",\n proposalExpired: 'Expired',\n proposalSettled: 'No longer open',\n questionSubmit: 'Send',\n questionSkip: 'Skip',\n questionOther: 'Other',\n questionSearch: 'Search',\n questionAnswered: 'Answered',\n questionReplaced: 'Replaced by a newer question',\n questionStep: 'Question {step} of {total}',\n questionAddPhoto: 'Add a photo',\n questionCharactersLeft: '{count} characters left',\n questionCharactersLeftOne: '{count} character left',\n priceFrom: 'From {price}',\n /** A listing with no rating yet; empty draws nothing, a tenant's word (\"New\") draws in the rating's place. */\n ratingNone: '',\n nextAvailable: 'Next: {time}',\n /** A time today and tomorrow, as `nextAvailable` says it (`{time}`: \"10:00 AM\"). */\n today: 'today, {time}',\n tomorrow: 'tomorrow, {time}',\n agentEnded: 'This conversation ended',\n agentEndedBody: 'Start a new one whenever you like.',\n agentStartOver: 'Start a new conversation',\n agentUnreachable: \"Couldn't reach {agent}\",\n agentUnreachableBody: 'Check your connection and try again.',\n agentOff: \"{agent} isn't available right now\",\n agentOffBody: 'Please try again later.',\n helpful: 'Was this helpful?',\n helpfulYes: 'Yes',\n helpfulNo: 'No',\n helpfulThanks: 'Thanks for telling us.',\n launcherOpen: 'Open {agent}',\n launcherGreeting: \"Hi, I'm {agent}. Ask me what you need.\",\n close: 'Close',\n welcomeFallback: \"Hi, I'm {agent}. How can I help?\",\n privacy: 'Privacy',\n cardsInRow: '{count} results, swipe for more',\n cardsInRowOne: '{count} result',\n open: 'Open',\n /** History: the person's past conversations, and reading one back. */\n historyEmpty: 'No conversations yet',\n historyEmptyBody: 'Your conversations with {agent} will show here.',\n historyFailed: \"Couldn't load your conversations.\",\n historyOff: 'History is not available.',\n historyMessages: '{count} messages',\n historyMessagesOne: '{count} message',\n historyEnded: 'Ended',\n historyContinue: 'Continue',\n historyDelete: 'Delete',\n historyDeleteTitle: 'Delete this conversation?',\n historyDeleteBody: \"It's removed from your history everywhere.\",\n historyDeleteFailed: \"Couldn't delete this conversation.\",\n cancel: 'Cancel',\n transcriptFailed: \"Couldn't load this conversation.\",\n transcriptGone: 'This conversation is no longer available.',\n transcriptEarlier: 'Earlier messages',\n /** Under the person's message a guardrail refused. */\n messageRefused: 'Not answered',\n loading: 'Loading…',\n} as const;\n\nexport type CopyKey = keyof typeof en;\nexport type Copy = Readonly<Record<CopyKey, string>>;\n/** A tenant's words, by key; a key left out (or undefined) keeps the built-in one. */\nexport type CopyOverrides = { readonly [K in CopyKey]?: string | undefined };\n\nconst es: Copy = {\n disclosureFallback:\n 'Estás hablando con un agente de IA. Con la tecnología de Vinaverse.',\n agentLabel: 'Agente de IA',\n agentFallbackName: 'el agente',\n askingAbout: 'Preguntas sobre',\n you: 'Tú',\n staffLabel: '{by} · persona',\n staffFallbackRole: 'el equipo',\n composerPlaceholder: 'Escribe a {agent}',\n composerPlaceholderTakeover: 'Escribe a {by}',\n send: 'Enviar',\n stop: 'Detener',\n typeAnswerBelow: 'Escribe tu respuesta abajo.',\n bannerConnecting: 'Conectando…',\n bannerReconnecting: 'Reconectando…',\n bannerOffline: 'Sin conexión. Los mensajes se envían cuando vuelvas.',\n bannerContinuedElsewhere: 'Esta conversación continuó en otro dispositivo.',\n bannerUnavailable: 'No se pudo conectar.',\n continueHere: 'Continuar aquí',\n tryAgain: 'Intentar de nuevo',\n talkToPerson: 'Hablar con una persona',\n messageSending: 'Enviando',\n messageHeld: 'Se envía cuando continúes',\n messageNotSent: 'No enviado',\n messageDelivered: 'Entregado',\n messageCutOff: 'Esta respuesta quedó incompleta.',\n takeoverStarted: 'Una persona de {by} está respondiendo.',\n takeoverEnded: '{agent} volvió.',\n handoffCreated: 'Le pasamos esto al equipo. Responderán {expected}.',\n handoffCreatedNoTime: 'Le pasamos esto al equipo. Responderán pronto.',\n flowSent: 'Tus respuestas se enviaron.',\n flowNotSent: 'Tus respuestas aún no se pudieron enviar.',\n turnFailed: 'Algo salió mal.',\n working: '{agent} está en ello…',\n proposalConfirm: 'Confirmar',\n proposalDecline: 'Rechazar',\n proposalChange: 'Cambiar',\n proposalConfirmed: 'Confirmado',\n proposalDeclined: 'Rechazado',\n proposalFailed: 'No se pudo confirmar',\n proposalExpired: 'Vencido',\n proposalSettled: 'Ya no está abierto',\n questionSubmit: 'Enviar',\n questionSkip: 'Omitir',\n questionOther: 'Otro',\n questionSearch: 'Buscar',\n questionAnswered: 'Respondida',\n questionReplaced: 'Reemplazada por una pregunta más reciente',\n questionStep: 'Pregunta {step} de {total}',\n questionAddPhoto: 'Agregar una foto',\n questionCharactersLeft: 'Quedan {count} caracteres',\n questionCharactersLeftOne: 'Queda {count} carácter',\n priceFrom: 'Desde {price}',\n ratingNone: '',\n nextAvailable: 'Próximo: {time}',\n today: 'hoy, {time}',\n tomorrow: 'mañana, {time}',\n agentEnded: 'Esta conversación terminó',\n agentEndedBody: 'Empieza una nueva cuando quieras.',\n agentStartOver: 'Empezar una conversación nueva',\n agentUnreachable: 'No se pudo contactar a {agent}',\n agentUnreachableBody: 'Revisa tu conexión e inténtalo de nuevo.',\n agentOff: '{agent} no está disponible ahora',\n agentOffBody: 'Inténtalo de nuevo más tarde.',\n helpful: '¿Te sirvió?',\n helpfulYes: 'Sí',\n helpfulNo: 'No',\n helpfulThanks: 'Gracias por contarnos.',\n launcherOpen: 'Abrir {agent}',\n launcherGreeting: 'Hola, soy {agent}. Pregúntame lo que necesites.',\n close: 'Cerrar',\n welcomeFallback: 'Hola, soy {agent}. ¿En qué te ayudo?',\n privacy: 'Privacidad',\n cardsInRow: '{count} resultados, desliza para ver más',\n cardsInRowOne: '{count} resultado',\n open: 'Abrir',\n historyEmpty: 'Aún no hay conversaciones',\n historyEmptyBody: 'Tus conversaciones con {agent} aparecerán aquí.',\n historyFailed: 'No se pudieron cargar tus conversaciones.',\n historyOff: 'El historial no está disponible.',\n historyMessages: '{count} mensajes',\n historyMessagesOne: '{count} mensaje',\n historyEnded: 'Terminada',\n historyContinue: 'Continuar',\n historyDelete: 'Eliminar',\n historyDeleteTitle: '¿Eliminar esta conversación?',\n historyDeleteBody: 'Se elimina de tu historial en todas partes.',\n historyDeleteFailed: 'No se pudo eliminar esta conversación.',\n cancel: 'Cancelar',\n transcriptFailed: 'No se pudo cargar esta conversación.',\n transcriptGone: 'Esta conversación ya no está disponible.',\n transcriptEarlier: 'Mensajes anteriores',\n messageRefused: 'Sin respuesta',\n loading: 'Cargando…',\n};\n\nconst ptBR: Copy = {\n disclosureFallback:\n 'Você está conversando com um agente de IA. Com tecnologia Vinaverse.',\n agentLabel: 'Agente de IA',\n agentFallbackName: 'o agente',\n askingAbout: 'Perguntando sobre',\n you: 'Você',\n staffLabel: '{by} · pessoa',\n staffFallbackRole: 'a equipe',\n composerPlaceholder: 'Mensagem para {agent}',\n composerPlaceholderTakeover: 'Mensagem para {by}',\n send: 'Enviar',\n stop: 'Parar',\n typeAnswerBelow: 'Digite sua resposta abaixo.',\n bannerConnecting: 'Conectando…',\n bannerReconnecting: 'Reconectando…',\n bannerOffline: 'Sem conexão. As mensagens são enviadas quando você voltar.',\n bannerContinuedElsewhere: 'Esta conversa continuou em outro aparelho.',\n bannerUnavailable: 'Não foi possível conectar.',\n continueHere: 'Continuar aqui',\n tryAgain: 'Tentar de novo',\n talkToPerson: 'Falar com uma pessoa',\n messageSending: 'Enviando',\n messageHeld: 'Será enviada quando você continuar',\n messageNotSent: 'Não enviada',\n messageDelivered: 'Entregue',\n messageCutOff: 'Esta resposta foi interrompida.',\n takeoverStarted: 'Uma pessoa de {by} está respondendo agora.',\n takeoverEnded: '{agent} voltou.',\n handoffCreated: 'Passamos isso para a equipe. Eles vão responder {expected}.',\n handoffCreatedNoTime:\n 'Passamos isso para a equipe. Eles vão responder em breve.',\n flowSent: 'Suas respostas foram enviadas.',\n flowNotSent: 'Ainda não foi possível enviar suas respostas.',\n turnFailed: 'Algo deu errado.',\n working: '{agent} está cuidando disso…',\n proposalConfirm: 'Confirmar',\n proposalDecline: 'Recusar',\n proposalChange: 'Alterar',\n proposalConfirmed: 'Confirmado',\n proposalDeclined: 'Recusado',\n proposalFailed: 'Não foi possível confirmar',\n proposalExpired: 'Expirado',\n proposalSettled: 'Não está mais aberto',\n questionSubmit: 'Enviar',\n questionSkip: 'Pular',\n questionOther: 'Outro',\n questionSearch: 'Buscar',\n questionAnswered: 'Respondida',\n questionReplaced: 'Substituída por uma pergunta mais recente',\n questionStep: 'Pergunta {step} de {total}',\n questionAddPhoto: 'Adicionar uma foto',\n questionCharactersLeft: 'Restam {count} caracteres',\n questionCharactersLeftOne: 'Resta {count} caractere',\n priceFrom: 'A partir de {price}',\n ratingNone: '',\n nextAvailable: 'Próximo horário: {time}',\n today: 'hoje, {time}',\n tomorrow: 'amanhã, {time}',\n agentEnded: 'Esta conversa terminou',\n agentEndedBody: 'Comece uma nova quando quiser.',\n agentStartOver: 'Começar uma conversa nova',\n agentUnreachable: 'Não foi possível falar com {agent}',\n agentUnreachableBody: 'Verifique sua conexão e tente de novo.',\n agentOff: '{agent} não está disponível agora',\n agentOffBody: 'Tente de novo mais tarde.',\n helpful: 'Isso ajudou?',\n helpfulYes: 'Sim',\n helpfulNo: 'Não',\n helpfulThanks: 'Obrigado por avisar.',\n launcherOpen: 'Abrir {agent}',\n launcherGreeting: 'Oi, sou {agent}. Pergunte o que precisar.',\n close: 'Fechar',\n welcomeFallback: 'Oi, sou {agent}. Como posso ajudar?',\n privacy: 'Privacidade',\n cardsInRow: '{count} resultados, deslize para ver mais',\n cardsInRowOne: '{count} resultado',\n open: 'Abrir',\n historyEmpty: 'Nenhuma conversa ainda',\n historyEmptyBody: 'Suas conversas com {agent} vão aparecer aqui.',\n historyFailed: 'Não foi possível carregar suas conversas.',\n historyOff: 'O histórico não está disponível.',\n historyMessages: '{count} mensagens',\n historyMessagesOne: '{count} mensagem',\n historyEnded: 'Encerrada',\n historyContinue: 'Continuar',\n historyDelete: 'Excluir',\n historyDeleteTitle: 'Excluir esta conversa?',\n historyDeleteBody: 'Ela é removida do seu histórico em todos os lugares.',\n historyDeleteFailed: 'Não foi possível excluir esta conversa.',\n cancel: 'Cancelar',\n transcriptFailed: 'Não foi possível carregar esta conversa.',\n transcriptGone: 'Esta conversa não está mais disponível.',\n transcriptEarlier: 'Mensagens anteriores',\n messageRefused: 'Sem resposta',\n loading: 'Carregando…',\n};\n\n/** The built-in languages; any other locale falls back to English, its own `copy` overrides aside. */\nexport const COPY: Readonly<Record<'en' | 'es' | 'pt-BR', Copy>> = {\n en,\n es,\n 'pt-BR': ptBR,\n};\n\n/**\n * Keys a tenant may not override in a built-in language: the AI disclosure is the platform's, never removed or reworded.\n * In a language without built-in copy the tenant supplies them, translated, so the disclosure reads in the person's\n * language, and only a translation that still discloses is taken (`discloses`): the label says AI, the disclosure says\n * AI and names Vinaverse.\n */\nconst FIXED: ReadonlySet<CopyKey> = new Set([\n 'disclosureFallback',\n 'agentLabel',\n]);\n\n/**\n * \"AI\" as languages write it: AI, IA (es, pt, fr, it, ro), KI (de, nl, da, no, sv), SI (pl), YZ (tr), ИИ (ru), ШІ\n * (uk), and the words for it in Arabic, Hebrew, Hindi, Chinese, Japanese and Korean.\n */\nexport const AI_MARK =\n /(?:^|[^\\p{L}])(?:AI|IA|KI|SI|YZ|ИИ|ШІ)(?:$|[^\\p{L}])|الذكاء الاصطناعي|بالذكاء|בינה מלאכותית|एआई|कृत्रिम बुद्धि|人工智能|人工知能|인공지능/u;\n\n/**\n * Whether a tenant's text for a fixed key still makes the AI disclosure: the label says AI; the disclosure says AI\n * and names Vinaverse. A tenant's translation that does not is ignored, and the English built-in shows instead.\n */\nfunction discloses(key: string, value: string): boolean {\n if (!AI_MARK.test(value)) return false;\n return key !== 'disclosureFallback' || value.includes('Vinaverse');\n}\n\n/**\n * Whether a text is a disclosure a kit may draw: it says AI (`AI_MARK`, in the person's language) and names Vinaverse,\n * the rule a tenant's `disclosureFallback` passes. Words an app holds from before are drawn only when it holds.\n */\nexport function isDisclosure(text: string): boolean {\n return discloses('disclosureFallback', text);\n}\n\nexport type Translate = (\n key: CopyKey,\n vars?: Readonly<Record<string, string | number>>,\n) => string;\n\n/** The built-in copy for a locale: its language (`es-US` → `es`, `pt-PT` → `pt-BR`), else null. */\nfunction builtIn(locale: string | undefined): Copy | null {\n const language = (locale ?? 'en').split(/[-_]/)[0]?.toLowerCase();\n if (language === 'en') return COPY.en;\n if (language === 'es') return COPY.es;\n if (language === 'pt') return COPY['pt-BR'];\n return null;\n}\n\n/** The built-in copy for a locale, English when the language has none. */\nexport function builtInCopy(locale: string | undefined): Copy {\n return builtIn(locale) ?? COPY.en;\n}\n\n/** A translator for a locale, with the tenant's overrides on top (fixed keys excepted). */\nexport function createTranslate(\n locale: string | undefined,\n overrides: CopyOverrides = {},\n): Translate {\n const own = builtIn(locale);\n const merged: Record<string, string> = { ...(own ?? COPY.en) };\n for (const [key, value] of Object.entries(overrides)) {\n if (value === undefined) continue;\n if (FIXED.has(key as CopyKey) && !(own === null && discloses(key, value)))\n continue;\n merged[key] = value;\n // The tenant's words for a count, without their own `One` form: theirs for every count, never ours for 1.\n if (!(`${key}One` in overrides)) delete merged[`${key}One`];\n }\n return (key, vars) =>\n (\n (vars?.count === 1 ? merged[`${key}One`] : undefined) ??\n merged[key] ??\n en[key]\n ).replace(/\\{(\\w+)\\}/g, (all, name: string) =>\n vars && name in vars ? String(vars[name]) : all,\n );\n}\n\n/**\n * Words a Vinaverse UI never says to people (a tenant override that uses them gets a development warning): the\n * runtime is an agent, never an assistant or a bot; and never \"crew\".\n */\nexport const BANNED_WORDS: readonly RegExp[] = [\n /\\bassistant/i,\n /\\basistente/i,\n /\\bassistent/i,\n /\\bbot\\b/i,\n /\\bcrew\\b/i,\n];\n\n/** The overrides that use a banned word, by key. */\nexport function bannedWordsIn(overrides: CopyOverrides): CopyKey[] {\n return (Object.entries(overrides) as [CopyKey, string | undefined][])\n .filter(([, v]) => v !== undefined && BANNED_WORDS.some((w) => w.test(v)))\n .map(([k]) => k);\n}\n","// Dates, times, money and text direction in the person's locale, through Intl (Hermes has it), with a plain fallback\n// where a runtime lacks it.\n\n/** Languages and scripts written right to left. */\nconst RTL_LANGUAGES = new Set([\n 'ar',\n 'he',\n 'iw',\n 'fa',\n 'ur',\n 'ps',\n 'yi',\n 'dv',\n 'ckb',\n 'sd',\n 'ug',\n 'syr',\n]);\nconst RTL_SCRIPTS = new Set([\n 'arab',\n 'hebr',\n 'thaa',\n 'syrc',\n 'nkoo',\n 'adlm',\n 'rohg',\n]);\n\n/** `rtl` for Arabic, Hebrew, Persian, Urdu and the other right-to-left languages and scripts; `ltr` otherwise. */\nexport function textDirection(locale: string | undefined): 'ltr' | 'rtl' {\n const parts = (locale ?? '').toLowerCase().split(/[-_]/);\n if (parts.some((p) => p.length === 4 && RTL_SCRIPTS.has(p))) return 'rtl';\n return RTL_LANGUAGES.has(parts[0] ?? '') ? 'rtl' : 'ltr';\n}\n\n/** An amount in minor units (`amount` cents) in its currency: `$85.00`. */\nexport function formatMoney(\n amountMinor: number,\n currency: string,\n locale?: string,\n): string {\n try {\n const format = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n });\n const digits = format.resolvedOptions().maximumFractionDigits ?? 2;\n return format.format(amountMinor / 10 ** digits);\n } catch {\n return `${currency} ${(amountMinor / 100).toFixed(2)}`;\n }\n}\n\n/** A start and an end: \"Wed, Oct 14, 10:00 – 11:30 AM\" in the locale and time zone. */\nexport function formatTimeRange(\n start: string,\n end: string | undefined,\n locale?: string,\n timeZone?: string,\n): string {\n const from = new Date(start);\n if (Number.isNaN(from.getTime())) return start;\n const options: Intl.DateTimeFormatOptions = {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n };\n try {\n const format = new Intl.DateTimeFormat(locale, options);\n const to = end ? new Date(end) : null;\n if (!to || Number.isNaN(to.getTime())) return format.format(from);\n return typeof format.formatRange === 'function'\n ? format.formatRange(from, to)\n : `${format.format(from)} – ${format.format(to)}`;\n } catch {\n return from.toISOString();\n }\n}\n\n/** The day a moment falls on in a time zone, as a day count, so two days compare across DST. */\nfunction dayOf(at: Date, timeZone: string | undefined): number {\n const [y, m, d] = new Intl.DateTimeFormat('en-CA', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n })\n .format(at)\n .split('-')\n .map(Number);\n return Date.UTC(y as number, (m as number) - 1, d as number) / 86_400_000;\n}\n\n/**\n * A moment as a person says it: \"today, 10:00 AM\" and \"tomorrow, 10:00 AM\" (`today` and `tomorrow` are the copy's\n * words, with `{time}`), else the date and time (\"Fri, Oct 17, 10:00 AM\"), in the locale and time zone. `now` is the\n * clock it is judged by.\n */\nexport function formatDayTime(\n start: string,\n words: { readonly today: string; readonly tomorrow: string },\n locale?: string,\n timeZone?: string,\n now: number = Date.now(),\n): string {\n const at = new Date(start);\n if (Number.isNaN(at.getTime())) return start;\n try {\n const days = dayOf(at, timeZone) - dayOf(new Date(now), timeZone);\n const word = days === 0 ? words.today : days === 1 ? words.tomorrow : '';\n if (!word) return formatTimeRange(start, undefined, locale, timeZone);\n const time = new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n minute: '2-digit',\n ...(timeZone ? { timeZone } : {}),\n }).format(at);\n return word.replace('{time}', time);\n } catch {\n return formatTimeRange(start, undefined, locale, timeZone);\n }\n}\n\n/** A calendar date (`YYYY-MM-DD`) in the locale: \"October 14, 2026\". */\nexport function formatDate(date: string, locale?: string): string {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(date);\n if (!m) return date;\n try {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n timeZone: 'UTC',\n }).format(new Date(Date.UTC(Number(m[1]), Number(m[2]) - 1, Number(m[3]))));\n } catch {\n return date;\n }\n}\n\n/** A moment with its date and time in the locale and zone: \"Oct 15, 2026, 9:30 AM\"; the text as given when it is not one. */\nexport function formatDateTime(\n at: string,\n locale?: string,\n timeZone?: string,\n): string {\n const date = new Date(at);\n if (Number.isNaN(date.getTime())) return at;\n try {\n return new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n timeStyle: 'short',\n ...(timeZone ? { timeZone } : {}),\n }).format(date);\n } catch {\n return date.toISOString();\n }\n}\n"]}
package/dist/index.cjs CHANGED
@@ -29,6 +29,10 @@ var tokens_default = {
29
29
  $type: "color",
30
30
  $value: "#545B67"
31
31
  },
32
+ textSecondary: {
33
+ $type: "color",
34
+ $value: "#454B55"
35
+ },
32
36
  primary: {
33
37
  $type: "color",
34
38
  $value: "#2B57CF"
@@ -115,6 +119,10 @@ var tokens_default = {
115
119
  $type: "color",
116
120
  $value: "#A6ADBA"
117
121
  },
122
+ textSecondary: {
123
+ $type: "color",
124
+ $value: "#BEC4CF"
125
+ },
118
126
  primary: {
119
127
  $type: "color",
120
128
  $value: "#8DB0FF"
@@ -316,6 +324,21 @@ var tokens_default = {
316
324
  bg: "color.surface",
317
325
  min: 4.5
318
326
  },
327
+ {
328
+ fg: "color.textSecondary",
329
+ bg: "color.background",
330
+ min: 4.5
331
+ },
332
+ {
333
+ fg: "color.textSecondary",
334
+ bg: "color.surface",
335
+ min: 4.5
336
+ },
337
+ {
338
+ fg: "color.textSecondary",
339
+ bg: "color.agentBubble",
340
+ min: 4.5
341
+ },
319
342
  {
320
343
  fg: "color.agentText",
321
344
  bg: "color.agentBubble",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tokens.json","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["{\n \"$description\": \"The Vinaverse design tokens, shared by every UI kit (React Native, Angular) so they look alike out of the box. Shape: W3C design-tokens style ($type, $value). Colors per mode with identical paths; sizes are numbers in a 16-based reference unit (16 = 1rem on the web, dp in React Native). The paths are public API: a CSS custom property is the path without the mode, kebab-cased (color.light.agentBubble -> --vv-color-agent-bubble), and a test freezes the list. With reduced motion asked for, every motion duration is 0: no fades, no animated scrolling.\",\n \"color\": {\n \"light\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#F5F6F8\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#858C98\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#E3E6EA\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#545B67\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#FFF3DC\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A2800\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A414D\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#B42318\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#1C6E3F\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n }\n },\n \"dark\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#181B21\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#6B7383\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#262A31\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#A6ADBA\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#1E2229\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#3A63D8\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B2416\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#F5E3C0\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#1A1D23\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#C3C8D2\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#FF8F85\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#72D49E\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n }\n }\n },\n \"font\": {\n \"size\": {\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 22\n }\n },\n \"weight\": {\n \"regular\": {\n \"$type\": \"fontWeight\",\n \"$value\": 400\n },\n \"medium\": {\n \"$type\": \"fontWeight\",\n \"$value\": 500\n },\n \"semibold\": {\n \"$type\": \"fontWeight\",\n \"$value\": 600\n }\n },\n \"lineHeight\": {\n \"$type\": \"number\",\n \"$value\": 1.4\n }\n },\n \"space\": {\n \"xxs\": {\n \"$type\": \"dimension\",\n \"$value\": 2\n },\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 4\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 8\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 24\n }\n },\n \"radius\": {\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 6\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"pill\": {\n \"$type\": \"dimension\",\n \"$value\": 999\n }\n },\n \"motion\": {\n \"fast\": {\n \"$type\": \"duration\",\n \"$value\": 120\n },\n \"normal\": {\n \"$type\": \"duration\",\n \"$value\": 200\n },\n \"bannerDelay\": {\n \"$type\": \"duration\",\n \"$value\": 600,\n \"$description\": \"how long a connecting banner waits before it shows, so a quick connection never flashes one\"\n }\n },\n \"size\": {\n \"touchTarget\": {\n \"$type\": \"dimension\",\n \"$value\": 44\n },\n \"avatar\": {\n \"$type\": \"dimension\",\n \"$value\": 32\n },\n \"disclosureFontMin\": {\n \"$type\": \"dimension\",\n \"$value\": 12,\n \"$description\": \"the AI disclosure is never drawn smaller\"\n }\n },\n \"contrast\": {\n \"$description\": \"The text and control pairs a theme must keep legible, in every mode: WCAG 2 ratio of fg on bg at least min (4.5 for text, 3 for controls and borders). divider is decorative and has none.\",\n \"pairs\": [\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.agentText\",\n \"bg\": \"color.agentBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.personText\",\n \"bg\": \"color.personBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffText\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffAccent\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.disclosureText\",\n \"bg\": \"color.disclosureBackground\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.onPrimary\",\n \"bg\": \"color.primary\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.primary\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.danger\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.warning\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.success\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.border\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.focus\",\n \"bg\": \"color.background\",\n \"min\": 3\n }\n ]\n }\n}\n","// @vinaverse/tokens: the design tokens every Vinaverse UI kit starts from, as one JSON (`@vinaverse/tokens/tokens.json`,\n// for build tools that emit CSS custom properties) and as typed values. No framework, no platform.\nimport json from './tokens.json';\n\nexport type ColorScheme = 'light' | 'dark';\nexport type ColorName = keyof (typeof json)['color']['light'];\nexport type Colors = Readonly<Record<ColorName, string>>;\n\ntype Leaf<T> = { readonly $value: T };\nconst values = <K extends string, T>(group: Record<K, Leaf<T>>) =>\n Object.fromEntries(\n Object.entries(group).map(([k, v]) => [k, (v as Leaf<T>).$value]),\n ) as Readonly<Record<K, T>>;\n\n/** The default colors of a scheme, by name. */\nexport function colors(scheme: ColorScheme): Colors {\n return values(json.color[scheme]) as Colors;\n}\n\n/** Type sizes, weights and line height; spacing, radii, motion durations (ms) and sizes, in density-independent px. */\nexport const font = {\n size: values(json.font.size),\n weight: values(json.font.weight),\n lineHeight: json.font.lineHeight.$value,\n} as const;\nexport const space = values(json.space);\nexport const radius = values(json.radius);\nexport const motion = values(json.motion);\nexport const size = values(json.size);\n\n/** The text and control pairs a theme must keep legible: [foreground, background, minimum WCAG contrast], from the JSON. */\nexport const CONTRAST_PAIRS: readonly (readonly [\n ColorName,\n ColorName,\n number,\n])[] = json.contrast.pairs.map(\n (p) =>\n [\n p.fg.replace('color.', '') as ColorName,\n p.bg.replace('color.', '') as ColorName,\n p.min,\n ] as const,\n);\n\n/**\n * Every token's path, modes included (`color.light.agentBubble`, `font.size.md`): the public names, frozen by a test.\n */\nexport function tokenPaths(): string[] {\n const out: string[] = [];\n const walk = (node: unknown, path: string[]) => {\n if (typeof node !== 'object' || node === null) return;\n if ('$value' in node) {\n out.push(path.join('.'));\n return;\n }\n for (const [key, child] of Object.entries(node))\n if (!key.startsWith('$') && key !== 'contrast')\n walk(child, [...path, key]);\n };\n walk(json, []);\n return out;\n}\n\n/** A token's CSS custom property: the path without its mode, kebab-cased (`--vv-color-agent-bubble`). */\nexport function cssVariable(path: string): string {\n const parts = path\n .split('.')\n .filter((_, i, all) => !(all[0] === 'color' && i === 1));\n return `--vv-${parts\n .map((p) => p.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`))\n .join('-')}`;\n}\n\n/** The WCAG 2 contrast ratio of two `#RRGGBB` colors (1 to 21); NaN when either is not one. */\nexport function contrastRatio(a: string, b: string): number {\n const la = luminance(a);\n const lb = luminance(b);\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/** The pairs of a set of colors below their minimum: a tenant theme to warn about. */\nexport function contrastProblems(palette: Colors): {\n foreground: ColorName;\n background: ColorName;\n ratio: number;\n minimum: number;\n}[] {\n return CONTRAST_PAIRS.flatMap(([foreground, background, minimum]) => {\n const ratio = contrastRatio(palette[foreground], palette[background]);\n return ratio >= minimum ? [] : [{ foreground, background, ratio, minimum }];\n });\n}\n\nfunction luminance(hex: string): number {\n const m = /^#([0-9a-f]{6})$/i.exec(hex);\n if (!m) return Number.NaN;\n const n = Number.parseInt(m[1] as string, 16);\n const [r, g, b] = [(n >> 16) & 255, (n >> 8) & 255, n & 255].map((c) => {\n const s = c / 255;\n return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n }) as [number, number, number];\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n"]}
1
+ {"version":3,"sources":["../src/tokens.json","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["{\n \"$description\": \"The Vinaverse design tokens, shared by every UI kit (React Native, Angular) so they look alike out of the box. Shape: W3C design-tokens style ($type, $value). Colors per mode with identical paths; sizes are numbers in a 16-based reference unit (16 = 1rem on the web, dp in React Native). The paths are public API: a CSS custom property is the path without the mode, kebab-cased (color.light.agentBubble -> --vv-color-agent-bubble), and a test freezes the list. With reduced motion asked for, every motion duration is 0: no fades, no animated scrolling.\",\n \"color\": {\n \"light\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#F5F6F8\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#858C98\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#E3E6EA\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#545B67\"\n },\n \"textSecondary\": {\n \"$type\": \"color\",\n \"$value\": \"#454B55\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#FFF3DC\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A2800\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A414D\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#B42318\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#1C6E3F\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n }\n },\n \"dark\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#181B21\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#6B7383\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#262A31\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#A6ADBA\"\n },\n \"textSecondary\": {\n \"$type\": \"color\",\n \"$value\": \"#BEC4CF\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#1E2229\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#3A63D8\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B2416\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#F5E3C0\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#1A1D23\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#C3C8D2\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#FF8F85\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#72D49E\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n }\n }\n },\n \"font\": {\n \"size\": {\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 22\n }\n },\n \"weight\": {\n \"regular\": {\n \"$type\": \"fontWeight\",\n \"$value\": 400\n },\n \"medium\": {\n \"$type\": \"fontWeight\",\n \"$value\": 500\n },\n \"semibold\": {\n \"$type\": \"fontWeight\",\n \"$value\": 600\n }\n },\n \"lineHeight\": {\n \"$type\": \"number\",\n \"$value\": 1.4\n }\n },\n \"space\": {\n \"xxs\": {\n \"$type\": \"dimension\",\n \"$value\": 2\n },\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 4\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 8\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 24\n }\n },\n \"radius\": {\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 6\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"pill\": {\n \"$type\": \"dimension\",\n \"$value\": 999\n }\n },\n \"motion\": {\n \"fast\": {\n \"$type\": \"duration\",\n \"$value\": 120\n },\n \"normal\": {\n \"$type\": \"duration\",\n \"$value\": 200\n },\n \"bannerDelay\": {\n \"$type\": \"duration\",\n \"$value\": 600,\n \"$description\": \"how long a connecting banner waits before it shows, so a quick connection never flashes one\"\n }\n },\n \"size\": {\n \"touchTarget\": {\n \"$type\": \"dimension\",\n \"$value\": 44\n },\n \"avatar\": {\n \"$type\": \"dimension\",\n \"$value\": 32\n },\n \"disclosureFontMin\": {\n \"$type\": \"dimension\",\n \"$value\": 12,\n \"$description\": \"the AI disclosure is never drawn smaller\"\n }\n },\n \"contrast\": {\n \"$description\": \"The text and control pairs a theme must keep legible, in every mode: WCAG 2 ratio of fg on bg at least min (4.5 for text, 3 for controls and borders). divider is decorative and has none.\",\n \"pairs\": [\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textSecondary\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textSecondary\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textSecondary\",\n \"bg\": \"color.agentBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.agentText\",\n \"bg\": \"color.agentBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.personText\",\n \"bg\": \"color.personBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffText\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffAccent\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.disclosureText\",\n \"bg\": \"color.disclosureBackground\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.onPrimary\",\n \"bg\": \"color.primary\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.primary\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.danger\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.warning\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.success\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.border\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.focus\",\n \"bg\": \"color.background\",\n \"min\": 3\n }\n ]\n }\n}\n","// @vinaverse/tokens: the design tokens every Vinaverse UI kit starts from, as one JSON (`@vinaverse/tokens/tokens.json`,\n// for build tools that emit CSS custom properties) and as typed values. No framework, no platform.\nimport json from './tokens.json';\n\nexport type ColorScheme = 'light' | 'dark';\nexport type ColorName = keyof (typeof json)['color']['light'];\nexport type Colors = Readonly<Record<ColorName, string>>;\n\ntype Leaf<T> = { readonly $value: T };\nconst values = <K extends string, T>(group: Record<K, Leaf<T>>) =>\n Object.fromEntries(\n Object.entries(group).map(([k, v]) => [k, (v as Leaf<T>).$value]),\n ) as Readonly<Record<K, T>>;\n\n/** The default colors of a scheme, by name. */\nexport function colors(scheme: ColorScheme): Colors {\n return values(json.color[scheme]) as Colors;\n}\n\n/** Type sizes, weights and line height; spacing, radii, motion durations (ms) and sizes, in density-independent px. */\nexport const font = {\n size: values(json.font.size),\n weight: values(json.font.weight),\n lineHeight: json.font.lineHeight.$value,\n} as const;\nexport const space = values(json.space);\nexport const radius = values(json.radius);\nexport const motion = values(json.motion);\nexport const size = values(json.size);\n\n/** The text and control pairs a theme must keep legible: [foreground, background, minimum WCAG contrast], from the JSON. */\nexport const CONTRAST_PAIRS: readonly (readonly [\n ColorName,\n ColorName,\n number,\n])[] = json.contrast.pairs.map(\n (p) =>\n [\n p.fg.replace('color.', '') as ColorName,\n p.bg.replace('color.', '') as ColorName,\n p.min,\n ] as const,\n);\n\n/**\n * Every token's path, modes included (`color.light.agentBubble`, `font.size.md`): the public names, frozen by a test.\n */\nexport function tokenPaths(): string[] {\n const out: string[] = [];\n const walk = (node: unknown, path: string[]) => {\n if (typeof node !== 'object' || node === null) return;\n if ('$value' in node) {\n out.push(path.join('.'));\n return;\n }\n for (const [key, child] of Object.entries(node))\n if (!key.startsWith('$') && key !== 'contrast')\n walk(child, [...path, key]);\n };\n walk(json, []);\n return out;\n}\n\n/** A token's CSS custom property: the path without its mode, kebab-cased (`--vv-color-agent-bubble`). */\nexport function cssVariable(path: string): string {\n const parts = path\n .split('.')\n .filter((_, i, all) => !(all[0] === 'color' && i === 1));\n return `--vv-${parts\n .map((p) => p.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`))\n .join('-')}`;\n}\n\n/** The WCAG 2 contrast ratio of two `#RRGGBB` colors (1 to 21); NaN when either is not one. */\nexport function contrastRatio(a: string, b: string): number {\n const la = luminance(a);\n const lb = luminance(b);\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/** The pairs of a set of colors below their minimum: a tenant theme to warn about. */\nexport function contrastProblems(palette: Colors): {\n foreground: ColorName;\n background: ColorName;\n ratio: number;\n minimum: number;\n}[] {\n return CONTRAST_PAIRS.flatMap(([foreground, background, minimum]) => {\n const ratio = contrastRatio(palette[foreground], palette[background]);\n return ratio >= minimum ? [] : [{ foreground, background, ratio, minimum }];\n });\n}\n\nfunction luminance(hex: string): number {\n const m = /^#([0-9a-f]{6})$/i.exec(hex);\n if (!m) return Number.NaN;\n const n = Number.parseInt(m[1] as string, 16);\n const [r, g, b] = [(n >> 16) & 255, (n >> 8) & 255, n & 255].map((c) => {\n const s = c / 255;\n return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n }) as [number, number, number];\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -25,6 +25,10 @@ var color = {
25
25
  $type: "color",
26
26
  $value: "#545B67"
27
27
  },
28
+ textSecondary: {
29
+ $type: "color",
30
+ $value: "#454B55"
31
+ },
28
32
  primary: {
29
33
  $type: "color",
30
34
  $value: "#2B57CF"
@@ -111,6 +115,10 @@ var color = {
111
115
  $type: "color",
112
116
  $value: "#A6ADBA"
113
117
  },
118
+ textSecondary: {
119
+ $type: "color",
120
+ $value: "#BEC4CF"
121
+ },
114
122
  primary: {
115
123
  $type: "color",
116
124
  $value: "#8DB0FF"
@@ -312,6 +320,21 @@ var contrast = {
312
320
  bg: "color.surface",
313
321
  min: 4.5
314
322
  },
323
+ {
324
+ fg: "color.textSecondary",
325
+ bg: "color.background",
326
+ min: 4.5
327
+ },
328
+ {
329
+ fg: "color.textSecondary",
330
+ bg: "color.surface",
331
+ min: 4.5
332
+ },
333
+ {
334
+ fg: "color.textSecondary",
335
+ bg: "color.agentBubble",
336
+ min: 4.5
337
+ },
315
338
  {
316
339
  fg: "color.agentText",
317
340
  bg: "color.agentBubble",
package/dist/index.d.ts CHANGED
@@ -25,6 +25,10 @@ var color = {
25
25
  $type: "color",
26
26
  $value: "#545B67"
27
27
  },
28
+ textSecondary: {
29
+ $type: "color",
30
+ $value: "#454B55"
31
+ },
28
32
  primary: {
29
33
  $type: "color",
30
34
  $value: "#2B57CF"
@@ -111,6 +115,10 @@ var color = {
111
115
  $type: "color",
112
116
  $value: "#A6ADBA"
113
117
  },
118
+ textSecondary: {
119
+ $type: "color",
120
+ $value: "#BEC4CF"
121
+ },
114
122
  primary: {
115
123
  $type: "color",
116
124
  $value: "#8DB0FF"
@@ -312,6 +320,21 @@ var contrast = {
312
320
  bg: "color.surface",
313
321
  min: 4.5
314
322
  },
323
+ {
324
+ fg: "color.textSecondary",
325
+ bg: "color.background",
326
+ min: 4.5
327
+ },
328
+ {
329
+ fg: "color.textSecondary",
330
+ bg: "color.surface",
331
+ min: 4.5
332
+ },
333
+ {
334
+ fg: "color.textSecondary",
335
+ bg: "color.agentBubble",
336
+ min: 4.5
337
+ },
315
338
  {
316
339
  fg: "color.agentText",
317
340
  bg: "color.agentBubble",
package/dist/index.js CHANGED
@@ -27,6 +27,10 @@ var tokens_default = {
27
27
  $type: "color",
28
28
  $value: "#545B67"
29
29
  },
30
+ textSecondary: {
31
+ $type: "color",
32
+ $value: "#454B55"
33
+ },
30
34
  primary: {
31
35
  $type: "color",
32
36
  $value: "#2B57CF"
@@ -113,6 +117,10 @@ var tokens_default = {
113
117
  $type: "color",
114
118
  $value: "#A6ADBA"
115
119
  },
120
+ textSecondary: {
121
+ $type: "color",
122
+ $value: "#BEC4CF"
123
+ },
116
124
  primary: {
117
125
  $type: "color",
118
126
  $value: "#8DB0FF"
@@ -314,6 +322,21 @@ var tokens_default = {
314
322
  bg: "color.surface",
315
323
  min: 4.5
316
324
  },
325
+ {
326
+ fg: "color.textSecondary",
327
+ bg: "color.background",
328
+ min: 4.5
329
+ },
330
+ {
331
+ fg: "color.textSecondary",
332
+ bg: "color.surface",
333
+ min: 4.5
334
+ },
335
+ {
336
+ fg: "color.textSecondary",
337
+ bg: "color.agentBubble",
338
+ min: 4.5
339
+ },
317
340
  {
318
341
  fg: "color.agentText",
319
342
  bg: "color.agentBubble",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tokens.json","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["{\n \"$description\": \"The Vinaverse design tokens, shared by every UI kit (React Native, Angular) so they look alike out of the box. Shape: W3C design-tokens style ($type, $value). Colors per mode with identical paths; sizes are numbers in a 16-based reference unit (16 = 1rem on the web, dp in React Native). The paths are public API: a CSS custom property is the path without the mode, kebab-cased (color.light.agentBubble -> --vv-color-agent-bubble), and a test freezes the list. With reduced motion asked for, every motion duration is 0: no fades, no animated scrolling.\",\n \"color\": {\n \"light\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#F5F6F8\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#858C98\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#E3E6EA\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#545B67\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#FFF3DC\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A2800\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A414D\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#B42318\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#1C6E3F\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n }\n },\n \"dark\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#181B21\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#6B7383\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#262A31\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#A6ADBA\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#1E2229\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#3A63D8\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B2416\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#F5E3C0\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#1A1D23\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#C3C8D2\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#FF8F85\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#72D49E\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n }\n }\n },\n \"font\": {\n \"size\": {\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 22\n }\n },\n \"weight\": {\n \"regular\": {\n \"$type\": \"fontWeight\",\n \"$value\": 400\n },\n \"medium\": {\n \"$type\": \"fontWeight\",\n \"$value\": 500\n },\n \"semibold\": {\n \"$type\": \"fontWeight\",\n \"$value\": 600\n }\n },\n \"lineHeight\": {\n \"$type\": \"number\",\n \"$value\": 1.4\n }\n },\n \"space\": {\n \"xxs\": {\n \"$type\": \"dimension\",\n \"$value\": 2\n },\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 4\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 8\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 24\n }\n },\n \"radius\": {\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 6\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"pill\": {\n \"$type\": \"dimension\",\n \"$value\": 999\n }\n },\n \"motion\": {\n \"fast\": {\n \"$type\": \"duration\",\n \"$value\": 120\n },\n \"normal\": {\n \"$type\": \"duration\",\n \"$value\": 200\n },\n \"bannerDelay\": {\n \"$type\": \"duration\",\n \"$value\": 600,\n \"$description\": \"how long a connecting banner waits before it shows, so a quick connection never flashes one\"\n }\n },\n \"size\": {\n \"touchTarget\": {\n \"$type\": \"dimension\",\n \"$value\": 44\n },\n \"avatar\": {\n \"$type\": \"dimension\",\n \"$value\": 32\n },\n \"disclosureFontMin\": {\n \"$type\": \"dimension\",\n \"$value\": 12,\n \"$description\": \"the AI disclosure is never drawn smaller\"\n }\n },\n \"contrast\": {\n \"$description\": \"The text and control pairs a theme must keep legible, in every mode: WCAG 2 ratio of fg on bg at least min (4.5 for text, 3 for controls and borders). divider is decorative and has none.\",\n \"pairs\": [\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.agentText\",\n \"bg\": \"color.agentBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.personText\",\n \"bg\": \"color.personBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffText\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffAccent\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.disclosureText\",\n \"bg\": \"color.disclosureBackground\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.onPrimary\",\n \"bg\": \"color.primary\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.primary\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.danger\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.warning\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.success\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.border\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.focus\",\n \"bg\": \"color.background\",\n \"min\": 3\n }\n ]\n }\n}\n","// @vinaverse/tokens: the design tokens every Vinaverse UI kit starts from, as one JSON (`@vinaverse/tokens/tokens.json`,\n// for build tools that emit CSS custom properties) and as typed values. No framework, no platform.\nimport json from './tokens.json';\n\nexport type ColorScheme = 'light' | 'dark';\nexport type ColorName = keyof (typeof json)['color']['light'];\nexport type Colors = Readonly<Record<ColorName, string>>;\n\ntype Leaf<T> = { readonly $value: T };\nconst values = <K extends string, T>(group: Record<K, Leaf<T>>) =>\n Object.fromEntries(\n Object.entries(group).map(([k, v]) => [k, (v as Leaf<T>).$value]),\n ) as Readonly<Record<K, T>>;\n\n/** The default colors of a scheme, by name. */\nexport function colors(scheme: ColorScheme): Colors {\n return values(json.color[scheme]) as Colors;\n}\n\n/** Type sizes, weights and line height; spacing, radii, motion durations (ms) and sizes, in density-independent px. */\nexport const font = {\n size: values(json.font.size),\n weight: values(json.font.weight),\n lineHeight: json.font.lineHeight.$value,\n} as const;\nexport const space = values(json.space);\nexport const radius = values(json.radius);\nexport const motion = values(json.motion);\nexport const size = values(json.size);\n\n/** The text and control pairs a theme must keep legible: [foreground, background, minimum WCAG contrast], from the JSON. */\nexport const CONTRAST_PAIRS: readonly (readonly [\n ColorName,\n ColorName,\n number,\n])[] = json.contrast.pairs.map(\n (p) =>\n [\n p.fg.replace('color.', '') as ColorName,\n p.bg.replace('color.', '') as ColorName,\n p.min,\n ] as const,\n);\n\n/**\n * Every token's path, modes included (`color.light.agentBubble`, `font.size.md`): the public names, frozen by a test.\n */\nexport function tokenPaths(): string[] {\n const out: string[] = [];\n const walk = (node: unknown, path: string[]) => {\n if (typeof node !== 'object' || node === null) return;\n if ('$value' in node) {\n out.push(path.join('.'));\n return;\n }\n for (const [key, child] of Object.entries(node))\n if (!key.startsWith('$') && key !== 'contrast')\n walk(child, [...path, key]);\n };\n walk(json, []);\n return out;\n}\n\n/** A token's CSS custom property: the path without its mode, kebab-cased (`--vv-color-agent-bubble`). */\nexport function cssVariable(path: string): string {\n const parts = path\n .split('.')\n .filter((_, i, all) => !(all[0] === 'color' && i === 1));\n return `--vv-${parts\n .map((p) => p.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`))\n .join('-')}`;\n}\n\n/** The WCAG 2 contrast ratio of two `#RRGGBB` colors (1 to 21); NaN when either is not one. */\nexport function contrastRatio(a: string, b: string): number {\n const la = luminance(a);\n const lb = luminance(b);\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/** The pairs of a set of colors below their minimum: a tenant theme to warn about. */\nexport function contrastProblems(palette: Colors): {\n foreground: ColorName;\n background: ColorName;\n ratio: number;\n minimum: number;\n}[] {\n return CONTRAST_PAIRS.flatMap(([foreground, background, minimum]) => {\n const ratio = contrastRatio(palette[foreground], palette[background]);\n return ratio >= minimum ? [] : [{ foreground, background, ratio, minimum }];\n });\n}\n\nfunction luminance(hex: string): number {\n const m = /^#([0-9a-f]{6})$/i.exec(hex);\n if (!m) return Number.NaN;\n const n = Number.parseInt(m[1] as string, 16);\n const [r, g, b] = [(n >> 16) & 255, (n >> 8) & 255, n & 255].map((c) => {\n const s = c / 255;\n return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n }) as [number, number, number];\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n"]}
1
+ {"version":3,"sources":["../src/tokens.json","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["{\n \"$description\": \"The Vinaverse design tokens, shared by every UI kit (React Native, Angular) so they look alike out of the box. Shape: W3C design-tokens style ($type, $value). Colors per mode with identical paths; sizes are numbers in a 16-based reference unit (16 = 1rem on the web, dp in React Native). The paths are public API: a CSS custom property is the path without the mode, kebab-cased (color.light.agentBubble -> --vv-color-agent-bubble), and a test freezes the list. With reduced motion asked for, every motion duration is 0: no fades, no animated scrolling.\",\n \"color\": {\n \"light\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#F5F6F8\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#858C98\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#E3E6EA\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#545B67\"\n },\n \"textSecondary\": {\n \"$type\": \"color\",\n \"$value\": \"#454B55\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#15171A\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#FFF3DC\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A2800\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#EEF1F5\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#3A414D\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#B42318\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#7A4F00\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#1C6E3F\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#2B57CF\"\n }\n },\n \"dark\": {\n \"background\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"surface\": {\n \"$type\": \"color\",\n \"$value\": \"#181B21\"\n },\n \"border\": {\n \"$type\": \"color\",\n \"$value\": \"#6B7383\"\n },\n \"divider\": {\n \"$type\": \"color\",\n \"$value\": \"#262A31\"\n },\n \"text\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"textMuted\": {\n \"$type\": \"color\",\n \"$value\": \"#A6ADBA\"\n },\n \"textSecondary\": {\n \"$type\": \"color\",\n \"$value\": \"#BEC4CF\"\n },\n \"primary\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n },\n \"onPrimary\": {\n \"$type\": \"color\",\n \"$value\": \"#0F1115\"\n },\n \"agentBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#1E2229\"\n },\n \"agentText\": {\n \"$type\": \"color\",\n \"$value\": \"#ECEEF2\"\n },\n \"personBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#3A63D8\"\n },\n \"personText\": {\n \"$type\": \"color\",\n \"$value\": \"#FFFFFF\"\n },\n \"staffBubble\": {\n \"$type\": \"color\",\n \"$value\": \"#2B2416\"\n },\n \"staffText\": {\n \"$type\": \"color\",\n \"$value\": \"#F5E3C0\"\n },\n \"staffAccent\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"disclosureBackground\": {\n \"$type\": \"color\",\n \"$value\": \"#1A1D23\"\n },\n \"disclosureText\": {\n \"$type\": \"color\",\n \"$value\": \"#C3C8D2\"\n },\n \"danger\": {\n \"$type\": \"color\",\n \"$value\": \"#FF8F85\"\n },\n \"warning\": {\n \"$type\": \"color\",\n \"$value\": \"#E6B85C\"\n },\n \"success\": {\n \"$type\": \"color\",\n \"$value\": \"#72D49E\"\n },\n \"focus\": {\n \"$type\": \"color\",\n \"$value\": \"#8DB0FF\"\n }\n }\n },\n \"font\": {\n \"size\": {\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 14\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 22\n }\n },\n \"weight\": {\n \"regular\": {\n \"$type\": \"fontWeight\",\n \"$value\": 400\n },\n \"medium\": {\n \"$type\": \"fontWeight\",\n \"$value\": 500\n },\n \"semibold\": {\n \"$type\": \"fontWeight\",\n \"$value\": 600\n }\n },\n \"lineHeight\": {\n \"$type\": \"number\",\n \"$value\": 1.4\n }\n },\n \"space\": {\n \"xxs\": {\n \"$type\": \"dimension\",\n \"$value\": 2\n },\n \"xs\": {\n \"$type\": \"dimension\",\n \"$value\": 4\n },\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 8\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 16\n },\n \"xl\": {\n \"$type\": \"dimension\",\n \"$value\": 24\n }\n },\n \"radius\": {\n \"sm\": {\n \"$type\": \"dimension\",\n \"$value\": 6\n },\n \"md\": {\n \"$type\": \"dimension\",\n \"$value\": 12\n },\n \"lg\": {\n \"$type\": \"dimension\",\n \"$value\": 18\n },\n \"pill\": {\n \"$type\": \"dimension\",\n \"$value\": 999\n }\n },\n \"motion\": {\n \"fast\": {\n \"$type\": \"duration\",\n \"$value\": 120\n },\n \"normal\": {\n \"$type\": \"duration\",\n \"$value\": 200\n },\n \"bannerDelay\": {\n \"$type\": \"duration\",\n \"$value\": 600,\n \"$description\": \"how long a connecting banner waits before it shows, so a quick connection never flashes one\"\n }\n },\n \"size\": {\n \"touchTarget\": {\n \"$type\": \"dimension\",\n \"$value\": 44\n },\n \"avatar\": {\n \"$type\": \"dimension\",\n \"$value\": 32\n },\n \"disclosureFontMin\": {\n \"$type\": \"dimension\",\n \"$value\": 12,\n \"$description\": \"the AI disclosure is never drawn smaller\"\n }\n },\n \"contrast\": {\n \"$description\": \"The text and control pairs a theme must keep legible, in every mode: WCAG 2 ratio of fg on bg at least min (4.5 for text, 3 for controls and borders). divider is decorative and has none.\",\n \"pairs\": [\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.text\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textMuted\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textSecondary\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textSecondary\",\n \"bg\": \"color.surface\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.textSecondary\",\n \"bg\": \"color.agentBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.agentText\",\n \"bg\": \"color.agentBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.personText\",\n \"bg\": \"color.personBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffText\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.staffAccent\",\n \"bg\": \"color.staffBubble\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.disclosureText\",\n \"bg\": \"color.disclosureBackground\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.onPrimary\",\n \"bg\": \"color.primary\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.primary\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.danger\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.warning\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.success\",\n \"bg\": \"color.background\",\n \"min\": 4.5\n },\n {\n \"fg\": \"color.border\",\n \"bg\": \"color.background\",\n \"min\": 3\n },\n {\n \"fg\": \"color.focus\",\n \"bg\": \"color.background\",\n \"min\": 3\n }\n ]\n }\n}\n","// @vinaverse/tokens: the design tokens every Vinaverse UI kit starts from, as one JSON (`@vinaverse/tokens/tokens.json`,\n// for build tools that emit CSS custom properties) and as typed values. No framework, no platform.\nimport json from './tokens.json';\n\nexport type ColorScheme = 'light' | 'dark';\nexport type ColorName = keyof (typeof json)['color']['light'];\nexport type Colors = Readonly<Record<ColorName, string>>;\n\ntype Leaf<T> = { readonly $value: T };\nconst values = <K extends string, T>(group: Record<K, Leaf<T>>) =>\n Object.fromEntries(\n Object.entries(group).map(([k, v]) => [k, (v as Leaf<T>).$value]),\n ) as Readonly<Record<K, T>>;\n\n/** The default colors of a scheme, by name. */\nexport function colors(scheme: ColorScheme): Colors {\n return values(json.color[scheme]) as Colors;\n}\n\n/** Type sizes, weights and line height; spacing, radii, motion durations (ms) and sizes, in density-independent px. */\nexport const font = {\n size: values(json.font.size),\n weight: values(json.font.weight),\n lineHeight: json.font.lineHeight.$value,\n} as const;\nexport const space = values(json.space);\nexport const radius = values(json.radius);\nexport const motion = values(json.motion);\nexport const size = values(json.size);\n\n/** The text and control pairs a theme must keep legible: [foreground, background, minimum WCAG contrast], from the JSON. */\nexport const CONTRAST_PAIRS: readonly (readonly [\n ColorName,\n ColorName,\n number,\n])[] = json.contrast.pairs.map(\n (p) =>\n [\n p.fg.replace('color.', '') as ColorName,\n p.bg.replace('color.', '') as ColorName,\n p.min,\n ] as const,\n);\n\n/**\n * Every token's path, modes included (`color.light.agentBubble`, `font.size.md`): the public names, frozen by a test.\n */\nexport function tokenPaths(): string[] {\n const out: string[] = [];\n const walk = (node: unknown, path: string[]) => {\n if (typeof node !== 'object' || node === null) return;\n if ('$value' in node) {\n out.push(path.join('.'));\n return;\n }\n for (const [key, child] of Object.entries(node))\n if (!key.startsWith('$') && key !== 'contrast')\n walk(child, [...path, key]);\n };\n walk(json, []);\n return out;\n}\n\n/** A token's CSS custom property: the path without its mode, kebab-cased (`--vv-color-agent-bubble`). */\nexport function cssVariable(path: string): string {\n const parts = path\n .split('.')\n .filter((_, i, all) => !(all[0] === 'color' && i === 1));\n return `--vv-${parts\n .map((p) => p.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`))\n .join('-')}`;\n}\n\n/** The WCAG 2 contrast ratio of two `#RRGGBB` colors (1 to 21); NaN when either is not one. */\nexport function contrastRatio(a: string, b: string): number {\n const la = luminance(a);\n const lb = luminance(b);\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/** The pairs of a set of colors below their minimum: a tenant theme to warn about. */\nexport function contrastProblems(palette: Colors): {\n foreground: ColorName;\n background: ColorName;\n ratio: number;\n minimum: number;\n}[] {\n return CONTRAST_PAIRS.flatMap(([foreground, background, minimum]) => {\n const ratio = contrastRatio(palette[foreground], palette[background]);\n return ratio >= minimum ? [] : [{ foreground, background, ratio, minimum }];\n });\n}\n\nfunction luminance(hex: string): number {\n const m = /^#([0-9a-f]{6})$/i.exec(hex);\n if (!m) return Number.NaN;\n const n = Number.parseInt(m[1] as string, 16);\n const [r, g, b] = [(n >> 16) & 255, (n >> 8) & 255, n & 255].map((c) => {\n const s = c / 255;\n return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n }) as [number, number, number];\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vinaverse/tokens",
3
- "version": "0.1.0-alpha.11",
3
+ "version": "0.1.0-alpha.13",
4
4
  "description": "Vinaverse design tokens and copy shared by every UI kit: colors for light and dark, type, spacing, radii, motion, a contrast check; and the words the kits say, with the rules on them.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Vinaverse, Inc.",
package/src/tokens.json CHANGED
@@ -26,6 +26,10 @@
26
26
  "$type": "color",
27
27
  "$value": "#545B67"
28
28
  },
29
+ "textSecondary": {
30
+ "$type": "color",
31
+ "$value": "#454B55"
32
+ },
29
33
  "primary": {
30
34
  "$type": "color",
31
35
  "$value": "#2B57CF"
@@ -112,6 +116,10 @@
112
116
  "$type": "color",
113
117
  "$value": "#A6ADBA"
114
118
  },
119
+ "textSecondary": {
120
+ "$type": "color",
121
+ "$value": "#BEC4CF"
122
+ },
115
123
  "primary": {
116
124
  "$type": "color",
117
125
  "$value": "#8DB0FF"
@@ -313,6 +321,21 @@
313
321
  "bg": "color.surface",
314
322
  "min": 4.5
315
323
  },
324
+ {
325
+ "fg": "color.textSecondary",
326
+ "bg": "color.background",
327
+ "min": 4.5
328
+ },
329
+ {
330
+ "fg": "color.textSecondary",
331
+ "bg": "color.surface",
332
+ "min": 4.5
333
+ },
334
+ {
335
+ "fg": "color.textSecondary",
336
+ "bg": "color.agentBubble",
337
+ "min": 4.5
338
+ },
316
339
  {
317
340
  "fg": "color.agentText",
318
341
  "bg": "color.agentBubble",