@unisim/sdk 0.141.4 → 0.141.6
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/README.md +40 -0
- package/dist/AboutAppDialog.d.ts +30 -7
- package/dist/AboutAppDialog.d.ts.map +1 -1
- package/dist/AboutAppDialog.js +15 -3
- package/dist/AboutAppDialog.js.map +1 -1
- package/dist/CompanyMenu.js +13 -5
- package/dist/CompanyMenu.js.map +1 -1
- package/dist/PrivacyNote.d.ts +35 -6
- package/dist/PrivacyNote.d.ts.map +1 -1
- package/dist/PrivacyNote.js +19 -7
- package/dist/PrivacyNote.js.map +1 -1
- package/dist/UniversalNavBar.d.ts.map +1 -1
- package/dist/UniversalNavBar.js +13 -2
- package/dist/UniversalNavBar.js.map +1 -1
- package/dist/UserProfile.d.ts.map +1 -1
- package/dist/UserProfile.js +5 -2
- package/dist/UserProfile.js.map +1 -1
- package/dist/contrast.d.ts +22 -0
- package/dist/contrast.d.ts.map +1 -1
- package/dist/contrast.js +25 -0
- package/dist/contrast.js.map +1 -1
- package/dist/i18n.d.ts +43 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +286 -11
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/privacyCopy.d.ts +85 -0
- package/dist/privacyCopy.d.ts.map +1 -0
- package/dist/privacyCopy.js +465 -0
- package/dist/privacyCopy.js.map +1 -0
- package/dist/provider.d.ts +8 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +16 -1
- package/dist/provider.js.map +1 -1
- package/package.json +3 -1
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@ export { chooseSessionStorage, createCookieStorage, createSharedKeychainStorage,
|
|
|
18
18
|
// The switcher uses these itself; they are exported so a product can put the
|
|
19
19
|
// same handoff behind its own affordance (a "continue in the app" row, say).
|
|
20
20
|
export { SUITE_NATIVE_APPS, suiteNativeApp, canProbeSuiteApps, installedSuiteApps, openSuiteApp, } from './suiteApps.js';
|
|
21
|
-
export { SUPPORTED_LANGUAGES, DEFAULT_LANGUAGE, isSupportedLanguage, resolveLanguage, t as translateNav, } from './i18n.js';
|
|
21
|
+
export { SUPPORTED_LANGUAGES, DEFAULT_LANGUAGE, isSupportedLanguage, resolveLanguage, languageFallbacks, pickTranslation, t as translateNav, } from './i18n.js';
|
|
22
22
|
export { useUser, useOrg, useOrgRole, signInWithPassword, signOut } from './auth.js';
|
|
23
23
|
export { useHasAccess, useHasFeature, useSeat } from './access.js';
|
|
24
24
|
export { useSeatSession } from './seatSession.js';
|
|
@@ -36,7 +36,8 @@ export { useOrgBranding } from './branding.js';
|
|
|
36
36
|
// WCAG contrast + the nearest legible shade of a (tenant's) colour. Powers
|
|
37
37
|
// `useOrgBranding().brand_color_accessible`; call directly for a stored colour
|
|
38
38
|
// (e.g. a per-poll colour) or a dark ground.
|
|
39
|
-
|
|
39
|
+
// `brandColorOn(c, 'dark')` is the one call for an org colour on a dark ground.
|
|
40
|
+
export { accessibleColor, brandColorOn, contrastRatio, textOn } from './contrast.js';
|
|
40
41
|
export { BRAND, NEUTRAL, SEMANTIC, LIGHT_THEME, DARK_THEME, brandCssVars, } from './brand.js';
|
|
41
42
|
export { downscaleImage } from './image.js';
|
|
42
43
|
export { useProfile, useUserProfile, useCurrentUserIdentity } from './profile.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,4BAA4B;AAC5B,0FAA0F;AAC1F,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,uEAAuE;AACvE,yEAAyE;AACzE,oCAAoC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAGtG,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7E,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,uDAAuD;AACvD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAA;AAQ5B,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,CAAC,IAAI,YAAY,GAClB,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGpF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACnD,yEAAyE;AACzE,iEAAiE;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,yEAAyE;AACzE,8EAA8E;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,EAAE,YAAY,EAAqC,MAAM,gBAAgB,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,2EAA2E;AAC3E,+EAA+E;AAC/E,6CAA6C;AAC7C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,4BAA4B;AAC5B,0FAA0F;AAC1F,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,uEAAuE;AACvE,yEAAyE;AACzE,oCAAoC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAGtG,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7E,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,uDAAuD;AACvD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAA;AAQ5B,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,CAAC,IAAI,YAAY,GAClB,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGpF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACnD,yEAAyE;AACzE,iEAAiE;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,yEAAyE;AACzE,8EAA8E;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,EAAE,YAAY,EAAqC,MAAM,gBAAgB,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,2EAA2E;AAC3E,+EAA+E;AAC/E,6CAA6C;AAC7C,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAGpF,OAAO,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAG3C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAOjF,OAAO,EACL,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAA;AAQpB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGjE,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAA;AAOtB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGzC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAG/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAQpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,aAAa,CAAA;AAUpB,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAY1B,8EAA8E;AAC9E,6EAA6E;AAC7E,0EAA0E;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAM1D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAG3E,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,+BAA+B,EAC/B,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,oBAAoB,CAAA;AAG3B,8EAA8E;AAC9E,4EAA4E;AAC5E,6CAA6C;AAC7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAGpE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAGjF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAGlF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAGnF,6EAA6E;AAC7E,4EAA4E;AAC5E,+CAA+C;AAC/C,OAAO,EACL,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,EACN,YAAY,GACb,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,gFAAgF;AAChF,8EAA8E;AAC9E,uDAAuD;AACvD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,GAClB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE9D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AASjE,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EACf,0BAA0B,GAC3B,MAAM,YAAY,CAAA;AAQnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAGlD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAQjF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAG9D,+EAA+E;AAC/E,gFAAgF;AAChF,oEAAoE;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,mEAAmE;AACnE,8EAA8E;AAC9E,uEAAuE;AACvE,mDAAmD;AACnD,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,4EAA4E;AAC5E,yEAAyE;AACzE,wDAAwD;AACxD,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE1F,gEAAgE;AAChE,6EAA6E;AAC7E,+EAA+E;AAC/E,oEAAoE;AACpE,0EAA0E;AAC1E,2CAA2C;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAInC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,2EAA2E;AAC3E,+EAA+E;AAC/E,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,6EAA6E;AAC7E,+BAA+B;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAEvF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAK9C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAK7F,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAGlE,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { type Language } from './i18n.js';
|
|
2
|
+
/** Every code a translated value may be given under, besides the required `en`. */
|
|
3
|
+
type OtherCode = Exclude<Language, 'en'> | 'pt';
|
|
4
|
+
/**
|
|
5
|
+
* Text an app supplies in more than one language, for <PrivacyNote>'s
|
|
6
|
+
* `headline` and `except`. `en` is required — it is what the note falls back
|
|
7
|
+
* to, and the wording every other entry must be a faithful translation of.
|
|
8
|
+
* Anything missing for the active language falls back along
|
|
9
|
+
* `languageFallbacks` (so `pt` answers both `pt-BR` and `pt-PT`), and if that
|
|
10
|
+
* finds nothing the WHOLE note renders in English.
|
|
11
|
+
*
|
|
12
|
+
* except={{ en: 'backup', fr: 'la sauvegarde', de: 'Backup' }}
|
|
13
|
+
*/
|
|
14
|
+
export type LocalizedText = {
|
|
15
|
+
readonly en: string;
|
|
16
|
+
} & {
|
|
17
|
+
readonly [K in OtherCode]?: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* One translation of a `subject`: a plain string takes its number from the
|
|
21
|
+
* component's `plural` prop; the object form states it, for a language where
|
|
22
|
+
* the noun's number differs from the English.
|
|
23
|
+
*/
|
|
24
|
+
export type SubjectForm = string | {
|
|
25
|
+
readonly text: string;
|
|
26
|
+
readonly plural: boolean;
|
|
27
|
+
};
|
|
28
|
+
/** A per-language `subject` for <PrivacyNote>. See {@link LocalizedText}. */
|
|
29
|
+
export type LocalizedSubject = {
|
|
30
|
+
readonly en: string;
|
|
31
|
+
} & {
|
|
32
|
+
readonly [K in OtherCode]?: SubjectForm;
|
|
33
|
+
};
|
|
34
|
+
/** The fixed words of the note, per language. */
|
|
35
|
+
interface NoteCopy {
|
|
36
|
+
/** The default contrast sentence. */
|
|
37
|
+
headline: string;
|
|
38
|
+
/** The two-word answer to the headline. */
|
|
39
|
+
weDont: string;
|
|
40
|
+
/** `{subject}` never leaves this computer. Singular and plural verb forms. */
|
|
41
|
+
body: string;
|
|
42
|
+
bodyPlural: string;
|
|
43
|
+
/** …with the caveat. `{except}` is one catalogue entry, verbatim. */
|
|
44
|
+
bodyExcept: string;
|
|
45
|
+
bodyExceptPlural: string;
|
|
46
|
+
/** The link word — the one word that carries the promise. */
|
|
47
|
+
guaranteed: string;
|
|
48
|
+
/** Hover hint when the link opens the app's PRIVACY.md. */
|
|
49
|
+
hintProof: string;
|
|
50
|
+
/** Hover hint when it can only open the repository. */
|
|
51
|
+
hintRepo: string;
|
|
52
|
+
/** The X's label — "any Universal app", because that is what it does. */
|
|
53
|
+
dismiss: string;
|
|
54
|
+
}
|
|
55
|
+
/** The English default subject — also the catalogue key it translates from. */
|
|
56
|
+
export declare const DEFAULT_PRIVACY_SUBJECT = "Your file";
|
|
57
|
+
/** What <PrivacyNote> renders. `headline: null` = render the app's element as given. */
|
|
58
|
+
export interface ResolvedPrivacyCopy {
|
|
59
|
+
/** The language the note is actually written in — for its `lang` attribute. */
|
|
60
|
+
lang: Language;
|
|
61
|
+
copy: NoteCopy;
|
|
62
|
+
headline: string | null;
|
|
63
|
+
subject: string;
|
|
64
|
+
plural: boolean;
|
|
65
|
+
except: string | null;
|
|
66
|
+
}
|
|
67
|
+
export interface PrivacyCopyInput {
|
|
68
|
+
subject?: string | LocalizedSubject;
|
|
69
|
+
plural?: boolean;
|
|
70
|
+
except?: string | LocalizedText | null;
|
|
71
|
+
/** Anything the component was given, including a React element. */
|
|
72
|
+
headline?: unknown;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The words <PrivacyNote> should print for `language` — translated whole, or
|
|
76
|
+
* English whole (rule 4). Exported for tests and for any surface that has to
|
|
77
|
+
* state the same claim outside the component.
|
|
78
|
+
*/
|
|
79
|
+
export declare function resolvePrivacyCopy(language: string | null | undefined, input: PrivacyCopyInput): ResolvedPrivacyCopy;
|
|
80
|
+
/** The claim sentence after "We don't.", with the subject and caveat filled in. */
|
|
81
|
+
export declare function privacyBody(r: ResolvedPrivacyCopy): string;
|
|
82
|
+
/** The BCP 47 tag for a resolved language — `en-gb` is the SDK's legacy spelling. */
|
|
83
|
+
export declare function langTag(lang: Language): string;
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=privacyCopy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privacyCopy.d.ts","sourceRoot":"","sources":["../src/privacyCopy.ts"],"names":[],"mappings":"AAiDA,OAAO,EAAsC,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAA;AAE7E,mFAAmF;AACnF,KAAK,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,IAAI,CAAA;AAE/C;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM;CAAE,CAAA;AAE5F;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAA;AAEtF,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,WAAW;CAAE,CAAA;AAEpG,iDAAiD;AACjD,UAAU,QAAQ;IAChB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAA;IAChB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAA;CAChB;AAgTD,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,cAAc,CAAA;AAsBlD,wFAAwF;AACxF,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAA;IACnC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAAA;IACtC,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAwED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,CAQpH;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAK1D;AAED,qFAAqF;AACrF,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAE9C"}
|
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Every word <PrivacyNote> can print, in every language the SDK supports.
|
|
3
|
+
//
|
|
4
|
+
// ⚠️ THIS IS THE SUITE'S LEGALLY LOAD-BEARING SENTENCE. Read before editing.
|
|
5
|
+
//
|
|
6
|
+
// "We don't. Your PDF never leaves this computer unless you choose it to
|
|
7
|
+
// (e.g. backup and send-to-sign)." is a promise, and a translation of it is
|
|
8
|
+
// the same promise. So, for every language below:
|
|
9
|
+
//
|
|
10
|
+
// 1. **Faithful, and never stronger than the English.** "never leaves this
|
|
11
|
+
// computer" stays "this computer" (not "your device", not "our servers
|
|
12
|
+
// never see"), "unless you choose it to" stays a choice the READER makes,
|
|
13
|
+
// and "e.g." stays "for example" — the caveat list is illustrative in
|
|
14
|
+
// English, so it is illustrative everywhere. A translation that reads
|
|
15
|
+
// better by promising more is a false statement in that language.
|
|
16
|
+
// 2. **An `except` caveat keeps exactly its English scope.** It is what keeps
|
|
17
|
+
// the sentence true for an app that CAN send something (hosted backup,
|
|
18
|
+
// "Send to sign", cloud signatures). Narrowing it in translation makes
|
|
19
|
+
// the claim false in that language only — the hardest kind of false to
|
|
20
|
+
// notice, because the English everyone reviews is still right.
|
|
21
|
+
// 3. **The hover hint says "in plain ENGLISH" in every language, on
|
|
22
|
+
// purpose.** It describes the app's PRIVACY.md, which is written in
|
|
23
|
+
// English. "Expliqué simplement en français" would be a promise about a
|
|
24
|
+
// page that does not exist.
|
|
25
|
+
// 4. **Never half-translated.** If any piece of a note — its headline,
|
|
26
|
+
// subject or caveat — has no translation for the active language, the
|
|
27
|
+
// WHOLE note renders in English (see `resolvePrivacyCopy`). A French
|
|
28
|
+
// sentence with an English caveat pasted into it is not a translation of
|
|
29
|
+
// the claim; it is a different, garbled claim.
|
|
30
|
+
//
|
|
31
|
+
// How an app's own words get translated
|
|
32
|
+
// -------------------------------------
|
|
33
|
+
// Apps pass English strings (`subject="Your PDF"`, `except="backup"`). Those
|
|
34
|
+
// strings are catalogued here, keyed by their EXACT English text, so every app
|
|
35
|
+
// that passed one before 0.141.5 is translated with no change on its side. A
|
|
36
|
+
// string that is not in the catalogue is not guessed at — rule 4 applies and
|
|
37
|
+
// the note stays English. So changing an app's English wording silently takes
|
|
38
|
+
// that app's note back to English everywhere until the new wording is added
|
|
39
|
+
// here; that is the safe direction to fail in.
|
|
40
|
+
//
|
|
41
|
+
// An app can instead pass a per-language map ({@link LocalizedText}), which
|
|
42
|
+
// keeps its wording in its own repo. Both routes are held to the same rules.
|
|
43
|
+
//
|
|
44
|
+
// Grammatical number is per LANGUAGE, not per app: "Your data" is plural in
|
|
45
|
+
// English and French but a singular in some languages, and "What you type" is
|
|
46
|
+
// singular everywhere. The catalogue carries its own number for each
|
|
47
|
+
// translation; the app's `plural` prop only ever decides the English.
|
|
48
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
49
|
+
import { languageFallbacks, resolveLanguage } from './i18n.js';
|
|
50
|
+
const EN = {
|
|
51
|
+
headline: 'Other companies upload your files to view them and scrape your data.',
|
|
52
|
+
weDont: 'We don’t.',
|
|
53
|
+
body: '{subject} never leaves this computer.',
|
|
54
|
+
bodyPlural: '{subject} never leave this computer.',
|
|
55
|
+
bodyExcept: '{subject} never leaves this computer unless you choose it to (e.g. {except}).',
|
|
56
|
+
bodyExceptPlural: '{subject} never leave this computer unless you choose it to (e.g. {except}).',
|
|
57
|
+
guaranteed: 'Guaranteed',
|
|
58
|
+
hintProof: 'Exactly what this app does with your file, in plain English — and the source that proves it',
|
|
59
|
+
hintRepo: 'Every line of this app is public — read the source on GitHub',
|
|
60
|
+
dismiss: "Don't show this again in any Universal app",
|
|
61
|
+
};
|
|
62
|
+
// Register per language follows the SDK's own chrome in that language: vous,
|
|
63
|
+
// tú (the About dialog's "Tu privacidad"), tu, Sie, você with the European
|
|
64
|
+
// article ("o seu"), você without it ("seu"), siz.
|
|
65
|
+
const COPY = {
|
|
66
|
+
'en': EN,
|
|
67
|
+
'en-gb': EN,
|
|
68
|
+
'fr': {
|
|
69
|
+
headline: 'D’autres entreprises téléversent vos fichiers pour les afficher et aspirent vos données.',
|
|
70
|
+
weDont: 'Nous, non.',
|
|
71
|
+
body: '{subject} ne quitte jamais cet ordinateur.',
|
|
72
|
+
bodyPlural: '{subject} ne quittent jamais cet ordinateur.',
|
|
73
|
+
bodyExcept: '{subject} ne quitte jamais cet ordinateur, sauf si vous le décidez (p. ex. {except}).',
|
|
74
|
+
bodyExceptPlural: '{subject} ne quittent jamais cet ordinateur, sauf si vous le décidez (p. ex. {except}).',
|
|
75
|
+
guaranteed: 'Garanti',
|
|
76
|
+
hintProof: 'Ce que fait exactement cette application de votre fichier, expliqué simplement en anglais — et le code source qui le prouve',
|
|
77
|
+
hintRepo: 'Chaque ligne de cette application est publique — lisez le code source sur GitHub',
|
|
78
|
+
dismiss: 'Ne plus afficher dans aucune application Universal',
|
|
79
|
+
},
|
|
80
|
+
'es': {
|
|
81
|
+
headline: 'Otras empresas suben tus archivos para mostrarlos y extraen tus datos.',
|
|
82
|
+
weDont: 'Nosotros no.',
|
|
83
|
+
body: '{subject} nunca sale de este ordenador.',
|
|
84
|
+
bodyPlural: '{subject} nunca salen de este ordenador.',
|
|
85
|
+
bodyExcept: '{subject} nunca sale de este ordenador, salvo que tú lo decidas (p. ej., {except}).',
|
|
86
|
+
bodyExceptPlural: '{subject} nunca salen de este ordenador, salvo que tú lo decidas (p. ej., {except}).',
|
|
87
|
+
guaranteed: 'Garantizado',
|
|
88
|
+
hintProof: 'Qué hace exactamente esta aplicación con tu archivo, explicado en inglés sencillo, y el código fuente que lo demuestra',
|
|
89
|
+
hintRepo: 'Cada línea de esta aplicación es pública: lee el código fuente en GitHub',
|
|
90
|
+
dismiss: 'No volver a mostrar en ninguna aplicación Universal',
|
|
91
|
+
},
|
|
92
|
+
'it': {
|
|
93
|
+
headline: 'Altre aziende caricano i tuoi file per visualizzarli ed estraggono i tuoi dati.',
|
|
94
|
+
weDont: 'Noi no.',
|
|
95
|
+
body: '{subject} non lascia mai questo computer.',
|
|
96
|
+
bodyPlural: '{subject} non lasciano mai questo computer.',
|
|
97
|
+
bodyExcept: '{subject} non lascia mai questo computer, a meno che non sia tu a deciderlo (ad es. {except}).',
|
|
98
|
+
bodyExceptPlural: '{subject} non lasciano mai questo computer, a meno che non sia tu a deciderlo (ad es. {except}).',
|
|
99
|
+
guaranteed: 'Garantito',
|
|
100
|
+
hintProof: 'Che cosa fa esattamente questa app con il tuo file, spiegato in inglese semplice — e il codice sorgente che lo dimostra',
|
|
101
|
+
hintRepo: 'Ogni riga di questa app è pubblica — leggi il codice sorgente su GitHub',
|
|
102
|
+
dismiss: 'Non mostrare più in nessuna app Universal',
|
|
103
|
+
},
|
|
104
|
+
'de': {
|
|
105
|
+
headline: 'Andere Unternehmen laden Ihre Dateien hoch, um sie anzuzeigen, und greifen Ihre Daten ab.',
|
|
106
|
+
weDont: 'Wir nicht.',
|
|
107
|
+
body: '{subject} verlässt diesen Computer nie.',
|
|
108
|
+
bodyPlural: '{subject} verlassen diesen Computer nie.',
|
|
109
|
+
bodyExcept: '{subject} verlässt diesen Computer nie, es sei denn, Sie entscheiden sich dafür (z. B. {except}).',
|
|
110
|
+
bodyExceptPlural: '{subject} verlassen diesen Computer nie, es sei denn, Sie entscheiden sich dafür (z. B. {except}).',
|
|
111
|
+
guaranteed: 'Garantiert',
|
|
112
|
+
hintProof: 'Was diese App genau mit Ihrer Datei macht, verständlich auf Englisch erklärt – und der Quellcode, der es belegt',
|
|
113
|
+
hintRepo: 'Jede Zeile dieser App ist öffentlich – lesen Sie den Quellcode auf GitHub',
|
|
114
|
+
dismiss: 'In keiner Universal-App mehr anzeigen',
|
|
115
|
+
},
|
|
116
|
+
'pt-BR': {
|
|
117
|
+
headline: 'Outras empresas fazem upload dos seus arquivos para exibi-los e extraem seus dados.',
|
|
118
|
+
weDont: 'Nós não.',
|
|
119
|
+
body: '{subject} nunca sai deste computador.',
|
|
120
|
+
bodyPlural: '{subject} nunca saem deste computador.',
|
|
121
|
+
bodyExcept: '{subject} nunca sai deste computador, a menos que você assim decida (por exemplo, {except}).',
|
|
122
|
+
bodyExceptPlural: '{subject} nunca saem deste computador, a menos que você assim decida (por exemplo, {except}).',
|
|
123
|
+
guaranteed: 'Garantido',
|
|
124
|
+
hintProof: 'O que este aplicativo faz exatamente com seu arquivo, explicado em inglês simples — e o código-fonte que comprova isso',
|
|
125
|
+
hintRepo: 'Cada linha deste aplicativo é pública — leia o código-fonte no GitHub',
|
|
126
|
+
dismiss: 'Não mostrar de novo em nenhum aplicativo Universal',
|
|
127
|
+
},
|
|
128
|
+
'pt-PT': {
|
|
129
|
+
headline: 'Outras empresas carregam os seus ficheiros para os mostrar e extraem os seus dados.',
|
|
130
|
+
weDont: 'Nós não.',
|
|
131
|
+
body: '{subject} nunca sai deste computador.',
|
|
132
|
+
bodyPlural: '{subject} nunca saem deste computador.',
|
|
133
|
+
bodyExcept: '{subject} nunca sai deste computador, a menos que assim o decida (p. ex., {except}).',
|
|
134
|
+
bodyExceptPlural: '{subject} nunca saem deste computador, a menos que assim o decida (p. ex., {except}).',
|
|
135
|
+
guaranteed: 'Garantido',
|
|
136
|
+
hintProof: 'O que esta aplicação faz exatamente com o seu ficheiro, explicado em inglês simples — e o código-fonte que o comprova',
|
|
137
|
+
hintRepo: 'Cada linha desta aplicação é pública — leia o código-fonte no GitHub',
|
|
138
|
+
dismiss: 'Não voltar a mostrar em nenhuma aplicação Universal',
|
|
139
|
+
},
|
|
140
|
+
'tr': {
|
|
141
|
+
headline: 'Diğer şirketler dosyalarınızı görüntülemek için karşıya yükler ve verilerinizi kazır.',
|
|
142
|
+
weDont: 'Biz yapmayız.',
|
|
143
|
+
// Turkish does not mark a plural inanimate subject on the verb, so the
|
|
144
|
+
// plural forms are the singular ones.
|
|
145
|
+
body: '{subject} bu bilgisayardan asla çıkmaz.',
|
|
146
|
+
bodyPlural: '{subject} bu bilgisayardan asla çıkmaz.',
|
|
147
|
+
bodyExcept: '{subject}, siz karar vermedikçe bu bilgisayardan asla çıkmaz (ör. {except}).',
|
|
148
|
+
bodyExceptPlural: '{subject}, siz karar vermedikçe bu bilgisayardan asla çıkmaz (ör. {except}).',
|
|
149
|
+
guaranteed: 'Garantili',
|
|
150
|
+
hintProof: 'Bu uygulamanın dosyanızla tam olarak ne yaptığı, sade İngilizceyle — ve bunu kanıtlayan kaynak kodu',
|
|
151
|
+
hintRepo: 'Bu uygulamanın her satırı herkese açık — kaynak kodunu GitHub’da okuyun',
|
|
152
|
+
dismiss: 'Bunu hiçbir Universal uygulamasında bir daha gösterme',
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
const s = (text, plural = false) => ({ text, plural });
|
|
156
|
+
/**
|
|
157
|
+
* Subjects, keyed by the exact English an app passes. Each translation states
|
|
158
|
+
* its own number. ⚠️ German relative-clause subjects ("Was Sie eingeben")
|
|
159
|
+
* carry their comma, because the verb always follows the subject directly.
|
|
160
|
+
*/
|
|
161
|
+
const SUBJECTS = {
|
|
162
|
+
// The component's default.
|
|
163
|
+
'Your file': {
|
|
164
|
+
fr: s('Votre fichier'), es: s('Tu archivo'), it: s('Il tuo file'), de: s('Ihre Datei'),
|
|
165
|
+
'pt-BR': s('Seu arquivo'), 'pt-PT': s('O seu ficheiro'), tr: s('Dosyanız'),
|
|
166
|
+
},
|
|
167
|
+
// Universal Converter, Universal Compress.
|
|
168
|
+
'Your files': {
|
|
169
|
+
fr: s('Vos fichiers', true), es: s('Tus archivos', true), it: s('I tuoi file', true), de: s('Ihre Dateien', true),
|
|
170
|
+
'pt-BR': s('Seus arquivos', true), 'pt-PT': s('Os seus ficheiros', true), tr: s('Dosyalarınız', true),
|
|
171
|
+
},
|
|
172
|
+
// Universal PDF.
|
|
173
|
+
'Your PDF': {
|
|
174
|
+
fr: s('Votre PDF'), es: s('Tu PDF'), it: s('Il tuo PDF'), de: s('Ihr PDF'),
|
|
175
|
+
'pt-BR': s('Seu PDF'), 'pt-PT': s('O seu PDF'), tr: s('PDF’iniz'),
|
|
176
|
+
},
|
|
177
|
+
// Universal Images, Universal Converter.
|
|
178
|
+
'Your images': {
|
|
179
|
+
fr: s('Vos images', true), es: s('Tus imágenes', true), it: s('Le tue immagini', true), de: s('Ihre Bilder', true),
|
|
180
|
+
'pt-BR': s('Suas imagens', true), 'pt-PT': s('As suas imagens', true), tr: s('Görselleriniz', true),
|
|
181
|
+
},
|
|
182
|
+
// Universal Video.
|
|
183
|
+
'Your video': {
|
|
184
|
+
fr: s('Votre vidéo'), es: s('Tu vídeo'), it: s('Il tuo video'), de: s('Ihr Video'),
|
|
185
|
+
'pt-BR': s('Seu vídeo'), 'pt-PT': s('O seu vídeo'), tr: s('Videonuz'),
|
|
186
|
+
},
|
|
187
|
+
// Universal Converter.
|
|
188
|
+
'Your videos': {
|
|
189
|
+
fr: s('Vos vidéos', true), es: s('Tus vídeos', true), it: s('I tuoi video', true), de: s('Ihre Videos', true),
|
|
190
|
+
'pt-BR': s('Seus vídeos', true), 'pt-PT': s('Os seus vídeos', true), tr: s('Videolarınız', true),
|
|
191
|
+
},
|
|
192
|
+
// Universal Converter.
|
|
193
|
+
'Your audio files': {
|
|
194
|
+
fr: s('Vos fichiers audio', true), es: s('Tus archivos de audio', true), it: s('I tuoi file audio', true), de: s('Ihre Audiodateien', true),
|
|
195
|
+
'pt-BR': s('Seus arquivos de áudio', true), 'pt-PT': s('Os seus ficheiros de áudio', true), tr: s('Ses dosyalarınız', true),
|
|
196
|
+
},
|
|
197
|
+
// Universal Converter.
|
|
198
|
+
'Your documents': {
|
|
199
|
+
fr: s('Vos documents', true), es: s('Tus documentos', true), it: s('I tuoi documenti', true), de: s('Ihre Dokumente', true),
|
|
200
|
+
'pt-BR': s('Seus documentos', true), 'pt-PT': s('Os seus documentos', true), tr: s('Belgeleriniz', true),
|
|
201
|
+
},
|
|
202
|
+
// Universal Signatures.
|
|
203
|
+
'Your signature': {
|
|
204
|
+
fr: s('Votre signature'), es: s('Tu firma'), it: s('La tua firma'), de: s('Ihre Unterschrift'),
|
|
205
|
+
'pt-BR': s('Sua assinatura'), 'pt-PT': s('A sua assinatura'), tr: s('İmzanız'),
|
|
206
|
+
},
|
|
207
|
+
// Universal Charts.
|
|
208
|
+
'Your data': {
|
|
209
|
+
fr: s('Vos données', true), es: s('Tus datos', true), it: s('I tuoi dati', true), de: s('Ihre Daten', true),
|
|
210
|
+
'pt-BR': s('Seus dados', true), 'pt-PT': s('Os seus dados', true), tr: s('Verileriniz', true),
|
|
211
|
+
},
|
|
212
|
+
// Universal QR.
|
|
213
|
+
'What you type': {
|
|
214
|
+
fr: s('Ce que vous saisissez'), es: s('Lo que escribes'), it: s('Ciò che scrivi'), de: s('Was Sie eingeben,'),
|
|
215
|
+
'pt-BR': s('O que você digita'), 'pt-PT': s('O que escreve'), tr: s('Yazdıklarınız'),
|
|
216
|
+
},
|
|
217
|
+
// Universal Recorder.
|
|
218
|
+
'Your recording': {
|
|
219
|
+
fr: s('Votre enregistrement'), es: s('Tu grabación'), it: s('La tua registrazione'), de: s('Ihre Aufnahme'),
|
|
220
|
+
'pt-BR': s('Sua gravação'), 'pt-PT': s('A sua gravação'), tr: s('Kaydınız'),
|
|
221
|
+
},
|
|
222
|
+
// Universal USB. Plural in the app's English; a singular clause in each of
|
|
223
|
+
// these, where "what …" takes a singular verb.
|
|
224
|
+
'What the browser reads from the device': {
|
|
225
|
+
fr: s('Ce que le navigateur lit sur l’appareil'), es: s('Lo que el navegador lee del dispositivo'),
|
|
226
|
+
it: s('Ciò che il browser legge dal dispositivo'), de: s('Was der Browser vom Gerät ausliest,'),
|
|
227
|
+
'pt-BR': s('O que o navegador lê do dispositivo'), 'pt-PT': s('O que o navegador lê do dispositivo'),
|
|
228
|
+
tr: s('Tarayıcının cihazdan okudukları'),
|
|
229
|
+
},
|
|
230
|
+
// Universal BlackBook.
|
|
231
|
+
'Your contacts': {
|
|
232
|
+
fr: s('Vos contacts', true), es: s('Tus contactos', true), it: s('I tuoi contatti', true), de: s('Ihre Kontakte', true),
|
|
233
|
+
'pt-BR': s('Seus contatos', true), 'pt-PT': s('Os seus contactos', true), tr: s('Kişileriniz', true),
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* `except` caveats, keyed by the exact English an app passes. ⚠️ Each keeps
|
|
238
|
+
* the English scope — see rule 2 at the top. Where a caveat refers back to
|
|
239
|
+
* its app's subject ("saving IT"), the pronoun agrees with THAT app's subject
|
|
240
|
+
* in the catalogue above (Recorder: la grabación / la registrazione / die
|
|
241
|
+
* Aufnahme / a gravação).
|
|
242
|
+
*/
|
|
243
|
+
const CAVEATS = {
|
|
244
|
+
// Universal Images.
|
|
245
|
+
'backup': {
|
|
246
|
+
fr: 'la sauvegarde', es: 'la copia de seguridad', it: 'il backup', de: 'Backup',
|
|
247
|
+
'pt-BR': 'o backup', 'pt-PT': 'a cópia de segurança', tr: 'yedekleme',
|
|
248
|
+
},
|
|
249
|
+
// Universal PDF.
|
|
250
|
+
'backup and send-to-sign': {
|
|
251
|
+
fr: 'la sauvegarde et l’envoi pour signature', es: 'la copia de seguridad y el envío para firmar',
|
|
252
|
+
it: 'il backup e l’invio per la firma', de: 'Backup und Senden zur Unterschrift',
|
|
253
|
+
'pt-BR': 'o backup e o envio para assinatura', 'pt-PT': 'a cópia de segurança e o envio para assinatura',
|
|
254
|
+
tr: 'yedekleme ve imzaya gönderme',
|
|
255
|
+
},
|
|
256
|
+
// Universal Signatures.
|
|
257
|
+
'saving one to the cloud, or signing on your phone': {
|
|
258
|
+
fr: 'en enregistrer une dans le cloud, ou signer sur votre téléphone',
|
|
259
|
+
es: 'guardar una en la nube, o firmar en tu móvil',
|
|
260
|
+
it: 'salvarne una nel cloud, o firmare sul telefono',
|
|
261
|
+
de: 'eine in der Cloud speichern oder auf Ihrem Handy unterschreiben',
|
|
262
|
+
'pt-BR': 'salvar uma na nuvem, ou assinar no celular',
|
|
263
|
+
'pt-PT': 'guardar uma na nuvem, ou assinar no telemóvel',
|
|
264
|
+
tr: 'birini buluta kaydetmek veya telefonunuzda imzalamak',
|
|
265
|
+
},
|
|
266
|
+
// Universal QR.
|
|
267
|
+
'a code you save to your account': {
|
|
268
|
+
fr: 'un code que vous enregistrez dans votre compte', es: 'un código que guardas en tu cuenta',
|
|
269
|
+
it: 'un codice che salvi nel tuo account', de: 'ein Code, den Sie in Ihrem Konto speichern',
|
|
270
|
+
'pt-BR': 'um código que você salva na sua conta', 'pt-PT': 'um código que guarda na sua conta',
|
|
271
|
+
tr: 'hesabınıza kaydettiğiniz bir kod',
|
|
272
|
+
},
|
|
273
|
+
// Universal Recorder.
|
|
274
|
+
'saving it to your account': {
|
|
275
|
+
fr: 'l’enregistrer dans votre compte', es: 'guardarla en tu cuenta', it: 'salvarla nel tuo account',
|
|
276
|
+
de: 'sie in Ihrem Konto speichern', 'pt-BR': 'salvá-la na sua conta', 'pt-PT': 'guardá-la na sua conta',
|
|
277
|
+
tr: 'hesabınıza kaydetmek',
|
|
278
|
+
},
|
|
279
|
+
// Universal BlackBook.
|
|
280
|
+
'the end-to-end encrypted backup you choose to store': {
|
|
281
|
+
fr: 'la sauvegarde chiffrée de bout en bout que vous choisissez de stocker',
|
|
282
|
+
es: 'la copia de seguridad cifrada de extremo a extremo que tú eliges guardar',
|
|
283
|
+
it: 'il backup crittografato end-to-end che scegli di archiviare',
|
|
284
|
+
de: 'das Ende-zu-Ende-verschlüsselte Backup, das Sie speichern möchten',
|
|
285
|
+
'pt-BR': 'o backup com criptografia de ponta a ponta que você escolhe armazenar',
|
|
286
|
+
'pt-PT': 'a cópia de segurança encriptada ponto a ponto que decide guardar',
|
|
287
|
+
tr: 'saklamayı seçtiğiniz uçtan uca şifreli yedek',
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
/** Per-app `headline` overrides, keyed by their exact English. */
|
|
291
|
+
const HEADLINES = {
|
|
292
|
+
// Universal Charts.
|
|
293
|
+
'Other chart tools upload your spreadsheet to draw it on their servers.': {
|
|
294
|
+
fr: 'D’autres outils de graphiques téléversent votre feuille de calcul pour la tracer sur leurs serveurs.',
|
|
295
|
+
es: 'Otras herramientas de gráficos suben tu hoja de cálculo para dibujarla en sus servidores.',
|
|
296
|
+
it: 'Altri strumenti per grafici caricano il tuo foglio di calcolo per disegnarlo sui loro server.',
|
|
297
|
+
de: 'Andere Diagramm-Tools laden Ihre Tabelle hoch, um sie auf ihren Servern zu zeichnen.',
|
|
298
|
+
'pt-BR': 'Outras ferramentas de gráficos fazem upload da sua planilha para desenhá-la nos servidores delas.',
|
|
299
|
+
'pt-PT': 'Outras ferramentas de gráficos carregam a sua folha de cálculo para a desenhar nos servidores delas.',
|
|
300
|
+
tr: 'Diğer grafik araçları, elektronik tablonuzu kendi sunucularında çizmek için karşıya yükler.',
|
|
301
|
+
},
|
|
302
|
+
// Universal QR.
|
|
303
|
+
'Other QR sites build your code on their servers — and a dynamic one can be changed or tracked later.': {
|
|
304
|
+
fr: 'D’autres sites de QR code génèrent votre code sur leurs serveurs — et un code dynamique peut être modifié ou suivi plus tard.',
|
|
305
|
+
es: 'Otros sitios de códigos QR crean tu código en sus servidores, y uno dinámico puede modificarse o rastrearse más adelante.',
|
|
306
|
+
it: 'Altri siti di codici QR generano il tuo codice sui loro server — e uno dinamico può essere modificato o tracciato in seguito.',
|
|
307
|
+
de: 'Andere QR-Seiten erzeugen Ihren Code auf ihren Servern – und ein dynamischer Code kann später geändert oder verfolgt werden.',
|
|
308
|
+
'pt-BR': 'Outros sites de QR code criam seu código nos servidores deles — e um código dinâmico pode ser alterado ou rastreado depois.',
|
|
309
|
+
'pt-PT': 'Outros sites de códigos QR criam o seu código nos servidores deles — e um código dinâmico pode ser alterado ou rastreado mais tarde.',
|
|
310
|
+
tr: 'Diğer QR siteleri kodunuzu kendi sunucularında oluşturur — dinamik bir kod ise sonradan değiştirilebilir veya takip edilebilir.',
|
|
311
|
+
},
|
|
312
|
+
// Universal Recorder.
|
|
313
|
+
'Other recorders upload your recording to their servers to process it.': {
|
|
314
|
+
fr: 'D’autres enregistreurs téléversent votre enregistrement sur leurs serveurs pour le traiter.',
|
|
315
|
+
es: 'Otras grabadoras suben tu grabación a sus servidores para procesarla.',
|
|
316
|
+
it: 'Altri registratori caricano la tua registrazione sui loro server per elaborarla.',
|
|
317
|
+
de: 'Andere Rekorder laden Ihre Aufnahme auf ihre Server hoch, um sie zu verarbeiten.',
|
|
318
|
+
'pt-BR': 'Outros gravadores fazem upload da sua gravação para os servidores deles para processá-la.',
|
|
319
|
+
'pt-PT': 'Outros gravadores carregam a sua gravação para os servidores deles para a processar.',
|
|
320
|
+
tr: 'Diğer kayıt uygulamaları, kaydınızı işlemek için kendi sunucularına yükler.',
|
|
321
|
+
},
|
|
322
|
+
// Universal USB.
|
|
323
|
+
'Other tools want an install, or send what they find to a server.': {
|
|
324
|
+
fr: 'D’autres outils exigent une installation, ou envoient ce qu’ils trouvent à un serveur.',
|
|
325
|
+
es: 'Otras herramientas piden instalar algo, o envían lo que encuentran a un servidor.',
|
|
326
|
+
it: 'Altri strumenti richiedono un’installazione, o inviano ciò che trovano a un server.',
|
|
327
|
+
de: 'Andere Tools verlangen eine Installation oder senden, was sie finden, an einen Server.',
|
|
328
|
+
'pt-BR': 'Outras ferramentas exigem instalação, ou enviam o que encontram para um servidor.',
|
|
329
|
+
'pt-PT': 'Outras ferramentas exigem uma instalação, ou enviam o que encontram para um servidor.',
|
|
330
|
+
tr: 'Diğer araçlar kurulum ister ya da bulduklarını bir sunucuya gönderir.',
|
|
331
|
+
},
|
|
332
|
+
// Universal BlackBook.
|
|
333
|
+
'Other address books keep your contacts on their servers.': {
|
|
334
|
+
fr: 'D’autres carnets d’adresses conservent vos contacts sur leurs serveurs.',
|
|
335
|
+
es: 'Otras agendas guardan tus contactos en sus servidores.',
|
|
336
|
+
it: 'Altre rubriche conservano i tuoi contatti sui loro server.',
|
|
337
|
+
de: 'Andere Adressbücher speichern Ihre Kontakte auf ihren Servern.',
|
|
338
|
+
'pt-BR': 'Outras agendas guardam seus contatos nos servidores delas.',
|
|
339
|
+
'pt-PT': 'Outras agendas guardam os seus contactos nos servidores delas.',
|
|
340
|
+
tr: 'Diğer adres defterleri kişilerinizi kendi sunucularında tutar.',
|
|
341
|
+
},
|
|
342
|
+
};
|
|
343
|
+
/** The English default subject — also the catalogue key it translates from. */
|
|
344
|
+
export const DEFAULT_PRIVACY_SUBJECT = 'Your file';
|
|
345
|
+
/** A per-language map rather than a plain string or a React element. */
|
|
346
|
+
function isLocalized(value) {
|
|
347
|
+
return (typeof value === 'object' &&
|
|
348
|
+
value !== null &&
|
|
349
|
+
!('$$typeof' in value) && // a React element
|
|
350
|
+
!(Symbol.iterator in value) && // a fragment / array of nodes
|
|
351
|
+
typeof value.en === 'string');
|
|
352
|
+
}
|
|
353
|
+
/** The map's entry for `lang`, walking `languageFallbacks` but never to `en`. */
|
|
354
|
+
function fromMap(map, lang) {
|
|
355
|
+
for (const code of languageFallbacks(lang)) {
|
|
356
|
+
if (code === 'en')
|
|
357
|
+
break;
|
|
358
|
+
if (map[code] !== undefined)
|
|
359
|
+
return map[code];
|
|
360
|
+
}
|
|
361
|
+
return undefined;
|
|
362
|
+
}
|
|
363
|
+
function english({ subject, plural = false, except, headline }, lang) {
|
|
364
|
+
const subjectText = subject === undefined ? DEFAULT_PRIVACY_SUBJECT : isLocalized(subject) ? subject.en : subject;
|
|
365
|
+
const exceptText = except == null ? null : isLocalized(except) ? except.en : except;
|
|
366
|
+
return {
|
|
367
|
+
lang,
|
|
368
|
+
copy: COPY[lang],
|
|
369
|
+
headline: headline === undefined ? COPY[lang].headline
|
|
370
|
+
: typeof headline === 'string' ? headline
|
|
371
|
+
: isLocalized(headline) ? headline.en
|
|
372
|
+
: null,
|
|
373
|
+
subject: subjectText,
|
|
374
|
+
plural,
|
|
375
|
+
except: exceptText || null,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
/** Every piece in `lang`, or `null` if any piece has no translation. */
|
|
379
|
+
function translated({ subject, plural = false, except, headline }, lang) {
|
|
380
|
+
let headlineText;
|
|
381
|
+
if (headline === undefined)
|
|
382
|
+
headlineText = COPY[lang].headline;
|
|
383
|
+
else if (typeof headline === 'string') {
|
|
384
|
+
const hit = HEADLINES[headline.trim()]?.[lang];
|
|
385
|
+
if (!hit)
|
|
386
|
+
return null;
|
|
387
|
+
headlineText = hit;
|
|
388
|
+
}
|
|
389
|
+
else if (isLocalized(headline)) {
|
|
390
|
+
const hit = fromMap(headline, lang);
|
|
391
|
+
if (typeof hit !== 'string' || !hit)
|
|
392
|
+
return null;
|
|
393
|
+
headlineText = hit;
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
// An element the app rendered itself — its words are the app's to translate.
|
|
397
|
+
headlineText = null;
|
|
398
|
+
}
|
|
399
|
+
let subjectText;
|
|
400
|
+
let subjectPlural;
|
|
401
|
+
if (subject === undefined || typeof subject === 'string') {
|
|
402
|
+
const hit = SUBJECTS[(subject ?? DEFAULT_PRIVACY_SUBJECT).trim()]?.[lang];
|
|
403
|
+
if (!hit)
|
|
404
|
+
return null;
|
|
405
|
+
subjectText = hit.text;
|
|
406
|
+
subjectPlural = hit.plural;
|
|
407
|
+
}
|
|
408
|
+
else if (isLocalized(subject)) {
|
|
409
|
+
const hit = fromMap(subject, lang);
|
|
410
|
+
if (typeof hit === 'string' && hit) {
|
|
411
|
+
subjectText = hit;
|
|
412
|
+
subjectPlural = plural;
|
|
413
|
+
}
|
|
414
|
+
else if (typeof hit === 'object' && hit !== null &&
|
|
415
|
+
typeof hit.text === 'string' && hit.text) {
|
|
416
|
+
subjectText = hit.text;
|
|
417
|
+
subjectPlural = !!hit.plural;
|
|
418
|
+
}
|
|
419
|
+
else
|
|
420
|
+
return null;
|
|
421
|
+
}
|
|
422
|
+
else
|
|
423
|
+
return null;
|
|
424
|
+
let exceptText = null;
|
|
425
|
+
if (typeof except === 'string' && except) {
|
|
426
|
+
const hit = CAVEATS[except.trim()]?.[lang];
|
|
427
|
+
if (!hit)
|
|
428
|
+
return null;
|
|
429
|
+
exceptText = hit;
|
|
430
|
+
}
|
|
431
|
+
else if (isLocalized(except)) {
|
|
432
|
+
const hit = fromMap(except, lang);
|
|
433
|
+
if (typeof hit !== 'string' || !hit)
|
|
434
|
+
return null;
|
|
435
|
+
exceptText = hit;
|
|
436
|
+
}
|
|
437
|
+
return { lang, copy: COPY[lang], headline: headlineText, subject: subjectText, plural: subjectPlural, except: exceptText };
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* The words <PrivacyNote> should print for `language` — translated whole, or
|
|
441
|
+
* English whole (rule 4). Exported for tests and for any surface that has to
|
|
442
|
+
* state the same claim outside the component.
|
|
443
|
+
*/
|
|
444
|
+
export function resolvePrivacyCopy(language, input) {
|
|
445
|
+
const lang = resolveLanguage(language) ?? 'en';
|
|
446
|
+
if (lang !== 'en' && lang !== 'en-gb') {
|
|
447
|
+
const hit = translated(input, lang);
|
|
448
|
+
if (hit)
|
|
449
|
+
return hit;
|
|
450
|
+
return english(input, 'en');
|
|
451
|
+
}
|
|
452
|
+
return english(input, lang);
|
|
453
|
+
}
|
|
454
|
+
/** The claim sentence after "We don't.", with the subject and caveat filled in. */
|
|
455
|
+
export function privacyBody(r) {
|
|
456
|
+
const template = r.except
|
|
457
|
+
? (r.plural ? r.copy.bodyExceptPlural : r.copy.bodyExcept)
|
|
458
|
+
: (r.plural ? r.copy.bodyPlural : r.copy.body);
|
|
459
|
+
return template.replace('{subject}', r.subject).replace('{except}', r.except ?? '');
|
|
460
|
+
}
|
|
461
|
+
/** The BCP 47 tag for a resolved language — `en-gb` is the SDK's legacy spelling. */
|
|
462
|
+
export function langTag(lang) {
|
|
463
|
+
return lang === 'en-gb' ? 'en-GB' : lang;
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=privacyCopy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privacyCopy.js","sourceRoot":"","sources":["../src/privacyCopy.ts"],"names":[],"mappings":"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"}
|