@lvl99dotcom/paintcanvas 0.0.0-stage → 0.3.0

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 (284) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +131 -2
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +5 -0
  5. package/dist/lib/brushes/BrushTipCache/index.d.ts +32 -0
  6. package/dist/lib/brushes/BrushTipCache/index.js +60 -0
  7. package/dist/lib/brushes/StrokeEngine/index.d.ts +171 -0
  8. package/dist/lib/brushes/StrokeEngine/index.js +324 -0
  9. package/dist/lib/brushes/StrokePath/index.d.ts +53 -0
  10. package/dist/lib/brushes/StrokePath/index.js +161 -0
  11. package/dist/lib/brushes/StrokeSampler/index.d.ts +55 -0
  12. package/dist/lib/brushes/StrokeSampler/index.js +75 -0
  13. package/dist/lib/brushes/authors/index.d.ts +55 -0
  14. package/dist/lib/brushes/authors/index.js +60 -0
  15. package/dist/lib/brushes/configRanges/index.d.ts +52 -0
  16. package/dist/lib/brushes/configRanges/index.js +206 -0
  17. package/dist/lib/brushes/index.d.ts +5 -0
  18. package/dist/lib/brushes/index.js +19 -0
  19. package/dist/lib/brushes/params/index.d.ts +108 -0
  20. package/dist/lib/brushes/params/index.js +139 -0
  21. package/dist/lib/brushes/presetFile/index.d.ts +32 -0
  22. package/dist/lib/brushes/presetFile/index.js +55 -0
  23. package/dist/lib/brushes/presets/drawing/brush-pen.js +3 -0
  24. package/dist/lib/brushes/presets/drawing/felt-pen.js +3 -0
  25. package/dist/lib/brushes/presets/drawing/index.d.ts +13 -0
  26. package/dist/lib/brushes/presets/drawing/index.js +88 -0
  27. package/dist/lib/brushes/presets/drawing/pencil-2b.js +3 -0
  28. package/dist/lib/brushes/presets/drawing/pencil-hb.js +3 -0
  29. package/dist/lib/brushes/presets/painting/grass.js +3 -0
  30. package/dist/lib/brushes/presets/painting/hair.js +3 -0
  31. package/dist/lib/brushes/presets/painting/index.d.ts +18 -0
  32. package/dist/lib/brushes/presets/painting/index.js +118 -0
  33. package/dist/lib/brushes/presets/painting/splatter.js +3 -0
  34. package/dist/lib/brushes/presets/painting/textured-paint.js +3 -0
  35. package/dist/lib/brushes/presets/painting/watery-paint.js +3 -0
  36. package/dist/lib/brushes/presets/round/index.d.ts +9 -0
  37. package/dist/lib/brushes/presets/round/index.js +44 -0
  38. package/dist/lib/brushes/presets/round/round.js +3 -0
  39. package/dist/lib/brushes/presets/round/soft-round.js +3 -0
  40. package/dist/lib/brushes/presets/sized/index.d.ts +20 -0
  41. package/dist/lib/brushes/presets/sized/index.js +30 -0
  42. package/dist/lib/brushes/presets/sketching/index.d.ts +14 -0
  43. package/dist/lib/brushes/presets/sketching/index.js +107 -0
  44. package/dist/lib/brushes/presets/square/index.d.ts +7 -0
  45. package/dist/lib/brushes/presets/square/index.js +22 -0
  46. package/dist/lib/brushes/presets/square/square.js +3 -0
  47. package/dist/lib/brushes/shapeImage/index.d.ts +40 -0
  48. package/dist/lib/brushes/shapeImage/index.js +61 -0
  49. package/dist/lib/brushes/types/index.d.ts +243 -0
  50. package/dist/lib/brushes/types/index.js +20 -0
  51. package/dist/lib/classes/BackgroundWork/index.d.ts +55 -0
  52. package/dist/lib/classes/BackgroundWork/index.js +97 -0
  53. package/dist/lib/classes/BrushSettings/index.d.ts +91 -0
  54. package/dist/lib/classes/BrushSettings/index.js +152 -0
  55. package/dist/lib/classes/CustomPresets/index.d.ts +53 -0
  56. package/dist/lib/classes/CustomPresets/index.js +71 -0
  57. package/dist/lib/classes/ExternalSheets/index.d.ts +64 -0
  58. package/dist/lib/classes/ExternalSheets/index.js +112 -0
  59. package/dist/lib/classes/GestureTracker/index.d.ts +62 -0
  60. package/dist/lib/classes/GestureTracker/index.js +122 -0
  61. package/dist/lib/classes/History/index.d.ts +83 -0
  62. package/dist/lib/classes/History/index.js +126 -0
  63. package/dist/lib/classes/HistoryGuard/index.d.ts +58 -0
  64. package/dist/lib/classes/HistoryGuard/index.js +97 -0
  65. package/dist/lib/classes/InputSettings/index.d.ts +74 -0
  66. package/dist/lib/classes/InputSettings/index.js +101 -0
  67. package/dist/lib/classes/KeyboardShortcuts/index.d.ts +48 -0
  68. package/dist/lib/classes/KeyboardShortcuts/index.js +137 -0
  69. package/dist/lib/classes/Layer/index.d.ts +86 -0
  70. package/dist/lib/classes/Layer/index.js +111 -0
  71. package/dist/lib/classes/LayerAutosave/index.d.ts +180 -0
  72. package/dist/lib/classes/LayerAutosave/index.js +346 -0
  73. package/dist/lib/classes/LayerStack/index.d.ts +177 -0
  74. package/dist/lib/classes/LayerStack/index.js +394 -0
  75. package/dist/lib/classes/PaintCanvas/index.d.ts +537 -0
  76. package/dist/lib/classes/PaintCanvas/index.js +965 -0
  77. package/dist/lib/classes/StrokeLog/index.d.ts +149 -0
  78. package/dist/lib/classes/StrokeLog/index.js +257 -0
  79. package/dist/lib/classes/Viewport/index.d.ts +108 -0
  80. package/dist/lib/classes/Viewport/index.js +194 -0
  81. package/dist/lib/document/index.d.ts +17 -0
  82. package/dist/lib/document/index.js +25 -0
  83. package/dist/lib/document/schema.d.ts +132 -0
  84. package/dist/lib/document/schema.js +110 -0
  85. package/dist/lib/i18n/index.d.ts +131 -0
  86. package/dist/lib/i18n/index.js +277 -0
  87. package/dist/lib/image/index.d.ts +90 -0
  88. package/dist/lib/image/index.js +147 -0
  89. package/dist/lib/messages/PatchSender/index.d.ts +75 -0
  90. package/dist/lib/messages/PatchSender/index.js +125 -0
  91. package/dist/lib/messages/index.d.ts +26 -0
  92. package/dist/lib/messages/index.js +59 -0
  93. package/dist/lib/messages/schema.d.ts +1775 -0
  94. package/dist/lib/messages/schema.js +192 -0
  95. package/dist/lib/presets/index.d.ts +32 -0
  96. package/dist/lib/presets/index.js +35 -0
  97. package/dist/lib/presets/schema.d.ts +753 -0
  98. package/dist/lib/presets/schema.js +181 -0
  99. package/dist/lib/rendering/BrushTip/index.d.ts +63 -0
  100. package/dist/lib/rendering/BrushTip/index.js +112 -0
  101. package/dist/lib/rendering/checkerboard/index.d.ts +22 -0
  102. package/dist/lib/rendering/checkerboard/index.js +31 -0
  103. package/dist/lib/rendering/compositing/index.d.ts +64 -0
  104. package/dist/lib/rendering/compositing/index.js +124 -0
  105. package/dist/lib/rendering/cursor/index.d.ts +14 -0
  106. package/dist/lib/rendering/cursor/index.js +39 -0
  107. package/dist/lib/rendering/cursors/index.d.ts +18 -0
  108. package/dist/lib/rendering/cursors/index.js +23 -0
  109. package/dist/lib/rendering/maskOutline/index.d.ts +22 -0
  110. package/dist/lib/rendering/maskOutline/index.js +78 -0
  111. package/dist/lib/rendering/outline/index.d.ts +36 -0
  112. package/dist/lib/rendering/outline/index.js +120 -0
  113. package/dist/lib/rendering/sample/index.d.ts +55 -0
  114. package/dist/lib/rendering/sample/index.js +83 -0
  115. package/dist/lib/rendering/screenshot/index.d.ts +67 -0
  116. package/dist/lib/rendering/screenshot/index.js +96 -0
  117. package/dist/lib/rendering/transformBox/index.d.ts +10 -0
  118. package/dist/lib/rendering/transformBox/index.js +57 -0
  119. package/dist/lib/selection/Lasso/index.d.ts +70 -0
  120. package/dist/lib/selection/Lasso/index.js +156 -0
  121. package/dist/lib/selection/Selection/index.d.ts +86 -0
  122. package/dist/lib/selection/Selection/index.js +228 -0
  123. package/dist/lib/selection/geometry/index.d.ts +37 -0
  124. package/dist/lib/selection/geometry/index.js +57 -0
  125. package/dist/lib/storage/index.d.ts +63 -0
  126. package/dist/lib/storage/index.js +114 -0
  127. package/dist/lib/transform/Transformer/index.d.ts +124 -0
  128. package/dist/lib/transform/Transformer/index.js +286 -0
  129. package/dist/lib/transform/geometry/index.d.ts +95 -0
  130. package/dist/lib/transform/geometry/index.js +258 -0
  131. package/dist/lib/utils/array/index.d.ts +10 -0
  132. package/dist/lib/utils/array/index.js +21 -0
  133. package/dist/lib/utils/gestures/index.d.ts +35 -0
  134. package/dist/lib/utils/gestures/index.js +81 -0
  135. package/dist/lib/utils/navigation/index.d.ts +51 -0
  136. package/dist/lib/utils/navigation/index.js +59 -0
  137. package/dist/lib/utils/random/index.d.ts +18 -0
  138. package/dist/lib/utils/random/index.js +27 -0
  139. package/dist/lib/utils/shortcuts/index.d.ts +74 -0
  140. package/dist/lib/utils/shortcuts/index.js +189 -0
  141. package/dist/lib/validation/validators.generated.d.ts +27 -0
  142. package/dist/lib/validation/validators.generated.js +19826 -0
  143. package/dist/locales/en-GB.js +181 -0
  144. package/dist/locales/en-US.js +181 -0
  145. package/dist/locales/fr.js +181 -0
  146. package/dist/locales/ja.js +181 -0
  147. package/dist/locales/ko.js +181 -0
  148. package/dist/locales/zh-Hans.js +181 -0
  149. package/dist/locales/zh-Hant.js +181 -0
  150. package/dist/package.js +3 -0
  151. package/dist/testing/app.d.ts +7 -0
  152. package/dist/testing/app.js +16 -0
  153. package/dist/testing/elements.d.ts +42 -0
  154. package/dist/testing/elements.js +58 -0
  155. package/dist/testing/fakeCanvas.d.ts +21 -0
  156. package/dist/testing/fakeCanvas.js +26 -0
  157. package/dist/testing/layerStore.d.ts +26 -0
  158. package/dist/testing/layerStore.js +43 -0
  159. package/dist/testing/locks.d.ts +15 -0
  160. package/dist/testing/locks.js +41 -0
  161. package/dist/testing/recordingCanvas.d.ts +14 -0
  162. package/dist/testing/recordingCanvas.js +28 -0
  163. package/dist/testing/recordingContext.d.ts +10 -0
  164. package/dist/testing/recordingContext.js +19 -0
  165. package/dist/ui/ChangeController/index.d.ts +40 -0
  166. package/dist/ui/ChangeController/index.js +62 -0
  167. package/dist/ui/base/index.d.ts +69 -0
  168. package/dist/ui/base/index.js +94 -0
  169. package/dist/ui/elements/PaintCanvas/index.d.ts +249 -0
  170. package/dist/ui/elements/PaintCanvas/index.js +584 -0
  171. package/dist/ui/elements/PaintCanvas/style.js +3 -0
  172. package/dist/ui/elements/PcBrushConfig/index.d.ts +130 -0
  173. package/dist/ui/elements/PcBrushConfig/index.js +465 -0
  174. package/dist/ui/elements/PcBrushConfig/style.js +3 -0
  175. package/dist/ui/elements/PcBrushMenu/index.d.ts +121 -0
  176. package/dist/ui/elements/PcBrushMenu/index.js +362 -0
  177. package/dist/ui/elements/PcBrushMenu/style.js +3 -0
  178. package/dist/ui/elements/PcBrushTest/index.d.ts +71 -0
  179. package/dist/ui/elements/PcBrushTest/index.js +136 -0
  180. package/dist/ui/elements/PcBrushTest/style.js +3 -0
  181. package/dist/ui/elements/PcButton/index.d.ts +57 -0
  182. package/dist/ui/elements/PcButton/index.js +124 -0
  183. package/dist/ui/elements/PcButtonGroup/index.d.ts +44 -0
  184. package/dist/ui/elements/PcButtonGroup/index.js +93 -0
  185. package/dist/ui/elements/PcCanvas/index.d.ts +356 -0
  186. package/dist/ui/elements/PcCanvas/index.js +1004 -0
  187. package/dist/ui/elements/PcCanvas/style.js +3 -0
  188. package/dist/ui/elements/PcCanvasMap/index.d.ts +96 -0
  189. package/dist/ui/elements/PcCanvasMap/index.js +187 -0
  190. package/dist/ui/elements/PcCanvasMap/style.js +3 -0
  191. package/dist/ui/elements/PcContextMenu/index.d.ts +72 -0
  192. package/dist/ui/elements/PcContextMenu/index.js +148 -0
  193. package/dist/ui/elements/PcDialog/index.d.ts +63 -0
  194. package/dist/ui/elements/PcDialog/index.js +114 -0
  195. package/dist/ui/elements/PcIcon/index.d.ts +36 -0
  196. package/dist/ui/elements/PcIcon/index.js +43 -0
  197. package/dist/ui/elements/PcIconToggle/index.d.ts +46 -0
  198. package/dist/ui/elements/PcIconToggle/index.js +87 -0
  199. package/dist/ui/elements/PcInfoTip/index.d.ts +40 -0
  200. package/dist/ui/elements/PcInfoTip/index.js +95 -0
  201. package/dist/ui/elements/PcInputSettings/index.d.ts +69 -0
  202. package/dist/ui/elements/PcInputSettings/index.js +154 -0
  203. package/dist/ui/elements/PcLayerItem/index.d.ts +221 -0
  204. package/dist/ui/elements/PcLayerItem/index.js +561 -0
  205. package/dist/ui/elements/PcLayerItem/style.js +3 -0
  206. package/dist/ui/elements/PcLayersMenu/index.d.ts +108 -0
  207. package/dist/ui/elements/PcLayersMenu/index.js +208 -0
  208. package/dist/ui/elements/PcLayersMenu/style.js +3 -0
  209. package/dist/ui/elements/PcMatch/index.d.ts +31 -0
  210. package/dist/ui/elements/PcMatch/index.js +58 -0
  211. package/dist/ui/elements/PcPanel/index.d.ts +43 -0
  212. package/dist/ui/elements/PcPanel/index.js +51 -0
  213. package/dist/ui/elements/PcPopover/index.d.ts +48 -0
  214. package/dist/ui/elements/PcPopover/index.js +86 -0
  215. package/dist/ui/elements/PcSlider/index.d.ts +57 -0
  216. package/dist/ui/elements/PcSlider/index.js +88 -0
  217. package/dist/ui/elements/PcStats/index.d.ts +54 -0
  218. package/dist/ui/elements/PcStats/index.js +144 -0
  219. package/dist/ui/elements/PcThemePicker/index.d.ts +56 -0
  220. package/dist/ui/elements/PcThemePicker/index.js +134 -0
  221. package/dist/ui/elements/PcToast/index.d.ts +58 -0
  222. package/dist/ui/elements/PcToast/index.js +110 -0
  223. package/dist/ui/elements/PcToggleCheckbox/index.d.ts +37 -0
  224. package/dist/ui/elements/PcToggleCheckbox/index.js +105 -0
  225. package/dist/ui/elements/PcToolSettings/index.d.ts +128 -0
  226. package/dist/ui/elements/PcToolSettings/index.js +549 -0
  227. package/dist/ui/elements/PcToolSettings/style.js +3 -0
  228. package/dist/ui/elements/PcToolbar/index.d.ts +71 -0
  229. package/dist/ui/elements/PcToolbar/index.js +190 -0
  230. package/dist/ui/elements/PcToolbar/style.js +3 -0
  231. package/dist/ui/icons/images/brush.js +3 -0
  232. package/dist/ui/icons/images/circle-mask.js +3 -0
  233. package/dist/ui/icons/images/clipboard.js +3 -0
  234. package/dist/ui/icons/images/cursor.js +3 -0
  235. package/dist/ui/icons/images/eraser.js +3 -0
  236. package/dist/ui/icons/images/eyedropper.js +3 -0
  237. package/dist/ui/icons/images/flip-horizontal.js +3 -0
  238. package/dist/ui/icons/images/flip-vertical.js +3 -0
  239. package/dist/ui/icons/images/focus-pen.js +3 -0
  240. package/dist/ui/icons/images/freehand-mask.js +3 -0
  241. package/dist/ui/icons/images/hidden.js +3 -0
  242. package/dist/ui/icons/images/layers.js +3 -0
  243. package/dist/ui/icons/images/linked.js +3 -0
  244. package/dist/ui/icons/images/locked.js +3 -0
  245. package/dist/ui/icons/images/moon.js +3 -0
  246. package/dist/ui/icons/images/pan.js +3 -0
  247. package/dist/ui/icons/images/polygon-mask.js +3 -0
  248. package/dist/ui/icons/images/pressure.js +3 -0
  249. package/dist/ui/icons/images/randomise.js +3 -0
  250. package/dist/ui/icons/images/rectangle-mask.js +3 -0
  251. package/dist/ui/icons/images/redo.js +3 -0
  252. package/dist/ui/icons/images/rotate-90-left.js +3 -0
  253. package/dist/ui/icons/images/rotate-90-right.js +3 -0
  254. package/dist/ui/icons/images/smoothing-bezier-cubic.js +3 -0
  255. package/dist/ui/icons/images/smoothing-bezier-quad.js +3 -0
  256. package/dist/ui/icons/images/smoothing-linear.js +3 -0
  257. package/dist/ui/icons/images/star.js +3 -0
  258. package/dist/ui/icons/images/sun.js +3 -0
  259. package/dist/ui/icons/images/tilt.js +3 -0
  260. package/dist/ui/icons/images/undo.js +3 -0
  261. package/dist/ui/icons/images/unlinked.js +3 -0
  262. package/dist/ui/icons/images/unlocked.js +3 -0
  263. package/dist/ui/icons/images/visible.js +3 -0
  264. package/dist/ui/icons/images/zoom-in.js +3 -0
  265. package/dist/ui/icons/images/zoom-out.js +3 -0
  266. package/dist/ui/icons/images/zoom.js +3 -0
  267. package/dist/ui/icons/index.d.ts +42 -0
  268. package/dist/ui/icons/index.js +130 -0
  269. package/dist/ui/index.d.ts +21 -0
  270. package/dist/ui/index.js +22 -0
  271. package/dist/ui/layout/index.d.ts +88 -0
  272. package/dist/ui/layout/index.js +96 -0
  273. package/dist/ui/styles/index.d.ts +13 -0
  274. package/dist/ui/styles/index.js +195 -0
  275. package/dist/ui/tokens/index.d.ts +29 -0
  276. package/dist/ui/tokens/index.js +114 -0
  277. package/locales/en-GB.json +179 -0
  278. package/locales/en-US.json +179 -0
  279. package/locales/fr.json +179 -0
  280. package/locales/ja.json +179 -0
  281. package/locales/ko.json +179 -0
  282. package/locales/zh-Hans.json +179 -0
  283. package/locales/zh-Hant.json +179 -0
  284. package/package.json +97 -3
