@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.
Files changed (261) hide show
  1. package/LICENSE +190 -0
  2. package/dist-cjs/TLStore.js +133 -0
  3. package/dist-cjs/TLStore.js.map +7 -0
  4. package/dist-cjs/assets/TLBaseAsset.js +37 -0
  5. package/dist-cjs/assets/TLBaseAsset.js.map +7 -0
  6. package/dist-cjs/assets/TLBookmarkAsset.js +38 -0
  7. package/dist-cjs/assets/TLBookmarkAsset.js.map +7 -0
  8. package/dist-cjs/assets/TLImageAsset.js +76 -0
  9. package/dist-cjs/assets/TLImageAsset.js.map +7 -0
  10. package/dist-cjs/assets/TLVideoAsset.js +76 -0
  11. package/dist-cjs/assets/TLVideoAsset.js.map +7 -0
  12. package/dist-cjs/createPresenceStateDerivation.js +68 -0
  13. package/dist-cjs/createPresenceStateDerivation.js.map +7 -0
  14. package/dist-cjs/createTLSchema.js +68 -0
  15. package/dist-cjs/createTLSchema.js.map +7 -0
  16. package/dist-cjs/index.d.ts +1414 -0
  17. package/dist-cjs/index.js +142 -0
  18. package/dist-cjs/index.js.map +7 -0
  19. package/dist-cjs/misc/TLColor.js +36 -0
  20. package/dist-cjs/misc/TLColor.js.map +7 -0
  21. package/dist-cjs/misc/TLCursor.js +55 -0
  22. package/dist-cjs/misc/TLCursor.js.map +7 -0
  23. package/dist-cjs/misc/TLHandle.js +36 -0
  24. package/dist-cjs/misc/TLHandle.js.map +7 -0
  25. package/dist-cjs/misc/TLOpacity.js +30 -0
  26. package/dist-cjs/misc/TLOpacity.js.map +7 -0
  27. package/dist-cjs/misc/TLScribble.js +40 -0
  28. package/dist-cjs/misc/TLScribble.js.map +7 -0
  29. package/dist-cjs/misc/geometry-types.js +37 -0
  30. package/dist-cjs/misc/geometry-types.js.map +7 -0
  31. package/dist-cjs/misc/id-validator.js +33 -0
  32. package/dist-cjs/misc/id-validator.js.map +7 -0
  33. package/dist-cjs/records/TLAsset.js +74 -0
  34. package/dist-cjs/records/TLAsset.js.map +7 -0
  35. package/dist-cjs/records/TLCamera.js +74 -0
  36. package/dist-cjs/records/TLCamera.js.map +7 -0
  37. package/dist-cjs/records/TLDocument.js +82 -0
  38. package/dist-cjs/records/TLDocument.js.map +7 -0
  39. package/dist-cjs/records/TLInstance.js +452 -0
  40. package/dist-cjs/records/TLInstance.js.map +7 -0
  41. package/dist-cjs/records/TLPage.js +74 -0
  42. package/dist-cjs/records/TLPage.js.map +7 -0
  43. package/dist-cjs/records/TLPageState.js +209 -0
  44. package/dist-cjs/records/TLPageState.js.map +7 -0
  45. package/dist-cjs/records/TLPointer.js +76 -0
  46. package/dist-cjs/records/TLPointer.js.map +7 -0
  47. package/dist-cjs/records/TLPresence.js +170 -0
  48. package/dist-cjs/records/TLPresence.js.map +7 -0
  49. package/dist-cjs/records/TLRecord.js +17 -0
  50. package/dist-cjs/records/TLRecord.js.map +7 -0
  51. package/dist-cjs/records/TLShape.js +147 -0
  52. package/dist-cjs/records/TLShape.js.map +7 -0
  53. package/dist-cjs/shapes/TLArrowShape.js +156 -0
  54. package/dist-cjs/shapes/TLArrowShape.js.map +7 -0
  55. package/dist-cjs/shapes/TLBaseShape.js +52 -0
  56. package/dist-cjs/shapes/TLBaseShape.js.map +7 -0
  57. package/dist-cjs/shapes/TLBookmarkShape.js +57 -0
  58. package/dist-cjs/shapes/TLBookmarkShape.js.map +7 -0
  59. package/dist-cjs/shapes/TLDrawShape.js +89 -0
  60. package/dist-cjs/shapes/TLDrawShape.js.map +7 -0
  61. package/dist-cjs/shapes/TLEmbedShape.js +709 -0
  62. package/dist-cjs/shapes/TLEmbedShape.js.map +7 -0
  63. package/dist-cjs/shapes/TLFrameShape.js +33 -0
  64. package/dist-cjs/shapes/TLFrameShape.js.map +7 -0
  65. package/dist-cjs/shapes/TLGeoShape.js +230 -0
  66. package/dist-cjs/shapes/TLGeoShape.js.map +7 -0
  67. package/dist-cjs/shapes/TLGroupShape.js +28 -0
  68. package/dist-cjs/shapes/TLGroupShape.js.map +7 -0
  69. package/dist-cjs/shapes/TLHighlightShape.js +38 -0
  70. package/dist-cjs/shapes/TLHighlightShape.js.map +7 -0
  71. package/dist-cjs/shapes/TLImageShape.js +69 -0
  72. package/dist-cjs/shapes/TLImageShape.js.map +7 -0
  73. package/dist-cjs/shapes/TLLineShape.js +70 -0
  74. package/dist-cjs/shapes/TLLineShape.js.map +7 -0
  75. package/dist-cjs/shapes/TLNoteShape.js +144 -0
  76. package/dist-cjs/shapes/TLNoteShape.js.map +7 -0
  77. package/dist-cjs/shapes/TLTextShape.js +67 -0
  78. package/dist-cjs/shapes/TLTextShape.js.map +7 -0
  79. package/dist-cjs/shapes/TLVideoShape.js +53 -0
  80. package/dist-cjs/shapes/TLVideoShape.js.map +7 -0
  81. package/dist-cjs/store-migrations.js +81 -0
  82. package/dist-cjs/store-migrations.js.map +7 -0
  83. package/dist-cjs/styles/StyleProp.js +94 -0
  84. package/dist-cjs/styles/StyleProp.js.map +7 -0
  85. package/dist-cjs/styles/TLColorStyle.js +283 -0
  86. package/dist-cjs/styles/TLColorStyle.js.map +7 -0
  87. package/dist-cjs/styles/TLDashStyle.js +29 -0
  88. package/dist-cjs/styles/TLDashStyle.js.map +7 -0
  89. package/dist-cjs/styles/TLFillStyle.js +29 -0
  90. package/dist-cjs/styles/TLFillStyle.js.map +7 -0
  91. package/dist-cjs/styles/TLFontStyle.js +36 -0
  92. package/dist-cjs/styles/TLFontStyle.js.map +7 -0
  93. package/dist-cjs/styles/TLHorizontalAlignStyle.js +29 -0
  94. package/dist-cjs/styles/TLHorizontalAlignStyle.js.map +7 -0
  95. package/dist-cjs/styles/TLSizeStyle.js +29 -0
  96. package/dist-cjs/styles/TLSizeStyle.js.map +7 -0
  97. package/dist-cjs/styles/TLVerticalAlignStyle.js +29 -0
  98. package/dist-cjs/styles/TLVerticalAlignStyle.js.map +7 -0
  99. package/dist-cjs/translations/languages.js +59 -0
  100. package/dist-cjs/translations/languages.js.map +7 -0
  101. package/dist-cjs/translations/translations.js +63 -0
  102. package/dist-cjs/translations/translations.js.map +7 -0
  103. package/dist-cjs/util-types.js +17 -0
  104. package/dist-cjs/util-types.js.map +7 -0
  105. package/dist-esm/TLStore.mjs +113 -0
  106. package/dist-esm/TLStore.mjs.map +7 -0
  107. package/dist-esm/assets/TLBaseAsset.mjs +17 -0
  108. package/dist-esm/assets/TLBaseAsset.mjs.map +7 -0
  109. package/dist-esm/assets/TLBookmarkAsset.mjs +18 -0
  110. package/dist-esm/assets/TLBookmarkAsset.mjs.map +7 -0
  111. package/dist-esm/assets/TLImageAsset.mjs +56 -0
  112. package/dist-esm/assets/TLImageAsset.mjs.map +7 -0
  113. package/dist-esm/assets/TLVideoAsset.mjs +56 -0
  114. package/dist-esm/assets/TLVideoAsset.mjs.map +7 -0
  115. package/dist-esm/createPresenceStateDerivation.mjs +48 -0
  116. package/dist-esm/createPresenceStateDerivation.mjs.map +7 -0
  117. package/dist-esm/createTLSchema.mjs +48 -0
  118. package/dist-esm/createTLSchema.mjs.map +7 -0
  119. package/dist-esm/index.d.mts +1414 -0
  120. package/dist-esm/index.mjs +193 -0
  121. package/dist-esm/index.mjs.map +7 -0
  122. package/dist-esm/misc/TLColor.mjs +16 -0
  123. package/dist-esm/misc/TLColor.mjs.map +7 -0
  124. package/dist-esm/misc/TLCursor.mjs +35 -0
  125. package/dist-esm/misc/TLCursor.mjs.map +7 -0
  126. package/dist-esm/misc/TLHandle.mjs +16 -0
  127. package/dist-esm/misc/TLHandle.mjs.map +7 -0
  128. package/dist-esm/misc/TLOpacity.mjs +10 -0
  129. package/dist-esm/misc/TLOpacity.mjs.map +7 -0
  130. package/dist-esm/misc/TLScribble.mjs +20 -0
  131. package/dist-esm/misc/TLScribble.mjs.map +7 -0
  132. package/dist-esm/misc/geometry-types.mjs +17 -0
  133. package/dist-esm/misc/geometry-types.mjs.map +7 -0
  134. package/dist-esm/misc/id-validator.mjs +13 -0
  135. package/dist-esm/misc/id-validator.mjs.map +7 -0
  136. package/dist-esm/records/TLAsset.mjs +57 -0
  137. package/dist-esm/records/TLAsset.mjs.map +7 -0
  138. package/dist-esm/records/TLCamera.mjs +54 -0
  139. package/dist-esm/records/TLCamera.mjs.map +7 -0
  140. package/dist-esm/records/TLDocument.mjs +62 -0
  141. package/dist-esm/records/TLDocument.mjs.map +7 -0
  142. package/dist-esm/records/TLInstance.mjs +432 -0
  143. package/dist-esm/records/TLInstance.mjs.map +7 -0
  144. package/dist-esm/records/TLPage.mjs +54 -0
  145. package/dist-esm/records/TLPage.mjs.map +7 -0
  146. package/dist-esm/records/TLPageState.mjs +189 -0
  147. package/dist-esm/records/TLPageState.mjs.map +7 -0
  148. package/dist-esm/records/TLPointer.mjs +56 -0
  149. package/dist-esm/records/TLPointer.mjs.map +7 -0
  150. package/dist-esm/records/TLPresence.mjs +150 -0
  151. package/dist-esm/records/TLPresence.mjs.map +7 -0
  152. package/dist-esm/records/TLRecord.mjs +1 -0
  153. package/dist-esm/records/TLRecord.mjs.map +7 -0
  154. package/dist-esm/records/TLShape.mjs +127 -0
  155. package/dist-esm/records/TLShape.mjs.map +7 -0
  156. package/dist-esm/shapes/TLArrowShape.mjs +136 -0
  157. package/dist-esm/shapes/TLArrowShape.mjs.map +7 -0
  158. package/dist-esm/shapes/TLBaseShape.mjs +32 -0
  159. package/dist-esm/shapes/TLBaseShape.mjs.map +7 -0
  160. package/dist-esm/shapes/TLBookmarkShape.mjs +37 -0
  161. package/dist-esm/shapes/TLBookmarkShape.mjs.map +7 -0
  162. package/dist-esm/shapes/TLDrawShape.mjs +69 -0
  163. package/dist-esm/shapes/TLDrawShape.mjs.map +7 -0
  164. package/dist-esm/shapes/TLEmbedShape.mjs +689 -0
  165. package/dist-esm/shapes/TLEmbedShape.mjs.map +7 -0
  166. package/dist-esm/shapes/TLFrameShape.mjs +13 -0
  167. package/dist-esm/shapes/TLFrameShape.mjs.map +7 -0
  168. package/dist-esm/shapes/TLGeoShape.mjs +212 -0
  169. package/dist-esm/shapes/TLGeoShape.mjs.map +7 -0
  170. package/dist-esm/shapes/TLGroupShape.mjs +8 -0
  171. package/dist-esm/shapes/TLGroupShape.mjs.map +7 -0
  172. package/dist-esm/shapes/TLHighlightShape.mjs +18 -0
  173. package/dist-esm/shapes/TLHighlightShape.mjs.map +7 -0
  174. package/dist-esm/shapes/TLImageShape.mjs +49 -0
  175. package/dist-esm/shapes/TLImageShape.mjs.map +7 -0
  176. package/dist-esm/shapes/TLLineShape.mjs +50 -0
  177. package/dist-esm/shapes/TLLineShape.mjs.map +7 -0
  178. package/dist-esm/shapes/TLNoteShape.mjs +126 -0
  179. package/dist-esm/shapes/TLNoteShape.mjs.map +7 -0
  180. package/dist-esm/shapes/TLTextShape.mjs +47 -0
  181. package/dist-esm/shapes/TLTextShape.mjs.map +7 -0
  182. package/dist-esm/shapes/TLVideoShape.mjs +33 -0
  183. package/dist-esm/shapes/TLVideoShape.mjs.map +7 -0
  184. package/dist-esm/store-migrations.mjs +61 -0
  185. package/dist-esm/store-migrations.mjs.map +7 -0
  186. package/dist-esm/styles/StyleProp.mjs +74 -0
  187. package/dist-esm/styles/StyleProp.mjs.map +7 -0
  188. package/dist-esm/styles/TLColorStyle.mjs +263 -0
  189. package/dist-esm/styles/TLColorStyle.mjs.map +7 -0
  190. package/dist-esm/styles/TLDashStyle.mjs +9 -0
  191. package/dist-esm/styles/TLDashStyle.mjs.map +7 -0
  192. package/dist-esm/styles/TLFillStyle.mjs +9 -0
  193. package/dist-esm/styles/TLFillStyle.mjs.map +7 -0
  194. package/dist-esm/styles/TLFontStyle.mjs +16 -0
  195. package/dist-esm/styles/TLFontStyle.mjs.map +7 -0
  196. package/dist-esm/styles/TLHorizontalAlignStyle.mjs +9 -0
  197. package/dist-esm/styles/TLHorizontalAlignStyle.mjs.map +7 -0
  198. package/dist-esm/styles/TLSizeStyle.mjs +9 -0
  199. package/dist-esm/styles/TLSizeStyle.mjs.map +7 -0
  200. package/dist-esm/styles/TLVerticalAlignStyle.mjs +9 -0
  201. package/dist-esm/styles/TLVerticalAlignStyle.mjs.map +7 -0
  202. package/dist-esm/translations/languages.mjs +39 -0
  203. package/dist-esm/translations/languages.mjs.map +7 -0
  204. package/dist-esm/translations/translations.mjs +43 -0
  205. package/dist-esm/translations/translations.mjs.map +7 -0
  206. package/dist-esm/util-types.mjs +1 -0
  207. package/dist-esm/util-types.mjs.map +7 -0
  208. package/package.json +64 -0
  209. package/src/TLStore.ts +160 -0
  210. package/src/assets/TLBaseAsset.ts +44 -0
  211. package/src/assets/TLBookmarkAsset.ts +31 -0
  212. package/src/assets/TLImageAsset.ts +73 -0
  213. package/src/assets/TLVideoAsset.ts +73 -0
  214. package/src/createPresenceStateDerivation.ts +53 -0
  215. package/src/createTLSchema.ts +65 -0
  216. package/src/index.ts +168 -0
  217. package/src/migrations.test.ts +1768 -0
  218. package/src/misc/TLColor.ts +28 -0
  219. package/src/misc/TLCursor.ts +54 -0
  220. package/src/misc/TLHandle.ts +41 -0
  221. package/src/misc/TLOpacity.ts +11 -0
  222. package/src/misc/TLScribble.ts +39 -0
  223. package/src/misc/geometry-types.ts +37 -0
  224. package/src/misc/id-validator.ts +14 -0
  225. package/src/records/TLAsset.ts +80 -0
  226. package/src/records/TLCamera.ts +74 -0
  227. package/src/records/TLDocument.ts +77 -0
  228. package/src/records/TLInstance.ts +493 -0
  229. package/src/records/TLPage.ts +72 -0
  230. package/src/records/TLPageState.ts +216 -0
  231. package/src/records/TLPointer.ts +74 -0
  232. package/src/records/TLPresence.ts +179 -0
  233. package/src/records/TLRecord.ts +21 -0
  234. package/src/records/TLShape.ts +214 -0
  235. package/src/shapes/TLArrowShape.ts +160 -0
  236. package/src/shapes/TLBaseShape.ts +67 -0
  237. package/src/shapes/TLBookmarkShape.ts +44 -0
  238. package/src/shapes/TLDrawShape.ts +89 -0
  239. package/src/shapes/TLEmbedShape.ts +754 -0
  240. package/src/shapes/TLFrameShape.ts +18 -0
  241. package/src/shapes/TLGeoShape.ts +226 -0
  242. package/src/shapes/TLGroupShape.ts +14 -0
  243. package/src/shapes/TLHighlightShape.ts +24 -0
  244. package/src/shapes/TLImageShape.ts +59 -0
  245. package/src/shapes/TLLineShape.ts +61 -0
  246. package/src/shapes/TLNoteShape.ts +137 -0
  247. package/src/shapes/TLTextShape.ts +55 -0
  248. package/src/shapes/TLVideoShape.ts +40 -0
  249. package/src/store-migrations.ts +63 -0
  250. package/src/styles/StyleProp.ts +105 -0
  251. package/src/styles/TLColorStyle.ts +296 -0
  252. package/src/styles/TLDashStyle.ts +11 -0
  253. package/src/styles/TLFillStyle.ts +11 -0
  254. package/src/styles/TLFontStyle.ts +19 -0
  255. package/src/styles/TLHorizontalAlignStyle.ts +11 -0
  256. package/src/styles/TLSizeStyle.ts +11 -0
  257. package/src/styles/TLVerticalAlignStyle.ts +11 -0
  258. package/src/translations/languages.ts +39 -0
  259. package/src/translations/translations.test.ts +43 -0
  260. package/src/translations/translations.ts +73 -0
  261. package/src/util-types.ts +2 -0
