@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,28 @@
1
+ import { T } from '@bigbluebutton/validate'
2
+ import { SetValue } from '../util-types'
3
+
4
+ /**
5
+ * The colors used by tldraw's default shapes.
6
+ *
7
+ * @public */
8
+ export const TL_CANVAS_UI_COLOR_TYPES = new Set([
9
+ 'accent',
10
+ 'white',
11
+ 'black',
12
+ 'selection-stroke',
13
+ 'selection-fill',
14
+ 'laser',
15
+ 'muted-1',
16
+ ] as const)
17
+
18
+ /**
19
+ * A type for the colors used by tldraw's default shapes.
20
+ *
21
+ * @public */
22
+ export type TLCanvasUiColor = SetValue<typeof TL_CANVAS_UI_COLOR_TYPES>
23
+
24
+ /**
25
+ * A validator for the colors used by tldraw's default shapes.
26
+ *
27
+ * @public */
28
+ export const canvasUiColorTypeValidator = T.setEnum(TL_CANVAS_UI_COLOR_TYPES)
@@ -0,0 +1,54 @@
1
+ import { T } from '@bigbluebutton/validate'
2
+ import { SetValue } from '../util-types'
3
+
4
+ /**
5
+ * The cursor types used by tldraw's default shapes.
6
+ *
7
+ * @public */
8
+ export const TL_CURSOR_TYPES = new Set([
9
+ 'none',
10
+ 'default',
11
+ 'pointer',
12
+ 'cross',
13
+ 'grab',
14
+ 'rotate',
15
+ 'grabbing',
16
+ 'resize-edge',
17
+ 'resize-corner',
18
+ 'text',
19
+ 'move',
20
+ 'ew-resize',
21
+ 'ns-resize',
22
+ 'nesw-resize',
23
+ 'nwse-resize',
24
+ 'nesw-rotate',
25
+ 'nwse-rotate',
26
+ 'swne-rotate',
27
+ 'senw-rotate',
28
+ 'zoom-in',
29
+ 'zoom-out',
30
+ ])
31
+
32
+ /**
33
+ * A type for the cursor types used by tldraw's default shapes.
34
+ *
35
+ * @public */
36
+ export type TLCursorType = SetValue<typeof TL_CURSOR_TYPES>
37
+
38
+ /** @internal */
39
+ export const cursorTypeValidator = T.setEnum(TL_CURSOR_TYPES)
40
+
41
+ /**
42
+ * A cursor used by tldraw.
43
+ *
44
+ * @public */
45
+ export interface TLCursor {
46
+ type: TLCursorType
47
+ rotation: number
48
+ }
49
+
50
+ /** @internal */
51
+ export const cursorValidator: T.Validator<TLCursor> = T.object<TLCursor>({
52
+ type: cursorTypeValidator,
53
+ rotation: T.number,
54
+ })
@@ -0,0 +1,41 @@
1
+ import { T } from '@bigbluebutton/validate'
2
+ import { SetValue } from '../util-types'
3
+
4
+ /**
5
+ * The handle types used by tldraw's default shapes.
6
+ *
7
+ * @public */
8
+ export const TL_HANDLE_TYPES = new Set(['vertex', 'virtual', 'create'] as const)
9
+
10
+ /**
11
+ * A type for the handle types used by tldraw's default shapes.
12
+ *
13
+ * @public */
14
+ export type TLHandleType = SetValue<typeof TL_HANDLE_TYPES>
15
+
16
+ /**
17
+ * A base interface for a shape's handles.
18
+ *
19
+ * @public
20
+ */
21
+ export interface TLHandle {
22
+ /** A unique identifier for the handle. */
23
+ id: string
24
+ type: TLHandleType
25
+ canBind?: boolean
26
+ canSnap?: boolean
27
+ index: string
28
+ x: number
29
+ y: number
30
+ }
31
+
32
+ /** @internal */
33
+ export const handleValidator: T.Validator<TLHandle> = T.object({
34
+ id: T.string,
35
+ type: T.setEnum(TL_HANDLE_TYPES),
36
+ canBind: T.boolean.optional(),
37
+ canSnap: T.boolean.optional(),
38
+ index: T.string,
39
+ x: T.number,
40
+ y: T.number,
41
+ })
@@ -0,0 +1,11 @@
1
+ import { T } from '@bigbluebutton/validate'
2
+
3
+ /** @public */
4
+ export type TLOpacityType = number
5
+
6
+ /** @internal */
7
+ export const opacityValidator = T.number.check((n) => {
8
+ if (n < 0 || n > 1) {
9
+ throw new T.ValidationError('Opacity must be between 0 and 1')
10
+ }
11
+ })
@@ -0,0 +1,39 @@
1
+ import { T } from '@bigbluebutton/validate'
2
+ import { SetValue } from '../util-types'
3
+ import { TLCanvasUiColor, canvasUiColorTypeValidator } from './TLColor'
4
+ import { Vec2dModel, vec2dModelValidator } from './geometry-types'
5
+
6
+ /**
7
+ * The scribble states used by tldraw.
8
+ *
9
+ * @public */
10
+ export const TL_SCRIBBLE_STATES = new Set(['starting', 'paused', 'active', 'stopping'] as const)
11
+
12
+ /**
13
+ * A type for the scribble used by tldraw.
14
+ *
15
+ * @public */
16
+ export type TLScribble = {
17
+ id: string
18
+ points: Vec2dModel[]
19
+ size: number
20
+ color: TLCanvasUiColor
21
+ opacity: number
22
+ state: SetValue<typeof TL_SCRIBBLE_STATES>
23
+ delay: number
24
+ shrink: number
25
+ taper: boolean
26
+ }
27
+
28
+ /** @internal */
29
+ export const scribbleValidator: T.Validator<TLScribble> = T.object({
30
+ id: T.string,
31
+ points: T.arrayOf(vec2dModelValidator),
32
+ size: T.positiveNumber,
33
+ color: canvasUiColorTypeValidator,
34
+ opacity: T.number,
35
+ state: T.setEnum(TL_SCRIBBLE_STATES),
36
+ delay: T.number,
37
+ shrink: T.number,
38
+ taper: T.boolean,
39
+ })
@@ -0,0 +1,37 @@
1
+ import { T } from '@bigbluebutton/validate'
2
+
3
+ /**
4
+ * A serializable model for 2D boxes.
5
+ *
6
+ * @public */
7
+ export interface Box2dModel {
8
+ x: number
9
+ y: number
10
+ w: number
11
+ h: number
12
+ }
13
+
14
+ /**
15
+ * A serializable model for 2D vectors.
16
+ *
17
+ * @public */
18
+ export interface Vec2dModel {
19
+ x: number
20
+ y: number
21
+ z?: number
22
+ }
23
+
24
+ /** @public */
25
+ export const vec2dModelValidator: T.Validator<Vec2dModel> = T.object({
26
+ x: T.number,
27
+ y: T.number,
28
+ z: T.number.optional(),
29
+ })
30
+
31
+ /** @public */
32
+ export const box2dModelValidator: T.Validator<Box2dModel> = T.object({
33
+ x: T.number,
34
+ y: T.number,
35
+ w: T.number,
36
+ h: T.number,
37
+ })
@@ -0,0 +1,14 @@
1
+ import type { RecordId, UnknownRecord } from '@bigbluebutton/store'
2
+ import { T } from '@bigbluebutton/validate'
3
+
4
+ /** @internal */
5
+ export function idValidator<Id extends RecordId<UnknownRecord>>(
6
+ prefix: Id['__type__']['typeName']
7
+ ): T.Validator<Id> {
8
+ return T.string.refine((id) => {
9
+ if (!id.startsWith(`${prefix}:`)) {
10
+ throw new Error(`${prefix} ID must start with "${prefix}:"`)
11
+ }
12
+ return id as Id
13
+ })
14
+ }
@@ -0,0 +1,80 @@
1
+ import { createRecordType, defineMigrations, RecordId } from '@bigbluebutton/store'
2
+ import { T } from '@bigbluebutton/validate'
3
+ import { TLBaseAsset } from '../assets/TLBaseAsset'
4
+ import {
5
+ bookmarkAssetMigrations,
6
+ bookmarkAssetValidator,
7
+ TLBookmarkAsset,
8
+ } from '../assets/TLBookmarkAsset'
9
+ import { imageAssetMigrations, imageAssetValidator, TLImageAsset } from '../assets/TLImageAsset'
10
+ import { TLVideoAsset, videoAssetMigrations, videoAssetValidator } from '../assets/TLVideoAsset'
11
+ import { TLShape } from './TLShape'
12
+
13
+ /** @public */
14
+ export type TLAsset = TLImageAsset | TLVideoAsset | TLBookmarkAsset
15
+
16
+ /** @internal */
17
+ export const assetValidator: T.Validator<TLAsset> = T.model(
18
+ 'asset',
19
+ T.union('type', {
20
+ image: imageAssetValidator,
21
+ video: videoAssetValidator,
22
+ bookmark: bookmarkAssetValidator,
23
+ })
24
+ )
25
+
26
+ /** @internal */
27
+ export const assetVersions = {
28
+ AddMeta: 1,
29
+ }
30
+
31
+ /** @internal */
32
+ export const assetMigrations = defineMigrations({
33
+ subTypeKey: 'type',
34
+ subTypeMigrations: {
35
+ image: imageAssetMigrations,
36
+ video: videoAssetMigrations,
37
+ bookmark: bookmarkAssetMigrations,
38
+ },
39
+ currentVersion: assetVersions.AddMeta,
40
+ migrators: {
41
+ [assetVersions.AddMeta]: {
42
+ up: (record) => {
43
+ return {
44
+ ...record,
45
+ meta: {},
46
+ }
47
+ },
48
+ down: ({ meta: _, ...record }) => {
49
+ return {
50
+ ...record,
51
+ }
52
+ },
53
+ },
54
+ },
55
+ })
56
+
57
+ /** @public */
58
+ export type TLAssetPartial<T extends TLAsset = TLAsset> = T extends T
59
+ ? {
60
+ id: TLAssetId
61
+ type: T['type']
62
+ props?: Partial<T['props']>
63
+ meta?: Partial<T['meta']>
64
+ } & Partial<Omit<T, 'type' | 'id' | 'props' | 'meta'>>
65
+ : never
66
+
67
+ /** @public */
68
+ export const AssetRecordType = createRecordType<TLAsset>('asset', {
69
+ migrations: assetMigrations,
70
+ validator: assetValidator,
71
+ scope: 'document',
72
+ }).withDefaultProperties(() => ({
73
+ meta: {},
74
+ }))
75
+
76
+ /** @public */
77
+ export type TLAssetId = RecordId<TLBaseAsset<any, any>>
78
+
79
+ /** @public */
80
+ export type TLAssetShape = Extract<TLShape, { props: { assetId: TLAssetId } }>
@@ -0,0 +1,74 @@
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
+ * A camera record.
8
+ *
9
+ * @public
10
+ */
11
+ export interface TLCamera extends BaseRecord<'camera', TLCameraId> {
12
+ x: number
13
+ y: number
14
+ z: number
15
+ meta: JsonObject
16
+ }
17
+
18
+ /**
19
+ * The id of a camera record.
20
+ *
21
+ * @public */
22
+ export type TLCameraId = RecordId<TLCamera>
23
+
24
+ /** @internal */
25
+ export const cameraValidator: T.Validator<TLCamera> = T.model(
26
+ 'camera',
27
+ T.object({
28
+ typeName: T.literal('camera'),
29
+ id: idValidator<TLCameraId>('camera'),
30
+ x: T.number,
31
+ y: T.number,
32
+ z: T.number,
33
+ meta: T.jsonValue as T.ObjectValidator<JsonObject>,
34
+ })
35
+ )
36
+
37
+ /** @internal */
38
+ export const cameraVersions = {
39
+ AddMeta: 1,
40
+ }
41
+
42
+ /** @internal */
43
+ export const cameraMigrations = defineMigrations({
44
+ currentVersion: cameraVersions.AddMeta,
45
+ migrators: {
46
+ [cameraVersions.AddMeta]: {
47
+ up: (record) => {
48
+ return {
49
+ ...record,
50
+ meta: {},
51
+ }
52
+ },
53
+ down: ({ meta: _, ...record }) => {
54
+ return {
55
+ ...record,
56
+ }
57
+ },
58
+ },
59
+ },
60
+ })
61
+
62
+ /** @public */
63
+ export const CameraRecordType = createRecordType<TLCamera>('camera', {
64
+ validator: cameraValidator,
65
+ migrations: cameraMigrations,
66
+ scope: 'session',
67
+ }).withDefaultProperties(
68
+ (): Omit<TLCamera, 'id' | 'typeName'> => ({
69
+ x: 0,
70
+ y: 0,
71
+ z: 1,
72
+ meta: {},
73
+ })
74
+ )
@@ -0,0 +1,77 @@
1
+ import { BaseRecord, createRecordType, defineMigrations, RecordId } from '@bigbluebutton/store'
2
+ import { JsonObject } from '@bigbluebutton/utils'
3
+ import { T } from '@bigbluebutton/validate'
4
+
5
+ /**
6
+ * TLDocument
7
+ *
8
+ * @public
9
+ */
10
+ export interface TLDocument extends BaseRecord<'document', RecordId<TLDocument>> {
11
+ gridSize: number
12
+ name: string
13
+ meta: JsonObject
14
+ }
15
+
16
+ /** @internal */
17
+ export const documentValidator: T.Validator<TLDocument> = T.model(
18
+ 'document',
19
+ T.object({
20
+ typeName: T.literal('document'),
21
+ id: T.literal('document:document' as RecordId<TLDocument>),
22
+ gridSize: T.number,
23
+ name: T.string,
24
+ meta: T.jsonValue as T.ObjectValidator<JsonObject>,
25
+ })
26
+ )
27
+
28
+ /** @internal */
29
+ export const documentVersions = {
30
+ AddName: 1,
31
+ AddMeta: 2,
32
+ } as const
33
+
34
+ /** @internal */
35
+ export const documentMigrations = defineMigrations({
36
+ currentVersion: documentVersions.AddMeta,
37
+ migrators: {
38
+ [documentVersions.AddName]: {
39
+ up: (document: TLDocument) => {
40
+ return { ...document, name: '' }
41
+ },
42
+ down: ({ name: _, ...document }: TLDocument) => {
43
+ return document
44
+ },
45
+ },
46
+ [documentVersions.AddMeta]: {
47
+ up: (record) => {
48
+ return {
49
+ ...record,
50
+ meta: {},
51
+ }
52
+ },
53
+ down: ({ meta: _, ...record }) => {
54
+ return {
55
+ ...record,
56
+ }
57
+ },
58
+ },
59
+ },
60
+ })
61
+
62
+ /** @public */
63
+ export const DocumentRecordType = createRecordType<TLDocument>('document', {
64
+ migrations: documentMigrations,
65
+ validator: documentValidator,
66
+ scope: 'document',
67
+ }).withDefaultProperties(
68
+ (): Omit<TLDocument, 'id' | 'typeName'> => ({
69
+ gridSize: 10,
70
+ name: '',
71
+ meta: {},
72
+ })
73
+ )
74
+
75
+ // all document records have the same ID: 'document:document'
76
+ /** @public */
77
+ export const TLDOCUMENT_ID: RecordId<TLDocument> = DocumentRecordType.createId('document')