@bedard/hexboard 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/build.yml +65 -0
- package/.github/workflows/release.yml +0 -0
- package/.vscode/settings.json +5 -0
- package/LICENSE +21 -0
- package/README.md +8 -0
- package/dist/index.d.ts +127 -0
- package/dist/index.js +1056 -0
- package/eslint.config.js +85 -0
- package/index.html +22 -0
- package/package.json +58 -0
- package/src/lib/components/hexboard/Hexboard.vue +865 -0
- package/src/lib/components/hexboard/constants.ts +389 -0
- package/src/lib/components/hexboard/dom.ts +19 -0
- package/src/lib/components/hexboard/geometry.ts +59 -0
- package/src/lib/components/hexboard/haptics.ts +56 -0
- package/src/lib/components/hexboard/pieces/Celtic.vue +22 -0
- package/src/lib/components/hexboard/pieces/Fantasy.vue +22 -0
- package/src/lib/components/hexboard/pieces/Gioco.vue +22 -0
- package/src/lib/components/hexboard/pieces/Spatial.vue +22 -0
- package/src/lib/components/hexboard/pieces/index.ts +4 -0
- package/src/lib/components/hexboard/types.ts +28 -0
- package/src/lib/index.ts +1 -0
- package/src/sandbox/App.vue +28 -0
- package/src/sandbox/components/Button.vue +8 -0
- package/src/sandbox/components/icons/Github.vue +3 -0
- package/src/sandbox/components/icons/Menu.vue +3 -0
- package/src/sandbox/components/icons/X.vue +3 -0
- package/src/sandbox/index.ts +5 -0
- package/src/sandbox/tailwind.css +59 -0
- package/src/sandbox/views/HomeToolbar.vue +80 -0
- package/src/tests/example.test.tsx +18 -0
- package/src/tests/hexboard.test.tsx +832 -0
- package/src/tests/utils.ts +26 -0
- package/tsconfig.json +30 -0
- package/tsconfig.node.json +10 -0
- package/vite.config.ts +42 -0
- package/vite.sandbox.config.ts +21 -0
- package/vitest.config.ts +35 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
import { bilerp, flip, hexagon, pivot, reflect, sum } from './geometry'
|
|
2
|
+
import type { HexboardOptions, Vec } from './types'
|
|
3
|
+
|
|
4
|
+
/** svg viewbox, increasing this zooms out away from the board */
|
|
5
|
+
export const box = 23.6
|
|
6
|
+
|
|
7
|
+
export const defaultOptions: HexboardOptions = {
|
|
8
|
+
colors: [
|
|
9
|
+
'oklch(0.9015 0.0729 70.7)',
|
|
10
|
+
'oklch(0.8366 0.1165 66.29)',
|
|
11
|
+
'oklch(0.6806 0.1423 75.83)',
|
|
12
|
+
],
|
|
13
|
+
haptics: true,
|
|
14
|
+
highlightColor: 'oklch(90.5% 0.182 98.111 / 75%)', // yellow-300 / 75% opacity
|
|
15
|
+
labelActiveColor: 'oklch(76.9% 0.188 70.08)', // amber-500
|
|
16
|
+
labelColor: 'oklch(55.4% 0.046 257.417)', // slate-500
|
|
17
|
+
labelInactiveColor: 'oklch(70.4% 0.04 256.788)', // slate-400
|
|
18
|
+
labels: true,
|
|
19
|
+
selectedColor: 'oklch(63.7% 0.237 25.331)', // red-500
|
|
20
|
+
targetColor: 'oklch(63.7% 0.237 25.331)', // red-500
|
|
21
|
+
} as const
|
|
22
|
+
|
|
23
|
+
/** empty position */
|
|
24
|
+
export const emptyPosition = '1/3/5/7/9/11/11/11/11/11/11 w - 0 1'
|
|
25
|
+
|
|
26
|
+
/** initial position */
|
|
27
|
+
export const initialPosition
|
|
28
|
+
= 'b/qbk/n1b1n/r5r/ppppppppp/11/5P5/4P1P4/3P1B1P3/2P2B2P2/1PRNQBKNRP1 w - 0 1'
|
|
29
|
+
|
|
30
|
+
/** label offset */
|
|
31
|
+
export const labelOffset = 1.7
|
|
32
|
+
|
|
33
|
+
/** piece size */
|
|
34
|
+
export const pieceSize = 1.7
|
|
35
|
+
|
|
36
|
+
/** side length of regular hexagon circumscribed around a unit circle */
|
|
37
|
+
export const sideLength = 2 / Math.sqrt(3)
|
|
38
|
+
|
|
39
|
+
// distance between the origin of neighboring hexagons
|
|
40
|
+
// one = direct neighbors, two = neighbor of neighbor, etc...
|
|
41
|
+
export const one = sideLength * (Math.sqrt(3) / 2) * 2 // <- inscribed radius * 2
|
|
42
|
+
export const two = one * 2
|
|
43
|
+
export const three = one * 3
|
|
44
|
+
export const four = one * 4
|
|
45
|
+
export const five = one * 5
|
|
46
|
+
|
|
47
|
+
// calculate the center for each position, using f6 as the origin
|
|
48
|
+
const f6: Vec<2> = [0, 0]
|
|
49
|
+
|
|
50
|
+
// the 6th rank is calculated as angled distances from F6
|
|
51
|
+
const a6 = pivot(f6, 150, five)
|
|
52
|
+
const b6 = pivot(f6, 150, four)
|
|
53
|
+
const c6 = pivot(f6, 150, three)
|
|
54
|
+
const d6 = pivot(f6, 150, two)
|
|
55
|
+
const e6 = pivot(f6, 150, one)
|
|
56
|
+
const g6 = pivot(f6, 30, one)
|
|
57
|
+
const h6 = pivot(f6, 30, two)
|
|
58
|
+
const i6 = pivot(f6, 30, three)
|
|
59
|
+
const k6 = pivot(f6, 30, four)
|
|
60
|
+
const l6 = pivot(f6, 30, five)
|
|
61
|
+
|
|
62
|
+
// other ranks are calculated by vertically translating the 6th rank
|
|
63
|
+
const a1 = sum(a6, [0, -five])
|
|
64
|
+
const b1 = sum(b6, [0, -five])
|
|
65
|
+
const c1 = sum(c6, [0, -five])
|
|
66
|
+
const d1 = sum(d6, [0, -five])
|
|
67
|
+
const e1 = sum(e6, [0, -five])
|
|
68
|
+
const f1 = sum(f6, [0, -five])
|
|
69
|
+
const g1 = sum(g6, [0, -five])
|
|
70
|
+
const h1 = sum(h6, [0, -five])
|
|
71
|
+
const i1 = sum(i6, [0, -five])
|
|
72
|
+
const k1 = sum(k6, [0, -five])
|
|
73
|
+
const l1 = sum(l6, [0, -five])
|
|
74
|
+
|
|
75
|
+
const a2 = sum(a6, [0, -four])
|
|
76
|
+
const b2 = sum(b6, [0, -four])
|
|
77
|
+
const c2 = sum(c6, [0, -four])
|
|
78
|
+
const d2 = sum(d6, [0, -four])
|
|
79
|
+
const e2 = sum(e6, [0, -four])
|
|
80
|
+
const f2 = sum(f6, [0, -four])
|
|
81
|
+
const g2 = sum(g6, [0, -four])
|
|
82
|
+
const h2 = sum(h6, [0, -four])
|
|
83
|
+
const i2 = sum(i6, [0, -four])
|
|
84
|
+
const k2 = sum(k6, [0, -four])
|
|
85
|
+
const l2 = sum(l6, [0, -four])
|
|
86
|
+
|
|
87
|
+
const a3 = sum(a6, [0, -three])
|
|
88
|
+
const b3 = sum(b6, [0, -three])
|
|
89
|
+
const c3 = sum(c6, [0, -three])
|
|
90
|
+
const d3 = sum(d6, [0, -three])
|
|
91
|
+
const e3 = sum(e6, [0, -three])
|
|
92
|
+
const f3 = sum(f6, [0, -three])
|
|
93
|
+
const g3 = sum(g6, [0, -three])
|
|
94
|
+
const h3 = sum(h6, [0, -three])
|
|
95
|
+
const i3 = sum(i6, [0, -three])
|
|
96
|
+
const k3 = sum(k6, [0, -three])
|
|
97
|
+
const l3 = sum(l6, [0, -three])
|
|
98
|
+
|
|
99
|
+
const a4 = sum(a6, [0, -two])
|
|
100
|
+
const b4 = sum(b6, [0, -two])
|
|
101
|
+
const c4 = sum(c6, [0, -two])
|
|
102
|
+
const d4 = sum(d6, [0, -two])
|
|
103
|
+
const e4 = sum(e6, [0, -two])
|
|
104
|
+
const f4 = sum(f6, [0, -two])
|
|
105
|
+
const g4 = sum(g6, [0, -two])
|
|
106
|
+
const h4 = sum(h6, [0, -two])
|
|
107
|
+
const i4 = sum(i6, [0, -two])
|
|
108
|
+
const k4 = sum(k6, [0, -two])
|
|
109
|
+
const l4 = sum(l6, [0, -two])
|
|
110
|
+
|
|
111
|
+
const a5 = sum(a6, [0, -one])
|
|
112
|
+
const b5 = sum(b6, [0, -one])
|
|
113
|
+
const c5 = sum(c6, [0, -one])
|
|
114
|
+
const d5 = sum(d6, [0, -one])
|
|
115
|
+
const e5 = sum(e6, [0, -one])
|
|
116
|
+
const f5 = sum(f6, [0, -one])
|
|
117
|
+
const g5 = sum(g6, [0, -one])
|
|
118
|
+
const h5 = sum(h6, [0, -one])
|
|
119
|
+
const i5 = sum(i6, [0, -one])
|
|
120
|
+
const k5 = sum(k6, [0, -one])
|
|
121
|
+
const l5 = sum(l6, [0, -one])
|
|
122
|
+
|
|
123
|
+
// 7th rank and higher start to have fewer files
|
|
124
|
+
const b7 = sum(b6, [0, one])
|
|
125
|
+
const c7 = sum(c6, [0, one])
|
|
126
|
+
const d7 = sum(d6, [0, one])
|
|
127
|
+
const e7 = sum(e6, [0, one])
|
|
128
|
+
const f7 = sum(f6, [0, one])
|
|
129
|
+
const g7 = sum(g6, [0, one])
|
|
130
|
+
const h7 = sum(h6, [0, one])
|
|
131
|
+
const i7 = sum(i6, [0, one])
|
|
132
|
+
const k7 = sum(k6, [0, one])
|
|
133
|
+
|
|
134
|
+
const c8 = sum(c6, [0, two])
|
|
135
|
+
const d8 = sum(d6, [0, two])
|
|
136
|
+
const e8 = sum(e6, [0, two])
|
|
137
|
+
const f8 = sum(f6, [0, two])
|
|
138
|
+
const g8 = sum(g6, [0, two])
|
|
139
|
+
const h8 = sum(h6, [0, two])
|
|
140
|
+
const i8 = sum(i6, [0, two])
|
|
141
|
+
|
|
142
|
+
const d9 = sum(d6, [0, three])
|
|
143
|
+
const e9 = sum(e6, [0, three])
|
|
144
|
+
const f9 = sum(f6, [0, three])
|
|
145
|
+
const g9 = sum(g6, [0, three])
|
|
146
|
+
const h9 = sum(h6, [0, three])
|
|
147
|
+
|
|
148
|
+
const e10 = sum(e6, [0, four])
|
|
149
|
+
const f10 = sum(f6, [0, four])
|
|
150
|
+
const g10 = sum(g6, [0, four])
|
|
151
|
+
|
|
152
|
+
const f11 = sum(f6, [0, five])
|
|
153
|
+
|
|
154
|
+
/** board position data, sorted by fen order */
|
|
155
|
+
export const board: [
|
|
156
|
+
color: number,
|
|
157
|
+
origin: Vec<2>,
|
|
158
|
+
reflectedOrigin: Vec<2>,
|
|
159
|
+
path: Vec<6, Vec<2>>,
|
|
160
|
+
reflectedPath: Vec<6, Vec<2>>,
|
|
161
|
+
][] = [
|
|
162
|
+
[2, f11, reflect(f11), hexagon(f11), flip(hexagon(f11))],
|
|
163
|
+
[1, e10, reflect(e10), hexagon(e10), flip(hexagon(e10))],
|
|
164
|
+
[0, f10, reflect(f10), hexagon(f10), flip(hexagon(f10))],
|
|
165
|
+
[1, g10, reflect(g10), hexagon(g10), flip(hexagon(g10))],
|
|
166
|
+
[0, d9, reflect(d9), hexagon(d9), flip(hexagon(d9))],
|
|
167
|
+
[2, e9, reflect(e9), hexagon(e9), flip(hexagon(e9))],
|
|
168
|
+
[1, f9, reflect(f9), hexagon(f9), flip(hexagon(f9))],
|
|
169
|
+
[2, g9, reflect(g9), hexagon(g9), flip(hexagon(g9))],
|
|
170
|
+
[0, h9, reflect(h9), hexagon(h9), flip(hexagon(h9))],
|
|
171
|
+
[2, c8, reflect(c8), hexagon(c8), flip(hexagon(c8))],
|
|
172
|
+
[1, d8, reflect(d8), hexagon(d8), flip(hexagon(d8))],
|
|
173
|
+
[0, e8, reflect(e8), hexagon(e8), flip(hexagon(e8))],
|
|
174
|
+
[2, f8, reflect(f8), hexagon(f8), flip(hexagon(f8))],
|
|
175
|
+
[0, g8, reflect(g8), hexagon(g8), flip(hexagon(g8))],
|
|
176
|
+
[1, h8, reflect(h8), hexagon(h8), flip(hexagon(h8))],
|
|
177
|
+
[2, i8, reflect(i8), hexagon(i8), flip(hexagon(i8))],
|
|
178
|
+
[1, b7, reflect(b7), hexagon(b7), flip(hexagon(b7))],
|
|
179
|
+
[0, c7, reflect(c7), hexagon(c7), flip(hexagon(c7))],
|
|
180
|
+
[2, d7, reflect(d7), hexagon(d7), flip(hexagon(d7))],
|
|
181
|
+
[1, e7, reflect(e7), hexagon(e7), flip(hexagon(e7))],
|
|
182
|
+
[0, f7, reflect(f7), hexagon(f7), flip(hexagon(f7))],
|
|
183
|
+
[1, g7, reflect(g7), hexagon(g7), flip(hexagon(g7))],
|
|
184
|
+
[2, h7, reflect(h7), hexagon(h7), flip(hexagon(h7))],
|
|
185
|
+
[0, i7, reflect(i7), hexagon(i7), flip(hexagon(i7))],
|
|
186
|
+
[1, k7, reflect(k7), hexagon(k7), flip(hexagon(k7))],
|
|
187
|
+
[0, a6, reflect(a6), hexagon(a6), flip(hexagon(a6))],
|
|
188
|
+
[2, b6, reflect(b6), hexagon(b6), flip(hexagon(b6))],
|
|
189
|
+
[1, c6, reflect(c6), hexagon(c6), flip(hexagon(c6))],
|
|
190
|
+
[0, d6, reflect(d6), hexagon(d6), flip(hexagon(d6))],
|
|
191
|
+
[2, e6, reflect(e6), hexagon(e6), flip(hexagon(e6))],
|
|
192
|
+
[1, f6, reflect(f6), hexagon(f6), flip(hexagon(f6))],
|
|
193
|
+
[2, g6, reflect(g6), hexagon(g6), flip(hexagon(g6))],
|
|
194
|
+
[0, h6, reflect(h6), hexagon(h6), flip(hexagon(h6))],
|
|
195
|
+
[1, i6, reflect(i6), hexagon(i6), flip(hexagon(i6))],
|
|
196
|
+
[2, k6, reflect(k6), hexagon(k6), flip(hexagon(k6))],
|
|
197
|
+
[0, l6, reflect(l6), hexagon(l6), flip(hexagon(l6))],
|
|
198
|
+
[1, a5, reflect(a5), hexagon(a5), flip(hexagon(a5))],
|
|
199
|
+
[0, b5, reflect(b5), hexagon(b5), flip(hexagon(b5))],
|
|
200
|
+
[2, c5, reflect(c5), hexagon(c5), flip(hexagon(c5))],
|
|
201
|
+
[1, d5, reflect(d5), hexagon(d5), flip(hexagon(d5))],
|
|
202
|
+
[0, e5, reflect(e5), hexagon(e5), flip(hexagon(e5))],
|
|
203
|
+
[2, f5, reflect(f5), hexagon(f5), flip(hexagon(f5))],
|
|
204
|
+
[0, g5, reflect(g5), hexagon(g5), flip(hexagon(g5))],
|
|
205
|
+
[1, h5, reflect(h5), hexagon(h5), flip(hexagon(h5))],
|
|
206
|
+
[2, i5, reflect(i5), hexagon(i5), flip(hexagon(i5))],
|
|
207
|
+
[0, k5, reflect(k5), hexagon(k5), flip(hexagon(k5))],
|
|
208
|
+
[1, l5, reflect(l5), hexagon(l5), flip(hexagon(l5))],
|
|
209
|
+
[2, a4, reflect(a4), hexagon(a4), flip(hexagon(a4))],
|
|
210
|
+
[1, b4, reflect(b4), hexagon(b4), flip(hexagon(b4))],
|
|
211
|
+
[0, c4, reflect(c4), hexagon(c4), flip(hexagon(c4))],
|
|
212
|
+
[2, d4, reflect(d4), hexagon(d4), flip(hexagon(d4))],
|
|
213
|
+
[1, e4, reflect(e4), hexagon(e4), flip(hexagon(e4))],
|
|
214
|
+
[0, f4, reflect(f4), hexagon(f4), flip(hexagon(f4))],
|
|
215
|
+
[1, g4, reflect(g4), hexagon(g4), flip(hexagon(g4))],
|
|
216
|
+
[2, h4, reflect(h4), hexagon(h4), flip(hexagon(h4))],
|
|
217
|
+
[0, i4, reflect(i4), hexagon(i4), flip(hexagon(i4))],
|
|
218
|
+
[1, k4, reflect(k4), hexagon(k4), flip(hexagon(k4))],
|
|
219
|
+
[2, l4, reflect(l4), hexagon(l4), flip(hexagon(l4))],
|
|
220
|
+
[0, a3, reflect(a3), hexagon(a3), flip(hexagon(a3))],
|
|
221
|
+
[2, b3, reflect(b3), hexagon(b3), flip(hexagon(b3))],
|
|
222
|
+
[1, c3, reflect(c3), hexagon(c3), flip(hexagon(c3))],
|
|
223
|
+
[0, d3, reflect(d3), hexagon(d3), flip(hexagon(d3))],
|
|
224
|
+
[2, e3, reflect(e3), hexagon(e3), flip(hexagon(e3))],
|
|
225
|
+
[1, f3, reflect(f3), hexagon(f3), flip(hexagon(f3))],
|
|
226
|
+
[2, g3, reflect(g3), hexagon(g3), flip(hexagon(g3))],
|
|
227
|
+
[0, h3, reflect(h3), hexagon(h3), flip(hexagon(h3))],
|
|
228
|
+
[1, i3, reflect(i3), hexagon(i3), flip(hexagon(i3))],
|
|
229
|
+
[2, k3, reflect(k3), hexagon(k3), flip(hexagon(k3))],
|
|
230
|
+
[0, l3, reflect(l3), hexagon(l3), flip(hexagon(l3))],
|
|
231
|
+
[1, a2, reflect(a2), hexagon(a2), flip(hexagon(a2))],
|
|
232
|
+
[0, b2, reflect(b2), hexagon(b2), flip(hexagon(b2))],
|
|
233
|
+
[2, c2, reflect(c2), hexagon(c2), flip(hexagon(c2))],
|
|
234
|
+
[1, d2, reflect(d2), hexagon(d2), flip(hexagon(d2))],
|
|
235
|
+
[0, e2, reflect(e2), hexagon(e2), flip(hexagon(e2))],
|
|
236
|
+
[2, f2, reflect(f2), hexagon(f2), flip(hexagon(f2))],
|
|
237
|
+
[0, g2, reflect(g2), hexagon(g2), flip(hexagon(g2))],
|
|
238
|
+
[1, h2, reflect(h2), hexagon(h2), flip(hexagon(h2))],
|
|
239
|
+
[2, i2, reflect(i2), hexagon(i2), flip(hexagon(i2))],
|
|
240
|
+
[0, k2, reflect(k2), hexagon(k2), flip(hexagon(k2))],
|
|
241
|
+
[1, l2, reflect(l2), hexagon(l2), flip(hexagon(l2))],
|
|
242
|
+
[2, a1, reflect(a1), hexagon(a1), flip(hexagon(a1))],
|
|
243
|
+
[1, b1, reflect(b1), hexagon(b1), flip(hexagon(b1))],
|
|
244
|
+
[0, c1, reflect(c1), hexagon(c1), flip(hexagon(c1))],
|
|
245
|
+
[2, d1, reflect(d1), hexagon(d1), flip(hexagon(d1))],
|
|
246
|
+
[1, e1, reflect(e1), hexagon(e1), flip(hexagon(e1))],
|
|
247
|
+
[0, f1, reflect(f1), hexagon(f1), flip(hexagon(f1))],
|
|
248
|
+
[1, g1, reflect(g1), hexagon(g1), flip(hexagon(g1))],
|
|
249
|
+
[2, h1, reflect(h1), hexagon(h1), flip(hexagon(h1))],
|
|
250
|
+
[0, i1, reflect(i1), hexagon(i1), flip(hexagon(i1))],
|
|
251
|
+
[1, k1, reflect(k1), hexagon(k1), flip(hexagon(k1))],
|
|
252
|
+
[2, l1, reflect(l1), hexagon(l1), flip(hexagon(l1))],
|
|
253
|
+
]
|
|
254
|
+
|
|
255
|
+
/** board labels */
|
|
256
|
+
export const labels: [string, Vec<2>, Vec<2>][] = [
|
|
257
|
+
['11', bilerp(g10, f11, labelOffset), reflect(bilerp(g10, f11, labelOffset))],
|
|
258
|
+
['10', bilerp(f10, e10, labelOffset), reflect(bilerp(f10, e10, labelOffset))],
|
|
259
|
+
['9', bilerp(e9, d9, labelOffset), reflect(bilerp(e9, d9, labelOffset))],
|
|
260
|
+
['8', bilerp(d8, c8, labelOffset), reflect(bilerp(d8, c8, labelOffset))],
|
|
261
|
+
['7', bilerp(c7, b7, labelOffset), reflect(bilerp(c7, b7, labelOffset))],
|
|
262
|
+
['6', bilerp(b6, a6, labelOffset), reflect(bilerp(b6, a6, labelOffset))],
|
|
263
|
+
['5', bilerp(b5, a5, labelOffset), reflect(bilerp(b5, a5, labelOffset))],
|
|
264
|
+
['4', bilerp(b4, a4, labelOffset), reflect(bilerp(b4, a4, labelOffset))],
|
|
265
|
+
['3', bilerp(b3, a3, labelOffset), reflect(bilerp(b3, a3, labelOffset))],
|
|
266
|
+
['2', bilerp(b2, a2, labelOffset), reflect(bilerp(b2, a2, labelOffset))],
|
|
267
|
+
['1', bilerp(b1, a1, labelOffset), reflect(bilerp(b1, a1, labelOffset))],
|
|
268
|
+
|
|
269
|
+
['a', bilerp(a2, a1, labelOffset), reflect(bilerp(a2, a1, labelOffset))],
|
|
270
|
+
['b', bilerp(b2, b1, labelOffset), reflect(bilerp(b2, b1, labelOffset))],
|
|
271
|
+
['c', bilerp(c2, c1, labelOffset), reflect(bilerp(c2, c1, labelOffset))],
|
|
272
|
+
['d', bilerp(d2, d1, labelOffset), reflect(bilerp(d2, d1, labelOffset))],
|
|
273
|
+
['e', bilerp(e2, e1, labelOffset), reflect(bilerp(e2, e1, labelOffset))],
|
|
274
|
+
['f', bilerp(f2, f1, labelOffset), reflect(bilerp(f2, f1, labelOffset))],
|
|
275
|
+
['g', bilerp(g2, g1, labelOffset), reflect(bilerp(g2, g1, labelOffset))],
|
|
276
|
+
['h', bilerp(h2, h1, labelOffset), reflect(bilerp(h2, h1, labelOffset))],
|
|
277
|
+
['i', bilerp(i2, i1, labelOffset), reflect(bilerp(i2, i1, labelOffset))],
|
|
278
|
+
['k', bilerp(k2, k1, labelOffset), reflect(bilerp(k2, k1, labelOffset))],
|
|
279
|
+
['l', bilerp(l2, l1, labelOffset), reflect(bilerp(l2, l1, labelOffset))],
|
|
280
|
+
|
|
281
|
+
['1', bilerp(k1, l1, labelOffset), reflect(bilerp(k1, l1, labelOffset))],
|
|
282
|
+
['2', bilerp(k2, l2, labelOffset), reflect(bilerp(k2, l2, labelOffset))],
|
|
283
|
+
['3', bilerp(k3, l3, labelOffset), reflect(bilerp(k3, l3, labelOffset))],
|
|
284
|
+
['4', bilerp(k4, l4, labelOffset), reflect(bilerp(k4, l4, labelOffset))],
|
|
285
|
+
['5', bilerp(k5, l5, labelOffset), reflect(bilerp(k5, l5, labelOffset))],
|
|
286
|
+
['6', bilerp(k6, l6, labelOffset), reflect(bilerp(k6, l6, labelOffset))],
|
|
287
|
+
['7', bilerp(i7, k7, labelOffset), reflect(bilerp(i7, k7, labelOffset))],
|
|
288
|
+
['8', bilerp(h8, i8, labelOffset), reflect(bilerp(h8, i8, labelOffset))],
|
|
289
|
+
['9', bilerp(g9, h9, labelOffset), reflect(bilerp(g9, h9, labelOffset))],
|
|
290
|
+
['10', bilerp(f10, g10, labelOffset), reflect(bilerp(f10, g10, labelOffset))],
|
|
291
|
+
['11', bilerp(e10, f11, labelOffset), reflect(bilerp(e10, f11, labelOffset))],
|
|
292
|
+
]
|
|
293
|
+
|
|
294
|
+
/** perimeter of the board */
|
|
295
|
+
export const perimeter: Vec<93, Vec<2>> = [
|
|
296
|
+
board[0 /* f11 */][3][5],
|
|
297
|
+
board[0 /* f11 */][3][0],
|
|
298
|
+
board[0 /* f11 */][3][1],
|
|
299
|
+
board[3 /* g10 */][3][5],
|
|
300
|
+
board[3 /* g10 */][3][0],
|
|
301
|
+
board[3 /* g10 */][3][1],
|
|
302
|
+
board[8 /* h9 */][3][5],
|
|
303
|
+
board[8 /* h9 */][3][0],
|
|
304
|
+
board[8 /* h9 */][3][1],
|
|
305
|
+
board[15 /* i8 */][3][5],
|
|
306
|
+
board[15 /* i8 */][3][0],
|
|
307
|
+
board[15 /* i8 */][3][1],
|
|
308
|
+
board[24 /* k7 */][3][5],
|
|
309
|
+
board[24 /* k7 */][3][0],
|
|
310
|
+
board[24 /* k7 */][3][1],
|
|
311
|
+
board[35 /* l6 */][3][5],
|
|
312
|
+
board[35 /* l6 */][3][0],
|
|
313
|
+
board[35 /* l6 */][3][1],
|
|
314
|
+
board[35 /* l6 */][3][2],
|
|
315
|
+
board[46 /* l5 */][3][0],
|
|
316
|
+
board[46 /* l5 */][3][1],
|
|
317
|
+
board[46 /* l5 */][3][2],
|
|
318
|
+
board[57 /* l4 */][3][0],
|
|
319
|
+
board[57 /* l4 */][3][1],
|
|
320
|
+
board[57 /* l4 */][3][2],
|
|
321
|
+
board[68 /* l3 */][3][0],
|
|
322
|
+
board[68 /* l3 */][3][1],
|
|
323
|
+
board[68 /* l3 */][3][2],
|
|
324
|
+
board[79 /* l2 */][3][0],
|
|
325
|
+
board[79 /* l2 */][3][1],
|
|
326
|
+
board[79 /* l2 */][3][2],
|
|
327
|
+
board[90 /* l1 */][3][0],
|
|
328
|
+
board[90 /* l1 */][3][1],
|
|
329
|
+
board[90 /* l1 */][3][2],
|
|
330
|
+
board[90 /* l1 */][3][3],
|
|
331
|
+
board[89 /* k1 */][3][2],
|
|
332
|
+
board[89 /* k1 */][3][3],
|
|
333
|
+
board[89 /* k1 */][3][4],
|
|
334
|
+
board[88 /* i1 */][3][1],
|
|
335
|
+
board[88 /* i1 */][3][2],
|
|
336
|
+
board[88 /* i1 */][3][3],
|
|
337
|
+
board[87 /* h1 */][3][1],
|
|
338
|
+
board[87 /* h1 */][3][2],
|
|
339
|
+
board[87 /* h1 */][3][3],
|
|
340
|
+
board[86 /* g1 */][3][1],
|
|
341
|
+
board[86 /* g1 */][3][2],
|
|
342
|
+
board[86 /* g1 */][3][3],
|
|
343
|
+
board[85 /* f1 */][3][1],
|
|
344
|
+
board[85 /* f1 */][3][2],
|
|
345
|
+
board[85 /* f1 */][3][3],
|
|
346
|
+
board[85 /* f1 */][3][4],
|
|
347
|
+
board[84 /* e1 */][3][3],
|
|
348
|
+
board[84 /* e1 */][3][4],
|
|
349
|
+
board[83 /* d1 */][3][2],
|
|
350
|
+
board[83 /* d1 */][3][3],
|
|
351
|
+
board[83 /* d1 */][3][4],
|
|
352
|
+
board[82 /* c1 */][3][2],
|
|
353
|
+
board[82 /* c1 */][3][3],
|
|
354
|
+
board[82 /* c1 */][3][4],
|
|
355
|
+
board[81 /* b1 */][3][2],
|
|
356
|
+
board[81 /* b1 */][3][3],
|
|
357
|
+
board[81 /* b1 */][3][4],
|
|
358
|
+
board[80 /* a1 */][3][2],
|
|
359
|
+
board[80 /* a1 */][3][3],
|
|
360
|
+
board[80 /* a1 */][3][4],
|
|
361
|
+
board[80 /* a1 */][3][5],
|
|
362
|
+
board[69 /* a2 */][3][3],
|
|
363
|
+
board[69 /* a2 */][3][4],
|
|
364
|
+
board[69 /* a2 */][3][5],
|
|
365
|
+
board[58 /* a3 */][3][3],
|
|
366
|
+
board[58 /* a3 */][3][4],
|
|
367
|
+
board[58 /* a3 */][3][5],
|
|
368
|
+
board[47 /* a4 */][3][3],
|
|
369
|
+
board[47 /* a4 */][3][4],
|
|
370
|
+
board[47 /* a4 */][3][5],
|
|
371
|
+
board[36 /* a5 */][3][3],
|
|
372
|
+
board[36 /* a5 */][3][4],
|
|
373
|
+
board[36 /* a5 */][3][5],
|
|
374
|
+
board[25 /* a6 */][3][3],
|
|
375
|
+
board[25 /* a6 */][3][4],
|
|
376
|
+
board[25 /* a6 */][3][5],
|
|
377
|
+
board[16 /* b7 */][3][4],
|
|
378
|
+
board[16 /* b7 */][3][5],
|
|
379
|
+
board[16 /* b7 */][3][0],
|
|
380
|
+
board[9 /* c8 */][3][4],
|
|
381
|
+
board[9 /* c8 */][3][5],
|
|
382
|
+
board[9 /* c8 */][3][0],
|
|
383
|
+
board[4 /* d9 */][3][4],
|
|
384
|
+
board[4 /* d9 */][3][5],
|
|
385
|
+
board[4 /* d9 */][3][0],
|
|
386
|
+
board[1 /* e10 */][3][4],
|
|
387
|
+
board[1 /* e10 */][3][5],
|
|
388
|
+
board[1 /* e10 */][3][0],
|
|
389
|
+
]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { x, y } from './geometry'
|
|
2
|
+
import type { Vec } from './types'
|
|
3
|
+
|
|
4
|
+
/** create svg vector path */
|
|
5
|
+
export function d(arr: Vec<2>[]) {
|
|
6
|
+
if (arr.length === 0) {
|
|
7
|
+
return ''
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const [origin, ...points] = arr
|
|
11
|
+
|
|
12
|
+
let path = `M ${x(origin[0])} ${y(origin[1])} L `
|
|
13
|
+
|
|
14
|
+
for (const point of points) {
|
|
15
|
+
path += `${x(point[0])} ${y(point[1])} `
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return `${path} Z`
|
|
19
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { box, sideLength } from './constants'
|
|
2
|
+
import type { Vec } from './types'
|
|
3
|
+
|
|
4
|
+
/** bilinearly interpolate between two points */
|
|
5
|
+
export function bilerp(p1: Vec<2>, p2: Vec<2>, t: number): Vec<2> {
|
|
6
|
+
return [p1[0] + t * (p2[0] - p1[0]), p1[1] + t * (p2[1] - p1[1])]
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** reflect a path of points across the origin */
|
|
10
|
+
export function flip<T extends Vec<2>[]>(path: T) {
|
|
11
|
+
return path.map(reflect) as T
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** calculate hexagon vertices around a given point */
|
|
15
|
+
export function hexagon(origin: Vec<2>): Vec<6, Vec<2>> {
|
|
16
|
+
return [
|
|
17
|
+
pivot(origin, -300, sideLength),
|
|
18
|
+
pivot(origin, 0, sideLength),
|
|
19
|
+
pivot(origin, -60, sideLength),
|
|
20
|
+
pivot(origin, -120, sideLength),
|
|
21
|
+
pivot(origin, -180, sideLength),
|
|
22
|
+
pivot(origin, -240, sideLength),
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** pivot counter-clockwise around a point */
|
|
27
|
+
export function pivot(point: Vec<2>, deg: number, distance: number): Vec<2> {
|
|
28
|
+
const rad = radians(deg)
|
|
29
|
+
|
|
30
|
+
return [
|
|
31
|
+
distance * Math.cos(rad) + point[0],
|
|
32
|
+
distance * Math.sin(rad) + point[1],
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** convert degrees to radians */
|
|
37
|
+
export function radians(deg: number) {
|
|
38
|
+
return deg * (Math.PI / 180)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** reflect a point across the origin */
|
|
42
|
+
export function reflect(v: Vec<2>): Vec<2> {
|
|
43
|
+
return [-v[0], -v[1]]
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** sum two vectors */
|
|
47
|
+
export function sum(v1: Vec<2>, v2: Vec<2>): Vec<2> {
|
|
48
|
+
return [v1[0] + v2[0], v1[1] + v2[1]]
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** convert cartesian X value to SVG coordinate */
|
|
52
|
+
export function x(n: number) {
|
|
53
|
+
return box / 2 + n
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** convert cartesian Y value to SVG coordinate */
|
|
57
|
+
export function y(n: number) {
|
|
58
|
+
return box / 2 - n
|
|
59
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/** check if haptics are supported */
|
|
2
|
+
export const supportsHaptics
|
|
3
|
+
= typeof window === 'undefined'
|
|
4
|
+
? false
|
|
5
|
+
: window.matchMedia('(pointer: coarse)').matches
|
|
6
|
+
|
|
7
|
+
/** trigger haptic feedback */
|
|
8
|
+
function tick() {
|
|
9
|
+
try {
|
|
10
|
+
// use the native api if supported
|
|
11
|
+
if (navigator.vibrate) {
|
|
12
|
+
navigator.vibrate(50)
|
|
13
|
+
return
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (!supportsHaptics) return
|
|
17
|
+
|
|
18
|
+
// otherwise simulate a tep using a checkbox
|
|
19
|
+
const labelEl = document.createElement('label')
|
|
20
|
+
labelEl.ariaHidden = 'true'
|
|
21
|
+
labelEl.style.display = 'none'
|
|
22
|
+
|
|
23
|
+
const inputEl = document.createElement('input')
|
|
24
|
+
inputEl.type = 'checkbox'
|
|
25
|
+
inputEl.setAttribute('switch', '')
|
|
26
|
+
labelEl.appendChild(inputEl)
|
|
27
|
+
|
|
28
|
+
document.head.appendChild(labelEl)
|
|
29
|
+
labelEl.click()
|
|
30
|
+
document.head.removeChild(labelEl)
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// do nothing
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function hapticConfirm() {
|
|
38
|
+
if (navigator.vibrate) {
|
|
39
|
+
navigator.vibrate([50, 70, 50])
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
tick()
|
|
44
|
+
setTimeout(tick, 120)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function hapticError() {
|
|
48
|
+
if (navigator.vibrate) {
|
|
49
|
+
navigator.vibrate([50, 70, 50, 70, 50])
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
tick()
|
|
54
|
+
setTimeout(tick, 120)
|
|
55
|
+
setTimeout(tick, 240)
|
|
56
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg v-if="type === 'p'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933.3 933.3"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs2718"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="462.1" x2="1135.2" y1="776.1" y2="839.4" gradientTransform="matrix(.64593 0 0 .64727 -26.8 91.2)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#7f899b" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#1c1c2f" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="M464 199.7c-72.1.9-129.8 57.9-134.5 124.2-2.4 33 45.3 89 73.2 106.6-137.4 31-2.7 70.6-2.7 127.7 0 39.4-53.5 65.7-24.2 91-15.9 64.2-62.6 87.4-119.2 113.5-27.9 35.7-13 95.3 39.4 98.7 36.7 2.4 307.5 3 345.4-1.1 58.3-6.4 67.4-67.3 40.5-101-57-17.6-118.7-42.6-131.1-108.7 30.3-25.4-31.6-52.2-31.6-92.4 0-57.1 150.2-90.4 6.4-127.7 27.9-17.6 72.4-73.6 73.2-106.6 1.6-64.7-65.8-125-134.7-124.2Z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="M464 199.7c-72.1.9-129.8 57.9-134.5 124.2-2.4 33 45.3 89 73.2 106.6-137.4 31-2.7 70.6-2.7 127.7 0 39.4-53.5 65.7-24.2 91-15.9 64.2-62.6 87.4-119.2 113.5-27.9 35.7-13 95.3 39.4 98.7 36.7 2.4 307.5 3 345.4-1.1 58.3-6.4 67.4-67.3 40.5-101-57-17.6-118.7-42.6-131.1-108.7 30.3-25.4-31.6-52.2-31.6-92.4 0-57.1 150.2-90.4 6.4-127.7 27.9-17.6 72.4-73.6 73.2-106.6 1.6-64.7-65.8-125-134.7-124.2Z" class="base stroke-color stroke-medium" /><path id="deco-side" fill="none" d="M617.8 863.6c58.3-6.4 67.4-58 40.5-91.6-57-17.7-118.7-52-131.1-118 30.2-25.5-31.6-52.3-31.6-92.5 0-57.1 150.2-90.4 6.4-127.7 27.9-17.6 72.4-73.6 73.2-106.6 1.6-64.7-58.2-120-127.2-119.2" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-lines" fill="none" d="M416.6 466h94.8zM408 627.7h112.2zm-99.4 153.5h320z" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
3
|
+
<svg v-else-if="type === 'n'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933 933"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs2202"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="824.6" x2="992.7" y1="119.5" y2="168.5" gradientTransform="translate(-3372 -24) scale(4.2241)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#7f899b" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#1c1c2f" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="m394 44-24 83-59-68-4 89c-91 91-38 111-172 316-9 13-25 24-29 42-15 80 88 60 106 69 71-57 100-58 137-98 42 15 108-3 147-45-26 77-136 132-169 267 39 37 0 74-47 71-52 12-34 109 19 109l452-3c63 0 72-92 30-108-40 0-58-41-26-69 4-74 3-143-12-214-2-7 2-22 10-24-6-23-30-45-40-69-5-11-18-17 19-18-11-22-61-58-76-78-6-7 25-13 19-19-35-37-85-50-109-68-8-6 23-15 14-21-33-21-102-48-145-65z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="m394 44-24 83-59-68-4 89c-91 91-38 111-172 316-9 13-25 24-29 42-15 80 88 60 106 69 71-57 100-58 137-98 42 15 108-3 147-45-26 77-136 132-169 267 39 37 0 74-47 71-52 12-34 109 19 109l452-3c63 0 72-92 30-108-40 0-58-41-26-69 4-74 3-143-12-214-2-7 2-22 10-24-6-23-30-45-40-69-5-11-18-17 19-18-11-22-61-58-76-78-6-7 25-13 19-19-35-37-85-50-109-68-8-6 23-15 14-21-33-21-102-48-145-65z" class="base stroke-color stroke-medium" /><path id="eyebrow" fill="none" d="M336 282c-28 2-50 16-65 41" class="base stroke-color stroke-medium" /><path id="eye" fill="none" d="M310 316c12 8 25 5 22-12" class="base stroke-color stroke-medium" /><path id="nose" fill="none" d="M155 501c-13-5-23 17-15 17" class="base stroke-color stroke-medium" /><path id="cheek" fill="none" d="M508 405c10-13 9-19 11-27" class="base stroke-color stroke-medium" /><path id="deco-lines" fill="none" d="M644 699H370zm64 64H360z" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-side" fill="none" d="M723 876c63 0 78-76 36-92-39 0-58-60-25-88 3-74 3-143-13-213-2-7 2-23 11-24-7-24-31-36-41-60-5-12-18-17 20-19-12-21-61-57-77-77-5-7 25-13 19-20-34-36-84-49-109-68-8-6 23-14 15-20-33-22-81-55-124-72" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
4
|
+
<svg v-else-if="type === 'b'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933 933"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs1927"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="683" x2="739.5" y1="74" y2="69" gradientTransform="matrix(6.26023 0 0 7.12396 -3967 -262)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#7f899b" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#1c1c2f" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="M468 50c-34 0-62 23-62 52 0 8 2 16 6 23-71 20-122 79-122 164 3 78 42 150 105 194-63 25-3 53-3 118-46 83-62 91-140 149-6 4-52 9-57 14-32 42-15 110 46 114 42 3 417 4 460-1 67-7 78-78 47-116-5-6-52-12-59-16-61-33-139-82-160-144 0-65 71-93 8-118 65-45 102-110 109-194 4-46-21-92-60-125l-65 146c-6 15-23 21-38 15-15-7-22-24-15-39l67-153a197 197 0 0 0-13-5c5-8 8-17 8-26 0-29-28-52-62-52z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="M468 50c-34 0-62 23-62 52 0 8 2 16 6 23-71 20-122 79-122 164 3 78 42 150 105 194-63 25-3 53-3 118-46 83-62 91-140 149-6 4-52 9-57 14-32 42-15 110 46 114 42 3 417 4 460-1 67-7 78-78 47-116-5-6-52-12-59-16-61-33-139-82-160-144 0-65 71-93 8-118 65-45 102-110 109-194 4-46-21-92-60-125l-65 146c-6 15-23 21-38 15-15-7-22-24-15-39l67-153a197 197 0 0 0-13-5c5-8 8-17 8-26 0-29-28-52-62-52z" class="base stroke-color stroke-medium" /><path id="deco-lines" fill="none" d="M413 510h105zm-20 200h145zm-100 80h355z" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-top" fill="none" d="M350 410c40 48 237 35 287-129" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-side" fill="none" d="M685 867c67-7 77-49 46-88-5-6-52-11-58-15-62-34-139-92-160-153 0-66 70-113 7-137 65-45 102-110 110-195 4-46-5-52-44-85" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
5
|
+
<svg v-else-if="type === 'r'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933 933"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs1553"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="660.5" x2="757.7" y1="90.4" y2="103.7" gradientTransform="matrix(6.24848 0 0 7.11058 -3961 -265)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#7f899b" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#1c1c2f" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="M775 112H649v81l-114 9v-80l-131 1v81l-109-11v-81l-117 3c-12 98 48 121 7 191l101 53c5 107 28 247 19 315-35 27 32 53-55 71-10 2-58 9-62 14-32 41-15 110 45 114 43 3 432 3 476-2 67-7 77-77 46-116-4-6-42-12-59-15-78-13-19-43-54-62-11-74 9-210 20-320l104-51c-32-77 20-88 9-195z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="M775 112H649v81l-114 9v-80l-131 1v81l-109-11v-81l-117 3c-12 98 48 121 7 191l101 53c5 107 28 247 19 315-35 27 32 53-55 71-10 2-58 9-62 14-32 41-15 110 45 114 43 3 432 3 476-2 67-7 77-77 46-116-4-6-42-12-59-15-78-13-19-43-54-62-11-74 9-210 20-320l104-51c-32-77 20-88 9-195z" class="base stroke-color stroke-medium" /><path id="deco-lines" fill="none" d="m239 277 389 2zm100 81h215zm0 331h243Zm-80 86h429Z" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-side" fill="none" d="M670 871c67-7 100-61 69-99-5-6-43-16-60-19-78-13-21-56-56-75-11-74 11-223 23-333l99-51c-28-59 21-100 9-182" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
6
|
+
<svg v-else-if="type === 'q'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933 933"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs1194"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="660.5" x2="757.7" y1="90.4" y2="103.7" gradientTransform="matrix(6.24848 0 0 7.12396 -3975 -259)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#7f899b" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#1c1c2f" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="M593 82c-29 0-53 22-53 48 0 17 10 32 25 41-43 105-76 239-108 240-44 0-70-137-99-236 15-8 26-24 26-41 0-27-24-48-53-48s-52 21-52 48c0 23 18 42 42 46 10 109 28 237-10 259-39 23-84-108-150-212 8-9 13-20 13-32 0-26-23-48-52-48s-52 22-53 48c-2 41 44 48 53 48 50 127 52 174 80 292 10 39 46 39 63 81 8 19 11 93-28 117-6 4-65 19-69 24-32 41-15 110 45 114 43 3 450 4 493-1 67-8 78-78 47-116-5-6-56-14-71-25-27-20-40-88-34-113 10-39 47-35 56-68 38-140 36-179 97-305h4c29 0 53-21 53-48 0-26-24-48-53-48s-53 22-53 48c0 13 6 24 14 32-76 95-128 230-165 209-44-25-10-144 5-260 23-5 39-24 39-46 0-26-23-48-52-48z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="M593 82c-29 0-53 22-53 48 0 17 10 32 25 41-43 105-76 239-108 240-44 0-70-137-99-236 15-8 26-24 26-41 0-27-24-48-53-48s-52 21-52 48c0 23 18 42 42 46 10 109 28 237-10 259-39 23-84-108-150-212 8-9 13-20 13-32 0-26-23-48-52-48s-52 22-53 48c-2 41 44 48 53 48 50 127 52 174 80 292 10 39 46 39 63 81 8 19 11 93-28 117-6 4-65 19-69 24-32 41-15 110 45 114 43 3 450 4 493-1 67-8 78-78 47-116-5-6-56-14-71-25-27-20-40-88-34-113 10-39 47-35 56-68 38-140 36-179 97-305h4c29 0 53-21 53-48 0-26-24-48-53-48s-53 22-53 48c0 13 6 24 14 32-76 95-128 230-165 209-44-25-10-144 5-260 23-5 39-24 39-46 0-26-23-48-52-48z" class="base stroke-color stroke-medium" /><path id="deco-lines" fill="none" d="M284 578h317zm12 140h243zm-55 74h428z" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-side" fill="none" d="M590 440c-53-47-15-146-2-264 22-6 39-24 39-46 0-27-24-39-53-39m111 780c67-7 78-68 47-107-5-6-56-13-71-24-27-20-40-107-34-132 10-39 44-35 54-68 42-140 38-170 99-296h4c29 0 55-21 55-47 0-27-24-39-53-39" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
7
|
+
<svg v-else-if="type === 'k'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933 933"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs787"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="660.5" x2="757.7" y1="90.4" y2="103.7" gradientTransform="matrix(6.24848 0 0 7.12397 -3963 -235)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#7f899b" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#1c1c2f" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="M422 56c-7 24 3 53 2 83l-94-4v93l92-4-5 105-43-3C189 247 38 189 177 445c13 23 75 75 39 110 14 37 45 29 63 72 7 19 11 92-29 117-6 3-66 18-70 24-33 41-15 110 45 114 42 2 453 3 497-2 67-7 77-77 46-116-4-6-57-14-72-25-27-20-41-87-34-112 9-39 45-36 55-68-57-41 31-83 45-110 133-252 2-202-189-122l-48 1-5-104 91 4v-93l-93 4c-3-28 10-63 2-83z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="M422 56c-7 24 3 53 2 83l-94-4v93l92-4-5 105-43-3C189 247 38 189 177 445c13 23 75 75 39 110 14 37 45 29 63 72 7 19 11 92-29 117-6 3-66 18-70 24-33 41-15 110 45 114 42 2 453 3 497-2 67-7 77-77 46-116-4-6-57-14-72-25-27-20-41-87-34-112 9-39 45-36 55-68-57-41 31-83 45-110 133-252 2-202-189-122l-48 1-5-104 91 4v-93l-93 4c-3-28 10-63 2-83z" class="base stroke-color stroke-medium" /><path id="deco-side" fill="none" d="M696 880c67-7 81-68 50-107-4-6-52-9-67-20-27-20-42-101-36-126 10-39 36-36 46-68-47-45 31-74 45-100 133-253 41-194-171-119l-52-1-5-130 87 4 2-67-90 2c-6-29 11-58 3-82m-91 146-75-1" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-lines" fill="none" d="M258 560c152 17 275 15 382 0M311 728h242zm-56 65h429z" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-top" fill="none" d="M376 335c-55-13-170-60-216-59-13 0-21 4-22 13m72 176c58 71 494 59 555-95" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
8
|
+
<svg v-else-if="type === 'P'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933 933"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs2718"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="462.1" x2="1135.2" y1="776.1" y2="839.4" gradientTransform="matrix(.64593 0 0 .64727 -27 91)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#fff" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#bfd3d7" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="M464 200c-72 1-130 58-135 124-2 33 46 89 74 106-138 31-3 71-3 128 0 40-53 66-24 91-16 64-63 88-119 114-28 35-13 95 39 98 37 3 307 3 345-1 59-6 68-67 41-101-57-17-119-42-131-108 30-26-32-53-32-93 0-57 150-90 7-128 27-17 72-73 73-106 1-65-66-125-135-124Z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="M464 200c-72 1-130 58-135 124-2 33 46 89 74 106-138 31-3 71-3 128 0 40-53 66-24 91-16 64-63 88-119 114-28 35-13 95 39 98 37 3 307 3 345-1 59-6 68-67 41-101-57-17-119-42-131-108 30-26-32-53-32-93 0-57 150-90 7-128 27-17 72-73 73-106 1-65-66-125-135-124Z" class="base stroke-color stroke-medium" /><path id="deco-side" fill="none" d="M618 864c58-7 67-58 40-92-57-18-118-52-131-118 30-25-31-52-31-93 0-57 150-90 6-127 28-18 72-74 73-107 2-65-58-120-127-119" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-lines" fill="none" d="M417 466h94zm-9 162h112zm-99 153h320z" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
9
|
+
<svg v-else-if="type === 'N'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933 933"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs2202"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="824.6" x2="992.7" y1="119.5" y2="168.5" gradientTransform="translate(-3372 -24) scale(4.2241)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#fff" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#bfd3d7" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="m394 44-24 83-59-68-4 89c-91 91-38 111-172 316-9 13-25 24-29 42-15 80 88 60 106 69 71-57 100-58 137-98 42 15 108-3 147-45-26 77-136 132-169 267 39 37 0 74-47 71-52 12-34 109 19 109l452-3c63 0 72-92 30-108-40 0-58-41-26-69 4-74 3-143-12-214-2-7 2-22 10-24-6-23-30-45-40-69-5-11-18-17 19-18-11-22-61-58-76-78-6-7 25-13 19-19-35-37-85-50-109-68-8-6 23-15 14-21-33-21-102-48-145-65z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="m394 44-24 83-59-68-4 89c-91 91-38 111-172 316-9 13-25 24-29 42-15 80 88 60 106 69 71-57 100-58 137-98 42 15 108-3 147-45-26 77-136 132-169 267 39 37 0 74-47 71-52 12-34 109 19 109l452-3c63 0 72-92 30-108-40 0-58-41-26-69 4-74 3-143-12-214-2-7 2-22 10-24-6-23-30-45-40-69-5-11-18-17 19-18-11-22-61-58-76-78-6-7 25-13 19-19-35-37-85-50-109-68-8-6 23-15 14-21-33-21-102-48-145-65z" class="base stroke-color stroke-medium" /><path id="eyebrow" fill="none" d="M336 282c-28 2-50 16-65 41" class="base stroke-color stroke-medium" /><path id="eye" fill="none" d="M310 316c12 8 25 5 22-12" class="base stroke-color stroke-medium" /><path id="nose" fill="none" d="M155 501c-13-5-23 17-15 17" class="base stroke-color stroke-medium" /><path id="cheek" fill="none" d="M508 405c10-13 9-19 11-27" class="base stroke-color stroke-medium" /><path id="deco-lines" fill="none" d="M644 699H370zm64 64H360z" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-side" fill="none" d="M723 876c63 0 78-76 36-92-39 0-58-60-25-88 3-74 3-143-13-213-2-7 2-23 11-24-7-24-31-36-41-60-5-12-18-17 20-19-12-21-61-57-77-77-5-7 25-13 19-20-34-36-84-49-109-68-8-6 23-14 15-20-33-22-81-55-124-72" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
10
|
+
<svg v-else-if="type === 'B'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933 933"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs1927"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="683" x2="739.5" y1="74" y2="69" gradientTransform="matrix(6.26023 0 0 7.12396 -3967 -262)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#fff" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#bfd3d7" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="M468 50c-34 0-62 23-62 52 0 8 2 16 6 23-71 20-122 79-122 164 3 78 42 150 105 194-63 25-3 53-3 118-46 83-62 91-140 149-6 4-52 9-57 14-32 42-15 110 46 114 42 3 417 4 460-1 67-7 78-78 47-116-5-6-52-12-59-16-61-33-139-82-160-144 0-65 71-93 8-118 65-45 102-110 109-194 4-46-21-92-60-125l-65 146c-6 15-23 21-38 15-15-7-22-24-15-39l67-153a197 197 0 0 0-13-5c5-8 8-17 8-26 0-29-28-52-62-52z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="M468 50c-34 0-62 23-62 52 0 8 2 16 6 23-71 20-122 79-122 164 3 78 42 150 105 194-63 25-3 53-3 118-46 83-62 91-140 149-6 4-52 9-57 14-32 42-15 110 46 114 42 3 417 4 460-1 67-7 78-78 47-116-5-6-52-12-59-16-61-33-139-82-160-144 0-65 71-93 8-118 65-45 102-110 109-194 4-46-21-92-60-125l-65 146c-6 15-23 21-38 15-15-7-22-24-15-39l67-153a197 197 0 0 0-13-5c5-8 8-17 8-26 0-29-28-52-62-52z" class="base stroke-color stroke-medium" /><path id="deco-lines" fill="none" d="M413 510h105zm-20 200h145zm-100 80h355z" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-top" fill="none" d="M350 410c40 48 237 35 287-129" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-side" fill="none" d="M685 867c67-7 77-49 46-88-5-6-52-11-58-15-62-34-139-92-160-153 0-66 70-113 7-137 65-45 102-110 110-195 4-46-5-52-44-85" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
11
|
+
<svg v-else-if="type === 'R'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933 933"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs1553"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="660.5" x2="757.7" y1="90.4" y2="103.7" gradientTransform="matrix(6.24848 0 0 7.11058 -3961 -265)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#fff" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#bfd3d7" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="M775 112H649v81l-114 9v-80l-131 1v81l-109-11v-81l-117 3c-12 98 48 121 7 191l101 53c5 107 28 247 19 315-35 27 32 53-55 71-10 2-58 9-62 14-32 41-15 110 45 114 43 3 432 3 476-2 67-7 77-77 46-116-4-6-42-12-59-15-78-13-19-43-54-62-11-74 9-210 20-320l104-51c-32-77 20-88 9-195z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="M775 112H649v81l-114 9v-80l-131 1v81l-109-11v-81l-117 3c-12 98 48 121 7 191l101 53c5 107 28 247 19 315-35 27 32 53-55 71-10 2-58 9-62 14-32 41-15 110 45 114 43 3 432 3 476-2 67-7 77-77 46-116-4-6-42-12-59-15-78-13-19-43-54-62-11-74 9-210 20-320l104-51c-32-77 20-88 9-195z" class="base stroke-color stroke-medium" /><path id="deco-lines" fill="none" d="m239 277 389 2zm100 81h215zm0 331h243Zm-80 86h429Z" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-side" fill="none" d="M670 871c67-7 100-61 69-99-5-6-43-16-60-19-78-13-21-56-56-75-11-74 11-223 23-333l99-51c-28-59 21-100 9-182" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
12
|
+
<svg v-else-if="type === 'Q'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933 933"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs1194"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="660.5" x2="757.7" y1="90.4" y2="103.7" gradientTransform="matrix(6.24848 0 0 7.12396 -3975 -259)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#fff" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#bfd3d7" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="M593 82c-29 0-53 22-53 48 0 17 10 32 25 41-43 105-76 239-108 240-44 0-70-137-99-236 15-8 26-24 26-41 0-27-24-48-53-48s-52 21-52 48c0 23 18 42 42 46 10 109 28 237-10 259-39 23-84-108-150-212 8-9 13-20 13-32 0-26-23-48-52-48s-52 22-53 48c-2 41 44 48 53 48 50 127 52 174 80 292 10 39 46 39 63 81 8 19 11 93-28 117-6 4-65 19-69 24-32 41-15 110 45 114 43 3 450 4 493-1 67-8 78-78 47-116-5-6-56-14-71-25-27-20-40-88-34-113 10-39 47-35 56-68 38-140 36-179 97-305h4c29 0 53-21 53-48 0-26-24-48-53-48s-53 22-53 48c0 13 6 24 14 32-76 95-128 230-165 209-44-25-10-144 5-260 23-5 39-24 39-46 0-26-23-48-52-48z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="M593 82c-29 0-53 22-53 48 0 17 10 32 25 41-43 105-76 239-108 240-44 0-70-137-99-236 15-8 26-24 26-41 0-27-24-48-53-48s-52 21-52 48c0 23 18 42 42 46 10 109 28 237-10 259-39 23-84-108-150-212 8-9 13-20 13-32 0-26-23-48-52-48s-52 22-53 48c-2 41 44 48 53 48 50 127 52 174 80 292 10 39 46 39 63 81 8 19 11 93-28 117-6 4-65 19-69 24-32 41-15 110 45 114 43 3 450 4 493-1 67-8 78-78 47-116-5-6-56-14-71-25-27-20-40-88-34-113 10-39 47-35 56-68 38-140 36-179 97-305h4c29 0 53-21 53-48 0-26-24-48-53-48s-53 22-53 48c0 13 6 24 14 32-76 95-128 230-165 209-44-25-10-144 5-260 23-5 39-24 39-46 0-26-23-48-52-48z" class="base stroke-color stroke-medium" /><path id="deco-lines" fill="none" d="M284 578h317zm12 140h243zm-55 74h428z" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-side" fill="none" d="M590 440c-53-47-15-146-2-264 22-6 39-24 39-46 0-27-24-39-53-39m111 780c67-7 78-68 47-107-5-6-56-13-71-24-27-20-40-107-34-132 10-39 44-35 54-68 42-140 38-170 99-296h4c29 0 55-21 55-47 0-27-24-39-53-39" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
13
|
+
<svg v-else-if="type === 'K'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 933 933"><style id="style-base">.base{fill-opacity:1;fill-rule:evenodd;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1}.stroke-medium{stroke-width:20}.stroke-color{stroke:#000}</style><defs id="defs787"><linearGradient xlink:href="#fillGradient" id="main-gradient" x1="660.5" x2="757.7" y1="90.4" y2="103.7" gradientTransform="matrix(6.24848 0 0 7.12397 -3963 -235)" gradientUnits="userSpaceOnUse" /><linearGradient id="fillGradient"><stop id="stop0" offset="0" stop-color="#fff" stop-opacity="1" /><stop id="stop1" offset="1" stop-color="#bfd3d7" stop-opacity="1" /></linearGradient></defs><path id="boundary" fill="none" stroke-width="35" d="M422 56c-7 24 3 53 2 83l-94-4v93l92-4-5 105-43-3C189 247 38 189 177 445c13 23 75 75 39 110 14 37 45 29 63 72 7 19 11 92-29 117-6 3-66 18-70 24-33 41-15 110 45 114 42 2 453 3 497-2 67-7 77-77 46-116-4-6-57-14-72-25-27-20-41-87-34-112 9-39 45-36 55-68-57-41 31-83 45-110 133-252 2-202-189-122l-48 1-5-104 91 4v-93l-93 4c-3-28 10-63 2-83z" class="base stroke-color" /><path id="main" fill="url(#main-gradient)" d="M422 56c-7 24 3 53 2 83l-94-4v93l92-4-5 105-43-3C189 247 38 189 177 445c13 23 75 75 39 110 14 37 45 29 63 72 7 19 11 92-29 117-6 3-66 18-70 24-33 41-15 110 45 114 42 2 453 3 497-2 67-7 77-77 46-116-4-6-57-14-72-25-27-20-41-87-34-112 9-39 45-36 55-68-57-41 31-83 45-110 133-252 2-202-189-122l-48 1-5-104 91 4v-93l-93 4c-3-28 10-63 2-83z" class="base stroke-color stroke-medium" /><path id="deco-side" fill="none" d="M696 880c67-7 81-68 50-107-4-6-52-9-67-20-27-20-42-101-36-126 10-39 36-36 46-68-47-45 31-74 45-100 133-253 41-194-171-119l-52-1-5-130 87 4 2-67-90 2c-6-29 11-58 3-82m-91 146-75-1" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-lines" fill="none" d="M258 560c152 17 275 15 382 0M311 728h242zm-56 65h429z" class="base stroke-color stroke-medium" opacity=".5" /><path id="deco-top" fill="none" d="M376 335c-55-13-170-60-216-59-13 0-21 4-22 13m72 176c58 71 494 59 555-95" class="base stroke-color stroke-medium" opacity=".5" /></svg>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<script setup lang="ts">
|
|
17
|
+
import type { Piece } from '@bedard/hexchess'
|
|
18
|
+
|
|
19
|
+
defineProps<{
|
|
20
|
+
type: Piece | null
|
|
21
|
+
}>()
|
|
22
|
+
</script>
|