@wodzik/cubecore 0.1.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 (279) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +118 -0
  3. package/analyze/client.d.ts +18 -0
  4. package/analyze/client.js +42 -0
  5. package/analyze/index.d.ts +114 -0
  6. package/analyze/index.js +151 -0
  7. package/analyze/rotations.d.ts +3 -0
  8. package/analyze/rotations.js +15 -0
  9. package/analyze/roux.d.ts +67 -0
  10. package/analyze/roux.js +95 -0
  11. package/analyze/worker.d.ts +6 -0
  12. package/analyze/worker.js +31 -0
  13. package/analyze/zz.d.ts +47 -0
  14. package/analyze/zz.js +102 -0
  15. package/bld/index.d.ts +14 -0
  16. package/bld/index.js +14 -0
  17. package/bld/memo.d.ts +66 -0
  18. package/bld/memo.js +139 -0
  19. package/bld/scheme.d.ts +30 -0
  20. package/bld/scheme.js +35 -0
  21. package/bld/skin.d.ts +26 -0
  22. package/bld/skin.js +46 -0
  23. package/bld/tracker.d.ts +68 -0
  24. package/bld/tracker.js +145 -0
  25. package/bluetooth/clock.d.ts +22 -0
  26. package/bluetooth/clock.js +37 -0
  27. package/bluetooth/cubeSkins.d.ts +31 -0
  28. package/bluetooth/cubeSkins.js +32 -0
  29. package/bluetooth/gyro.d.ts +31 -0
  30. package/bluetooth/gyro.js +46 -0
  31. package/bluetooth/index.d.ts +5 -0
  32. package/bluetooth/index.js +5 -0
  33. package/bluetooth/session.d.ts +140 -0
  34. package/bluetooth/session.js +201 -0
  35. package/bluetooth/simulated.d.ts +52 -0
  36. package/bluetooth/simulated.js +80 -0
  37. package/bluetooth/vendor/smartcube-web-bluetooth/gan-cube-definitions.d.ts +38 -0
  38. package/bluetooth/vendor/smartcube-web-bluetooth/gan-cube-definitions.js +51 -0
  39. package/bluetooth/vendor/smartcube-web-bluetooth/gan-cube-encrypter.d.ts +35 -0
  40. package/bluetooth/vendor/smartcube-web-bluetooth/gan-cube-encrypter.js +70 -0
  41. package/bluetooth/vendor/smartcube-web-bluetooth/gan-cube-protocol.d.ts +273 -0
  42. package/bluetooth/vendor/smartcube-web-bluetooth/gan-cube-protocol.js +846 -0
  43. package/bluetooth/vendor/smartcube-web-bluetooth/gan-gen1.d.ts +38 -0
  44. package/bluetooth/vendor/smartcube-web-bluetooth/gan-gen1.js +340 -0
  45. package/bluetooth/vendor/smartcube-web-bluetooth/gan-gen234-packet-validate.d.ts +11 -0
  46. package/bluetooth/vendor/smartcube-web-bluetooth/gan-gen234-packet-validate.js +118 -0
  47. package/bluetooth/vendor/smartcube-web-bluetooth/gan-mac-salt.d.ts +2 -0
  48. package/bluetooth/vendor/smartcube-web-bluetooth/gan-mac-salt.js +15 -0
  49. package/bluetooth/vendor/smartcube-web-bluetooth/gan-smart-cube.d.ts +18 -0
  50. package/bluetooth/vendor/smartcube-web-bluetooth/gan-smart-cube.js +152 -0
  51. package/bluetooth/vendor/smartcube-web-bluetooth/gan-smart-timer.d.ts +74 -0
  52. package/bluetooth/vendor/smartcube-web-bluetooth/gan-smart-timer.js +161 -0
  53. package/bluetooth/vendor/smartcube-web-bluetooth/gan-write-queue.d.ts +7 -0
  54. package/bluetooth/vendor/smartcube-web-bluetooth/gan-write-queue.js +11 -0
  55. package/bluetooth/vendor/smartcube-web-bluetooth/gatt-characteristic-write.d.ts +2 -0
  56. package/bluetooth/vendor/smartcube-web-bluetooth/gatt-characteristic-write.js +36 -0
  57. package/bluetooth/vendor/smartcube-web-bluetooth/index.d.ts +4 -0
  58. package/bluetooth/vendor/smartcube-web-bluetooth/index.js +4 -0
  59. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/address-hints.d.ts +12 -0
  60. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/address-hints.js +122 -0
  61. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/build-picker-options.d.ts +11 -0
  62. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/build-picker-options.js +55 -0
  63. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/default-optional-services.d.ts +21 -0
  64. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/default-optional-services.js +47 -0
  65. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/device-name-scan-filters.d.ts +6 -0
  66. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/device-name-scan-filters.js +24 -0
  67. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/gatt-snapshot.d.ts +6 -0
  68. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/gatt-snapshot.js +57 -0
  69. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/mac-candidates.d.ts +11 -0
  70. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/mac-candidates.js +67 -0
  71. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/mac-probe-moyu32.d.ts +8 -0
  72. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/mac-probe-moyu32.js +98 -0
  73. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/mac-probe-qiyi.d.ts +8 -0
  74. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/mac-probe-qiyi.js +128 -0
  75. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/moyu32-session-crypto.d.ts +5 -0
  76. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/moyu32-session-crypto.js +60 -0
  77. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/normalize-uuid.d.ts +2 -0
  78. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/normalize-uuid.js +8 -0
  79. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/packet-sanity.d.ts +7 -0
  80. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/packet-sanity.js +142 -0
  81. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/profile-rank.d.ts +6 -0
  82. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/profile-rank.js +21 -0
  83. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/types.d.ts +32 -0
  84. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/attachment/types.js +1 -0
  85. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/ble-utils.d.ts +6 -0
  86. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/ble-utils.js +68 -0
  87. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/connect.d.ts +3 -0
  88. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/connect.js +178 -0
  89. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/cubie-cube.d.ts +16 -0
  90. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/cubie-cube.js +141 -0
  91. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/index.d.ts +11 -0
  92. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/index.js +10 -0
  93. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocol.d.ts +26 -0
  94. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocol.js +8 -0
  95. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/gan.d.ts +3 -0
  96. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/gan.js +265 -0
  97. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/giiker.d.ts +3 -0
  98. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/giiker.js +345 -0
  99. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/gocube.d.ts +15 -0
  100. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/gocube.js +382 -0
  101. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/moyu-mhc.d.ts +3 -0
  102. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/moyu-mhc.js +352 -0
  103. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/moyu-v1.d.ts +57 -0
  104. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/moyu-v1.js +243 -0
  105. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/moyu32.d.ts +3 -0
  106. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/moyu32.js +454 -0
  107. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/qiyi.d.ts +3 -0
  108. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/protocols/qiyi.js +424 -0
  109. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/types.d.ts +78 -0
  110. package/bluetooth/vendor/smartcube-web-bluetooth/smartcube/types.js +1 -0
  111. package/bluetooth/vendor/smartcube-web-bluetooth/utils.d.ts +45 -0
  112. package/bluetooth/vendor/smartcube-web-bluetooth/utils.js +150 -0
  113. package/cfop/caseData.d.ts +16 -0
  114. package/cfop/caseData.js +88 -0
  115. package/cfop/cases.d.ts +42 -0
  116. package/cfop/cases.js +116 -0
  117. package/cfop/f2l.d.ts +28 -0
  118. package/cfop/f2l.js +88 -0
  119. package/cfop/f2lData.d.ts +15 -0
  120. package/cfop/f2lData.js +49 -0
  121. package/cfop/index.d.ts +41 -0
  122. package/cfop/index.js +110 -0
  123. package/cfop/slots.d.ts +2 -0
  124. package/cfop/slots.js +1 -0
  125. package/core/arrows.d.ts +24 -0
  126. package/core/arrows.js +22 -0
  127. package/core/bytes.d.ts +27 -0
  128. package/core/bytes.js +145 -0
  129. package/core/centers.d.ts +32 -0
  130. package/core/centers.js +83 -0
  131. package/core/checks.d.ts +53 -0
  132. package/core/checks.js +85 -0
  133. package/core/cubies.d.ts +45 -0
  134. package/core/cubies.js +169 -0
  135. package/core/frames.d.ts +61 -0
  136. package/core/frames.js +126 -0
  137. package/core/geometry.d.ts +58 -0
  138. package/core/geometry.js +132 -0
  139. package/core/index.d.ts +19 -0
  140. package/core/index.js +19 -0
  141. package/core/masks.d.ts +32 -0
  142. package/core/masks.js +39 -0
  143. package/core/method.d.ts +35 -0
  144. package/core/method.js +30 -0
  145. package/core/moves.d.ts +48 -0
  146. package/core/moves.js +88 -0
  147. package/core/notation.d.ts +48 -0
  148. package/core/notation.js +226 -0
  149. package/core/physical.d.ts +53 -0
  150. package/core/physical.js +99 -0
  151. package/core/practice.d.ts +62 -0
  152. package/core/practice.js +87 -0
  153. package/core/sequence.d.ts +90 -0
  154. package/core/sequence.js +157 -0
  155. package/core/stages.d.ts +90 -0
  156. package/core/stages.js +21 -0
  157. package/core/state.d.ts +55 -0
  158. package/core/state.js +140 -0
  159. package/core/stateCodec.d.ts +12 -0
  160. package/core/stateCodec.js +51 -0
  161. package/core/stream.d.ts +45 -0
  162. package/core/stream.js +75 -0
  163. package/core/tracker.d.ts +62 -0
  164. package/core/tracker.js +121 -0
  165. package/element/alg.d.ts +45 -0
  166. package/element/alg.js +150 -0
  167. package/element/base.d.ts +2 -0
  168. package/element/base.js +3 -0
  169. package/element/bld.d.ts +82 -0
  170. package/element/bld.js +222 -0
  171. package/element/index.d.ts +8 -0
  172. package/element/index.js +21 -0
  173. package/element/model.d.ts +36 -0
  174. package/element/model.js +64 -0
  175. package/element/player.d.ts +196 -0
  176. package/element/player.js +680 -0
  177. package/element/practice.d.ts +75 -0
  178. package/element/practice.js +150 -0
  179. package/element/scramble.d.ts +50 -0
  180. package/element/scramble.js +107 -0
  181. package/element/sequence.d.ts +126 -0
  182. package/element/sequence.js +254 -0
  183. package/element/styles.d.ts +32 -0
  184. package/element/styles.js +196 -0
  185. package/image/cache.d.ts +21 -0
  186. package/image/cache.js +66 -0
  187. package/image/index.d.ts +2 -0
  188. package/image/index.js +2 -0
  189. package/image/png-node.d.ts +6 -0
  190. package/image/png-node.js +10 -0
  191. package/image/svg.d.ts +36 -0
  192. package/image/svg.js +215 -0
  193. package/lbl/index.d.ts +10 -0
  194. package/lbl/index.js +31 -0
  195. package/methods/index.d.ts +20 -0
  196. package/methods/index.js +33 -0
  197. package/package.json +133 -0
  198. package/petrus/index.d.ts +11 -0
  199. package/petrus/index.js +27 -0
  200. package/react/index.d.ts +176 -0
  201. package/react/index.js +228 -0
  202. package/render/arrows.d.ts +68 -0
  203. package/render/arrows.js +190 -0
  204. package/render/build/attachments.d.ts +35 -0
  205. package/render/build/attachments.js +94 -0
  206. package/render/build/models.d.ts +9 -0
  207. package/render/build/models.js +27 -0
  208. package/render/build/tiles.d.ts +48 -0
  209. package/render/build/tiles.js +194 -0
  210. package/render/gltf.d.ts +10 -0
  211. package/render/gltf.js +106 -0
  212. package/render/index.d.ts +12 -0
  213. package/render/index.js +12 -0
  214. package/render/layers.d.ts +21 -0
  215. package/render/layers.js +24 -0
  216. package/render/pictures.d.ts +46 -0
  217. package/render/pictures.js +80 -0
  218. package/render/pieceModels.d.ts +38 -0
  219. package/render/pieceModels.js +43 -0
  220. package/render/renderer.d.ts +165 -0
  221. package/render/renderer.js +647 -0
  222. package/render/tile.d.ts +114 -0
  223. package/render/tile.js +390 -0
  224. package/render/viewports.d.ts +25 -0
  225. package/render/viewports.js +26 -0
  226. package/roux/cmll.d.ts +35 -0
  227. package/roux/cmll.js +121 -0
  228. package/roux/cmllData.d.ts +12 -0
  229. package/roux/cmllData.js +49 -0
  230. package/roux/index.d.ts +52 -0
  231. package/roux/index.js +175 -0
  232. package/skin/attachments.d.ts +82 -0
  233. package/skin/attachments.js +110 -0
  234. package/skin/index.d.ts +3 -0
  235. package/skin/index.js +3 -0
  236. package/skin/shapes.d.ts +112 -0
  237. package/skin/shapes.js +147 -0
  238. package/skin/skin.d.ts +911 -0
  239. package/skin/skin.js +412 -0
  240. package/solve/client.d.ts +58 -0
  241. package/solve/client.js +56 -0
  242. package/solve/handle.d.ts +6 -0
  243. package/solve/handle.js +38 -0
  244. package/solve/index.d.ts +8 -0
  245. package/solve/index.js +7 -0
  246. package/solve/lse.d.ts +42 -0
  247. package/solve/lse.js +151 -0
  248. package/solve/pieces.d.ts +18 -0
  249. package/solve/pieces.js +24 -0
  250. package/solve/protocol.d.ts +70 -0
  251. package/solve/protocol.js +16 -0
  252. package/solve/scramble.d.ts +76 -0
  253. package/solve/scramble.js +187 -0
  254. package/solve/stage.d.ts +108 -0
  255. package/solve/stage.js +532 -0
  256. package/solve/twophase.d.ts +36 -0
  257. package/solve/twophase.js +229 -0
  258. package/solve/worker.d.ts +6 -0
  259. package/solve/worker.js +15 -0
  260. package/timeline/codec.d.ts +23 -0
  261. package/timeline/codec.js +84 -0
  262. package/timeline/index.d.ts +7 -0
  263. package/timeline/index.js +7 -0
  264. package/timeline/recording.d.ts +19 -0
  265. package/timeline/recording.js +20 -0
  266. package/timeline/replay.d.ts +68 -0
  267. package/timeline/replay.js +145 -0
  268. package/timeline/segments.d.ts +31 -0
  269. package/timeline/segments.js +39 -0
  270. package/timeline/share.d.ts +30 -0
  271. package/timeline/share.js +62 -0
  272. package/timeline/stats.d.ts +34 -0
  273. package/timeline/stats.js +56 -0
  274. package/timeline/timings.d.ts +30 -0
  275. package/timeline/timings.js +54 -0
  276. package/zz/index.d.ts +29 -0
  277. package/zz/index.js +68 -0
  278. package/zz/seeds.d.ts +9 -0
  279. package/zz/seeds.js +29 -0