@@ -0,0 +1,493 @@
1
+ import { BaseRecord, createRecordType, defineMigrations, RecordId } from '@bigbluebutton/store'
2
+ import { JsonObject } from '@bigbluebutton/utils'
3
+ import { T } from '@bigbluebutton/validate'
4
+ import { Box2dModel, box2dModelValidator } from '../misc/geometry-types'
5
+ import { idValidator } from '../misc/id-validator'
6
+ import { cursorValidator, TLCursor } from '../misc/TLCursor'
7
+ import { opacityValidator, TLOpacityType } from '../misc/TLOpacity'
8
+ import { scribbleValidator, TLScribble } from '../misc/TLScribble'
9
+ import { StyleProp } from '../styles/StyleProp'
10
+ import { pageIdValidator, TLPageId } from './TLPage'
11
+
12
+ /**
13
+ * TLInstance
14
+ *
15
+ * State that is particular to a single browser tab
16
+ *
17
+ * @public
18
+ */
19
+ export interface TLInstance extends BaseRecord<'instance', TLInstanceId> {
20
+ currentPageId: TLPageId
21
+ opacityForNextShape: TLOpacityType
22
+ stylesForNextShape: Record<string, unknown>
23
+ // ephemeral
24
+ followingUserId: string | null
25
+ highlightedUserIds: string[]
26
+ brush: Box2dModel | null
27
+ cursor: TLCursor
28
+ scribbles: TLScribble[]
29
+ isFocusMode: boolean
30
+ isDebugMode: boolean
31
+ isToolLocked: boolean
32
+ exportBackground: boolean
33
+ screenBounds: Box2dModel
34
+ zoomBrush: Box2dModel | null
35
+ chatMessage: string
36
+ isChatting: boolean
37
+ isPenMode: boolean
38
+ isGridMode: boolean
39
+ canMoveCamera: boolean
40
+ isFocused: boolean
41
+ devicePixelRatio: number
42
+ isCoarsePointer: boolean
43
+ /**
44
+ * Will be null if the pointer doesn't support hovering (e.g. touch), but true or false
45
+ * otherwise
46
+ */
47
+ isHoveringCanvas: boolean | null
48
+ openMenus: string[]
49
+ isChangingStyle: boolean
50
+ isReadonly: boolean
51
+ meta: JsonObject
52
+ }
53
+
54
+ /** @public */
55
+ export type TLInstanceId = RecordId<TLInstance>
56
+
57
+ /** @internal */
58
+ export const instanceIdValidator = idValidator<TLInstanceId>('instance')
59
+
60
+ export function createInstanceRecordType(stylesById: Map<string, StyleProp<unknown>>) {
61
+ const stylesForNextShapeValidators = {} as Record<string, T.Validator<unknown>>
62
+ for (const [id, style] of stylesById) {
63
+ stylesForNextShapeValidators[id] = T.optional(style)
64
+ }
65
+
66
+ const instanceTypeValidator: T.Validator<TLInstance> = T.model(
67
+ 'instance',
68
+ T.object({
69
+ typeName: T.literal('instance'),
70
+ id: idValidator<TLInstanceId>('instance'),
71
+ currentPageId: pageIdValidator,
72
+ followingUserId: T.string.nullable(),
73
+ brush: box2dModelValidator.nullable(),
74
+ opacityForNextShape: opacityValidator,
75
+ stylesForNextShape: T.object(stylesForNextShapeValidators),
76
+ cursor: cursorValidator,
77
+ scribbles: T.arrayOf(scribbleValidator),
78
+ isFocusMode: T.boolean,
79
+ isDebugMode: T.boolean,
80
+ isToolLocked: T.boolean,
81
+ exportBackground: T.boolean,
82
+ screenBounds: box2dModelValidator,
83
+ zoomBrush: box2dModelValidator.nullable(),
84
+ isPenMode: T.boolean,
85
+ isGridMode: T.boolean,
86
+ chatMessage: T.string,
87
+ isChatting: T.boolean,
88
+ highlightedUserIds: T.arrayOf(T.string),
89
+ canMoveCamera: T.boolean,
90
+ isFocused: T.boolean,
91
+ devicePixelRatio: T.number,
92
+ isCoarsePointer: T.boolean,
93
+ isHoveringCanvas: T.boolean.nullable(),
94
+ openMenus: T.arrayOf(T.string),
95
+ isChangingStyle: T.boolean,
96
+ isReadonly: T.boolean,
97
+ meta: T.jsonValue as T.ObjectValidator<JsonObject>,
98
+ })
99
+ )
100
+
101
+ return createRecordType<TLInstance>('instance', {
102
+ migrations: instanceMigrations,
103
+ validator: instanceTypeValidator,
104
+ scope: 'session',
105
+ }).withDefaultProperties(
106
+ (): Omit<TLInstance, 'typeName' | 'id' | 'currentPageId'> => ({
107
+ followingUserId: null,
108
+ opacityForNextShape: 1,
109
+ stylesForNextShape: {},
110
+ brush: null,
111
+ scribbles: [],
112
+ cursor: {
113
+ type: 'default',
114
+ rotation: 0,
115
+ },
116
+ isFocusMode: false,
117
+ exportBackground: false,
118
+ isDebugMode: process.env.NODE_ENV === 'development',
119
+ isToolLocked: false,
120
+ screenBounds: { x: 0, y: 0, w: 1080, h: 720 },
121
+ zoomBrush: null,
122
+ isGridMode: false,
123
+ isPenMode: false,
124
+ chatMessage: '',
125
+ isChatting: false,
126
+ highlightedUserIds: [],
127
+ canMoveCamera: true,
128
+ isFocused: false,
129
+ devicePixelRatio: typeof window === 'undefined' ? 1 : window.devicePixelRatio,
130
+ isCoarsePointer: false,
131
+ isHoveringCanvas: null,
132
+ openMenus: [] as string[],
133
+ isChangingStyle: false,
134
+ isReadonly: false,
135
+ meta: {},
136
+ })
137
+ )
138
+ }
139
+
140
+ /** @internal */
141
+ export const instanceVersions = {
142
+ AddTransparentExportBgs: 1,
143
+ RemoveDialog: 2,
144
+ AddToolLockMode: 3,
145
+ RemoveExtraPropsForNextShape: 4,
146
+ AddLabelColor: 5,
147
+ AddFollowingUserId: 6,
148
+ RemoveAlignJustify: 7,
149
+ AddZoom: 8,
150
+ AddVerticalAlign: 9,
151
+ AddScribbleDelay: 10,
152
+ RemoveUserId: 11,
153
+ AddIsPenModeAndIsGridMode: 12,
154
+ HoistOpacity: 13,
155
+ AddChat: 14,
156
+ AddHighlightedUserIds: 15,
157
+ ReplacePropsForNextShapeWithStylesForNextShape: 16,
158
+ AddMeta: 17,
159
+ RemoveCursorColor: 18,
160
+ AddLonelyProperties: 19,
161
+ ReadOnlyReadonly: 20,
162
+ AddHoveringCanvas: 21,
163
+ AddScribbles: 22,
164
+ } as const
165
+
166
+ /** @public */
167
+ export const instanceMigrations = defineMigrations({
168
+ currentVersion: instanceVersions.AddScribbles,
169
+ migrators: {
170
+ [instanceVersions.AddTransparentExportBgs]: {
171
+ up: (instance: TLInstance) => {
172
+ return { ...instance, exportBackground: true }
173
+ },
174
+ down: ({ exportBackground: _, ...instance }: TLInstance) => {
175
+ return instance
176
+ },
177
+ },
178
+ [instanceVersions.RemoveDialog]: {
179
+ up: ({ dialog: _, ...instance }: any) => {
180
+ return instance
181
+ },
182
+ down: (instance: TLInstance) => {
183
+ return { ...instance, dialog: null }
184
+ },
185
+ },
186
+ [instanceVersions.AddToolLockMode]: {
187
+ up: (instance: TLInstance) => {
188
+ return { ...instance, isToolLocked: false }
189
+ },
190
+ down: ({ isToolLocked: _, ...instance }: TLInstance) => {
191
+ return instance
192
+ },
193
+ },
194
+ [instanceVersions.RemoveExtraPropsForNextShape]: {
195
+ up: ({ propsForNextShape, ...instance }: any) => {
196
+ return {
197
+ ...instance,
198
+ propsForNextShape: Object.fromEntries(
199
+ Object.entries(propsForNextShape).filter(([key]) =>
200
+ [
201
+ 'color',
202
+ 'labelColor',
203
+ 'dash',
204
+ 'fill',
205
+ 'size',
206
+ 'font',
207
+ 'align',
208
+ 'verticalAlign',
209
+ 'icon',
210
+ 'geo',
211
+ 'arrowheadStart',
212
+ 'arrowheadEnd',
213
+ 'spline',
214
+ ].includes(key)
215
+ )
216
+ ),
217
+ }
218
+ },
219
+ down: (instance: TLInstance) => {
220
+ // we can't restore these, so do nothing :/
221
+ return instance
222
+ },
223
+ },
224
+ [instanceVersions.AddLabelColor]: {
225
+ up: ({ propsForNextShape, ...instance }: any) => {
226
+ return {
227
+ ...instance,
228
+ propsForNextShape: {
229
+ ...propsForNextShape,
230
+ labelColor: 'black',
231
+ },
232
+ }
233
+ },
234
+ down: (instance) => {
235
+ const { labelColor: _, ...rest } = instance.propsForNextShape
236
+ return {
237
+ ...instance,
238
+ propsForNextShape: {
239
+ ...rest,
240
+ },
241
+ }
242
+ },
243
+ },
244
+ [instanceVersions.AddFollowingUserId]: {
245
+ up: (instance: TLInstance) => {
246
+ return { ...instance, followingUserId: null }
247
+ },
248
+ down: ({ followingUserId: _, ...instance }: TLInstance) => {
249
+ return instance
250
+ },
251
+ },
252
+ [instanceVersions.RemoveAlignJustify]: {
253
+ up: (instance: any) => {
254
+ let newAlign = instance.propsForNextShape.align
255
+ if (newAlign === 'justify') {
256
+ newAlign = 'start'
257
+ }
258
+
259
+ return {
260
+ ...instance,
261
+ propsForNextShape: {
262
+ ...instance.propsForNextShape,
263
+ align: newAlign,
264
+ },
265
+ }
266
+ },
267
+ down: (instance: TLInstance) => {
268
+ return { ...instance }
269
+ },
270
+ },
271
+ [instanceVersions.AddZoom]: {
272
+ up: (instance: TLInstance) => {
273
+ return { ...instance, zoomBrush: null }
274
+ },
275
+ down: ({ zoomBrush: _, ...instance }: TLInstance) => {
276
+ return instance
277
+ },
278
+ },
279
+ [instanceVersions.AddVerticalAlign]: {
280
+ up: (instance) => {
281
+ return {
282
+ ...instance,
283
+ propsForNextShape: {
284
+ ...instance.propsForNextShape,
285
+ verticalAlign: 'middle',
286
+ },
287
+ }
288
+ },
289
+ down: (instance) => {
290
+ const { verticalAlign: _, ...propsForNextShape } = instance.propsForNextShape
291
+ return {
292
+ ...instance,
293
+ propsForNextShape,
294
+ }
295
+ },
296
+ },
297
+ [instanceVersions.AddScribbleDelay]: {
298
+ up: (instance) => {
299
+ if (instance.scribble !== null) {
300
+ return { ...instance, scribble: { ...instance.scribble, delay: 0 } }
301
+ }
302
+ return { ...instance }
303
+ },
304
+ down: (instance) => {
305
+ if (instance.scribble !== null) {
306
+ const { delay: _delay, ...rest } = instance.scribble
307
+ return { ...instance, scribble: rest }
308
+ }
309
+ return { ...instance }
310
+ },
311
+ },
312
+ [instanceVersions.RemoveUserId]: {
313
+ up: ({ userId: _, ...instance }: any) => {
314
+ return instance
315
+ },
316
+ down: (instance: TLInstance) => {
317
+ return { ...instance, userId: 'user:none' }
318
+ },
319
+ },
320
+ [instanceVersions.AddIsPenModeAndIsGridMode]: {
321
+ up: (instance: TLInstance) => {
322
+ return { ...instance, isPenMode: false, isGridMode: false }
323
+ },
324
+ down: ({ isPenMode: _, isGridMode: __, ...instance }: TLInstance) => {
325
+ return instance
326
+ },
327
+ },
328
+ [instanceVersions.HoistOpacity]: {
329
+ up: ({ propsForNextShape: { opacity, ...propsForNextShape }, ...instance }: any) => {
330
+ return { ...instance, opacityForNextShape: Number(opacity ?? '1'), propsForNextShape }
331
+ },
332
+ down: ({ opacityForNextShape: opacity, ...instance }: any) => {
333
+ return {
334
+ ...instance,
335
+ propsForNextShape: {
336
+ ...instance.propsForNextShape,
337
+ opacity:
338
+ opacity < 0.175
339
+ ? '0.1'
340
+ : opacity < 0.375
341
+ ? '0.25'
342
+ : opacity < 0.625
343
+ ? '0.5'
344
+ : opacity < 0.875
345
+ ? '0.75'
346
+ : '1',
347
+ },
348
+ }
349
+ },
350
+ },
351
+ [instanceVersions.AddChat]: {
352
+ up: (instance: TLInstance) => {
353
+ return { ...instance, chatMessage: '', isChatting: false }
354
+ },
355
+ down: ({ chatMessage: _, isChatting: __, ...instance }: TLInstance) => {
356
+ return instance
357
+ },
358
+ },
359
+ [instanceVersions.AddHighlightedUserIds]: {
360
+ up: (instance: TLInstance) => {
361
+ return { ...instance, highlightedUserIds: [] }
362
+ },
363
+ down: ({ highlightedUserIds: _, ...instance }: TLInstance) => {
364
+ return instance
365
+ },
366
+ },
367
+ [instanceVersions.ReplacePropsForNextShapeWithStylesForNextShape]: {
368
+ up: ({ propsForNextShape: _, ...instance }) => {
369
+ return { ...instance, stylesForNextShape: {} }
370
+ },
371
+ down: ({ stylesForNextShape: _, ...instance }: TLInstance) => {
372
+ return {
373
+ ...instance,
374
+ propsForNextShape: {
375
+ color: 'black',
376
+ labelColor: 'black',
377
+ dash: 'draw',
378
+ fill: 'none',
379
+ size: 'm',
380
+ icon: 'file',
381
+ font: 'draw',
382
+ align: 'middle',
383
+ verticalAlign: 'middle',
384
+ geo: 'rectangle',
385
+ arrowheadStart: 'none',
386
+ arrowheadEnd: 'arrow',
387
+ spline: 'line',
388
+ },
389
+ }
390
+ },
391
+ },
392
+ [instanceVersions.AddMeta]: {
393
+ up: (record) => {
394
+ return {
395
+ ...record,
396
+ meta: {},
397
+ }
398
+ },
399
+ down: ({ meta: _, ...record }) => {
400
+ return {
401
+ ...record,
402
+ }
403
+ },
404
+ },
405
+ [instanceVersions.RemoveCursorColor]: {
406
+ up: (record) => {
407
+ const { color: _, ...cursor } = record.cursor
408
+ return {
409
+ ...record,
410
+ cursor,
411
+ }
412
+ },
413
+ down: (record) => {
414
+ return {
415
+ ...record,
416
+ cursor: {
417
+ ...record.cursor,
418
+ color: 'black',
419
+ },
420
+ }
421
+ },
422
+ },
423
+ [instanceVersions.AddLonelyProperties]: {
424
+ up: (record) => {
425
+ return {
426
+ ...record,
427
+ canMoveCamera: true,
428
+ isFocused: false,
429
+ devicePixelRatio: 1,
430
+ isCoarsePointer: false,
431
+ openMenus: [],
432
+ isChangingStyle: false,
433
+ isReadOnly: false,
434
+ }
435
+ },
436
+ down: ({
437
+ canMoveCamera: _canMoveCamera,
438
+ isFocused: _isFocused,
439
+ devicePixelRatio: _devicePixelRatio,
440
+ isCoarsePointer: _isCoarsePointer,
441
+ openMenus: _openMenus,
442
+ isChangingStyle: _isChangingStyle,
443
+ isReadOnly: _isReadOnly,
444
+ ...record
445
+ }) => {
446
+ return {
447
+ ...record,
448
+ }
449
+ },
450
+ },
451
+ [instanceVersions.ReadOnlyReadonly]: {
452
+ up: ({ isReadOnly: _isReadOnly, ...record }) => {
453
+ return {
454
+ ...record,
455
+ isReadonly: _isReadOnly,
456
+ }
457
+ },
458
+ down: ({ isReadonly: _isReadonly, ...record }) => {
459
+ return {
460
+ ...record,
461
+ isReadOnly: _isReadonly,
462
+ }
463
+ },
464
+ },
465
+ [instanceVersions.AddHoveringCanvas]: {
466
+ up: (record) => {
467
+ return {
468
+ ...record,
469
+ isHoveringCanvas: null,
470
+ }
471
+ },
472
+ down: ({ isHoveringCanvas: _, ...record }) => {
473
+ return {
474
+ ...record,
475
+ }
476
+ },
477
+ },
478
+ [instanceVersions.AddScribbles]: {
479
+ up: ({ scribble: _, ...record }) => {
480
+ return {
481
+ ...record,
482
+ scribbles: [],
483
+ }
484
+ },
485
+ down: ({ scribbles: _, ...record }) => {
486
+ return { ...record, scribble: null }
487
+ },
488
+ },
489
+ },
490
+ })
491
+
492
+ /** @public */
493
+ export const TLINSTANCE_ID = 'instance:instance' as TLInstanceId
@@ -0,0 +1,72 @@
1
+ import { BaseRecord, createRecordType, defineMigrations, RecordId } from '@bigbluebutton/store'
2
+ import { JsonObject } from '@bigbluebutton/utils'
3
+ import { T } from '@bigbluebutton/validate'
4
+ import { idValidator } from '../misc/id-validator'
5
+
6
+ /**
7
+ * TLPage
8
+ *
9
+ * @public
10
+ */
11
+ export interface TLPage extends BaseRecord<'page', TLPageId> {
12
+ name: string
13
+ index: string
14
+ meta: JsonObject
15
+ }
16
+
17
+ /** @public */
18
+ export type TLPageId = RecordId<TLPage>
19
+
20
+ /** @internal */
21
+ export const pageIdValidator = idValidator<TLPageId>('page')
22
+
23
+ /** @internal */
24
+ export const pageValidator: T.Validator<TLPage> = T.model(
25
+ 'page',
26
+ T.object({
27
+ typeName: T.literal('page'),
28
+ id: pageIdValidator,
29
+ name: T.string,
30
+ index: T.string,
31
+ meta: T.jsonValue as T.ObjectValidator<JsonObject>,
32
+ })
33
+ )
34
+
35
+ /** @internal */
36
+ export const pageVersions = {
37
+ AddMeta: 1,
38
+ }
39
+
40
+ /** @internal */
41
+ export const pageMigrations = defineMigrations({
42
+ currentVersion: pageVersions.AddMeta,
43
+ migrators: {
44
+ [pageVersions.AddMeta]: {
45
+ up: (record) => {
46
+ return {
47
+ ...record,
48
+ meta: {},
49
+ }
50
+ },
51
+ down: ({ meta: _, ...record }) => {
52
+ return {
53
+ ...record,
54
+ }
55
+ },
56
+ },
57
+ },
58
+ })
59
+
60
+ /** @public */
61
+ export const PageRecordType = createRecordType<TLPage>('page', {
62
+ validator: pageValidator,
63
+ migrations: pageMigrations,
64
+ scope: 'document',
65
+ }).withDefaultProperties(() => ({
66
+ meta: {},
67
+ }))
68
+
69
+ /** @public */
70
+ export function isPageId(id: string): id is TLPageId {
71
+ return PageRecordType.isId(id)
72
+ }