@@ -0,0 +1,192 @@
1
+ import { ImageEncoding } from "../image/index.js";
2
+ import { UUID_PATTERN, brushPresetSchema } from "../presets/schema.js";
3
+ // src/lib/messages/schema.ts
4
+ /** Version of the drawing message protocol, sent in every message */
5
+ var PROTOCOL_VERSION = 1;
6
+ /** Kinds of drawing message */
7
+ var CanvasMessageType = {
8
+ /** Pixels of the sender's whole drawing (all their layers, flattened) within an area */
9
+ Patch: "patch",
10
+ /** A finished brush or eraser stroke */
11
+ Stroke: "stroke",
12
+ /** The sender undid a step */
13
+ Undo: "undo",
14
+ /** The sender redid a step */
15
+ Redo: "redo"
16
+ };
17
+ /** Largest canvas width or height a message may refer to */
18
+ var MAX_MESSAGE_CANVAS_SIZE = 1e4;
19
+ /** Most points in one stroke message */
20
+ var MAX_STROKE_POINTS = 1e5;
21
+ /** Longest encoded image data in a patch (characters): a whole 10000 × 10000 canvas as base64 RGBA */
22
+ var MAX_PATCH_DATA_LENGTH = Math.ceil(MAX_MESSAGE_CANVAS_SIZE * MAX_MESSAGE_CANVAS_SIZE * 4 / 3) * 4;
23
+ var protocol = { const: 1 };
24
+ var step = {
25
+ type: "string",
26
+ pattern: UUID_PATTERN
27
+ };
28
+ var coordinate = {
29
+ type: "integer",
30
+ minimum: 0,
31
+ maximum: MAX_MESSAGE_CANVAS_SIZE
32
+ };
33
+ var number = { type: "number" };
34
+ /** JSON schema for the brush settings in a stroke message: a brush preset whose ID can be any name (built-in presets
35
+ * have names like `round1`, not UUIDs) */
36
+ var strokePresetSchema = {
37
+ ...brushPresetSchema,
38
+ $id: "paintcanvas/stroke-preset",
39
+ properties: {
40
+ ...brushPresetSchema.properties,
41
+ id: {
42
+ type: "string",
43
+ minLength: 1,
44
+ maxLength: 100
45
+ }
46
+ }
47
+ };
48
+ /** JSON schema for a patch message */
49
+ var patchMessageSchema = {
50
+ $id: "paintcanvas/message/patch",
51
+ type: "object",
52
+ additionalProperties: false,
53
+ required: [
54
+ "protocol",
55
+ "type",
56
+ "coords",
57
+ "encoding",
58
+ "data"
59
+ ],
60
+ properties: {
61
+ protocol,
62
+ type: { const: CanvasMessageType.Patch },
63
+ coords: {
64
+ type: "array",
65
+ items: coordinate,
66
+ minItems: 4,
67
+ maxItems: 4
68
+ },
69
+ encoding: { enum: Object.values(ImageEncoding) },
70
+ data: {
71
+ type: "string",
72
+ pattern: "^[A-Za-z0-9+/]*={0,2}$",
73
+ maxLength: MAX_PATCH_DATA_LENGTH
74
+ }
75
+ }
76
+ };
77
+ /** JSON schema for a stroke message */
78
+ var strokeMessageSchema = {
79
+ $id: "paintcanvas/message/stroke",
80
+ type: "object",
81
+ additionalProperties: false,
82
+ required: [
83
+ "protocol",
84
+ "type",
85
+ "step",
86
+ "layer",
87
+ "mode",
88
+ "preset",
89
+ "size",
90
+ "colour",
91
+ "isPen",
92
+ "seed",
93
+ "points"
94
+ ],
95
+ properties: {
96
+ protocol,
97
+ type: { const: CanvasMessageType.Stroke },
98
+ step,
99
+ layer: {
100
+ type: "string",
101
+ minLength: 1,
102
+ maxLength: 100
103
+ },
104
+ mode: { enum: ["paint", "erase"] },
105
+ preset: { $ref: "../stroke-preset" },
106
+ size: {
107
+ type: "object",
108
+ additionalProperties: false,
109
+ required: ["width", "height"],
110
+ properties: {
111
+ width: {
112
+ type: "number",
113
+ minimum: 0,
114
+ maximum: MAX_MESSAGE_CANVAS_SIZE
115
+ },
116
+ height: {
117
+ type: "number",
118
+ minimum: 0,
119
+ maximum: MAX_MESSAGE_CANVAS_SIZE
120
+ }
121
+ }
122
+ },
123
+ colour: {
124
+ type: "string",
125
+ pattern: "^#[0-9a-fA-F]{6}$"
126
+ },
127
+ isPen: { type: "boolean" },
128
+ seed: {
129
+ type: "integer",
130
+ minimum: 0,
131
+ maximum: 4294967295
132
+ },
133
+ points: {
134
+ type: "array",
135
+ minItems: 1,
136
+ maxItems: MAX_STROKE_POINTS,
137
+ items: {
138
+ type: "object",
139
+ additionalProperties: false,
140
+ required: [
141
+ "x",
142
+ "y",
143
+ "time"
144
+ ],
145
+ properties: {
146
+ x: number,
147
+ y: number,
148
+ time: number,
149
+ rotation: number,
150
+ pressure: {
151
+ type: "number",
152
+ minimum: 0,
153
+ maximum: 1
154
+ },
155
+ tiltX: {
156
+ type: "number",
157
+ minimum: -90,
158
+ maximum: 90
159
+ },
160
+ tiltY: {
161
+ type: "number",
162
+ minimum: -90,
163
+ maximum: 90
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ };
170
+ /** JSON schema for an undo or redo message */
171
+ var historyMessageSchema = {
172
+ $id: "paintcanvas/message/history",
173
+ type: "object",
174
+ additionalProperties: false,
175
+ required: [
176
+ "protocol",
177
+ "type",
178
+ "step"
179
+ ],
180
+ properties: {
181
+ protocol,
182
+ type: { enum: [CanvasMessageType.Undo, CanvasMessageType.Redo] },
183
+ step
184
+ }
185
+ };
186
+ var messageSchemas = [
187
+ strokePresetSchema,
188
+ patchMessageSchema,
189
+ strokeMessageSchema,
190
+ historyMessageSchema
191
+ ];
192
+ export { CanvasMessageType, MAX_MESSAGE_CANVAS_SIZE, MAX_PATCH_DATA_LENGTH, MAX_STROKE_POINTS, PROTOCOL_VERSION, historyMessageSchema, messageSchemas, patchMessageSchema, strokeMessageSchema, strokePresetSchema };
@@ -0,0 +1,32 @@
1
+ import type { BrushPresetFile } from "./schema";
2
+ import { type ValidationError } from "../validation/validators.generated.js";
3
+ export * from "./schema";
4
+ /** Result of validating a brush preset or preset file */
5
+ export type PresetValidationResult<T> = {
6
+ valid: true;
7
+ value: T;
8
+ } | {
9
+ valid: false;
10
+ errors: string[];
11
+ };
12
+ /**
13
+ * Turn validation errors into readable messages.
14
+ *
15
+ * @example
16
+ * formatErrors([{ instancePath: "/id", message: "must match pattern" }]); // ["/id must match pattern"]
17
+ */
18
+ export declare const formatErrors: (errors: ValidationError[] | null | undefined) => string[];
19
+ /**
20
+ * Check a brush preset a user made or imported against `brushPresetSchema`.
21
+ *
22
+ * @example
23
+ * isValidBrushPreset({ id: crypto.randomUUID(), name: "My brush" }).valid; // true
24
+ */
25
+ export declare const isValidBrushPreset: (input: unknown) => PresetValidationResult<Record<string, unknown>>;
26
+ /**
27
+ * Check a brush preset file against `brushPresetFileSchema`.
28
+ *
29
+ * @example
30
+ * isValidBrushPresetFile({ format: "paintcanvas-brush-presets", version: 1, presets: [] }).valid; // true
31
+ */
32
+ export declare const isValidBrushPresetFile: (input: unknown) => PresetValidationResult<BrushPresetFile>;
@@ -0,0 +1,35 @@
1
+ import { validateBrushPreset, validateBrushPresetFile } from "../validation/validators.generated.js";
2
+ import { BRUSH_PRESET_FILE_FORMAT, BRUSH_PRESET_FILE_FORMATS, BRUSH_PRESET_FILE_VERSION, MAX_PRESETS_PER_FILE, MAX_PRESET_FILE_FORMAT_LENGTH, MAX_PRESET_TEXT_LENGTH, MAX_SHAPE_DATA_URL_LENGTH, PNG_DATA_URL_PATTERN, UUID_PATTERN, brushPresetFileSchema, brushPresetSchema } from "./schema.js";
3
+ // src/lib/presets/index.ts
4
+ /**
5
+ * Turn validation errors into readable messages.
6
+ *
7
+ * @example
8
+ * formatErrors([{ instancePath: "/id", message: "must match pattern" }]); // ["/id must match pattern"]
9
+ */
10
+ var formatErrors = (errors) => (errors ?? []).map((e) => `${e.instancePath || "/"} ${e.message ?? "is invalid"}`);
11
+ /**
12
+ * Validate a value with a pre-compiled validator.
13
+ */
14
+ var check = (validate, input) => validate(input) ? {
15
+ valid: true,
16
+ value: input
17
+ } : {
18
+ valid: false,
19
+ errors: formatErrors(validate.errors)
20
+ };
21
+ /**
22
+ * Check a brush preset a user made or imported against `brushPresetSchema`.
23
+ *
24
+ * @example
25
+ * isValidBrushPreset({ id: crypto.randomUUID(), name: "My brush" }).valid; // true
26
+ */
27
+ var isValidBrushPreset = (input) => check(validateBrushPreset, input);
28
+ /**
29
+ * Check a brush preset file against `brushPresetFileSchema`.
30
+ *
31
+ * @example
32
+ * isValidBrushPresetFile({ format: "paintcanvas-brush-presets", version: 1, presets: [] }).valid; // true
33
+ */
34
+ var isValidBrushPresetFile = (input) => check(validateBrushPresetFile, input);
35
+ export { BRUSH_PRESET_FILE_FORMAT, BRUSH_PRESET_FILE_FORMATS, BRUSH_PRESET_FILE_VERSION, MAX_PRESETS_PER_FILE, MAX_PRESET_FILE_FORMAT_LENGTH, MAX_PRESET_TEXT_LENGTH, MAX_SHAPE_DATA_URL_LENGTH, PNG_DATA_URL_PATTERN, UUID_PATTERN, brushPresetFileSchema, brushPresetSchema, formatErrors, isValidBrushPreset, isValidBrushPresetFile };