@bigbluebutton/tlschema 2.0.0-alpha.19
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/LICENSE +190 -0
- package/dist-cjs/TLStore.js +133 -0
- package/dist-cjs/TLStore.js.map +7 -0
- package/dist-cjs/assets/TLBaseAsset.js +37 -0
- package/dist-cjs/assets/TLBaseAsset.js.map +7 -0
- package/dist-cjs/assets/TLBookmarkAsset.js +38 -0
- package/dist-cjs/assets/TLBookmarkAsset.js.map +7 -0
- package/dist-cjs/assets/TLImageAsset.js +76 -0
- package/dist-cjs/assets/TLImageAsset.js.map +7 -0
- package/dist-cjs/assets/TLVideoAsset.js +76 -0
- package/dist-cjs/assets/TLVideoAsset.js.map +7 -0
- package/dist-cjs/createPresenceStateDerivation.js +68 -0
- package/dist-cjs/createPresenceStateDerivation.js.map +7 -0
- package/dist-cjs/createTLSchema.js +68 -0
- package/dist-cjs/createTLSchema.js.map +7 -0
- package/dist-cjs/index.d.ts +1414 -0
- package/dist-cjs/index.js +142 -0
- package/dist-cjs/index.js.map +7 -0
- package/dist-cjs/misc/TLColor.js +36 -0
- package/dist-cjs/misc/TLColor.js.map +7 -0
- package/dist-cjs/misc/TLCursor.js +55 -0
- package/dist-cjs/misc/TLCursor.js.map +7 -0
- package/dist-cjs/misc/TLHandle.js +36 -0
- package/dist-cjs/misc/TLHandle.js.map +7 -0
- package/dist-cjs/misc/TLOpacity.js +30 -0
- package/dist-cjs/misc/TLOpacity.js.map +7 -0
- package/dist-cjs/misc/TLScribble.js +40 -0
- package/dist-cjs/misc/TLScribble.js.map +7 -0
- package/dist-cjs/misc/geometry-types.js +37 -0
- package/dist-cjs/misc/geometry-types.js.map +7 -0
- package/dist-cjs/misc/id-validator.js +33 -0
- package/dist-cjs/misc/id-validator.js.map +7 -0
- package/dist-cjs/records/TLAsset.js +74 -0
- package/dist-cjs/records/TLAsset.js.map +7 -0
- package/dist-cjs/records/TLCamera.js +74 -0
- package/dist-cjs/records/TLCamera.js.map +7 -0
- package/dist-cjs/records/TLDocument.js +82 -0
- package/dist-cjs/records/TLDocument.js.map +7 -0
- package/dist-cjs/records/TLInstance.js +452 -0
- package/dist-cjs/records/TLInstance.js.map +7 -0
- package/dist-cjs/records/TLPage.js +74 -0
- package/dist-cjs/records/TLPage.js.map +7 -0
- package/dist-cjs/records/TLPageState.js +209 -0
- package/dist-cjs/records/TLPageState.js.map +7 -0
- package/dist-cjs/records/TLPointer.js +76 -0
- package/dist-cjs/records/TLPointer.js.map +7 -0
- package/dist-cjs/records/TLPresence.js +170 -0
- package/dist-cjs/records/TLPresence.js.map +7 -0
- package/dist-cjs/records/TLRecord.js +17 -0
- package/dist-cjs/records/TLRecord.js.map +7 -0
- package/dist-cjs/records/TLShape.js +147 -0
- package/dist-cjs/records/TLShape.js.map +7 -0
- package/dist-cjs/shapes/TLArrowShape.js +156 -0
- package/dist-cjs/shapes/TLArrowShape.js.map +7 -0
- package/dist-cjs/shapes/TLBaseShape.js +52 -0
- package/dist-cjs/shapes/TLBaseShape.js.map +7 -0
- package/dist-cjs/shapes/TLBookmarkShape.js +57 -0
- package/dist-cjs/shapes/TLBookmarkShape.js.map +7 -0
- package/dist-cjs/shapes/TLDrawShape.js +89 -0
- package/dist-cjs/shapes/TLDrawShape.js.map +7 -0
- package/dist-cjs/shapes/TLEmbedShape.js +709 -0
- package/dist-cjs/shapes/TLEmbedShape.js.map +7 -0
- package/dist-cjs/shapes/TLFrameShape.js +33 -0
- package/dist-cjs/shapes/TLFrameShape.js.map +7 -0
- package/dist-cjs/shapes/TLGeoShape.js +230 -0
- package/dist-cjs/shapes/TLGeoShape.js.map +7 -0
- package/dist-cjs/shapes/TLGroupShape.js +28 -0
- package/dist-cjs/shapes/TLGroupShape.js.map +7 -0
- package/dist-cjs/shapes/TLHighlightShape.js +38 -0
- package/dist-cjs/shapes/TLHighlightShape.js.map +7 -0
- package/dist-cjs/shapes/TLImageShape.js +69 -0
- package/dist-cjs/shapes/TLImageShape.js.map +7 -0
- package/dist-cjs/shapes/TLLineShape.js +70 -0
- package/dist-cjs/shapes/TLLineShape.js.map +7 -0
- package/dist-cjs/shapes/TLNoteShape.js +144 -0
- package/dist-cjs/shapes/TLNoteShape.js.map +7 -0
- package/dist-cjs/shapes/TLTextShape.js +67 -0
- package/dist-cjs/shapes/TLTextShape.js.map +7 -0
- package/dist-cjs/shapes/TLVideoShape.js +53 -0
- package/dist-cjs/shapes/TLVideoShape.js.map +7 -0
- package/dist-cjs/store-migrations.js +81 -0
- package/dist-cjs/store-migrations.js.map +7 -0
- package/dist-cjs/styles/StyleProp.js +94 -0
- package/dist-cjs/styles/StyleProp.js.map +7 -0
- package/dist-cjs/styles/TLColorStyle.js +283 -0
- package/dist-cjs/styles/TLColorStyle.js.map +7 -0
- package/dist-cjs/styles/TLDashStyle.js +29 -0
- package/dist-cjs/styles/TLDashStyle.js.map +7 -0
- package/dist-cjs/styles/TLFillStyle.js +29 -0
- package/dist-cjs/styles/TLFillStyle.js.map +7 -0
- package/dist-cjs/styles/TLFontStyle.js +36 -0
- package/dist-cjs/styles/TLFontStyle.js.map +7 -0
- package/dist-cjs/styles/TLHorizontalAlignStyle.js +29 -0
- package/dist-cjs/styles/TLHorizontalAlignStyle.js.map +7 -0
- package/dist-cjs/styles/TLSizeStyle.js +29 -0
- package/dist-cjs/styles/TLSizeStyle.js.map +7 -0
- package/dist-cjs/styles/TLVerticalAlignStyle.js +29 -0
- package/dist-cjs/styles/TLVerticalAlignStyle.js.map +7 -0
- package/dist-cjs/translations/languages.js +59 -0
- package/dist-cjs/translations/languages.js.map +7 -0
- package/dist-cjs/translations/translations.js +63 -0
- package/dist-cjs/translations/translations.js.map +7 -0
- package/dist-cjs/util-types.js +17 -0
- package/dist-cjs/util-types.js.map +7 -0
- package/dist-esm/TLStore.mjs +113 -0
- package/dist-esm/TLStore.mjs.map +7 -0
- package/dist-esm/assets/TLBaseAsset.mjs +17 -0
- package/dist-esm/assets/TLBaseAsset.mjs.map +7 -0
- package/dist-esm/assets/TLBookmarkAsset.mjs +18 -0
- package/dist-esm/assets/TLBookmarkAsset.mjs.map +7 -0
- package/dist-esm/assets/TLImageAsset.mjs +56 -0
- package/dist-esm/assets/TLImageAsset.mjs.map +7 -0
- package/dist-esm/assets/TLVideoAsset.mjs +56 -0
- package/dist-esm/assets/TLVideoAsset.mjs.map +7 -0
- package/dist-esm/createPresenceStateDerivation.mjs +48 -0
- package/dist-esm/createPresenceStateDerivation.mjs.map +7 -0
- package/dist-esm/createTLSchema.mjs +48 -0
- package/dist-esm/createTLSchema.mjs.map +7 -0
- package/dist-esm/index.d.mts +1414 -0
- package/dist-esm/index.mjs +193 -0
- package/dist-esm/index.mjs.map +7 -0
- package/dist-esm/misc/TLColor.mjs +16 -0
- package/dist-esm/misc/TLColor.mjs.map +7 -0
- package/dist-esm/misc/TLCursor.mjs +35 -0
- package/dist-esm/misc/TLCursor.mjs.map +7 -0
- package/dist-esm/misc/TLHandle.mjs +16 -0
- package/dist-esm/misc/TLHandle.mjs.map +7 -0
- package/dist-esm/misc/TLOpacity.mjs +10 -0
- package/dist-esm/misc/TLOpacity.mjs.map +7 -0
- package/dist-esm/misc/TLScribble.mjs +20 -0
- package/dist-esm/misc/TLScribble.mjs.map +7 -0
- package/dist-esm/misc/geometry-types.mjs +17 -0
- package/dist-esm/misc/geometry-types.mjs.map +7 -0
- package/dist-esm/misc/id-validator.mjs +13 -0
- package/dist-esm/misc/id-validator.mjs.map +7 -0
- package/dist-esm/records/TLAsset.mjs +57 -0
- package/dist-esm/records/TLAsset.mjs.map +7 -0
- package/dist-esm/records/TLCamera.mjs +54 -0
- package/dist-esm/records/TLCamera.mjs.map +7 -0
- package/dist-esm/records/TLDocument.mjs +62 -0
- package/dist-esm/records/TLDocument.mjs.map +7 -0
- package/dist-esm/records/TLInstance.mjs +432 -0
- package/dist-esm/records/TLInstance.mjs.map +7 -0
- package/dist-esm/records/TLPage.mjs +54 -0
- package/dist-esm/records/TLPage.mjs.map +7 -0
- package/dist-esm/records/TLPageState.mjs +189 -0
- package/dist-esm/records/TLPageState.mjs.map +7 -0
- package/dist-esm/records/TLPointer.mjs +56 -0
- package/dist-esm/records/TLPointer.mjs.map +7 -0
- package/dist-esm/records/TLPresence.mjs +150 -0
- package/dist-esm/records/TLPresence.mjs.map +7 -0
- package/dist-esm/records/TLRecord.mjs +1 -0
- package/dist-esm/records/TLRecord.mjs.map +7 -0
- package/dist-esm/records/TLShape.mjs +127 -0
- package/dist-esm/records/TLShape.mjs.map +7 -0
- package/dist-esm/shapes/TLArrowShape.mjs +136 -0
- package/dist-esm/shapes/TLArrowShape.mjs.map +7 -0
- package/dist-esm/shapes/TLBaseShape.mjs +32 -0
- package/dist-esm/shapes/TLBaseShape.mjs.map +7 -0
- package/dist-esm/shapes/TLBookmarkShape.mjs +37 -0
- package/dist-esm/shapes/TLBookmarkShape.mjs.map +7 -0
- package/dist-esm/shapes/TLDrawShape.mjs +69 -0
- package/dist-esm/shapes/TLDrawShape.mjs.map +7 -0
- package/dist-esm/shapes/TLEmbedShape.mjs +689 -0
- package/dist-esm/shapes/TLEmbedShape.mjs.map +7 -0
- package/dist-esm/shapes/TLFrameShape.mjs +13 -0
- package/dist-esm/shapes/TLFrameShape.mjs.map +7 -0
- package/dist-esm/shapes/TLGeoShape.mjs +212 -0
- package/dist-esm/shapes/TLGeoShape.mjs.map +7 -0
- package/dist-esm/shapes/TLGroupShape.mjs +8 -0
- package/dist-esm/shapes/TLGroupShape.mjs.map +7 -0
- package/dist-esm/shapes/TLHighlightShape.mjs +18 -0
- package/dist-esm/shapes/TLHighlightShape.mjs.map +7 -0
- package/dist-esm/shapes/TLImageShape.mjs +49 -0
- package/dist-esm/shapes/TLImageShape.mjs.map +7 -0
- package/dist-esm/shapes/TLLineShape.mjs +50 -0
- package/dist-esm/shapes/TLLineShape.mjs.map +7 -0
- package/dist-esm/shapes/TLNoteShape.mjs +126 -0
- package/dist-esm/shapes/TLNoteShape.mjs.map +7 -0
- package/dist-esm/shapes/TLTextShape.mjs +47 -0
- package/dist-esm/shapes/TLTextShape.mjs.map +7 -0
- package/dist-esm/shapes/TLVideoShape.mjs +33 -0
- package/dist-esm/shapes/TLVideoShape.mjs.map +7 -0
- package/dist-esm/store-migrations.mjs +61 -0
- package/dist-esm/store-migrations.mjs.map +7 -0
- package/dist-esm/styles/StyleProp.mjs +74 -0
- package/dist-esm/styles/StyleProp.mjs.map +7 -0
- package/dist-esm/styles/TLColorStyle.mjs +263 -0
- package/dist-esm/styles/TLColorStyle.mjs.map +7 -0
- package/dist-esm/styles/TLDashStyle.mjs +9 -0
- package/dist-esm/styles/TLDashStyle.mjs.map +7 -0
- package/dist-esm/styles/TLFillStyle.mjs +9 -0
- package/dist-esm/styles/TLFillStyle.mjs.map +7 -0
- package/dist-esm/styles/TLFontStyle.mjs +16 -0
- package/dist-esm/styles/TLFontStyle.mjs.map +7 -0
- package/dist-esm/styles/TLHorizontalAlignStyle.mjs +9 -0
- package/dist-esm/styles/TLHorizontalAlignStyle.mjs.map +7 -0
- package/dist-esm/styles/TLSizeStyle.mjs +9 -0
- package/dist-esm/styles/TLSizeStyle.mjs.map +7 -0
- package/dist-esm/styles/TLVerticalAlignStyle.mjs +9 -0
- package/dist-esm/styles/TLVerticalAlignStyle.mjs.map +7 -0
- package/dist-esm/translations/languages.mjs +39 -0
- package/dist-esm/translations/languages.mjs.map +7 -0
- package/dist-esm/translations/translations.mjs +43 -0
- package/dist-esm/translations/translations.mjs.map +7 -0
- package/dist-esm/util-types.mjs +1 -0
- package/dist-esm/util-types.mjs.map +7 -0
- package/package.json +64 -0
- package/src/TLStore.ts +160 -0
- package/src/assets/TLBaseAsset.ts +44 -0
- package/src/assets/TLBookmarkAsset.ts +31 -0
- package/src/assets/TLImageAsset.ts +73 -0
- package/src/assets/TLVideoAsset.ts +73 -0
- package/src/createPresenceStateDerivation.ts +53 -0
- package/src/createTLSchema.ts +65 -0
- package/src/index.ts +168 -0
- package/src/migrations.test.ts +1768 -0
- package/src/misc/TLColor.ts +28 -0
- package/src/misc/TLCursor.ts +54 -0
- package/src/misc/TLHandle.ts +41 -0
- package/src/misc/TLOpacity.ts +11 -0
- package/src/misc/TLScribble.ts +39 -0
- package/src/misc/geometry-types.ts +37 -0
- package/src/misc/id-validator.ts +14 -0
- package/src/records/TLAsset.ts +80 -0
- package/src/records/TLCamera.ts +74 -0
- package/src/records/TLDocument.ts +77 -0
- package/src/records/TLInstance.ts +493 -0
- package/src/records/TLPage.ts +72 -0
- package/src/records/TLPageState.ts +216 -0
- package/src/records/TLPointer.ts +74 -0
- package/src/records/TLPresence.ts +179 -0
- package/src/records/TLRecord.ts +21 -0
- package/src/records/TLShape.ts +214 -0
- package/src/shapes/TLArrowShape.ts +160 -0
- package/src/shapes/TLBaseShape.ts +67 -0
- package/src/shapes/TLBookmarkShape.ts +44 -0
- package/src/shapes/TLDrawShape.ts +89 -0
- package/src/shapes/TLEmbedShape.ts +754 -0
- package/src/shapes/TLFrameShape.ts +18 -0
- package/src/shapes/TLGeoShape.ts +226 -0
- package/src/shapes/TLGroupShape.ts +14 -0
- package/src/shapes/TLHighlightShape.ts +24 -0
- package/src/shapes/TLImageShape.ts +59 -0
- package/src/shapes/TLLineShape.ts +61 -0
- package/src/shapes/TLNoteShape.ts +137 -0
- package/src/shapes/TLTextShape.ts +55 -0
- package/src/shapes/TLVideoShape.ts +40 -0
- package/src/store-migrations.ts +63 -0
- package/src/styles/StyleProp.ts +105 -0
- package/src/styles/TLColorStyle.ts +296 -0
- package/src/styles/TLDashStyle.ts +11 -0
- package/src/styles/TLFillStyle.ts +11 -0
- package/src/styles/TLFontStyle.ts +19 -0
- package/src/styles/TLHorizontalAlignStyle.ts +11 -0
- package/src/styles/TLSizeStyle.ts +11 -0
- package/src/styles/TLVerticalAlignStyle.ts +11 -0
- package/src/translations/languages.ts +39 -0
- package/src/translations/translations.test.ts +43 -0
- package/src/translations/translations.ts +73 -0
- package/src/util-types.ts +2 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { T } from '@bigbluebutton/validate'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A `StyleProp` is a property of a shape that follows some special rules.
|
|
5
|
+
*
|
|
6
|
+
* 1. The same value can be set on lots of shapes at the same time.
|
|
7
|
+
*
|
|
8
|
+
* 2. The last used value is automatically saved and applied to new shapes.
|
|
9
|
+
*
|
|
10
|
+
* For example, {@link DefaultColorStyle} is a style prop used by tldraw's default shapes to set
|
|
11
|
+
* their color. If you try selecting several shapes on tldraw.com and changing their color, you'll
|
|
12
|
+
* see that the color is applied to all of them. Then, if you draw a new shape, it'll have the same
|
|
13
|
+
* color as the one you just set.
|
|
14
|
+
*
|
|
15
|
+
* You can use styles in your own shapes by either defining your own (see {@link StyleProp.define}
|
|
16
|
+
* and {@link StyleProp.defineEnum}) or using tldraw's default ones, like {@link DefaultColorStyle}.
|
|
17
|
+
* When you define a shape, pass a `props` object describing all of your shape's properties, using
|
|
18
|
+
* `StyleProp`s for the ones you want to be styles. See the
|
|
19
|
+
* {@link https://github.com/bigbluebutton/tldraw/tree/main/apps/examples | custom styles example}
|
|
20
|
+
* for more.
|
|
21
|
+
*
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
export class StyleProp<Type> implements T.Validatable<Type> {
|
|
25
|
+
/**
|
|
26
|
+
* Define a new {@link StyleProp}.
|
|
27
|
+
*
|
|
28
|
+
* @param uniqueId - Each StyleProp must have a unique ID. We recommend you prefix this with
|
|
29
|
+
* your app/library name.
|
|
30
|
+
* @param options -
|
|
31
|
+
* - `defaultValue`: The default value for this style prop.
|
|
32
|
+
*
|
|
33
|
+
* - `type`: Optionally, describe what type of data you expect for this style prop.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* import {T} from '@bigbluebutton/validate'
|
|
38
|
+
* import {StyleProp} from '@bigbluebutton/tlschema'
|
|
39
|
+
*
|
|
40
|
+
* const MyLineWidthProp = StyleProp.define('myApp:lineWidth', {
|
|
41
|
+
* defaultValue: 1,
|
|
42
|
+
* type: T.number,
|
|
43
|
+
* })
|
|
44
|
+
* ```
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
static define<Type>(
|
|
48
|
+
uniqueId: string,
|
|
49
|
+
options: { defaultValue: Type; type?: T.Validatable<Type> }
|
|
50
|
+
) {
|
|
51
|
+
const { defaultValue, type = T.any } = options
|
|
52
|
+
return new StyleProp<Type>(uniqueId, defaultValue, type)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Define a new {@link StyleProp} as a list of possible values.
|
|
57
|
+
*
|
|
58
|
+
* @param uniqueId - Each StyleProp must have a unique ID. We recommend you prefix this with
|
|
59
|
+
* your app/library name.
|
|
60
|
+
* @param options -
|
|
61
|
+
* - `defaultValue`: The default value for this style prop.
|
|
62
|
+
*
|
|
63
|
+
* - `values`: An array of possible values of this style prop.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* import {StyleProp} from '@bigbluebutton/tlschema'
|
|
68
|
+
*
|
|
69
|
+
* const MySizeProp = StyleProp.defineEnum('myApp:size', {
|
|
70
|
+
* defaultValue: 'medium',
|
|
71
|
+
* values: ['small', 'medium', 'large'],
|
|
72
|
+
* })
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
static defineEnum<const Values extends readonly unknown[]>(
|
|
76
|
+
uniqueId: string,
|
|
77
|
+
options: { defaultValue: Values[number]; values: Values }
|
|
78
|
+
) {
|
|
79
|
+
const { defaultValue, values } = options
|
|
80
|
+
return new EnumStyleProp<Values[number]>(uniqueId, defaultValue, values)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** @internal */
|
|
84
|
+
protected constructor(
|
|
85
|
+
readonly id: string,
|
|
86
|
+
readonly defaultValue: Type,
|
|
87
|
+
readonly type: T.Validatable<Type>
|
|
88
|
+
) {}
|
|
89
|
+
|
|
90
|
+
validate(value: unknown) {
|
|
91
|
+
return this.type.validate(value)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* See {@link StyleProp} & {@link StyleProp.defineEnum}
|
|
97
|
+
*
|
|
98
|
+
* @public
|
|
99
|
+
*/
|
|
100
|
+
export class EnumStyleProp<T> extends StyleProp<T> {
|
|
101
|
+
/** @internal */
|
|
102
|
+
constructor(id: string, defaultValue: T, readonly values: readonly T[]) {
|
|
103
|
+
super(id, defaultValue, T.literalEnum(...values))
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { Expand } from '@bigbluebutton/utils'
|
|
2
|
+
import { T } from '@bigbluebutton/validate'
|
|
3
|
+
import { StyleProp } from './StyleProp'
|
|
4
|
+
|
|
5
|
+
const colors = [
|
|
6
|
+
'black',
|
|
7
|
+
'grey',
|
|
8
|
+
'light-violet',
|
|
9
|
+
'violet',
|
|
10
|
+
'blue',
|
|
11
|
+
'light-blue',
|
|
12
|
+
'yellow',
|
|
13
|
+
'orange',
|
|
14
|
+
'green',
|
|
15
|
+
'light-green',
|
|
16
|
+
'light-red',
|
|
17
|
+
'red',
|
|
18
|
+
] as const
|
|
19
|
+
|
|
20
|
+
/** @public */
|
|
21
|
+
export type TLDefaultColorThemeColor = {
|
|
22
|
+
solid: string
|
|
23
|
+
semi: string
|
|
24
|
+
pattern: string
|
|
25
|
+
highlight: {
|
|
26
|
+
srgb: string
|
|
27
|
+
p3: string
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** @public */
|
|
32
|
+
export type TLDefaultColorTheme = Expand<
|
|
33
|
+
{
|
|
34
|
+
id: 'light' | 'dark'
|
|
35
|
+
text: string
|
|
36
|
+
background: string
|
|
37
|
+
solid: string
|
|
38
|
+
} & Record<(typeof colors)[number], TLDefaultColorThemeColor>
|
|
39
|
+
>
|
|
40
|
+
|
|
41
|
+
/** @public */
|
|
42
|
+
export const DefaultColorThemePalette: {
|
|
43
|
+
lightMode: TLDefaultColorTheme
|
|
44
|
+
darkMode: TLDefaultColorTheme
|
|
45
|
+
} = {
|
|
46
|
+
lightMode: {
|
|
47
|
+
id: 'light',
|
|
48
|
+
text: '#000000',
|
|
49
|
+
background: 'rgb(249, 250, 251)',
|
|
50
|
+
solid: '#fcfffe',
|
|
51
|
+
|
|
52
|
+
black: {
|
|
53
|
+
solid: '#1d1d1d',
|
|
54
|
+
semi: '#e8e8e8',
|
|
55
|
+
pattern: '#494949',
|
|
56
|
+
highlight: {
|
|
57
|
+
srgb: '#fddd00',
|
|
58
|
+
p3: 'color(display-p3 0.972 0.8705 0.05)',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
blue: {
|
|
62
|
+
solid: '#4263eb',
|
|
63
|
+
semi: '#dce1f8',
|
|
64
|
+
pattern: '#6681ee',
|
|
65
|
+
highlight: {
|
|
66
|
+
srgb: '#10acff',
|
|
67
|
+
p3: 'color(display-p3 0.308 0.6632 0.9996)',
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
green: {
|
|
71
|
+
solid: '#099268',
|
|
72
|
+
semi: '#d3e9e3',
|
|
73
|
+
pattern: '#39a785',
|
|
74
|
+
highlight: {
|
|
75
|
+
srgb: '#00ffc8',
|
|
76
|
+
p3: 'color(display-p3 0.2536 0.984 0.7981)',
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
grey: {
|
|
80
|
+
solid: '#adb5bd',
|
|
81
|
+
semi: '#eceef0',
|
|
82
|
+
pattern: '#bcc3c9',
|
|
83
|
+
highlight: {
|
|
84
|
+
srgb: '#cbe7f1',
|
|
85
|
+
p3: 'color(display-p3 0.8163 0.9023 0.9416)',
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
'light-blue': {
|
|
89
|
+
solid: '#4dabf7',
|
|
90
|
+
semi: '#ddedfa',
|
|
91
|
+
pattern: '#6fbbf8',
|
|
92
|
+
highlight: {
|
|
93
|
+
srgb: '#00f4ff',
|
|
94
|
+
p3: 'color(display-p3 0.1512 0.9414 0.9996)',
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
'light-green': {
|
|
98
|
+
solid: '#40c057',
|
|
99
|
+
semi: '#dbf0e0',
|
|
100
|
+
pattern: '#65cb78',
|
|
101
|
+
highlight: {
|
|
102
|
+
srgb: '#65f641',
|
|
103
|
+
p3: 'color(display-p3 0.563 0.9495 0.3857)',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
'light-red': {
|
|
107
|
+
solid: '#ff8787',
|
|
108
|
+
semi: '#f4dadb',
|
|
109
|
+
pattern: '#fe9e9e',
|
|
110
|
+
highlight: {
|
|
111
|
+
srgb: '#ff7fa3',
|
|
112
|
+
p3: 'color(display-p3 0.9988 0.5301 0.6397)',
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
'light-violet': {
|
|
116
|
+
solid: '#e599f7',
|
|
117
|
+
semi: '#f5eafa',
|
|
118
|
+
pattern: '#e9acf8',
|
|
119
|
+
highlight: {
|
|
120
|
+
srgb: '#ff88ff',
|
|
121
|
+
p3: 'color(display-p3 0.9676 0.5652 0.9999)',
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
orange: {
|
|
125
|
+
solid: '#f76707',
|
|
126
|
+
semi: '#f8e2d4',
|
|
127
|
+
pattern: '#f78438',
|
|
128
|
+
highlight: {
|
|
129
|
+
srgb: '#ffa500',
|
|
130
|
+
p3: 'color(display-p3 0.9988 0.6905 0.266)',
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
red: {
|
|
134
|
+
solid: '#e03131',
|
|
135
|
+
semi: '#f4dadb',
|
|
136
|
+
pattern: '#e55959',
|
|
137
|
+
highlight: {
|
|
138
|
+
srgb: '#ff636e',
|
|
139
|
+
p3: 'color(display-p3 0.9992 0.4376 0.45)',
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
violet: {
|
|
143
|
+
solid: '#ae3ec9',
|
|
144
|
+
semi: '#ecdcf2',
|
|
145
|
+
pattern: '#bd63d3',
|
|
146
|
+
highlight: {
|
|
147
|
+
srgb: '#c77cff',
|
|
148
|
+
p3: 'color(display-p3 0.7469 0.5089 0.9995)',
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
yellow: {
|
|
152
|
+
solid: '#ffc078',
|
|
153
|
+
semi: '#f9f0e6',
|
|
154
|
+
pattern: '#fecb92',
|
|
155
|
+
highlight: {
|
|
156
|
+
srgb: '#fddd00',
|
|
157
|
+
p3: 'color(display-p3 0.972 0.8705 0.05)',
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
darkMode: {
|
|
162
|
+
id: 'dark',
|
|
163
|
+
text: '#f8f9fa',
|
|
164
|
+
background: '#212529',
|
|
165
|
+
solid: '#28292e',
|
|
166
|
+
|
|
167
|
+
black: {
|
|
168
|
+
solid: '#e1e1e1',
|
|
169
|
+
semi: '#2c3036',
|
|
170
|
+
pattern: '#989898',
|
|
171
|
+
highlight: {
|
|
172
|
+
srgb: '#d2b700',
|
|
173
|
+
p3: 'color(display-p3 0.8078 0.7225 0.0312)',
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
blue: {
|
|
177
|
+
solid: '#4156be',
|
|
178
|
+
semi: '#262d40',
|
|
179
|
+
pattern: '#3a4b9e',
|
|
180
|
+
highlight: {
|
|
181
|
+
srgb: '#0079d2',
|
|
182
|
+
p3: 'color(display-p3 0.0032 0.4655 0.7991)',
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
green: {
|
|
186
|
+
solid: '#3b7b5e',
|
|
187
|
+
semi: '#253231',
|
|
188
|
+
pattern: '#366a53',
|
|
189
|
+
highlight: {
|
|
190
|
+
srgb: '#009774',
|
|
191
|
+
p3: 'color(display-p3 0.0085 0.582 0.4604)',
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
grey: {
|
|
195
|
+
solid: '#93989f',
|
|
196
|
+
semi: '#33373c',
|
|
197
|
+
pattern: '#7c8187',
|
|
198
|
+
highlight: {
|
|
199
|
+
srgb: '#9cb4cb',
|
|
200
|
+
p3: 'color(display-p3 0.6299 0.7012 0.7856)',
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
'light-blue': {
|
|
204
|
+
solid: '#588fc9',
|
|
205
|
+
semi: '#2a3642',
|
|
206
|
+
pattern: '#4d7aa9',
|
|
207
|
+
highlight: {
|
|
208
|
+
srgb: '#00bdc8',
|
|
209
|
+
p3: 'color(display-p3 0.0023 0.7259 0.7735)',
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
'light-green': {
|
|
213
|
+
solid: '#599f57',
|
|
214
|
+
semi: '#2a3830',
|
|
215
|
+
pattern: '#4e874e',
|
|
216
|
+
highlight: {
|
|
217
|
+
srgb: '#00a000',
|
|
218
|
+
p3: 'color(display-p3 0.2711 0.6172 0.0195)',
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
'light-red': {
|
|
222
|
+
solid: '#c67877',
|
|
223
|
+
semi: '#3b3235',
|
|
224
|
+
pattern: '#a56767',
|
|
225
|
+
highlight: {
|
|
226
|
+
srgb: '#db005b',
|
|
227
|
+
p3: 'color(display-p3 0.7849 0.0585 0.3589)',
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
'light-violet': {
|
|
231
|
+
solid: '#b583c9',
|
|
232
|
+
semi: '#383442',
|
|
233
|
+
pattern: '#9770a9',
|
|
234
|
+
highlight: {
|
|
235
|
+
srgb: '#c400c7',
|
|
236
|
+
p3: 'color(display-p3 0.7024 0.0403 0.753)',
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
orange: {
|
|
240
|
+
solid: '#bf612e',
|
|
241
|
+
semi: '#3a2e2a',
|
|
242
|
+
pattern: '#9f552d',
|
|
243
|
+
highlight: {
|
|
244
|
+
srgb: '#d07a00',
|
|
245
|
+
p3: 'color(display-p3 0.7699 0.4937 0.0085)',
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
red: {
|
|
249
|
+
solid: '#aa3c37',
|
|
250
|
+
semi: '#36292b',
|
|
251
|
+
pattern: '#8f3734',
|
|
252
|
+
highlight: {
|
|
253
|
+
srgb: '#de002c',
|
|
254
|
+
p3: 'color(display-p3 0.7978 0.0509 0.2035)',
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
violet: {
|
|
258
|
+
solid: '#873fa3',
|
|
259
|
+
semi: '#31293c',
|
|
260
|
+
pattern: '#763a8b',
|
|
261
|
+
highlight: {
|
|
262
|
+
srgb: '#9e00ee',
|
|
263
|
+
p3: 'color(display-p3 0.5651 0.0079 0.8986)',
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
yellow: {
|
|
267
|
+
solid: '#cba371',
|
|
268
|
+
semi: '#3c3934',
|
|
269
|
+
pattern: '#fecb92',
|
|
270
|
+
highlight: {
|
|
271
|
+
srgb: '#d2b700',
|
|
272
|
+
p3: 'color(display-p3 0.8078 0.7225 0.0312)',
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/** @public */
|
|
279
|
+
export function getDefaultColorTheme(opts: { isDarkMode: boolean }): TLDefaultColorTheme {
|
|
280
|
+
return opts.isDarkMode ? DefaultColorThemePalette.darkMode : DefaultColorThemePalette.lightMode
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/** @public */
|
|
284
|
+
export const DefaultColorStyle = StyleProp.defineEnum('tldraw:color', {
|
|
285
|
+
defaultValue: 'black',
|
|
286
|
+
values: colors,
|
|
287
|
+
})
|
|
288
|
+
|
|
289
|
+
/** @public */
|
|
290
|
+
export const DefaultLabelColorStyle = StyleProp.defineEnum('tldraw:labelColor', {
|
|
291
|
+
defaultValue: 'black',
|
|
292
|
+
values: colors,
|
|
293
|
+
})
|
|
294
|
+
|
|
295
|
+
/** @public */
|
|
296
|
+
export type TLDefaultColorStyle = T.TypeOf<typeof DefaultColorStyle>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { T } from '@bigbluebutton/validate'
|
|
2
|
+
import { StyleProp } from './StyleProp'
|
|
3
|
+
|
|
4
|
+
/** @public */
|
|
5
|
+
export const DefaultDashStyle = StyleProp.defineEnum('tldraw:dash', {
|
|
6
|
+
defaultValue: 'draw',
|
|
7
|
+
values: ['draw', 'solid', 'dashed', 'dotted'],
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
/** @public */
|
|
11
|
+
export type TLDefaultDashStyle = T.TypeOf<typeof DefaultDashStyle>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { T } from '@bigbluebutton/validate'
|
|
2
|
+
import { StyleProp } from './StyleProp'
|
|
3
|
+
|
|
4
|
+
/** @public */
|
|
5
|
+
export const DefaultFillStyle = StyleProp.defineEnum('tldraw:fill', {
|
|
6
|
+
defaultValue: 'none',
|
|
7
|
+
values: ['none', 'semi', 'solid', 'pattern'],
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
/** @public */
|
|
11
|
+
export type TLDefaultFillStyle = T.TypeOf<typeof DefaultFillStyle>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { T } from '@bigbluebutton/validate'
|
|
2
|
+
import { StyleProp } from './StyleProp'
|
|
3
|
+
|
|
4
|
+
/** @public */
|
|
5
|
+
export const DefaultFontStyle = StyleProp.defineEnum('tldraw:font', {
|
|
6
|
+
defaultValue: 'draw',
|
|
7
|
+
values: ['draw', 'sans', 'serif', 'mono'],
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
/** @public */
|
|
11
|
+
export type TLDefaultFontStyle = T.TypeOf<typeof DefaultFontStyle>
|
|
12
|
+
|
|
13
|
+
/** @public */
|
|
14
|
+
export const DefaultFontFamilies = {
|
|
15
|
+
draw: "'tldraw_draw', sans-serif",
|
|
16
|
+
sans: "'tldraw_sans', sans-serif",
|
|
17
|
+
serif: "'tldraw_serif', serif",
|
|
18
|
+
mono: "'tldraw_mono', monospace",
|
|
19
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { T } from '@bigbluebutton/validate'
|
|
2
|
+
import { StyleProp } from './StyleProp'
|
|
3
|
+
|
|
4
|
+
/** @public */
|
|
5
|
+
export const DefaultHorizontalAlignStyle = StyleProp.defineEnum('tldraw:horizontalAlign', {
|
|
6
|
+
defaultValue: 'middle',
|
|
7
|
+
values: ['start', 'middle', 'end', 'start-legacy', 'end-legacy', 'middle-legacy'],
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
/** @public */
|
|
11
|
+
export type TLDefaultHorizontalAlignStyle = T.TypeOf<typeof DefaultHorizontalAlignStyle>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { T } from '@bigbluebutton/validate'
|
|
2
|
+
import { StyleProp } from './StyleProp'
|
|
3
|
+
|
|
4
|
+
/** @public */
|
|
5
|
+
export const DefaultSizeStyle = StyleProp.defineEnum('tldraw:size', {
|
|
6
|
+
defaultValue: 'm',
|
|
7
|
+
values: ['s', 'm', 'l', 'xl'],
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
/** @public */
|
|
11
|
+
export type TLDefaultSizeStyle = T.TypeOf<typeof DefaultSizeStyle>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { T } from '@bigbluebutton/validate'
|
|
2
|
+
import { StyleProp } from './StyleProp'
|
|
3
|
+
|
|
4
|
+
/** @public */
|
|
5
|
+
export const DefaultVerticalAlignStyle = StyleProp.defineEnum('tldraw:verticalAlign', {
|
|
6
|
+
defaultValue: 'middle',
|
|
7
|
+
values: ['start', 'middle', 'end'],
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
/** @public */
|
|
11
|
+
export type TLDefaultVerticalAlignStyle = T.TypeOf<typeof DefaultVerticalAlignStyle>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// This file is automatically generated by scripts/refresh-assets.ts.
|
|
2
|
+
// Do not edit manually.
|
|
3
|
+
|
|
4
|
+
/** @public */
|
|
5
|
+
export const LANGUAGES = [
|
|
6
|
+
{ locale: 'ar', label: 'عربي' },
|
|
7
|
+
{ locale: 'ca', label: 'Català' },
|
|
8
|
+
{ locale: 'da', label: 'Danish' },
|
|
9
|
+
{ locale: 'de', label: 'Deutsch' },
|
|
10
|
+
{ locale: 'en', label: 'English' },
|
|
11
|
+
{ locale: 'es', label: 'Español' },
|
|
12
|
+
{ locale: 'fa', label: 'فارسی' },
|
|
13
|
+
{ locale: 'fi', label: 'Suomi' },
|
|
14
|
+
{ locale: 'fr', label: 'Français' },
|
|
15
|
+
{ locale: 'gl', label: 'Galego' },
|
|
16
|
+
{ locale: 'he', label: 'עברית' },
|
|
17
|
+
{ locale: 'it', label: 'Italiano' },
|
|
18
|
+
{ locale: 'ja', label: '日本語' },
|
|
19
|
+
{ locale: 'ko-kr', label: '한국어' },
|
|
20
|
+
{ locale: 'ku', label: 'کوردی' },
|
|
21
|
+
{ locale: 'hi-in', label: 'हिन्दी' },
|
|
22
|
+
{ locale: 'hu', label: 'Magyar' },
|
|
23
|
+
{ locale: 'my', label: 'မြန်မာစာ' },
|
|
24
|
+
{ locale: 'ne', label: 'नेपाली' },
|
|
25
|
+
{ locale: 'no', label: 'Norwegian' },
|
|
26
|
+
{ locale: 'pl', label: 'Polski' },
|
|
27
|
+
{ locale: 'pt-br', label: 'Português - Brasil' },
|
|
28
|
+
{ locale: 'pt-pt', label: 'Português - Europeu' },
|
|
29
|
+
{ locale: 'ro', label: 'Română' },
|
|
30
|
+
{ locale: 'ru', label: 'Russian' },
|
|
31
|
+
{ locale: 'sv', label: 'Svenska' },
|
|
32
|
+
{ locale: 'te', label: 'తెలుగు' },
|
|
33
|
+
{ locale: 'th', label: 'ภาษาไทย' },
|
|
34
|
+
{ locale: 'tr', label: 'Türkçe' },
|
|
35
|
+
{ locale: 'uk', label: 'Ukrainian' },
|
|
36
|
+
{ locale: 'vi', label: 'Tiếng Việt' },
|
|
37
|
+
{ locale: 'zh-cn', label: 'Chinese - Simplified' },
|
|
38
|
+
{ locale: 'zh-tw', label: '繁體中文 (台灣)' },
|
|
39
|
+
] as const
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { _getDefaultTranslationLocale } from './translations'
|
|
2
|
+
|
|
3
|
+
type DefaultLanguageTest = {
|
|
4
|
+
name: string
|
|
5
|
+
input: string[]
|
|
6
|
+
output: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
describe('Choosing a sensible default translation locale', () => {
|
|
10
|
+
const tests: DefaultLanguageTest[] = [
|
|
11
|
+
{
|
|
12
|
+
name: 'finds a matching language locale',
|
|
13
|
+
input: ['fr'],
|
|
14
|
+
output: 'fr',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: 'finds a matching region locale',
|
|
18
|
+
input: ['pt-PT'],
|
|
19
|
+
output: 'pt-pt',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'picks a region locale if no language locale available',
|
|
23
|
+
input: ['pt'],
|
|
24
|
+
output: 'pt-br',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'picks a language locale if no region locale available',
|
|
28
|
+
input: ['fr-CA'],
|
|
29
|
+
output: 'fr',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'picks the first language that loosely matches',
|
|
33
|
+
input: ['fr-CA', 'pt-PT'],
|
|
34
|
+
output: 'fr',
|
|
35
|
+
},
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
for (const test of tests) {
|
|
39
|
+
it(test.name, () => {
|
|
40
|
+
expect(_getDefaultTranslationLocale(test.input)).toEqual(test.output)
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
})
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { LANGUAGES } from './languages'
|
|
2
|
+
|
|
3
|
+
/** @public */
|
|
4
|
+
export { LANGUAGES }
|
|
5
|
+
|
|
6
|
+
/** @public */
|
|
7
|
+
export type TLLanguage = (typeof LANGUAGES)[number]
|
|
8
|
+
// {
|
|
9
|
+
// readonly locale: string
|
|
10
|
+
// readonly label: string
|
|
11
|
+
// }
|
|
12
|
+
|
|
13
|
+
/** @public */
|
|
14
|
+
export function getDefaultTranslationLocale(): TLLanguage['locale'] {
|
|
15
|
+
const locales = typeof window !== 'undefined' ? window.navigator.languages ?? ['en'] : ['en']
|
|
16
|
+
return _getDefaultTranslationLocale(locales)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** @internal */
|
|
20
|
+
export function _getDefaultTranslationLocale(locales: readonly string[]): TLLanguage['locale'] {
|
|
21
|
+
for (const locale of locales) {
|
|
22
|
+
const supportedLocale = getSupportedLocale(locale)
|
|
23
|
+
if (supportedLocale) {
|
|
24
|
+
return supportedLocale
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return 'en'
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** @public */
|
|
31
|
+
const DEFAULT_LOCALE_REGIONS: { [locale: string]: TLLanguage['locale'] } = {
|
|
32
|
+
zh: 'zh-cn',
|
|
33
|
+
pt: 'pt-br',
|
|
34
|
+
ko: 'ko-kr',
|
|
35
|
+
hi: 'hi-in',
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** @public */
|
|
39
|
+
function getSupportedLocale(locale: string): TLLanguage['locale'] | null {
|
|
40
|
+
// If we have an exact match, return it!
|
|
41
|
+
// (e.g. if the user has 'fr' and we have 'fr')
|
|
42
|
+
// (or if the user has 'pt-BR' and we have 'pt-br')
|
|
43
|
+
const exactMatch = LANGUAGES.find((t) => t.locale === locale.toLowerCase())
|
|
44
|
+
if (exactMatch) {
|
|
45
|
+
return exactMatch.locale
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Otherwise, we need to be more flexible...
|
|
49
|
+
const [language, region] = locale.split(/[-_]/).map((s) => s.toLowerCase())
|
|
50
|
+
|
|
51
|
+
// If the user's language has a region...
|
|
52
|
+
// let's try to find non-region-specific locale for them
|
|
53
|
+
// (e.g. if they have 'fr-CA' but we only have 'fr')
|
|
54
|
+
if (region) {
|
|
55
|
+
const languageMatch = LANGUAGES.find((t) => t.locale === language)
|
|
56
|
+
if (languageMatch) {
|
|
57
|
+
return languageMatch.locale
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// If the user's language doesn't have a region...
|
|
62
|
+
// let's try to find a region-specific locale for them
|
|
63
|
+
// (e.g. if they have 'pt' but we only have 'pt-pt' or 'pt-br')
|
|
64
|
+
//
|
|
65
|
+
// In this case, we choose the hard-coded default region for that language
|
|
66
|
+
if (language in DEFAULT_LOCALE_REGIONS) {
|
|
67
|
+
return DEFAULT_LOCALE_REGIONS[language]
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Oh no! We don't have a translation for this language!
|
|
71
|
+
// Let's give up...
|
|
72
|
+
return null
|
|
73
|
+
}
|