package/skin/skin.d.ts ADDED
@@ -0,0 +1,911 @@
1
+ /**
2
+ * Skin — how the cube looks, as plain data (serialisable, presets below).
3
+ * Everything the renderer draws comes from here, per theme.
4
+ */
5
+ import type { MaskState } from "../core/index.js";
6
+ import type { Decal, FeatureUse } from "./attachments.js";
7
+ import type { PieceKind, StickerOverlay, StickerPaths, StickerShape } from "./shapes.js";
8
+ export interface Skin {
9
+ /** Plastic colour. */
10
+ body: string;
11
+ /**
12
+ * Plastic between the tiles in 2D pictures (@cubecore/image); null =
13
+ * see-through (the page shows in the gaps). Default: `body`. Light
14
+ * plastic with light tiles (white on ivory) blurs together in 2D.
15
+ */
16
+ pictureBody?: string | null;
17
+ /** Cubie size relative to the 1-unit grid (1 = no gap between cubies). */
18
+ cubieSize: number;
19
+ /** Rounding of the cubie edges, 0..0.5. */
20
+ cubieRadius: number;
21
+ /**
22
+ * Shrinks the black body under the tiles (cubie units per side): thick
23
+ * stickerless tiles then form the piece's outside and the core shows only
24
+ * deep in the gaps. Tiles reach down to meet it. Default 0.
25
+ */
26
+ bodyInset?: number;
27
+ /**
28
+ * Stickerless piece bodies shaped like their tiles instead of a box: under
29
+ * each tile the plastic continues `depth` deep into the cubie, narrowing
30
+ * by `taper` (the front of a piece is larger than its back; a centre piece
31
+ * is as round as its tile), around a rounded core `core` × the cubie size.
32
+ * Cubie units.
33
+ */
34
+ pieces?: {
35
+ depth: number;
36
+ taper: number;
37
+ core: number;
38
+ /**
39
+ * Coloured plastic: the piece under each tile takes the tile's colour (a
40
+ * corner is three coloured parts, an edge two, a centre one — like
41
+ * stickerless cubes moulded in colour); the core stays `body`.
42
+ */
43
+ colored?: boolean;
44
+ /**
45
+ * "skirt" (default): plastic `depth` deep under each tile; "solid": the
46
+ * same shape run through the whole piece, so the piece is filled with
47
+ * colour — the tapered walls meet inside it, the nearer tile's outermost,
48
+ * so inner faces split along the diagonals (a corner in three colours, an
49
+ * edge in two). Needs `colored`.
50
+ */
51
+ fill?: "skirt" | "solid";
52
+ /**
53
+ * Straight walls: the plastic first runs straight down along the tile
54
+ * outline to this depth, then narrows (`taper`) — real pieces have a flat
55
+ * bit of wall behind the tile before they narrow. Default: narrows at once.
56
+ */
57
+ wall?: number;
58
+ /**
59
+ * Corner-cutting relief: behind the tile, the material at the tile's
60
+ * corner(s) next to the face centre is cut away in a cone — `start` wide
61
+ * right under the tile (default 0), `radius` at `depth` below it. The tile's corner
62
+ * overhangs and passes in front of the centre when you cut a corner.
63
+ * `tile`: the cut reaches up into the tile to this height above the face
64
+ * (a thinner overhanging corner; at most where the tile's bevel starts).
65
+ * Corner pieces only, unless `edges`.
66
+ */
67
+ relief?: {
68
+ radius: number;
69
+ depth: number;
70
+ start?: number;
71
+ tile?: number;
72
+ edges?: boolean;
73
+ };
74
+ /**
75
+ * Radius of the dark mechanism ball in the middle (cubie units, default
76
+ * 1.15). The pieces' insides are cut flat where they would reach it —
77
+ * a corner's inner point, an edge's inner edge, a centre's back.
78
+ */
79
+ mechanism?: number;
80
+ };
81
+ stickers: {
82
+ /** Colour of each colour class, U R F D L B home-face order. */
83
+ colors: readonly [string, string, string, string, string, string];
84
+ /** Side of a sticker relative to a cubie face, 0..1. */
85
+ size: number;
86
+ /** Corner radius relative to the sticker, 0..0.5 (0.5 = circle) — used when `shape` is not given. */
87
+ radius: number;
88
+ /** Per-piece-kind corner radii (see shapes.ts) — overrides `radius`. */
89
+ shape?: StickerShape;
90
+ /** Custom outlines as SVG path data — override `shape` per piece kind. */
91
+ paths?: StickerPaths;
92
+ /** How far a tile stands out from the plastic (cubie units) — stickerless tiles are thicker. */
93
+ thickness?: number;
94
+ /**
95
+ * Per piece kind: a different tile size / thickness / edge round — e.g. a
96
+ * centre cap that is smaller and stands out more than the other tiles.
97
+ * Unset values fall back to `size` / `thickness` / `bevel`. `dome`: a top
98
+ * that is flat inside a circle (`flat` × the tile's reach) and falls `drop`
99
+ * lower at the corners.
100
+ */
101
+ kinds?: Partial<Record<PieceKind, {
102
+ size?: number;
103
+ thickness?: number;
104
+ bevel?: number;
105
+ dome?: {
106
+ flat: number;
107
+ drop: number;
108
+ };
109
+ }>>;
110
+ /** Radius of the rounded top edge of a tile (cubie units, ≤ thickness). Default 0 (sharp). */
111
+ bevel?: number;
112
+ /**
113
+ * "flat" — unlit, exact colours (printed-sticker look, default);
114
+ * "plastic" — lit with a soft highlight, so thick bevelled tiles read as moulded plastic.
115
+ */
116
+ material?: "flat" | "plastic";
117
+ /** Plastic finish: 0 = glossy (UV coated) … 1 = matte. Default 0.4. */
118
+ roughness?: number;
119
+ /**
120
+ * Sticker finish as on real cubes (implies lit plastic):
121
+ * "matte" — soft, diffuse, no sharp highlight;
122
+ * "uv" — UV-coated: a clear glossy coat with sharp reflections.
123
+ * Overrides `roughness`.
124
+ */
125
+ finish?: "matte" | "uv";
126
+ /**
127
+ * Stickerless: rounding of the cube's outer edges (cubie units). The two
128
+ * tiles meeting there each curve over half of it, so colour runs round
129
+ * the edge. Default 0 (a sharp edge).
130
+ */
131
+ edgeRadius?: number;
132
+ /**
133
+ * Stickerless: tile sides on the cube's outer edge reach the edge, so two
134
+ * faces' colours meet directly on edges and corners (no black line there);
135
+ * gaps remain only between neighbouring pieces on a face.
136
+ */
137
+ fillOuter?: boolean;
138
+ /**
139
+ * Stickers on the tiles: the tiles become the body's plastic (a raised
140
+ * black platform, rounded at the cube's edges) and a thin sticker of its
141
+ * own shape lies on each, kept `margin` from the cube's edges — a
142
+ * stickered cube.
143
+ */
144
+ overlay?: StickerOverlay;
145
+ /**
146
+ * A cube corner rounder than its edges (cubie units): the corner pieces
147
+ * are rounded off by a ball of this radius at the cube's corners.
148
+ */
149
+ cornerRound?: number;
150
+ };
151
+ /**
152
+ * The brand's sticker shapes for its stickered version (`withStickers`):
153
+ * tile size, outlines, and optionally a different centre size.
154
+ */
155
+ stickerSet?: StickerSet;
156
+ /**
157
+ * Images on stickers — logos, symbols, printed patterns (see
158
+ * attachments.ts). They follow their sticker. Brand logos are trademarks:
159
+ * apps supply their own, the library ships none.
160
+ */
161
+ decals?: readonly Decal[];
162
+ /** Extra geometry on stickers — holes, charging slots, your own types (see `defineFeature`). */
163
+ features?: readonly FeatureUse[];
164
+ /**
165
+ * Your own 3D pieces (glTF / GLB URLs) instead of the built-in geometry —
166
+ * see @cubecore/render pieceModels.ts for the convention (UFR corner, UF
167
+ * edge, U centre; materials sticker-U / sticker-F / sticker-R are
168
+ * recoloured). Kinds left out keep the built-in pieces; until a model has
169
+ * loaded (or if it fails), the built-in pieces are drawn. Stickers /
170
+ * outlines above still drive the 2D pictures.
171
+ */
172
+ models?: {
173
+ corner?: string;
174
+ edge?: string;
175
+ center?: string;
176
+ /** Uniform scale if the models aren't in cubie units. Default 1. */
177
+ scale?: number;
178
+ /** Height of the sticker surface above the cubie's face (for decals / features). Default: stickers.thickness. */
179
+ surface?: number;
180
+ };
181
+ /**
182
+ * Colours for masked stickers. `dim` fades the sticker colour towards the
183
+ * `ignored` grey by `dimAmount` — faded, but lighter / more coloured than
184
+ * a hidden sticker (towards the black body, white turned into that grey).
185
+ */
186
+ mask: {
187
+ ignored: string;
188
+ oriented: string;
189
+ dimAmount: number;
190
+ };
191
+ /**
192
+ * Floating "back" stickers showing the hidden faces. `colors`: a palette of
193
+ * their own (e.g. white hints turned blue-grey so they show on a light page).
194
+ */
195
+ hints: {
196
+ enabled: boolean;
197
+ distance: number;
198
+ opacity: number;
199
+ ignoredOpacity: number;
200
+ colors?: readonly [string, string, string, string, string, string];
201
+ };
202
+ background: string | null;
203
+ /**
204
+ * Adjustments for light and dark pages — whatever reads badly on one of
205
+ * them (grey masked stickers, white back stickers, the background). Pick
206
+ * one with `themed(skin, theme)`; renderers / pictures / the player take a
207
+ * `theme` option.
208
+ */
209
+ themes?: {
210
+ light?: SkinTheme;
211
+ dark?: SkinTheme;
212
+ };
213
+ }
214
+ /**
215
+ * A brand's stickers for its stickered cube (`withStickers`): the sticker's
216
+ * size, margin from the cube's edges and corner radii (see StickerOverlay),
217
+ * and how round the body is at the cube's edges.
218
+ */
219
+ export interface StickerSet extends Omit<StickerOverlay, "thickness" | "bevel"> {
220
+ /** Rounding of the body at the cube's edges (cubie units). Default 0.1. */
221
+ edgeRadius?: number;
222
+ /** The stickered cube's plastic. Default a soft black (#222222). */
223
+ body?: string;
224
+ /** A cube corner rounder than the edges (cubie units) — see `stickers.cornerRound`. */
225
+ cornerRound?: number;
226
+ /** The centre piece's top under its sticker: flat in a circle, sloping to the corners (see `kinds.dome`). */
227
+ centerDome?: {
228
+ flat: number;
229
+ drop: number;
230
+ };
231
+ /** Corner radii of the plastic tops the stickers lie on (fractions of a face). Default: the stickers' own. */
232
+ base?: StickerShape;
233
+ }
234
+ /** How a stickered version's stickers stand: thick and rounded, thin (a real sticker) or a flat print. */
235
+ export type StickerStyle = "raised" | "thin" | "flat";
236
+ export interface SkinTheme {
237
+ body?: string;
238
+ background?: string | null;
239
+ mask?: Partial<Skin["mask"]>;
240
+ hints?: Partial<Skin["hints"]>;
241
+ }
242
+ export type Theme = "light" | "dark";
243
+ /** The skin as it should look on a `theme` page (its `themes` overrides applied). */
244
+ export declare function themed(skin: Skin, theme: Theme): Skin;
245
+ /** Back-sticker colour: the hint palette if the skin has one, else the sticker's own. */
246
+ export declare function hintColor(skin: Skin, colorClass: number, state: MaskState): string | null;
247
+ /**
248
+ * QiYi SC tile outlines (corner, edge), measured from the plates of the cube
249
+ * model in QiYi's app: rounded corners, a big round towards the face centre
250
+ * and the edge tiles' long curve there. Stickerless — outer sides run to the
251
+ * cube edge.
252
+ */
253
+ /**
254
+ * QiYi's stickered cubes, measured from the models in QiYi's app ("black
255
+ * rounded" / "black square"): flat stickers on black pedestals, ~0.87–0.89 of
256
+ * a face, kept 0.21 from the cube's edges; a big round on a corner sticker
257
+ * at the cube's corner; round centre stickers on a domed centre. The two
258
+ * differ only in how round the body is: at the edges 0.24 / 0.15, at the
259
+ * corners 0.37 / 0.22.
260
+ */
261
+ export declare const QIYI_ROUND_STICKERS: StickerSet;
262
+ /** The square one: the same stickers and pieces, only less rounded at the cube's edges and corners. */
263
+ export declare const QIYI_SQUARE_STICKERS: StickerSet;
264
+ /**
265
+ * Earlier skins, kept for reference (not in SKINS): the first GAN look, the
266
+ * i4 (with its holes — `default` is built from it), the GAN 356 M measured
267
+ * from a 3D model (`gan` / `ganStickers` are built from it), and the first
268
+ * generic looks `standard` (black plastic, stickers) and `stickerless`.
269
+ */
270
+ export declare const ARCHIVED_SKINS: {
271
+ /**
272
+ * GAN-style stickerless: tiles almost fill each cubie face; corner tiles
273
+ * round off the corner facing the centre, edge tiles round their inner side
274
+ * into a tongue, centre tiles are nearly round. Add a logo as a decal.
275
+ */
276
+ gan: {
277
+ body: string;
278
+ cubieSize: number;
279
+ cubieRadius: number;
280
+ bodyInset: number;
281
+ pieces: {
282
+ depth: number;
283
+ taper: number;
284
+ core: number;
285
+ };
286
+ stickers: {
287
+ colors: [string, string, string, string, string, string];
288
+ size: number;
289
+ radius: number;
290
+ shape: {
291
+ corner: {
292
+ inner: number;
293
+ outer: number;
294
+ };
295
+ edge: {
296
+ inner: number;
297
+ outer: number;
298
+ };
299
+ center: number;
300
+ };
301
+ thickness: number;
302
+ bevel: number;
303
+ edgeRadius: number;
304
+ material: "plastic";
305
+ fillOuter: true;
306
+ };
307
+ mask: {
308
+ ignored: string;
309
+ oriented: string;
310
+ dimAmount: number;
311
+ };
312
+ hints: {
313
+ enabled: false;
314
+ distance: number;
315
+ opacity: number;
316
+ ignoredOpacity: number;
317
+ };
318
+ background: null;
319
+ themes: {
320
+ light: SkinTheme;
321
+ };
322
+ };
323
+ /**
324
+ * GAN i4-style smart cube (from product photos): light translucent-grey
325
+ * internals showing in minimal gaps, thick matte tiles with soft edges, the
326
+ * cube's edges rounded so colour runs round them, squarish centres with
327
+ * four adjustment holes. The brand logo is up to the app (a decal).
328
+ */
329
+ ganI4: {
330
+ body: string;
331
+ cubieSize: number;
332
+ cubieRadius: number;
333
+ bodyInset: number;
334
+ pieces: {
335
+ depth: number;
336
+ taper: number;
337
+ core: number;
338
+ };
339
+ stickers: {
340
+ colors: [string, string, string, string, string, string];
341
+ size: number;
342
+ radius: number;
343
+ shape: {
344
+ corner: {
345
+ inner: number;
346
+ outer: number;
347
+ };
348
+ edge: {
349
+ inner: number;
350
+ outer: number;
351
+ };
352
+ center: number;
353
+ };
354
+ thickness: number;
355
+ bevel: number;
356
+ edgeRadius: number;
357
+ material: "plastic";
358
+ roughness: number;
359
+ fillOuter: true;
360
+ };
361
+ features: {
362
+ select: {
363
+ kinds: "center"[];
364
+ };
365
+ type: string;
366
+ params: {
367
+ radius: number;
368
+ at: number[][];
369
+ };
370
+ }[];
371
+ mask: {
372
+ ignored: string;
373
+ oriented: string;
374
+ dimAmount: number;
375
+ };
376
+ hints: {
377
+ enabled: false;
378
+ distance: number;
379
+ opacity: number;
380
+ ignoredOpacity: number;
381
+ };
382
+ background: null;
383
+ themes: {
384
+ light: SkinTheme;
385
+ };
386
+ };
387
+ /**
388
+ * GAN 356 M (stickerless): square corner tiles, edge tiles with a round
389
+ * "tongue" towards the centre, near-round centres; thin glossy tiles.
390
+ * Shapes, sizes and colours measured from "GAN CUBE 356s M air" by Amyyu
391
+ * (https://sketchfab.com/3d-models/gan-cube-356s-m-air-dd4768b8fe2841c78e418230e5d9e192,
392
+ * CC BY 4.0); smoothed after the cube in GAN's app. No logo — that's up to the app (a decal).
393
+ */
394
+ gan356m: {
395
+ body: string;
396
+ cubieSize: number;
397
+ cubieRadius: number;
398
+ bodyInset: number;
399
+ pieces: {
400
+ depth: number;
401
+ taper: number;
402
+ wall: number;
403
+ relief: {
404
+ radius: number;
405
+ depth: number;
406
+ start: number;
407
+ tile: number;
408
+ };
409
+ mechanism: number;
410
+ core: number;
411
+ fill: "solid";
412
+ };
413
+ stickers: {
414
+ colors: [string, string, string, string, string, string];
415
+ size: number;
416
+ radius: number;
417
+ shape: {
418
+ corner: {
419
+ inner: number;
420
+ outer: number;
421
+ };
422
+ edge: {
423
+ inner: number;
424
+ outer: number;
425
+ };
426
+ center: number;
427
+ };
428
+ thickness: number;
429
+ bevel: number;
430
+ kinds: {
431
+ center: {
432
+ size: number;
433
+ thickness: number;
434
+ bevel: number;
435
+ };
436
+ };
437
+ edgeRadius: number;
438
+ material: "plastic";
439
+ roughness: number;
440
+ fillOuter: true;
441
+ };
442
+ stickerSet: {
443
+ size: number;
444
+ centerSize: number;
445
+ margin: number;
446
+ shape: {
447
+ corner: {
448
+ inner: number;
449
+ outer: number;
450
+ };
451
+ edge: {
452
+ inner: number;
453
+ outer: number;
454
+ };
455
+ center: number;
456
+ };
457
+ edgeRadius: number;
458
+ };
459
+ mask: {
460
+ ignored: string;
461
+ oriented: string;
462
+ dimAmount: number;
463
+ };
464
+ hints: {
465
+ enabled: false;
466
+ distance: number;
467
+ opacity: number;
468
+ ignoredOpacity: number;
469
+ };
470
+ background: null;
471
+ themes: {
472
+ light: SkinTheme;
473
+ };
474
+ };
475
+ /** Black plastic, rounded stickers — a typical modern speed cube. */
476
+ standard: {
477
+ body: string;
478
+ cubieSize: number;
479
+ cubieRadius: number;
480
+ stickers: {
481
+ colors: readonly ["#ffffff", "#e8322f", "#1fb24a", "#ffd500", "#ff8a00", "#1e5eff"];
482
+ size: number;
483
+ radius: number;
484
+ };
485
+ mask: {
486
+ ignored: string;
487
+ oriented: string;
488
+ dimAmount: number;
489
+ };
490
+ hints: {
491
+ enabled: false;
492
+ distance: number;
493
+ opacity: number;
494
+ ignoredOpacity: number;
495
+ };
496
+ background: null;
497
+ themes: {
498
+ light: SkinTheme;
499
+ };
500
+ };
501
+ /** Stickerless look: tiles fill the face, small radius, dark grey core. */
502
+ stickerless: {
503
+ body: string;
504
+ cubieSize: number;
505
+ cubieRadius: number;
506
+ bodyInset: number;
507
+ stickers: {
508
+ colors: readonly ["#ffffff", "#e8322f", "#1fb24a", "#ffd500", "#ff8a00", "#1e5eff"];
509
+ size: number;
510
+ radius: number;
511
+ fillOuter: true;
512
+ thickness: number;
513
+ bevel: number;
514
+ edgeRadius: number;
515
+ material: "plastic";
516
+ };
517
+ mask: {
518
+ ignored: string;
519
+ oriented: string;
520
+ dimAmount: number;
521
+ };
522
+ hints: {
523
+ enabled: false;
524
+ distance: number;
525
+ opacity: number;
526
+ ignoredOpacity: number;
527
+ };
528
+ background: null;
529
+ themes: {
530
+ light: SkinTheme;
531
+ };
532
+ };
533
+ };
534
+ export declare const SKINS: {
535
+ /** GAN, stickered: GAN's stickers (rounded squares, edges with a round tongue, round centres), flat prints on black. */
536
+ ganStickers: Skin;
537
+ /** MoYu, stickered: MoYu's stickers on black. */
538
+ moyuStickers: Skin;
539
+ /** The default look, stickered: its shapes as stickers on black plastic that follows their curves. */
540
+ defaultStickers: Skin;
541
+ /** QiYi, stickered — the round black cube ("black rounded" in QiYi's app). */
542
+ qiyiStickersRounded: Skin;
543
+ /** QiYi, stickered — the square black cube ("black square" in QiYi's app). */
544
+ qiyiStickersSquare: Skin;
545
+ /**
546
+ * The default look: a modern stickerless speed cube, after the GAN i4's
547
+ * pieces (the sample glTF models are exported from it) — thick matte tiles
548
+ * with soft edges, corners towards the centre rounded, squarish centres,
549
+ * pieces moulded in colour. Stickered: `defaultStickers`.
550
+ */
551
+ default: {
552
+ features: undefined;
553
+ body: string;
554
+ cubieSize: number;
555
+ cubieRadius: number;
556
+ bodyInset: number;
557
+ pieces: {
558
+ depth: number;
559
+ taper: number;
560
+ wall: number;
561
+ relief: {
562
+ radius: number;
563
+ depth: number;
564
+ start: number;
565
+ tile: number;
566
+ };
567
+ mechanism: number;
568
+ core: number;
569
+ colored: true;
570
+ fill: "solid";
571
+ };
572
+ stickerSet: {
573
+ size: number;
574
+ centerSize: number;
575
+ margin: number;
576
+ shape: {
577
+ corner: {
578
+ inner: number;
579
+ outer: number;
580
+ };
581
+ edge: {
582
+ inner: number;
583
+ outer: number;
584
+ };
585
+ center: number;
586
+ };
587
+ edgeRadius: number;
588
+ };
589
+ stickers: {
590
+ colors: [string, string, string, string, string, string];
591
+ size: number;
592
+ radius: number;
593
+ shape: {
594
+ corner: {
595
+ inner: number;
596
+ outer: number;
597
+ };
598
+ edge: {
599
+ inner: number;
600
+ outer: number;
601
+ };
602
+ center: number;
603
+ };
604
+ thickness: number;
605
+ bevel: number;
606
+ edgeRadius: number;
607
+ material: "plastic";
608
+ roughness: number;
609
+ fillOuter: true;
610
+ };
611
+ mask: {
612
+ ignored: string;
613
+ oriented: string;
614
+ dimAmount: number;
615
+ };
616
+ hints: {
617
+ enabled: false;
618
+ distance: number;
619
+ opacity: number;
620
+ ignoredOpacity: number;
621
+ };
622
+ background: null;
623
+ themes: {
624
+ light: SkinTheme;
625
+ };
626
+ };
627
+ /**
628
+ * GAN (stickerless), after the GAN 356 M: square corner tiles, edge tiles
629
+ * with a round tongue towards the centre, near-round centres — thick tiles
630
+ * with soft, well-rounded edges on pieces moulded in colour. No logo —
631
+ * that's up to the app (a decal).
632
+ */
633
+ gan: {
634
+ body: string;
635
+ pictureBody: null;
636
+ pieces: {
637
+ colored: true;
638
+ depth: number;
639
+ taper: number;
640
+ wall: number;
641
+ relief: {
642
+ radius: number;
643
+ depth: number;
644
+ start: number;
645
+ tile: number;
646
+ };
647
+ mechanism: number;
648
+ core: number;
649
+ fill: "solid";
650
+ };
651
+ stickers: {
652
+ thickness: number;
653
+ bevel: number;
654
+ edgeRadius: number;
655
+ kinds: {
656
+ center: {
657
+ size: number;
658
+ thickness: number;
659
+ bevel: number;
660
+ };
661
+ };
662
+ colors: [string, string, string, string, string, string];
663
+ size: number;
664
+ radius: number;
665
+ shape: {
666
+ corner: {
667
+ inner: number;
668
+ outer: number;
669
+ };
670
+ edge: {
671
+ inner: number;
672
+ outer: number;
673
+ };
674
+ center: number;
675
+ };
676
+ material: "plastic";
677
+ roughness: number;
678
+ fillOuter: true;
679
+ };
680
+ stickerSet: {
681
+ size: number;
682
+ centerSize: number;
683
+ margin: number;
684
+ shape: {
685
+ corner: {
686
+ inner: number;
687
+ outer: number;
688
+ };
689
+ edge: {
690
+ inner: number;
691
+ outer: number;
692
+ };
693
+ center: number;
694
+ };
695
+ edgeRadius: number;
696
+ };
697
+ cubieSize: number;
698
+ cubieRadius: number;
699
+ bodyInset: number;
700
+ mask: {
701
+ ignored: string;
702
+ oriented: string;
703
+ dimAmount: number;
704
+ };
705
+ hints: {
706
+ enabled: false;
707
+ distance: number;
708
+ opacity: number;
709
+ ignoredOpacity: number;
710
+ };
711
+ background: null;
712
+ themes: {
713
+ light: SkinTheme;
714
+ };
715
+ };
716
+ /**
717
+ * QiYi QY-SC smart cube (from photos): stickerless, moulded in colour
718
+ * (a corner is three coloured parts, an edge two) around an ivory core;
719
+ * thick "pillow" tiles with minimal gaps — corner tiles nearly square,
720
+ * edge tiles rounded towards the centre, a smaller raised squircle
721
+ * centre. The brand logo is up to the app (a decal).
722
+ */
723
+ qiyiSC: {
724
+ body: string;
725
+ pictureBody: null;
726
+ cubieSize: number;
727
+ cubieRadius: number;
728
+ bodyInset: number;
729
+ pieces: {
730
+ depth: number;
731
+ taper: number;
732
+ wall: number;
733
+ relief: {
734
+ radius: number;
735
+ depth: number;
736
+ start: number;
737
+ tile: number;
738
+ };
739
+ mechanism: number;
740
+ core: number;
741
+ colored: true;
742
+ fill: "solid";
743
+ };
744
+ stickers: {
745
+ colors: [string, string, string, string, string, string];
746
+ size: number;
747
+ radius: number;
748
+ shape: {
749
+ corner: {
750
+ inner: number;
751
+ outer: number;
752
+ };
753
+ edge: {
754
+ inner: number;
755
+ outer: number;
756
+ };
757
+ center: number;
758
+ };
759
+ paths: {
760
+ corner: string;
761
+ edge: string;
762
+ };
763
+ thickness: number;
764
+ bevel: number;
765
+ kinds: {
766
+ center: {
767
+ size: number;
768
+ bevel: number;
769
+ dome: {
770
+ flat: number;
771
+ drop: number;
772
+ };
773
+ };
774
+ };
775
+ edgeRadius: number;
776
+ material: "plastic";
777
+ roughness: number;
778
+ fillOuter: true;
779
+ };
780
+ stickerSet: StickerSet;
781
+ mask: {
782
+ ignored: string;
783
+ oriented: string;
784
+ dimAmount: number;
785
+ };
786
+ hints: {
787
+ enabled: false;
788
+ distance: number;
789
+ opacity: number;
790
+ ignoredOpacity: number;
791
+ };
792
+ background: null;
793
+ themes: {
794
+ light: SkinTheme;
795
+ };
796
+ };
797
+ /**
798
+ * MoYu smart cubes (WCU — MY32 and friends): stickerless, moulded in colour;
799
+ * thick tiles, corner tiles nearly square with a rounder corner towards the
800
+ * centre, edge tiles well rounded towards the centre, rounded-square
801
+ * centres. Shapes and colours from the cube model in MoYu's app (WCU CUBE).
802
+ * No logo — that's up to the app (a decal).
803
+ */
804
+ moyu: {
805
+ body: string;
806
+ pictureBody: null;
807
+ cubieSize: number;
808
+ cubieRadius: number;
809
+ bodyInset: number;
810
+ pieces: {
811
+ depth: number;
812
+ taper: number;
813
+ wall: number;
814
+ relief: {
815
+ radius: number;
816
+ depth: number;
817
+ start: number;
818
+ tile: number;
819
+ };
820
+ mechanism: number;
821
+ core: number;
822
+ colored: true;
823
+ fill: "solid";
824
+ };
825
+ stickers: {
826
+ colors: [string, string, string, string, string, string];
827
+ size: number;
828
+ radius: number;
829
+ shape: {
830
+ corner: {
831
+ inner: number;
832
+ outer: number;
833
+ };
834
+ edge: {
835
+ inner: number;
836
+ outer: number;
837
+ };
838
+ center: number;
839
+ };
840
+ thickness: number;
841
+ bevel: number;
842
+ edgeRadius: number;
843
+ material: "plastic";
844
+ roughness: number;
845
+ fillOuter: true;
846
+ };
847
+ stickerSet: {
848
+ size: number;
849
+ margin: number;
850
+ shape: {
851
+ corner: {
852
+ inner: number;
853
+ outer: number;
854
+ };
855
+ edge: {
856
+ inner: number;
857
+ outer: number;
858
+ };
859
+ center: number;
860
+ };
861
+ base: {
862
+ corner: {
863
+ inner: number;
864
+ outer: number;
865
+ };
866
+ edge: {
867
+ inner: number;
868
+ outer: number;
869
+ };
870
+ center: number;
871
+ };
872
+ edgeRadius: number;
873
+ body: string;
874
+ };
875
+ mask: {
876
+ ignored: string;
877
+ oriented: string;
878
+ dimAmount: number;
879
+ };
880
+ hints: {
881
+ enabled: false;
882
+ distance: number;
883
+ opacity: number;
884
+ ignoredOpacity: number;
885
+ };
886
+ background: null;
887
+ themes: {
888
+ light: SkinTheme;
889
+ };
890
+ };
891
+ };
892
+ /** Tile side of a piece kind, relative to a cubie face (`stickers.kinds` or `stickers.size`). */
893
+ export declare const tileSize: (skin: Skin, kind: PieceKind) => number;
894
+ /** How far a piece kind's tiles stand out (`stickers.kinds` or `stickers.thickness`). */
895
+ export declare const tileThickness: (skin: Skin, kind: PieceKind) => number;
896
+ export declare function stickerColor(skin: Skin, colorClass: number, state: MaskState): string | null;
897
+ export declare function mix(hex: string, towards: string, amount: number): string;
898
+ /** The same skin with other sticker colours (U R F D L B home-face order) — e.g. a Japanese scheme or a custom one. */
899
+ export declare function withColors(skin: Skin, colors: readonly [string, string, string, string, string, string]): Skin;
900
+ /**
901
+ * The stickered version of a skin: a black, rounded body with the brand's
902
+ * stickers (`skin.stickerSet`, else the skin's own shapes, at most 0.88 of a face)
903
+ * on top — `raised` (thick, rounded), `thin` (like a real sticker) or `flat`
904
+ * (a print). `options.set`: another sticker set of the brand (e.g. QiYi's
905
+ * square cube). Colours, logos and the rest stay.
906
+ */
907
+ export declare function withStickers(skin: Skin, style?: StickerStyle, options?: {
908
+ set?: StickerSet;
909
+ }): Skin;
910
+ /** The same skin with another finish on its tiles / stickers: `matte`, `uv` (a glossy coat) or the skin's own (undefined). */
911
+ export declare function withFinish(skin: Skin, finish: "matte" | "uv" | undefined): Skin;