@factorialco/f0-react 4.40.1 → 4.41.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{F0AiProcessingOverlay-BLmKNois.js → F0AiProcessingOverlay-BoowZoPM.js} +1004 -1075
- package/dist/{F0CanvasPanel-C9dAQPQK.js → F0CanvasPanel-G_pQo8tM.js} +11138 -11054
- package/dist/LocationMap-CATAvWua.js +24682 -0
- package/dist/LocationMap.css +1 -0
- package/dist/ai.d.ts +25 -0
- package/dist/ai.js +2 -2
- package/dist/component-status.js +1 -1
- package/dist/experimental.d.ts +300 -14
- package/dist/experimental.js +5004 -4150
- package/dist/f0.d.ts +25 -0
- package/dist/f0.js +6 -72
- package/dist/i18n-provider-defaults.d.ts +25 -0
- package/dist/i18n-provider-defaults.js +36 -0
- package/dist/{index-CtSPmGXi.js → index-a2kVa3ul.js} +6853 -6775
- package/dist/styles.css +1 -1
- package/package.json +2 -1
package/dist/f0.d.ts
CHANGED
|
@@ -4902,6 +4902,8 @@ export declare const defaultTranslations: {
|
|
|
4902
4902
|
readonly noResults: "No chats found";
|
|
4903
4903
|
readonly backToLatest: "Jump to latest";
|
|
4904
4904
|
readonly muted: "Muted";
|
|
4905
|
+
readonly mute: "Mute";
|
|
4906
|
+
readonly unmute: "Unmute";
|
|
4905
4907
|
readonly attachFile: "Attach file";
|
|
4906
4908
|
readonly addEmoji: "Add emoji";
|
|
4907
4909
|
readonly recordAudio: "Record audio";
|
|
@@ -4928,6 +4930,13 @@ export declare const defaultTranslations: {
|
|
|
4928
4930
|
readonly twoTyping: "{{first}} and {{second}} are writing…";
|
|
4929
4931
|
readonly severalTyping: "Several people are writing…";
|
|
4930
4932
|
readonly deletedMessage: "Message deleted";
|
|
4933
|
+
readonly location: "Location";
|
|
4934
|
+
readonly voiceNote: "Voice note";
|
|
4935
|
+
readonly sendVoiceNote: "Send voice note";
|
|
4936
|
+
readonly sendingVoiceNote: "Sending voice note…";
|
|
4937
|
+
readonly sending: "Sending…";
|
|
4938
|
+
readonly notSent: "Not sent";
|
|
4939
|
+
readonly retry: "Retry";
|
|
4931
4940
|
readonly moreActions: "Message actions";
|
|
4932
4941
|
readonly options: "Options";
|
|
4933
4942
|
readonly pin: "Pin";
|
|
@@ -4966,6 +4975,22 @@ export declare const defaultTranslations: {
|
|
|
4966
4975
|
};
|
|
4967
4976
|
readonly scrollToBottom: "Scroll to bottom";
|
|
4968
4977
|
readonly newMessages: "New messages";
|
|
4978
|
+
readonly system: {
|
|
4979
|
+
readonly memberAdded: {
|
|
4980
|
+
readonly one: "{{members}} was added to the group";
|
|
4981
|
+
readonly other: "{{members}} were added to the group";
|
|
4982
|
+
};
|
|
4983
|
+
readonly memberRemoved: {
|
|
4984
|
+
readonly one: "{{members}} was removed from the group";
|
|
4985
|
+
readonly other: "{{members}} were removed from the group";
|
|
4986
|
+
};
|
|
4987
|
+
readonly memberLeft: {
|
|
4988
|
+
readonly one: "{{members}} left the group";
|
|
4989
|
+
readonly other: "{{members}} left the group";
|
|
4990
|
+
};
|
|
4991
|
+
readonly membersWithLast: "{{names}} and {{last}}";
|
|
4992
|
+
readonly membersWithMore: "{{names}} and {{count}} more";
|
|
4993
|
+
};
|
|
4969
4994
|
readonly unreadCount: {
|
|
4970
4995
|
readonly one: "{{count}} unread";
|
|
4971
4996
|
readonly other: "{{count}} unread";
|
package/dist/f0.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { gT as LayoutProvider$1, a9 as withDataTestId, c8 as Component, p as cn, r as cva, gB as useDeepCompareEffect, q as motion, eW as isEqual, gU as Text, ag as withSkeleton, V as Skeleton, u as useI18n, J as F0Icon, du as ForwardRef, E as AnimatePresence, k as DropdownInternal, M as ButtonInternal, bR as ForwardRef$2, aa as experimentalComponent, a6 as Dropdown, gV as require_baseFlatten, af as OneEllipsis, gy as Tag$1, gW as useNormalizeNumericValueWithFormatter, gX as numericFormatter, gY as numericFinalValue, e5 as F0TagBalance, gZ as actionButtonVariants, g_ as actionSizes, fv as useControllableState, g$ as createContextScope, h0 as createCollection, h1 as composeEventHandlers, h2 as Primitive, h3 as useComposedRefs, h4 as useDirection, h5 as clamp$1, h6 as useSize, h7 as usePrevious, c1 as ForwardRef$3, c2 as ForwardRef$4, w as focusRing, K as DropdownMenu, L as DropdownMenuTrigger, S as F0Button, Q as DropdownMenuContent, f$ as DropdownMenuLabel, Z as DropdownMenuItem, ae as ForwardRef$5, $ as DropdownMenuSeparator, aR as useReducedMotion, an as ScrollArea, h8 as actionLinkVariants, ba as Collapsible, e2 as CollapsibleTrigger, bP as ForwardRef$6, bb as ForwardRef$7, bc as CollapsibleContent, aF as Popover, aG as PopoverTrigger, aH as PopoverContent, cV as Chip, fJ as ScrollBar, h9 as OverflowList, gA as getDataCollectionStorageKey, fA as INPUTFIELD_SIZES, ha as getFilterType, ft as DataTestIdWrapper, hb as FilterPickerInternal, ab as ForwardRef$8, as as Counter, d4 as ForwardRef$9, bY as ForwardRef$a, g7 as unwrapToZodObject, g8 as getF0Config, ga as objectType, gH as inferFieldType, fZ as InputMessages, hc as getAugmentedNamespace, h as getDefaultExportFromCjs, hd as invariant, eB as clsx, dF as ForwardRef$b, au as ForwardRef$c, ax as F0Select, dK as ForwardRef$d, bX as ForwardRef$f, fY as Label, he as F0AvatarIcon, dD as ForwardRef$g, go as GroupHeader, a4 as F0TagStatus, fs as Progress, cr as ForwardRef$h, gQ as Metadata, by as ForwardRef$j, bD as HoverCard, bE as HoverCardTrigger, bF as HoverCardContent, d as F0OneIcon, H as ForwardRef$k, da as ForwardRef$l, dR as ForwardRef$m, dC as ForwardRef$o, cu as ForwardRef$p, bN as ForwardRef$q, c_ as ForwardRef$r, g1 as DropdownMenuSub, g2 as DropdownMenuSubTrigger, O as DropdownMenuPortal, g3 as DropdownMenuSubContent, g0 as DropdownMenuGroup, bZ as ForwardRef$t, dA as ForwardRef$u, bn as ForwardRef$v, bf as F0Icon$1, cB as Switch, a3 as Tooltip, dE as ForwardRef$x, e3 as F0Checkbox, cA as F0TextInput, a0 as ForwardRef$y, a_ as F0TagRaw, aE as F0DialogContext, gh as f0FormField, hf as unknownType, hg as booleanType, hh as arrayType, hi as stringType, hj as numberType, hk as dateType, bS as ForwardRef$A, bT as ForwardRef$B, e0 as F0Dialog$1, hl as ProgressBarCell, aU as F0AvatarModule, bU as Dialog$1, bV as DialogContent, bW as DialogTitle, c9 as Card, cd as CardContent, ck as CardFooter, dT as ForwardRef$C, ca as CardHeader, b9 as ForwardRef$D, U as ForwardRef$E, be as F0Avatar, a2 as ForwardRef$F, bw as ForwardRef$G, dQ as ForwardRef$H, fw as ToggleGroup, fx as ToggleGroupItem, hm as F0ButtonToggleInternal, aZ as F0RichTextDisplay2, ce as ForwardRef$I, a7 as ForwardRef$O, c7 as ForwardRef$P, gE as OneFilterPicker, fK as toArray, bK as F0AvatarAlert, b1 as F0Link, z as useMediaQuery, hn as useIsomorphicLayoutEffect, ho as UserPlatformProvider, hp as L10nProvider, I as I18nProvider, hq as LinkProvider, hr as XRayProvider, hs as ImageProvider, ht as DataCollectionStorageProvider } from "./F0CanvasPanel-G_pQo8tM.js";
|
|
2
|
+
import { hJ as fe, C as ve, D as Le, aS as Ye, c as Xe, F as Se, a as Ve, hC as xe, f as Ie, bi as Re, aT as we, cm as ze, dZ as De, aK as Ce, br as ke, am as Oe, e4 as Fe, av as je, cy as Ee, g as Ue, bG as Je, cz as Pe, hx as Ke, hO as He, bL as Ae, e as Qe, bO as Be, cf as _e, hE as $e, b5 as qe, hF as ti, hH as ei, hI as ii, cY as ai, hL as ni, cR as li, cS as ri, P as si, cW as oi, hG as ci, cT as di, hK as ui, hP as hi, hu as mi, hv as pi, hw as bi, cU as Zi, hN as yi, hD as Mi, hA as Ni, hz as Wi, cX as Gi, fW as Ti, gp as gi, hM as fi, aX as vi, cQ as Li, cN as Yi, cP as Xi, cM as Si, hB as Vi, gr as xi, gl as Ii, gb as Ri, hS as wi, cE as zi, cO as Di, hR as Ci, bs as ki, d_ as Oi, fV as Fi, gc as ji, b as Ei, bv as Ui, gG as Ji, aV as Pi, d$ as Ki, hy as Hi, gn as Ai, gm as Qi, hQ as Bi } from "./F0CanvasPanel-G_pQo8tM.js";
|
|
3
3
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
4
4
|
import * as React from "react";
|
|
5
5
|
import React__default, { forwardRef, useRef, useImperativeHandle, Children, createContext, useContext, useState, useMemo, useEffect, useCallback, useLayoutEffect, isValidElement, Fragment as Fragment$1, useSyncExternalStore, useId, useReducer, memo } from "react";
|
|
6
|
-
import { D as AIButton, E as ForwardRef$1, G as ForwardRef$e, H as ForwardRef$i, I as ForwardRef$
|
|
7
|
-
import { A as $i, C as qi, t as ta, s as ea, v as ia, y as aa, l as na, i as la, q as ra, z as sa, B as oa, p as ca, r as da, j as ua, e as ha, g as ma, k as pa, T as ba, w as Za, h as ya, a as Ma, n as Na, m as Wa, o as Ga, b as Ta, f as ga, x as fa, c as va, d as La, u as Ya } from "./F0AiProcessingOverlay-
|
|
6
|
+
import { D as AIButton, E as ForwardRef$1, G as ForwardRef$e, H as ForwardRef$i, I as ForwardRef$n, J as ForwardRef$s, K as ForwardRef$w, L as ForwardRef$z, M as F0Box, N as ForwardRef$J, O as ForwardRef$K, P as ForwardRef$L, Q as ForwardRef$M, R as ForwardRef$N, F as FormCardValueFormatterProvider } from "./F0AiProcessingOverlay-BoowZoPM.js";
|
|
7
|
+
import { A as $i, C as qi, t as ta, s as ea, v as ia, y as aa, l as na, i as la, q as ra, z as sa, B as oa, p as ca, r as da, j as ua, e as ha, g as ma, k as pa, T as ba, w as Za, h as ya, a as Ma, n as Na, m as Wa, o as Ga, b as Ta, f as ga, x as fa, c as va, d as La, u as Ya } from "./F0AiProcessingOverlay-BoowZoPM.js";
|
|
8
8
|
import { createPortal } from "react-dom";
|
|
9
|
-
import { C as Carousel,
|
|
10
|
-
import {
|
|
9
|
+
import { C as Carousel, aj as useSortable, ak as CSS$1, al as useSensors, am as useSensor, an as sortableKeyboardCoordinates, ao as KeyboardSensor, ap as PointerSensor, aq as DndContext, ar as SortableContext, as as DragOverlay, at as arrayMove, h as useAudioPlayer, F as F0SegmentedControl, au as Header, av as Content, aw as Footer, ax as DialogWrapper, ay as dialogAlikePrivateProps, az as F0Dialog, aA as useF0Form, aB as F0Form, H as F0ActionBar, aC as F0FormSection, aD as formOverlaysStore, aE as isFieldRequired, aF as evaluateRenderIf, aG as buildDynamicSchema, aH as renderFieldInput, aI as nanoid, aJ as mountFormOverlay, aK as unmountFormOverlay, aL as openFormDialog, aM as dequal, Z as F0TableOfContent, aa as Dialog, aN as FormMessage, T as F0NumberInput, aO as EmojiPicker, aP as data, c as ReorderItem, R as ReorderGroup, u as useDragControls, X as ResourceHeader, O as OneEmptyState, aQ as UpsellRequestResponseDialog, aR as Label$1, aS as UpsellingButton, q as BaseBanner, d as useDataCollectionSource, a1 as OneDataCollection, aT as extractDisplayValue, aU as navigationFilterTypes, aV as NavigationFilters, aW as DialogInternal, aX as DialogDescription, aY as PrivacyModeProvider, M as MotionConfig } from "./index-a2kVa3ul.js";
|
|
10
|
+
import { s as Sa, t as Va, I as xa, v as Ia, D as Ra, bg as wa, bf as za, bb as Da, a_ as Ca, aZ as ka, a$ as Oa, b0 as Fa, b2 as ja, b3 as Ea, ac as Ua, ab as Ja, af as Pa, W as Ka, K as Ha, ah as Aa, N as Qa, w as Ba, bh as $a, ad as qa, ae as tn, Q as en, x as an, P as nn, z as ln, E as rn, ag as sn, U as on, ai as dn, y as un, G as hn, bj as mn, n as pn, o as bn, ba as Zn, b6 as yn, b5 as Mn, bi as Nn, a8 as Wn, b8 as Gn, b9 as Tn, J as gn, bk as fn, bl as vn, e as Ln, bc as Yn, bd as Xn, be as Sn, b1 as Vn, b7 as xn, f as In, i as Rn, b4 as wn, bm as zn } from "./index-a2kVa3ul.js";
|
|
11
11
|
import { utils, write as writeSync } from "./xlsx-Bedf3nwD.js";
|
|
12
12
|
import { defaultTranslations as Cn } from "./i18n-provider-defaults.js";
|
|
13
13
|
import './f0.css';const CAROUSEL_COLUMNS = {
|
|
@@ -55318,72 +55318,6 @@ const Slider = Root, SliderTrack = Track, SliderRange = Range, SliderThumb = Thu
|
|
|
55318
55318
|
children: /* @__PURE__ */ jsx(Y, { className: W === "sm" ? "size-5" : "size-6" })
|
|
55319
55319
|
}
|
|
55320
55320
|
);
|
|
55321
|
-
}, useAudioPlayer = (G, Z = {}, W = 0) => {
|
|
55322
|
-
const T = useRef(Z);
|
|
55323
|
-
T.current = Z;
|
|
55324
|
-
const L = useRef(W);
|
|
55325
|
-
L.current = W;
|
|
55326
|
-
const [Y, X] = useState(!1), [S, V] = useState(0), [I, R] = useState(W), [z, D] = useState(0), [C, O] = useState(1), [F, E] = useState(!0), [U, J] = useState(null);
|
|
55327
|
-
useEffect(() => {
|
|
55328
|
-
const _ = G.current;
|
|
55329
|
-
if (!_) return;
|
|
55330
|
-
const q = () => {
|
|
55331
|
-
R(
|
|
55332
|
-
Number.isFinite(_.duration) ? _.duration : L.current
|
|
55333
|
-
), E(!1);
|
|
55334
|
-
}, et = () => {
|
|
55335
|
-
V(_.currentTime), T.current.onTimeUpdate?.(_.currentTime);
|
|
55336
|
-
}, tt = () => {
|
|
55337
|
-
X(!0), T.current.onPlay?.();
|
|
55338
|
-
}, ot = () => {
|
|
55339
|
-
X(!1), T.current.onPause?.();
|
|
55340
|
-
}, nt = () => {
|
|
55341
|
-
X(!1), T.current.onEnded?.();
|
|
55342
|
-
}, ht = () => {
|
|
55343
|
-
_.buffered.length > 0 && D(_.buffered.end(_.buffered.length - 1));
|
|
55344
|
-
}, pt = () => E(!0), mt = () => E(!1), ut = () => O(_.playbackRate), at = () => {
|
|
55345
|
-
J(_.error), E(!1), T.current.onError?.(_.error);
|
|
55346
|
-
};
|
|
55347
|
-
return _.addEventListener("loadedmetadata", q), _.addEventListener("timeupdate", et), _.addEventListener("play", tt), _.addEventListener("pause", ot), _.addEventListener("ended", nt), _.addEventListener("progress", ht), _.addEventListener("waiting", pt), _.addEventListener("canplay", mt), _.addEventListener("ratechange", ut), _.addEventListener("error", at), _.readyState >= 1 && q(), () => {
|
|
55348
|
-
_.removeEventListener("loadedmetadata", q), _.removeEventListener("timeupdate", et), _.removeEventListener("play", tt), _.removeEventListener("pause", ot), _.removeEventListener("ended", nt), _.removeEventListener("progress", ht), _.removeEventListener("waiting", pt), _.removeEventListener("canplay", mt), _.removeEventListener("ratechange", ut), _.removeEventListener("error", at);
|
|
55349
|
-
};
|
|
55350
|
-
}, [G]);
|
|
55351
|
-
const P = useCallback(() => {
|
|
55352
|
-
G.current?.play().catch(() => {
|
|
55353
|
-
});
|
|
55354
|
-
}, [G]), A = useCallback(() => {
|
|
55355
|
-
G.current?.pause();
|
|
55356
|
-
}, [G]), K = useCallback(() => {
|
|
55357
|
-
Y ? A() : P();
|
|
55358
|
-
}, [Y, P, A]), Q = useCallback(
|
|
55359
|
-
(_) => {
|
|
55360
|
-
const q = G.current;
|
|
55361
|
-
if (!q) return;
|
|
55362
|
-
const et = Number.isFinite(q.duration) ? q.duration : _, tt = Math.min(Math.max(_, 0), et);
|
|
55363
|
-
q.currentTime = tt, V(tt), T.current.onSeek?.(tt);
|
|
55364
|
-
},
|
|
55365
|
-
[G]
|
|
55366
|
-
), B = useCallback(
|
|
55367
|
-
(_) => {
|
|
55368
|
-
const q = G.current;
|
|
55369
|
-
q && (q.playbackRate = _, O(_));
|
|
55370
|
-
},
|
|
55371
|
-
[G]
|
|
55372
|
-
);
|
|
55373
|
-
return {
|
|
55374
|
-
isPlaying: Y,
|
|
55375
|
-
currentTime: S,
|
|
55376
|
-
duration: I,
|
|
55377
|
-
buffered: z,
|
|
55378
|
-
playbackRate: C,
|
|
55379
|
-
isLoading: F,
|
|
55380
|
-
error: U,
|
|
55381
|
-
play: P,
|
|
55382
|
-
pause: A,
|
|
55383
|
-
toggle: K,
|
|
55384
|
-
seek: Q,
|
|
55385
|
-
setPlaybackRate: B
|
|
55386
|
-
};
|
|
55387
55321
|
}, usePlayerController = (G) => {
|
|
55388
55322
|
const {
|
|
55389
55323
|
src: Z,
|
|
@@ -582,6 +582,8 @@ export declare const defaultTranslations: {
|
|
|
582
582
|
readonly noResults: "No chats found";
|
|
583
583
|
readonly backToLatest: "Jump to latest";
|
|
584
584
|
readonly muted: "Muted";
|
|
585
|
+
readonly mute: "Mute";
|
|
586
|
+
readonly unmute: "Unmute";
|
|
585
587
|
readonly attachFile: "Attach file";
|
|
586
588
|
readonly addEmoji: "Add emoji";
|
|
587
589
|
readonly recordAudio: "Record audio";
|
|
@@ -608,6 +610,13 @@ export declare const defaultTranslations: {
|
|
|
608
610
|
readonly twoTyping: "{{first}} and {{second}} are writing…";
|
|
609
611
|
readonly severalTyping: "Several people are writing…";
|
|
610
612
|
readonly deletedMessage: "Message deleted";
|
|
613
|
+
readonly location: "Location";
|
|
614
|
+
readonly voiceNote: "Voice note";
|
|
615
|
+
readonly sendVoiceNote: "Send voice note";
|
|
616
|
+
readonly sendingVoiceNote: "Sending voice note…";
|
|
617
|
+
readonly sending: "Sending…";
|
|
618
|
+
readonly notSent: "Not sent";
|
|
619
|
+
readonly retry: "Retry";
|
|
611
620
|
readonly moreActions: "Message actions";
|
|
612
621
|
readonly options: "Options";
|
|
613
622
|
readonly pin: "Pin";
|
|
@@ -646,6 +655,22 @@ export declare const defaultTranslations: {
|
|
|
646
655
|
};
|
|
647
656
|
readonly scrollToBottom: "Scroll to bottom";
|
|
648
657
|
readonly newMessages: "New messages";
|
|
658
|
+
readonly system: {
|
|
659
|
+
readonly memberAdded: {
|
|
660
|
+
readonly one: "{{members}} was added to the group";
|
|
661
|
+
readonly other: "{{members}} were added to the group";
|
|
662
|
+
};
|
|
663
|
+
readonly memberRemoved: {
|
|
664
|
+
readonly one: "{{members}} was removed from the group";
|
|
665
|
+
readonly other: "{{members}} were removed from the group";
|
|
666
|
+
};
|
|
667
|
+
readonly memberLeft: {
|
|
668
|
+
readonly one: "{{members}} left the group";
|
|
669
|
+
readonly other: "{{members}} left the group";
|
|
670
|
+
};
|
|
671
|
+
readonly membersWithLast: "{{names}} and {{last}}";
|
|
672
|
+
readonly membersWithMore: "{{names}} and {{count}} more";
|
|
673
|
+
};
|
|
649
674
|
readonly unreadCount: {
|
|
650
675
|
readonly one: "{{count}} unread";
|
|
651
676
|
readonly other: "{{count}} unread";
|
|
@@ -582,6 +582,8 @@ const e = {
|
|
|
582
582
|
noResults: "No chats found",
|
|
583
583
|
backToLatest: "Jump to latest",
|
|
584
584
|
muted: "Muted",
|
|
585
|
+
mute: "Mute",
|
|
586
|
+
unmute: "Unmute",
|
|
585
587
|
attachFile: "Attach file",
|
|
586
588
|
addEmoji: "Add emoji",
|
|
587
589
|
recordAudio: "Record audio",
|
|
@@ -611,6 +613,17 @@ const e = {
|
|
|
611
613
|
twoTyping: "{{first}} and {{second}} are writing…",
|
|
612
614
|
severalTyping: "Several people are writing…",
|
|
613
615
|
deletedMessage: "Message deleted",
|
|
616
|
+
// Shared-location attachments (map preview card + reply quote descriptor).
|
|
617
|
+
location: "Location",
|
|
618
|
+
// Voice notes (mic in the composer records + sends audio, no transcript).
|
|
619
|
+
voiceNote: "Voice note",
|
|
620
|
+
sendVoiceNote: "Send voice note",
|
|
621
|
+
sendingVoiceNote: "Sending voice note…",
|
|
622
|
+
// Delivery-state indicators beside your own bubble (icon labels + the
|
|
623
|
+
// failed message's reduced actions menu).
|
|
624
|
+
sending: "Sending…",
|
|
625
|
+
notSent: "Not sent",
|
|
626
|
+
retry: "Retry",
|
|
614
627
|
moreActions: "Message actions",
|
|
615
628
|
// Header overflow menu (the ellipsis dropdown) + its pin/favourite action.
|
|
616
629
|
options: "Options",
|
|
@@ -658,6 +671,29 @@ const e = {
|
|
|
658
671
|
},
|
|
659
672
|
scrollToBottom: "Scroll to bottom",
|
|
660
673
|
newMessages: "New messages",
|
|
674
|
+
// Centered membership system rows. `{{members}}` / `{{names}}` / `{{last}}`
|
|
675
|
+
// are replaced with React nodes (`@name` hover-card chips) by the component
|
|
676
|
+
// via token split — NOT through `t(key, args)`, whose interpolation is
|
|
677
|
+
// string-only. The fragment keys compose the name list ("@Pedro, @Juan and
|
|
678
|
+
// @Raúl" / "…and 5 more") so every language words the conjunction its own
|
|
679
|
+
// way. Plural shape mirrors `readBy`.
|
|
680
|
+
system: {
|
|
681
|
+
memberAdded: {
|
|
682
|
+
one: "{{members}} was added to the group",
|
|
683
|
+
other: "{{members}} were added to the group"
|
|
684
|
+
},
|
|
685
|
+
memberRemoved: {
|
|
686
|
+
one: "{{members}} was removed from the group",
|
|
687
|
+
other: "{{members}} were removed from the group"
|
|
688
|
+
},
|
|
689
|
+
memberLeft: {
|
|
690
|
+
one: "{{members}} left the group",
|
|
691
|
+
other: "{{members}} left the group"
|
|
692
|
+
},
|
|
693
|
+
// Name-list fragments: "Ana, Luis and Carla" / "Ana, Luis, Carla and 5 more".
|
|
694
|
+
membersWithLast: "{{names}} and {{last}}",
|
|
695
|
+
membersWithMore: "{{names}} and {{count}} more"
|
|
696
|
+
},
|
|
661
697
|
unreadCount: {
|
|
662
698
|
one: "{{count}} unread",
|
|
663
699
|
other: "{{count}} unread"
|