@mborecki/crossword 0.0.2
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/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
- package/dist/cjs/index-CwHIXXW5.js +61 -0
- package/dist/cjs/index-TyGpRn4d.js +3159 -0
- package/dist/cjs/index.cjs.js +9 -0
- package/dist/cjs/loader.cjs.js +13 -0
- package/dist/cjs/mb-crossword.cjs.entry.js +323 -0
- package/dist/cjs/mb-crossword.cjs.js +25 -0
- package/dist/collection/collection-manifest.json +12 -0
- package/dist/collection/components/crossword/cell.js +8 -0
- package/dist/collection/components/crossword/clue.js +6 -0
- package/dist/collection/components/crossword/mb-crossword.css +57 -0
- package/dist/collection/components/crossword/mb-crossword.js +405 -0
- package/dist/collection/components/crossword/types.js +1 -0
- package/dist/collection/index.js +10 -0
- package/dist/collection/utils/utils.js +15 -0
- package/dist/collection/utils/utils.test.js +52 -0
- package/dist/components/index.d.ts +35 -0
- package/dist/components/index.js +1 -0
- package/dist/components/mb-crossword.d.ts +11 -0
- package/dist/components/mb-crossword.js +1 -0
- package/dist/esm/app-globals-DQuL1Twl.js +3 -0
- package/dist/esm/index-0i8AYf_G.js +56 -0
- package/dist/esm/index-B4XIBYtu.js +3152 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/loader.js +11 -0
- package/dist/esm/mb-crossword.entry.js +321 -0
- package/dist/esm/mb-crossword.js +21 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/mb-crossword/index.esm.js +1 -0
- package/dist/mb-crossword/mb-crossword.esm.js +1 -0
- package/dist/mb-crossword/p-0i8AYf_G.js +1 -0
- package/dist/mb-crossword/p-5b227b8e.entry.js +1 -0
- package/dist/mb-crossword/p-B4XIBYtu.js +2 -0
- package/dist/mb-crossword/p-DQuL1Twl.js +1 -0
- package/dist/types/components/crossword/cell.d.ts +7 -0
- package/dist/types/components/crossword/clue.d.ts +7 -0
- package/dist/types/components/crossword/mb-crossword.d.ts +40 -0
- package/dist/types/components/crossword/types.d.ts +20 -0
- package/dist/types/components.d.ts +50 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/roboczy/mb-puzzle/apps/crossword/.stencil/apps/crossword/vitest.config.d.ts +2 -0
- package/dist/types/roboczy/mb-puzzle/apps/crossword/.stencil/shared/vec2/src/vec2.d.ts +17 -0
- package/dist/types/roboczy/mb-puzzle/apps/crossword/.stencil/shared/vec2/src/vec2.test.d.ts +1 -0
- package/dist/types/roboczy/mb-puzzle/apps/crossword/.stencil/shared/vec2/vitest.config.d.ts +2 -0
- package/dist/types/stencil-public-runtime.d.ts +1839 -0
- package/dist/types/utils/utils.d.ts +4 -0
- package/dist/types/utils/utils.test.d.ts +1 -0
- package/dist/vitest.config.js +4 -0
- package/loader/cdn.js +1 -0
- package/loader/index.cjs.js +1 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +1 -0
- package/loader/index.js +2 -0
- package/package.json +53 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
import { forceUpdate, h } from "@stencil/core";
|
|
2
|
+
import { Clue } from "./clue";
|
|
3
|
+
import { Cell } from "./cell";
|
|
4
|
+
import { indexFromXY, isKeyboardEventLetter, Vec2fromIndex } from "../../utils/utils";
|
|
5
|
+
import { Vec2 } from "@mb-puzzle/vec2";
|
|
6
|
+
export class MBCrossword {
|
|
7
|
+
init = true;
|
|
8
|
+
data;
|
|
9
|
+
hWords = [];
|
|
10
|
+
vWords = [];
|
|
11
|
+
currentClueId = null;
|
|
12
|
+
currentClue = null;
|
|
13
|
+
isFocused = false;
|
|
14
|
+
selectedCell = null;
|
|
15
|
+
componentWillLoad() {
|
|
16
|
+
if (this.init && this.data) {
|
|
17
|
+
this.initGame();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
get allWords() {
|
|
21
|
+
return [
|
|
22
|
+
...this.hWords,
|
|
23
|
+
...this.vWords
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
async initGame(data = this.data) {
|
|
27
|
+
if (!data.words) {
|
|
28
|
+
throw new Error('Words definition missing');
|
|
29
|
+
}
|
|
30
|
+
this.hWords = [];
|
|
31
|
+
this.vWords = [];
|
|
32
|
+
data.words.forEach((w, index) => {
|
|
33
|
+
const idSeed = Math.random();
|
|
34
|
+
if (typeof w.id === 'undefined') {
|
|
35
|
+
w.id = `${idSeed}_${index}`;
|
|
36
|
+
}
|
|
37
|
+
if (w.orientation === 'horizontal') {
|
|
38
|
+
this.hWords = [...this.hWords, w];
|
|
39
|
+
}
|
|
40
|
+
if (w.orientation === 'vertical') {
|
|
41
|
+
this.vWords = [...this.vWords, w];
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
this.buildBoard();
|
|
45
|
+
}
|
|
46
|
+
boardWidth = 0;
|
|
47
|
+
boardHeight = 0;
|
|
48
|
+
cells = [];
|
|
49
|
+
buildBoard() {
|
|
50
|
+
let boardWidth = 0;
|
|
51
|
+
let boardHeight = 0;
|
|
52
|
+
this.allWords.forEach((w) => {
|
|
53
|
+
if (w.orientation === 'horizontal') {
|
|
54
|
+
boardWidth = Math.max(boardWidth, w.x + w.word.length);
|
|
55
|
+
boardHeight = Math.max(boardHeight, w.y + 1);
|
|
56
|
+
}
|
|
57
|
+
if (w.orientation === 'vertical') {
|
|
58
|
+
boardWidth = Math.max(boardWidth, w.x + 1);
|
|
59
|
+
boardHeight = Math.max(boardHeight, w.y + w.word.length);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const cells = Array(boardHeight * boardWidth).fill(null).map((_, index) => {
|
|
63
|
+
const [x, y] = Vec2fromIndex(index, boardWidth);
|
|
64
|
+
return {
|
|
65
|
+
index,
|
|
66
|
+
x,
|
|
67
|
+
y,
|
|
68
|
+
value: null,
|
|
69
|
+
isCurrent: false,
|
|
70
|
+
isInCurrentWord: false,
|
|
71
|
+
isBlocked: true
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
this.allWords.forEach((w) => {
|
|
75
|
+
if (w.orientation === 'horizontal') {
|
|
76
|
+
for (let i = 0; i < w.word.length; i++) {
|
|
77
|
+
const v = Vec2.from(w);
|
|
78
|
+
const cellIndex = indexFromXY(new Vec2(v.x + i, v.y), boardWidth);
|
|
79
|
+
cells[cellIndex].isBlocked = false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (w.orientation === 'vertical') {
|
|
83
|
+
for (let i = 0; i < w.word.length; i++) {
|
|
84
|
+
const v = Vec2.from(w);
|
|
85
|
+
const cellIndex = indexFromXY(new Vec2(v.x, v.y + i), boardWidth);
|
|
86
|
+
cells[cellIndex].isBlocked = false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
this.cells = cells;
|
|
91
|
+
this.boardWidth = boardWidth;
|
|
92
|
+
this.boardHeight = boardHeight;
|
|
93
|
+
}
|
|
94
|
+
isInClue(xy, clue = this.currentClue) {
|
|
95
|
+
if (clue === null)
|
|
96
|
+
return false;
|
|
97
|
+
if (xy.x !== clue.x && xy.y !== clue.y)
|
|
98
|
+
return false;
|
|
99
|
+
if (clue.orientation === 'horizontal') {
|
|
100
|
+
if (xy.y !== clue.y)
|
|
101
|
+
return false;
|
|
102
|
+
if (xy.x < clue.x)
|
|
103
|
+
return false;
|
|
104
|
+
if (xy.x >= clue.x + clue.word.length)
|
|
105
|
+
return false;
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
if (clue.orientation === 'vertical') {
|
|
109
|
+
if (xy.x !== clue.x)
|
|
110
|
+
return false;
|
|
111
|
+
if (xy.y < clue.y)
|
|
112
|
+
return false;
|
|
113
|
+
if (xy.y >= clue.y + clue.word.length)
|
|
114
|
+
return false;
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
isSelectedCell(cell) {
|
|
119
|
+
if (!this.selectedCell)
|
|
120
|
+
return false;
|
|
121
|
+
return cell.x === this.selectedCell.x && cell.y === this.selectedCell.y;
|
|
122
|
+
}
|
|
123
|
+
getNextClueId() {
|
|
124
|
+
if (!this.currentClueId) {
|
|
125
|
+
return this.allWords[0]?.id ?? null;
|
|
126
|
+
}
|
|
127
|
+
const currentIndex = this.allWords.findIndex(w => w.id === this.currentClueId);
|
|
128
|
+
if (currentIndex < 0) {
|
|
129
|
+
return this.allWords[0]?.id ?? null;
|
|
130
|
+
}
|
|
131
|
+
return this.allWords[currentIndex + 1]?.id ?? null;
|
|
132
|
+
}
|
|
133
|
+
getPrevClueId() {
|
|
134
|
+
if (!this.currentClueId) {
|
|
135
|
+
return this.allWords[0]?.id ?? null;
|
|
136
|
+
}
|
|
137
|
+
const currentIndex = this.allWords.findIndex(w => w.id === this.currentClueId);
|
|
138
|
+
if (currentIndex < 0) {
|
|
139
|
+
return this.allWords[0]?.id ?? null;
|
|
140
|
+
}
|
|
141
|
+
return this.allWords[currentIndex - 1]?.id ?? null;
|
|
142
|
+
}
|
|
143
|
+
inputLetter(char) {
|
|
144
|
+
if (!this.selectedCell)
|
|
145
|
+
return;
|
|
146
|
+
this.selectedCell.value = char;
|
|
147
|
+
this.selectNextCell();
|
|
148
|
+
forceUpdate(this);
|
|
149
|
+
}
|
|
150
|
+
selectNextCell() {
|
|
151
|
+
if (!this.selectedCell || !this.currentClue)
|
|
152
|
+
return;
|
|
153
|
+
const currentOrientation = this.currentClue.orientation;
|
|
154
|
+
if (isLastCellInWord(this.currentClue, this.selectedCell)) {
|
|
155
|
+
const nextClueId = this.getNextClueId();
|
|
156
|
+
if (nextClueId) {
|
|
157
|
+
this.selectClue(nextClueId);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
this.selectClue(this.hWords[0]?.id ?? this.vWords[0]?.id);
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (currentOrientation === 'horizontal') {
|
|
165
|
+
this.selectCellByXY(new Vec2(this.selectedCell.x + 1, this.selectedCell.y));
|
|
166
|
+
}
|
|
167
|
+
if (currentOrientation === 'vertical') {
|
|
168
|
+
this.selectCellByXY(new Vec2(this.selectedCell.x, this.selectedCell.y + 1));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
onFocusin() {
|
|
172
|
+
this.isFocused = true;
|
|
173
|
+
if (!this.currentClueId) {
|
|
174
|
+
this.currentClueId = this.allWords[0]?.id ?? null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
onFocusOut() {
|
|
178
|
+
this.isFocused = false;
|
|
179
|
+
}
|
|
180
|
+
selectClue(id, { row, col } = {}) {
|
|
181
|
+
if (!id)
|
|
182
|
+
return;
|
|
183
|
+
this.currentClueId = id;
|
|
184
|
+
const clue = this.allWords.find(w => w.id === id);
|
|
185
|
+
if (!clue) {
|
|
186
|
+
this.currentClueId = null;
|
|
187
|
+
this.currentClue = null;
|
|
188
|
+
}
|
|
189
|
+
this.currentClue = clue;
|
|
190
|
+
const selectCell = [clue.x, clue.y];
|
|
191
|
+
if (typeof row !== 'undefined' && clue.orientation === 'vertical') {
|
|
192
|
+
if (row >= clue.y && row < clue.y + clue.word.length) {
|
|
193
|
+
selectCell[1] = row;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (typeof col !== 'undefined' && clue.orientation === 'horizontal') {
|
|
197
|
+
if (col >= clue.x && col < clue.x + clue.word.length) {
|
|
198
|
+
selectCell[0] = col;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
this.selectCellByXY(Vec2.from(selectCell));
|
|
202
|
+
}
|
|
203
|
+
selectCellByXY(v) {
|
|
204
|
+
const selectCellIndex = indexFromXY(v, this.boardWidth);
|
|
205
|
+
this.selectedCell = this.cells[selectCellIndex] ?? null;
|
|
206
|
+
}
|
|
207
|
+
findNonblockedCell(source, vector) {
|
|
208
|
+
const pointer = new Vec2(source[0] + vector[0], source[1] + vector[1]);
|
|
209
|
+
const maxIterations = this.boardWidth * this.boardHeight;
|
|
210
|
+
let iterations = 0;
|
|
211
|
+
while (this.isCellBlocked(pointer) && iterations < maxIterations) {
|
|
212
|
+
iterations++;
|
|
213
|
+
pointer[0] += vector[0];
|
|
214
|
+
pointer[1] += vector[1];
|
|
215
|
+
if (pointer[0] < 0) {
|
|
216
|
+
pointer[0] = this.boardWidth - 1;
|
|
217
|
+
}
|
|
218
|
+
if (pointer[0] >= this.boardWidth) {
|
|
219
|
+
pointer[0] = 0;
|
|
220
|
+
}
|
|
221
|
+
if (pointer[1] < 0) {
|
|
222
|
+
pointer[1] = this.boardHeight - 1;
|
|
223
|
+
}
|
|
224
|
+
if (pointer[1] >= this.boardHeight) {
|
|
225
|
+
pointer[1] = 0;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return pointer;
|
|
229
|
+
}
|
|
230
|
+
isCellBlocked(v) {
|
|
231
|
+
const cell = this.cells[indexFromXY(v, this.boardWidth)];
|
|
232
|
+
return cell?.isBlocked ?? true;
|
|
233
|
+
}
|
|
234
|
+
selectClueByXY(v) {
|
|
235
|
+
const clues = this.allWords.filter(w => this.isInClue(v, w));
|
|
236
|
+
if (!clues.length) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
const betterClue = clues.find(c => c.orientation === this.currentClue?.orientation);
|
|
240
|
+
this.selectClue(betterClue?.id ?? clues[0].id, { row: v.y, col: v.x });
|
|
241
|
+
}
|
|
242
|
+
onKeyPress(event) {
|
|
243
|
+
console.log(event);
|
|
244
|
+
if (event.key === 'Tab') {
|
|
245
|
+
const nextClue = event.shiftKey ? this.getPrevClueId() : this.getNextClueId();
|
|
246
|
+
if (nextClue) {
|
|
247
|
+
event.preventDefault();
|
|
248
|
+
this.selectClue(nextClue);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
if (isKeyboardEventLetter(event)) {
|
|
252
|
+
this.inputLetter(event.key.toLowerCase()[0]);
|
|
253
|
+
}
|
|
254
|
+
if (this.selectedCell) {
|
|
255
|
+
switch (event.key) {
|
|
256
|
+
case 'ArrowLeft':
|
|
257
|
+
this.selectClueByXY(this.findNonblockedCell(new Vec2(this.selectedCell.x, this.selectedCell.y), new Vec2(-1, 0)));
|
|
258
|
+
event.preventDefault();
|
|
259
|
+
return;
|
|
260
|
+
case 'ArrowRight':
|
|
261
|
+
this.selectClueByXY(this.findNonblockedCell(new Vec2(this.selectedCell.x, this.selectedCell.y), new Vec2(1, 0)));
|
|
262
|
+
event.preventDefault();
|
|
263
|
+
return;
|
|
264
|
+
case 'ArrowUp':
|
|
265
|
+
this.selectClueByXY(this.findNonblockedCell(new Vec2(this.selectedCell.x, this.selectedCell.y), new Vec2(0, -1)));
|
|
266
|
+
event.preventDefault();
|
|
267
|
+
return;
|
|
268
|
+
case 'ArrowDown':
|
|
269
|
+
this.selectClueByXY(this.findNonblockedCell(new Vec2(this.selectedCell.x, this.selectedCell.y), new Vec2(0, 1)));
|
|
270
|
+
event.preventDefault();
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
render() {
|
|
276
|
+
return h("div", { key: 'e298ac6f3a1d95bc41c4854b39600f8ac7f1696d', part: "main", class: {
|
|
277
|
+
"--focused": this.isFocused
|
|
278
|
+
}, onFocusin: this.onFocusin.bind(this), onFocusout: this.onFocusOut.bind(this), tabIndex: 0, onKeyDown: this.onKeyPress.bind(this) }, h("div", { key: '74be935779266effb4605f2aa5883bf564610bc0', part: "clues" }, h("div", { key: '125d8938e4f084562b54794158074bdaeda722b5', part: "clue-list" }, this.hWords.map(w => {
|
|
279
|
+
const isCurrent = w.id === this.currentClueId;
|
|
280
|
+
return h(Clue, { word: w, isCurrent: isCurrent, onPointerDown: () => this.selectClue(w.id) });
|
|
281
|
+
})), h("div", { key: '4469227db5156a2d0b30e4dc7ef9ea8f8a1fc3bc', part: "clue-list" }, this.vWords.map(w => {
|
|
282
|
+
const isCurrent = w.id === this.currentClueId;
|
|
283
|
+
return h(Clue, { word: w, isCurrent: isCurrent, onPointerDown: () => this.selectClue(w.id) });
|
|
284
|
+
}))), h("div", { key: '965b2e99d1fbf273907f722e8b15749fbd728070', part: "board", style: {
|
|
285
|
+
'--test': '12',
|
|
286
|
+
'grid-template-columns': `repeat(${this.boardWidth}, 1fr)`
|
|
287
|
+
} }, this.cells.map(cell => {
|
|
288
|
+
const isInCurrentClue = this.isInClue(cell);
|
|
289
|
+
const isSelected = this.isSelectedCell(cell);
|
|
290
|
+
return h(Cell, { isInCurrentClue: isInCurrentClue, isSelected: isSelected, data: cell });
|
|
291
|
+
})), h("div", { key: '3d97bcc65c5eb1d25b60aa5183a7c63f6eecebf9', part: "preview" }, "Tu bedzie podgl\u0105d: ", this.currentClueId));
|
|
292
|
+
}
|
|
293
|
+
static get is() { return "mb-crossword"; }
|
|
294
|
+
static get encapsulation() { return "shadow"; }
|
|
295
|
+
static get originalStyleUrls() {
|
|
296
|
+
return {
|
|
297
|
+
"$": ["mb-crossword.scss"]
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
static get styleUrls() {
|
|
301
|
+
return {
|
|
302
|
+
"$": ["mb-crossword.css"]
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
static get properties() {
|
|
306
|
+
return {
|
|
307
|
+
"init": {
|
|
308
|
+
"type": "boolean",
|
|
309
|
+
"mutable": false,
|
|
310
|
+
"complexType": {
|
|
311
|
+
"original": "boolean",
|
|
312
|
+
"resolved": "boolean",
|
|
313
|
+
"references": {}
|
|
314
|
+
},
|
|
315
|
+
"required": false,
|
|
316
|
+
"optional": false,
|
|
317
|
+
"docs": {
|
|
318
|
+
"tags": [],
|
|
319
|
+
"text": ""
|
|
320
|
+
},
|
|
321
|
+
"getter": false,
|
|
322
|
+
"setter": false,
|
|
323
|
+
"reflect": false,
|
|
324
|
+
"attribute": "init",
|
|
325
|
+
"defaultValue": "true"
|
|
326
|
+
},
|
|
327
|
+
"data": {
|
|
328
|
+
"type": "unknown",
|
|
329
|
+
"mutable": false,
|
|
330
|
+
"complexType": {
|
|
331
|
+
"original": "PuzzleData",
|
|
332
|
+
"resolved": "PuzzleData",
|
|
333
|
+
"references": {
|
|
334
|
+
"PuzzleData": {
|
|
335
|
+
"location": "import",
|
|
336
|
+
"path": "./types",
|
|
337
|
+
"id": "src/components/crossword/types.ts::PuzzleData",
|
|
338
|
+
"referenceLocation": "PuzzleData"
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
"required": false,
|
|
343
|
+
"optional": false,
|
|
344
|
+
"docs": {
|
|
345
|
+
"tags": [],
|
|
346
|
+
"text": ""
|
|
347
|
+
},
|
|
348
|
+
"getter": false,
|
|
349
|
+
"setter": false
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
static get states() {
|
|
354
|
+
return {
|
|
355
|
+
"hWords": {},
|
|
356
|
+
"vWords": {},
|
|
357
|
+
"currentClueId": {},
|
|
358
|
+
"currentClue": {},
|
|
359
|
+
"isFocused": {},
|
|
360
|
+
"selectedCell": {},
|
|
361
|
+
"boardWidth": {},
|
|
362
|
+
"boardHeight": {},
|
|
363
|
+
"cells": {}
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
static get methods() {
|
|
367
|
+
return {
|
|
368
|
+
"initGame": {
|
|
369
|
+
"complexType": {
|
|
370
|
+
"signature": "(data?: PuzzleData) => Promise<void>",
|
|
371
|
+
"parameters": [{
|
|
372
|
+
"name": "data",
|
|
373
|
+
"type": "PuzzleData",
|
|
374
|
+
"docs": ""
|
|
375
|
+
}],
|
|
376
|
+
"references": {
|
|
377
|
+
"Promise": {
|
|
378
|
+
"location": "global",
|
|
379
|
+
"id": "global::Promise"
|
|
380
|
+
},
|
|
381
|
+
"PuzzleData": {
|
|
382
|
+
"location": "import",
|
|
383
|
+
"path": "./types",
|
|
384
|
+
"id": "src/components/crossword/types.ts::PuzzleData",
|
|
385
|
+
"referenceLocation": "PuzzleData"
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
"return": "Promise<void>"
|
|
389
|
+
},
|
|
390
|
+
"docs": {
|
|
391
|
+
"text": "",
|
|
392
|
+
"tags": []
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
function isLastCellInWord(word, cell) {
|
|
399
|
+
const lastCellXY = [
|
|
400
|
+
word.x + (word.orientation === 'horizontal' ? (word.word.length - 1) : 0),
|
|
401
|
+
word.y + (word.orientation === 'vertical' ? (word.word.length - 1) : 0),
|
|
402
|
+
];
|
|
403
|
+
const result = cell.x === lastCellXY[0] && cell.y === lastCellXY[1];
|
|
404
|
+
return result;
|
|
405
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview entry point for your component library
|
|
3
|
+
*
|
|
4
|
+
* This is the entry point for your component library. Use this file to export utilities,
|
|
5
|
+
* constants or data structure that accompany your components.
|
|
6
|
+
*
|
|
7
|
+
* DO NOT use this file to export your components. Instead, use the recommended approaches
|
|
8
|
+
* to consume components of this package as outlined in the `README.md`.
|
|
9
|
+
*/
|
|
10
|
+
export * from './utils/utils';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Vec2 } from "@mb-puzzle/vec2";
|
|
2
|
+
export function Vec2fromIndex(index, width) {
|
|
3
|
+
const x = index % width;
|
|
4
|
+
const y = Math.floor(index / width);
|
|
5
|
+
return new Vec2(x, y);
|
|
6
|
+
}
|
|
7
|
+
export function indexFromXY(v, width) {
|
|
8
|
+
return v.y * width + v.x;
|
|
9
|
+
}
|
|
10
|
+
export function isKeyboardEventLetter(event) {
|
|
11
|
+
if (event.key.length !== 1)
|
|
12
|
+
return false;
|
|
13
|
+
const key = event.key.toLowerCase();
|
|
14
|
+
return /[0-9a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u024F]/.test(key);
|
|
15
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { Vec2fromIndex, isKeyboardEventLetter } from "./utils";
|
|
3
|
+
describe('Vec2fromIndex', () => {
|
|
4
|
+
describe('Board width: 5', () => {
|
|
5
|
+
it('0 -> 0,0', () => {
|
|
6
|
+
expect(Vec2fromIndex(0, 5).xy).toMatchObject([0, 0]);
|
|
7
|
+
});
|
|
8
|
+
it('1 -> 1,0', () => {
|
|
9
|
+
expect(Vec2fromIndex(1, 5).xy).toMatchObject([1, 0]);
|
|
10
|
+
});
|
|
11
|
+
it('5 -> 0,1', () => {
|
|
12
|
+
expect(Vec2fromIndex(5, 5).xy).toMatchObject([0, 1]);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
describe('Board width: 13', () => {
|
|
16
|
+
it('0 -> 0,0', () => {
|
|
17
|
+
expect(Vec2fromIndex(0, 13).xy).toMatchObject([0, 0]);
|
|
18
|
+
});
|
|
19
|
+
it('1 -> 1,0', () => {
|
|
20
|
+
expect(Vec2fromIndex(1, 13).xy).toMatchObject([1, 0]);
|
|
21
|
+
});
|
|
22
|
+
it('13 -> 0,1', () => {
|
|
23
|
+
expect(Vec2fromIndex(13, 13).xy).toMatchObject([0, 1]);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('isKeyboardEventLetter', () => {
|
|
28
|
+
it('e', () => {
|
|
29
|
+
expect(isKeyboardEventLetter({ key: 'e' })).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
it('E', () => {
|
|
32
|
+
expect(isKeyboardEventLetter({ key: 'E' })).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
it('Ę', () => {
|
|
35
|
+
expect(isKeyboardEventLetter({ key: 'Ę' })).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
it('Ą', () => {
|
|
38
|
+
expect(isKeyboardEventLetter({ key: 'Ą' })).toBe(true);
|
|
39
|
+
});
|
|
40
|
+
it('1', () => {
|
|
41
|
+
expect(isKeyboardEventLetter({ key: '1' })).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
it('3', () => {
|
|
44
|
+
expect(isKeyboardEventLetter({ key: '3' })).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
it('_', () => {
|
|
47
|
+
expect(isKeyboardEventLetter({ key: ';' })).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
it('-', () => {
|
|
50
|
+
expect(isKeyboardEventLetter({ key: ';' })).toBe(false);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the base path to where the assets can be found. Use "setAssetPath(path)"
|
|
3
|
+
* if the path needs to be customized.
|
|
4
|
+
*/
|
|
5
|
+
export declare const getAssetPath: (path: string) => string;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Used to manually set the base path where assets can be found.
|
|
9
|
+
* If the script is used as "module", it's recommended to use "import.meta.url",
|
|
10
|
+
* such as "setAssetPath(import.meta.url)". Other options include
|
|
11
|
+
* "setAssetPath(document.currentScript.src)", or using a bundler's replace plugin to
|
|
12
|
+
* dynamically set the path at build time, such as "setAssetPath(process.env.ASSET_PATH)".
|
|
13
|
+
* But do note that this configuration depends on how your script is bundled, or lack of
|
|
14
|
+
* bundling, and where your assets can be loaded from. Additionally custom bundling
|
|
15
|
+
* will have to ensure the static assets are copied to its build directory.
|
|
16
|
+
*/
|
|
17
|
+
export declare const setAssetPath: (path: string) => void;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Used to specify a nonce value that corresponds with an application's CSP.
|
|
21
|
+
* When set, the nonce will be added to all dynamically created script and style tags at runtime.
|
|
22
|
+
* Alternatively, the nonce value can be set on a meta tag in the DOM head
|
|
23
|
+
* (<meta name="csp-nonce" content="{ nonce value here }" />) which
|
|
24
|
+
* will result in the same behavior.
|
|
25
|
+
*/
|
|
26
|
+
export declare const setNonce: (nonce: string) => void
|
|
27
|
+
|
|
28
|
+
export interface SetPlatformOptions {
|
|
29
|
+
raf?: (c: FrameRequestCallback) => number;
|
|
30
|
+
ael?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
|
|
31
|
+
rel?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
|
|
32
|
+
}
|
|
33
|
+
export declare const setPlatformOptions: (opts: SetPlatformOptions) => void;
|
|
34
|
+
|
|
35
|
+
export * from '../types';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var t,e,n,i,s,r,o,l,h,f,c,u,a,p,d,v,m,b=Object.create,w=Object.defineProperty,g=Object.getOwnPropertyDescriptor,y=Object.getOwnPropertyNames,$=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty,j=t=>{throw TypeError(t)},S=(t,e)=>function(){return e||(0,t[y(t)[0]])((e={exports:{}}).exports,e),e.exports},E=(t,e,n)=>e.has(t)||j("Cannot "+n),M=(t,e,n)=>(E(t,e,"read from private field"),n?n.call(t):e.get(t)),k=(t,e,n)=>e.has(t)?j("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),x=(t,e,n)=>(E(t,e,"write to private field"),e.set(t,n),n),N=(t,e,n)=>(E(t,e,"access private method"),n),P=S({"node_modules/balanced-match/index.js"(t,e){function n(t,e,n){t instanceof RegExp&&(t=i(t,n)),e instanceof RegExp&&(e=i(e,n));var r=s(t,e,n);return r&&{start:r[0],end:r[1],pre:n.slice(0,r[0]),body:n.slice(r[0]+t.length,r[1]),post:n.slice(r[1]+e.length)}}function i(t,e){var n=e.match(t);return n?n[0]:null}function s(t,e,n){var i,s,r,o,l,h=n.indexOf(t),f=n.indexOf(e,h+1),c=h;if(h>=0&&f>0){if(t===e)return[h,f];for(i=[],r=n.length;c>=0&&!l;)c==h?(i.push(c),h=n.indexOf(t,c+1)):1==i.length?l=[i.pop(),f]:((s=i.pop())<r&&(r=s,o=f),f=n.indexOf(e,c+1)),c=h<f&&h>=0?h:f;i.length&&(l=[r,o])}return l}e.exports=n,n.range=s}}),W=S({"node_modules/brace-expansion/index.js"(t,e){var n=P();e.exports=function(t){return t?("{}"===t.substr(0,2)&&(t="\\{\\}"+t.substr(2)),v(function(t){return t.split("\\\\").join(i).split("\\{").join(s).split("\\}").join(r).split("\\,").join(o).split("\\.").join(l)}(t),!0).map(f)):[]};var i="\0SLASH"+Math.random()+"\0",s="\0OPEN"+Math.random()+"\0",r="\0CLOSE"+Math.random()+"\0",o="\0COMMA"+Math.random()+"\0",l="\0PERIOD"+Math.random()+"\0";function h(t){return parseInt(t,10)==t?parseInt(t,10):t.charCodeAt(0)}function f(t){return t.split(i).join("\\").split(s).join("{").split(r).join("}").split(o).join(",").split(l).join(".")}function c(t){if(!t)return[""];var e=[],i=n("{","}",t);if(!i)return t.split(",");var s=i.body,r=i.post,o=i.pre.split(",");o[o.length-1]+="{"+s+"}";var l=c(r);return r.length&&(o[o.length-1]+=l.shift(),o.push.apply(o,l)),e.push.apply(e,o),e}function u(t){return"{"+t+"}"}function a(t){return/^-?0\d/.test(t)}function p(t,e){return t<=e}function d(t,e){return t>=e}function v(t,e){var i=[],s=n("{","}",t);if(!s)return[t];var o=s.pre,l=s.post.length?v(s.post,!1):[""];if(/\$$/.test(s.pre))for(var f=0;f<l.length;f++)i.push(R=o+"{"+s.body+"}"+l[f]);else{var m,b,w=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(s.body),g=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(s.body),y=w||g,$=s.body.indexOf(",")>=0;if(!y&&!$)return s.post.match(/,(?!,).*\}/)?v(t=s.pre+"{"+s.body+r+s.post):[t];if(y)m=s.body.split(/\.\./);else if(1===(m=c(s.body)).length&&1===(m=v(m[0],!1).map(u)).length)return l.map((function(t){return s.pre+m[0]+t}));if(y){var O=h(m[0]),j=h(m[1]),S=Math.max(m[0].length,m[1].length),E=3==m.length?Math.abs(h(m[2])):1,M=p;j<O&&(E*=-1,M=d);var k=m.some(a);b=[];for(var x=O;M(x,j);x+=E){var N;if(g)"\\"===(N=String.fromCharCode(x))&&(N="");else if(N=x+"",k){var P=S-N.length;if(P>0){var W=Array(P+1).join("0");N=x<0?"-"+W+N.slice(1):W+N}}b.push(N)}}else{b=[];for(var A=0;A<m.length;A++)b.push.apply(b,v(m[A],!1))}for(A=0;A<b.length;A++)for(f=0;f<l.length;f++){var R=o+b[A]+l[f];(!e||y||R)&&i.push(R)}}return i}}}),A=(t,e)=>{var n;Object.entries(null!=(n=e.i.t)?n:{}).map((([n,[i]])=>{if(31&i||32&i){const i=t[n],s=function(t,e){for(;t;){const n=Object.getOwnPropertyDescriptor(t,e);if(null==n?void 0:n.get)return n;t=Object.getPrototypeOf(t)}}(Object.getPrototypeOf(t),n)||Object.getOwnPropertyDescriptor(t,n);s&&Object.defineProperty(t,n,{get(){return s.get.call(this)},set(t){s.set.call(this,t)},configurable:!0,enumerable:!0}),t[n]=e.o.has(n)?e.o.get(n):i}}))},R=t=>{if(t.__stencil__getHostRef)return t.__stencil__getHostRef()},C=(t,e)=>e in t,z=(t,e)=>(0,console.error)(t,e),L=new Map,_="undefined"!=typeof window?window:{},D=_.HTMLElement||class{},T={l:0,h:"",jmp:t=>t(),raf:t=>requestAnimationFrame(t),ael:(t,e,n,i)=>t.addEventListener(e,n,i),rel:(t,e,n,i)=>t.removeEventListener(e,n,i),ce:(t,e)=>new CustomEvent(t,e)},F=(()=>{try{return!!_.document.adoptedStyleSheets&&(new CSSStyleSheet,"function"==typeof(new CSSStyleSheet).replaceSync)}catch(t){}return!1})(),U=!!F&&(()=>!!_.document&&Object.getOwnPropertyDescriptor(_.document.adoptedStyleSheets,"length").writable)(),Z=!1,G=[],I=[],V=(t,e)=>n=>{t.push(n),Z||(Z=!0,e&&4&T.l?B(q):T.raf(q))},H=t=>{for(let e=0;e<t.length;e++)try{t[e](performance.now())}catch(t){z(t)}t.length=0},q=()=>{H(G),H(I),(Z=G.length>0)&&T.raf(q)},B=t=>Promise.resolve(void 0).then(t),J=V(I,!0),Y=t=>{const e=new URL(t,T.h);return e.origin!==_.location.origin?e.href:e.pathname},K=t=>T.h=t,Q=t=>"object"==(t=typeof t)||"function"===t,X=((t,e,n)=>(n=null!=t?b($(t)):{},((t,e,n,i)=>{if(e&&"object"==typeof e||"function"==typeof e)for(let n of y(e))O.call(t,n)||undefined===n||w(t,n,{get:()=>e[n],enumerable:!(i=g(e,n))||i.enumerable});return t})(w(n,"default",{value:t,enumerable:!0}),t)))(W()),tt=t=>{if("string"!=typeof t)throw new TypeError("invalid pattern");if(t.length>65536)throw new TypeError("pattern is too long")},et={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},nt=t=>t.replace(/[[\]\\-]/g,"\\$&"),it=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),st=t=>t.join(""),rt=(t,e)=>{const n=e;if("["!==t.charAt(n))throw Error("not in a brace expression");const i=[],s=[];let r=n+1,o=!1,l=!1,h=!1,f=!1,c=n,u="";t:for(;r<t.length;){const e=t.charAt(r);if("!"!==e&&"^"!==e||r!==n+1){if("]"===e&&o&&!h){c=r+1;break}if(o=!0,"\\"!==e||h){if("["===e&&!h)for(const[e,[o,h,f]]of Object.entries(et))if(t.startsWith(e,r)){if(u)return["$.",!1,t.length-n,!0];r+=e.length,f?s.push(o):i.push(o),l=l||h;continue t}h=!1,u?(e>u?i.push(nt(u)+"-"+nt(e)):e===u&&i.push(nt(e)),u="",r++):t.startsWith("-]",r+1)?(i.push(nt(e+"-")),r+=2):t.startsWith("-",r+1)?(u=e,r+=2):(i.push(nt(e)),r++)}else h=!0,r++}else f=!0,r++}if(c<r)return["",!1,0,!1];if(!i.length&&!s.length)return["$.",!1,t.length-n,!0];if(0===s.length&&1===i.length&&/^\\?.$/.test(i[0])&&!f){const t=2===i[0].length?i[0].slice(-1):i[0];return[it(t),!1,c-n,!1]}const a="["+(f?"^":"")+st(i)+"]",p="["+(f?"":"^")+st(s)+"]";return[i.length&&s.length?"("+a+"|"+p+")":i.length?a:p,l,c-n,!0]},ot=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/\[([^\/\\])\]/g,"$1"):t.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1"),lt=new Set(["!","?","+","*","@"]),ht=t=>lt.has(t),ft="(?!\\.)",ct=new Set(["[","."]),ut=new Set(["..","."]),at=new Set("().*{}+?[]^$\\!"),pt=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),dt="[^/]",vt=dt+"*?",mt=dt+"+?",bt=class b{constructor(a,p,d={}){k(this,u),((t,e,n)=>{((t,e,n)=>{e in t?w(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n})(t,e+"",n)})(this,"type"),k(this,t),k(this,e),k(this,n,!1),k(this,i,[]),k(this,s),k(this,r),k(this,o),k(this,l,!1),k(this,h),k(this,f),k(this,c,!1),this.type=a,a&&x(this,e,!0),x(this,s,p),x(this,t,M(this,s)?M(M(this,s),t):this),x(this,h,M(this,t)===this?d:M(M(this,t),h)),x(this,o,M(this,t)===this?[]:M(M(this,t),o)),"!"!==a||M(M(this,t),l)||M(this,o).push(this),x(this,r,M(this,s)?M(M(this,s),i).length:0)}get hasMagic(){if(void 0!==M(this,e))return M(this,e);for(const t of M(this,i))if("string"!=typeof t&&(t.type||t.hasMagic))return x(this,e,!0);return M(this,e)}toString(){return void 0!==M(this,f)?M(this,f):x(this,f,this.type?this.type+"("+M(this,i).map((t=>t+"")).join("|")+")":M(this,i).map((t=>t+"")).join(""))}push(...t){for(const e of t)if(""!==e){if("string"!=typeof e&&!(e instanceof b&&M(e,s)===this))throw Error("invalid part: "+e);M(this,i).push(e)}}toJSON(){var e;const n=null===this.type?M(this,i).slice().map((t=>"string"==typeof t?t:t.toJSON())):[this.type,...M(this,i).map((t=>t.toJSON()))];return this.isStart()&&!this.type&&n.unshift([]),this.isEnd()&&(this===M(this,t)||M(M(this,t),l)&&"!"===(null==(e=M(this,s))?void 0:e.type))&&n.push({}),n}isStart(){var e;if(M(this,t)===this)return!0;if(!(null==(e=M(this,s))?void 0:e.isStart()))return!1;if(0===M(this,r))return!0;const n=M(this,s);for(let t=0;t<M(this,r);t++){const e=M(n,i)[t];if(!(e instanceof b&&"!"===e.type))return!1}return!0}isEnd(){var e,n,o;if(M(this,t)===this)return!0;if("!"===(null==(e=M(this,s))?void 0:e.type))return!0;if(!(null==(n=M(this,s))?void 0:n.isEnd()))return!1;if(!this.type)return null==(o=M(this,s))?void 0:o.isEnd();const l=M(this,s)?M(M(this,s),i).length:0;return M(this,r)===l-1}copyIn(t){this.push("string"==typeof t?t:t.clone(this))}clone(t){const e=new b(this.type,t);for(const t of M(this,i))e.copyIn(t);return e}static fromGlob(t,e={}){var n;const i=new b(null,void 0,e);return N(n=b,p,d).call(n,t,i,0,e),i}toMMPattern(){if(this!==M(this,t))return M(this,t).toMMPattern();const n=""+this,[i,s,r,o]=this.toRegExpSource();if(!(r||M(this,e)||M(this,h).nocase&&!M(this,h).nocaseMagicOnly&&n.toUpperCase()!==n.toLowerCase()))return s;const l=(M(this,h).nocase?"i":"")+(o?"u":"");return Object.assign(RegExp(`^${i}$`,l),{_src:i,_glob:n})}get options(){return M(this,h)}toRegExpSource(r){var o;const f=null!=r?r:!!M(this,h).dot;if(M(this,t)===this&&N(this,u,a).call(this),!this.type){const h=this.isStart()&&this.isEnd(),c=M(this,i).map((t=>{var i;const[s,o,l,f]="string"==typeof t?N(i=b,p,m).call(i,t,M(this,e),h):t.toRegExpSource(r);return x(this,e,M(this,e)||l),x(this,n,M(this,n)||f),s})).join("");let u="";if(this.isStart()&&"string"==typeof M(this,i)[0]&&(1!==M(this,i).length||!ut.has(M(this,i)[0]))){const t=ct,e=f&&t.has(c.charAt(0))||c.startsWith("\\.")&&t.has(c.charAt(2))||c.startsWith("\\.\\.")&&t.has(c.charAt(4)),n=!f&&!r&&t.has(c.charAt(0));u=e?"(?!(?:^|/)\\.\\.?(?:$|/))":n?ft:""}let a="";return this.isEnd()&&M(M(this,t),l)&&"!"===(null==(o=M(this,s))?void 0:o.type)&&(a="(?:$|\\/)"),[u+c+a,ot(c),x(this,e,!!M(this,e)),M(this,n)]}const d="*"===this.type||"+"===this.type,w="!"===this.type?"(?:(?!(?:":"(?:";let g=N(this,u,v).call(this,f);if(this.isStart()&&this.isEnd()&&!g&&"!"!==this.type){const t=""+this;return x(this,i,[t]),this.type=null,x(this,e,void 0),[t,ot(""+this),!1,!1]}let y=!d||r||f?"":N(this,u,v).call(this,!0);y===g&&(y=""),y&&(g=`(?:${g})(?:${y})*?`);let $="";return $="!"===this.type&&M(this,c)?(this.isStart()&&!f?ft:"")+mt:w+g+("!"===this.type?"))"+(!this.isStart()||f||r?"":ft)+vt+")":"@"===this.type?")":"?"===this.type?")?":"+"===this.type&&y?")":"*"===this.type&&y?")?":")"+this.type),[$,ot(g),x(this,e,!!M(this,e)),M(this,n)]}};t=new WeakMap,e=new WeakMap,n=new WeakMap,i=new WeakMap,s=new WeakMap,r=new WeakMap,o=new WeakMap,l=new WeakMap,h=new WeakMap,f=new WeakMap,c=new WeakMap,u=new WeakSet,a=function(){if(this!==M(this,t))throw Error("should only call on root");if(M(this,l))return this;let e;for(x(this,l,!0);e=M(this,o).pop();){if("!"!==e.type)continue;let t=e,n=M(t,s);for(;n;){for(let s=M(t,r)+1;!n.type&&s<M(n,i).length;s++)for(const t of M(e,i)){if("string"==typeof t)throw Error("string part in extglob AST??");t.copyIn(M(n,i)[s])}t=n,n=M(t,s)}}return this},p=new WeakSet,d=function(t,n,s,r){var o,l;let h=!1,f=!1,u=-1,a=!1;if(null===n.type){let e=s,i="";for(;e<t.length;){const s=t.charAt(e++);if(h||"\\"===s)h=!h,i+=s;else if(f)e===u+1?"^"!==s&&"!"!==s||(a=!0):"]"!==s||e===u+2&&a||(f=!1),i+=s;else if("["!==s)if(r.noext||!ht(s)||"("!==t.charAt(e))i+=s;else{n.push(i),i="";const l=new bt(s,n);e=N(o=bt,p,d).call(o,t,l,e,r),n.push(l)}else f=!0,u=e,a=!1,i+=s}return n.push(i),e}let v=s+1,m=new bt(null,n);const b=[];let w="";for(;v<t.length;){const e=t.charAt(v++);if(h||"\\"===e)h=!h,w+=e;else if(f)v===u+1?"^"!==e&&"!"!==e||(a=!0):"]"!==e||v===u+2&&a||(f=!1),w+=e;else if("["!==e)if(ht(e)&&"("===t.charAt(v)){m.push(w),w="";const n=new bt(e,m);m.push(n),v=N(l=bt,p,d).call(l,t,n,v,r)}else if("|"!==e){if(")"===e)return""===w&&0===M(n,i).length&&x(n,c,!0),m.push(w),w="",n.push(...b,m),v;w+=e}else m.push(w),w="",b.push(m),m=new bt(null,n);else f=!0,u=v,a=!1,w+=e}return n.type=null,x(n,e,void 0),x(n,i,[t.substring(s-1)]),v},v=function(t){return M(this,i).map((e=>{if("string"==typeof e)throw Error("string type in extglob ast??");const[i,s,r,o]=e.toRegExpSource(t);return x(this,n,M(this,n)||o),i})).filter((t=>!(this.isStart()&&this.isEnd()&&!t))).join("|")},m=function(t,e,n=!1){let i=!1,s="",r=!1;for(let o=0;o<t.length;o++){const l=t.charAt(o);if(i)i=!1,s+=(at.has(l)?"\\":"")+l;else if("\\"!==l){if("["===l){const[n,i,l,h]=rt(t,o);if(l){s+=n,r=r||i,o+=l-1,e=e||h;continue}}"*"!==l?"?"!==l?s+=pt(l):(s+=dt,e=!0):(s+=n&&"*"===t?mt:vt,e=!0)}else o===t.length-1?s+="\\\\":i=!0}return[s,ot(t),!!e,r]},k(bt,p);var wt=bt,gt=(t,e,n={})=>(tt(e),!(!n.nocomment&&"#"===e.charAt(0))&&new Vt(e,n).match(t)),yt=/^\*+([^+@!?\*\[\(]*)$/,$t=t=>e=>!e.startsWith(".")&&e.endsWith(t),Ot=t=>e=>e.endsWith(t),jt=t=>(t=t.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(t)),St=t=>(t=t.toLowerCase(),e=>e.toLowerCase().endsWith(t)),Et=/^\*+\.\*+$/,Mt=t=>!t.startsWith(".")&&t.includes("."),kt=t=>"."!==t&&".."!==t&&t.includes("."),xt=/^\.\*+$/,Nt=t=>"."!==t&&".."!==t&&t.startsWith("."),Pt=/^\*+$/,Wt=t=>0!==t.length&&!t.startsWith("."),At=t=>0!==t.length&&"."!==t&&".."!==t,Rt=/^\?+([^+@!?\*\[\(]*)?$/,Ct=([t,e=""])=>{const n=Dt([t]);return e?(e=e.toLowerCase(),t=>n(t)&&t.toLowerCase().endsWith(e)):n},zt=([t,e=""])=>{const n=Tt([t]);return e?(e=e.toLowerCase(),t=>n(t)&&t.toLowerCase().endsWith(e)):n},Lt=([t,e=""])=>{const n=Tt([t]);return e?t=>n(t)&&t.endsWith(e):n},_t=([t,e=""])=>{const n=Dt([t]);return e?t=>n(t)&&t.endsWith(e):n},Dt=([t])=>{const e=t.length;return t=>t.length===e&&!t.startsWith(".")},Tt=([t])=>{const e=t.length;return t=>t.length===e&&"."!==t&&".."!==t},Ft="object"==typeof process&&process?"object"==typeof process.env&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix";gt.sep="win32"===Ft?"\\":"/";var Ut=Symbol("globstar **");gt.GLOBSTAR=Ut,gt.filter=(t,e={})=>n=>gt(n,t,e);var Zt=(t,e={})=>Object.assign({},t,e);gt.defaults=t=>{if(!t||"object"!=typeof t||!Object.keys(t).length)return gt;const e=gt;return Object.assign(((n,i,s={})=>e(n,i,Zt(t,s))),{Minimatch:class extends e.Minimatch{constructor(e,n={}){super(e,Zt(t,n))}static defaults(n){return e.defaults(Zt(t,n)).Minimatch}},AST:class extends e.AST{constructor(e,n,i={}){super(e,n,Zt(t,i))}static fromGlob(n,i={}){return e.AST.fromGlob(n,Zt(t,i))}},unescape:(n,i={})=>e.unescape(n,Zt(t,i)),escape:(n,i={})=>e.escape(n,Zt(t,i)),filter:(n,i={})=>e.filter(n,Zt(t,i)),defaults:n=>e.defaults(Zt(t,n)),makeRe:(n,i={})=>e.makeRe(n,Zt(t,i)),braceExpand:(n,i={})=>e.braceExpand(n,Zt(t,i)),match:(n,i,s={})=>e.match(n,i,Zt(t,s)),sep:e.sep,GLOBSTAR:Ut})};var Gt=(t,e={})=>(tt(t),e.nobrace||!/\{(?:(?!\{).)*\}/.test(t)?[t]:(0,X.default)(t));gt.braceExpand=Gt,gt.makeRe=(t,e={})=>new Vt(t,e).makeRe(),gt.match=(t,e,n={})=>{const i=new Vt(e,n);return t=t.filter((t=>i.match(t))),i.options.nonull&&!t.length&&t.push(e),t};var It=/[?*]|[+@!]\(.*?\)|\[|\]/,Vt=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(t,e={}){tt(t),this.options=e=e||{},this.pattern=t,this.platform=e.platform||Ft,this.isWindows="win32"===this.platform,this.windowsPathsNoEscape=!!e.windowsPathsNoEscape||!1===e.allowWindowsEscape,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!e.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!e.nonegate,this.comment=!1,this.empty=!1,this.partial=!!e.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=void 0!==e.windowsNoMagicRoot?e.windowsNoMagicRoot:!(!this.isWindows||!this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(const t of this.set)for(const e of t)if("string"!=typeof e)return!0;return!1}debug(...t){}make(){const t=this.pattern,e=this.options;if(!e.nocomment&&"#"===t.charAt(0))return void(this.comment=!0);if(!t)return void(this.empty=!0);this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],e.debug&&(this.debug=(...t)=>console.error(...t)),this.debug(this.pattern,this.globSet);const n=this.globSet.map((t=>this.slashSplit(t)));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let i=this.globParts.map((t=>{if(this.isWindows&&this.windowsNoMagicRoot){const e=!(""!==t[0]||""!==t[1]||"?"!==t[2]&&It.test(t[2])||It.test(t[3])),n=/^[a-z]:/i.test(t[0]);if(e)return[...t.slice(0,4),...t.slice(4).map((t=>this.parse(t)))];if(n)return[t[0],...t.slice(1).map((t=>this.parse(t)))]}return t.map((t=>this.parse(t)))}));if(this.debug(this.pattern,i),this.set=i.filter((t=>-1===t.indexOf(!1))),this.isWindows)for(let t=0;t<this.set.length;t++){const e=this.set[t];""===e[0]&&""===e[1]&&"?"===this.globParts[t][2]&&"string"==typeof e[3]&&/^[a-z]:$/i.test(e[3])&&(e[2]="?")}this.debug(this.pattern,this.set)}preprocess(t){if(this.options.noglobstar)for(let e=0;e<t.length;e++)for(let n=0;n<t[e].length;n++)"**"===t[e][n]&&(t[e][n]="*");const{optimizationLevel:e=1}=this.options;return e>=2?(t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t)):t=e>=1?this.levelOneOptimize(t):this.adjascentGlobstarOptimize(t),t}adjascentGlobstarOptimize(t){return t.map((t=>{let e=-1;for(;-1!==(e=t.indexOf("**",e+1));){let n=e;for(;"**"===t[n+1];)n++;n!==e&&t.splice(e,n-e)}return t}))}levelOneOptimize(t){return t.map((t=>0===(t=t.reduce(((t,e)=>{const n=t[t.length-1];return"**"===e&&"**"===n?t:".."===e&&n&&".."!==n&&"."!==n&&"**"!==n?(t.pop(),t):(t.push(e),t)}),[])).length?[""]:t))}levelTwoFileOptimize(t){Array.isArray(t)||(t=this.slashSplit(t));let e=!1;do{if(e=!1,!this.preserveMultipleSlashes){for(let n=1;n<t.length-1;n++){const i=t[n];1===n&&""===i&&""===t[0]||"."!==i&&""!==i||(e=!0,t.splice(n,1),n--)}"."!==t[0]||2!==t.length||"."!==t[1]&&""!==t[1]||(e=!0,t.pop())}let n=0;for(;-1!==(n=t.indexOf("..",n+1));){const i=t[n-1];i&&"."!==i&&".."!==i&&"**"!==i&&(e=!0,t.splice(n-1,2),n-=2)}}while(e);return 0===t.length?[""]:t}firstPhasePreProcess(t){let e=!1;do{e=!1;for(let n of t){let i=-1;for(;-1!==(i=n.indexOf("**",i+1));){let s=i;for(;"**"===n[s+1];)s++;s>i&&n.splice(i+1,s-i);const r=n[i+2],o=n[i+3];if(".."!==n[i+1])continue;if(!r||"."===r||".."===r||!o||"."===o||".."===o)continue;e=!0,n.splice(i,1);const l=n.slice(0);l[i]="**",t.push(l),i--}if(!this.preserveMultipleSlashes){for(let t=1;t<n.length-1;t++){const i=n[t];1===t&&""===i&&""===n[0]||"."!==i&&""!==i||(e=!0,n.splice(t,1),t--)}"."!==n[0]||2!==n.length||"."!==n[1]&&""!==n[1]||(e=!0,n.pop())}let s=0;for(;-1!==(s=n.indexOf("..",s+1));){const t=n[s-1];t&&"."!==t&&".."!==t&&"**"!==t&&(e=!0,n.splice(s-1,2,...1===s&&"**"===n[s+1]?["."]:[]),0===n.length&&n.push(""),s-=2)}}}while(e);return t}secondPhasePreProcess(t){for(let e=0;e<t.length-1;e++)for(let n=e+1;n<t.length;n++){const i=this.partsMatch(t[e],t[n],!this.preserveMultipleSlashes);i&&(t[e]=i,t[n]=[])}return t.filter((t=>t.length))}partsMatch(t,e,n=!1){let i=0,s=0,r=[],o="";for(;i<t.length&&s<e.length;)if(t[i]===e[s])r.push("b"===o?e[s]:t[i]),i++,s++;else if(n&&"**"===t[i]&&e[s]===t[i+1])r.push(t[i]),i++;else if(n&&"**"===e[s]&&t[i]===e[s+1])r.push(e[s]),s++;else if("*"!==t[i]||!e[s]||!this.options.dot&&e[s].startsWith(".")||"**"===e[s]){if("*"!==e[s]||!t[i]||!this.options.dot&&t[i].startsWith(".")||"**"===t[i])return!1;if("a"===o)return!1;o="b",r.push(e[s]),i++,s++}else{if("b"===o)return!1;o="a",r.push(t[i]),i++,s++}return t.length===e.length&&r}parseNegate(){if(this.nonegate)return;const t=this.pattern;let e=!1,n=0;for(let i=0;i<t.length&&"!"===t.charAt(i);i++)e=!e,n++;n&&(this.pattern=t.slice(n)),this.negate=e}matchOne(t,e,n=!1){const i=this.options;if(this.isWindows){const n="string"==typeof t[0]&&/^[a-z]:$/i.test(t[0]),i=!n&&""===t[0]&&""===t[1]&&"?"===t[2]&&/^[a-z]:$/i.test(t[3]),s="string"==typeof e[0]&&/^[a-z]:$/i.test(e[0]),r=i?3:n?0:void 0,o=!s&&""===e[0]&&""===e[1]&&"?"===e[2]&&"string"==typeof e[3]&&/^[a-z]:$/i.test(e[3])?3:s?0:void 0;if("number"==typeof r&&"number"==typeof o){const[n,i]=[t[r],e[o]];n.toLowerCase()===i.toLowerCase()&&(e[o]=n,o>r?e=e.slice(o):r>o&&(t=t.slice(r)))}}const{optimizationLevel:s=1}=this.options;s>=2&&(t=this.levelTwoFileOptimize(t)),this.debug("matchOne",this,{file:t,pattern:e}),this.debug("matchOne",t.length,e.length);for(var r=0,o=0,l=t.length,h=e.length;r<l&&o<h;r++,o++){this.debug("matchOne loop");var f=e[o],c=t[r];if(this.debug(e,f,c),!1===f)return!1;if(f===Ut){this.debug("GLOBSTAR",[e,f,c]);var u=r,a=o+1;if(a===h){for(this.debug("** at the end");r<l;r++)if("."===t[r]||".."===t[r]||!i.dot&&"."===t[r].charAt(0))return!1;return!0}for(;u<l;){var p=t[u];if(this.debug("\nglobstar while",t,u,e,a,p),this.matchOne(t.slice(u),e.slice(a),n))return this.debug("globstar found match!",u,l,p),!0;if("."===p||".."===p||!i.dot&&"."===p.charAt(0)){this.debug("dot detected!",t,u,e,a);break}this.debug("globstar swallow a segment, and continue"),u++}return!(!n||(this.debug("\n>>> no match, partial?",t,u,e,a),u!==l))}let s;if("string"==typeof f?(s=c===f,this.debug("string match",f,c,s)):(s=f.test(c),this.debug("pattern match",f,c,s)),!s)return!1}if(r===l&&o===h)return!0;if(r===l)return n;if(o===h)return r===l-1&&""===t[r];throw Error("wtf?")}braceExpand(){return Gt(this.pattern,this.options)}parse(t){tt(t);const e=this.options;if("**"===t)return Ut;if(""===t)return"";let n,i=null;(n=t.match(Pt))?i=e.dot?At:Wt:(n=t.match(yt))?i=(e.nocase?e.dot?St:jt:e.dot?Ot:$t)(n[1]):(n=t.match(Rt))?i=(e.nocase?e.dot?zt:Ct:e.dot?Lt:_t)(n):(n=t.match(Et))?i=e.dot?kt:Mt:(n=t.match(xt))&&(i=Nt);const s=wt.fromGlob(t,this.options).toMMPattern();return i&&"object"==typeof s&&Reflect.defineProperty(s,"test",{value:i}),s}makeRe(){if(this.regexp||!1===this.regexp)return this.regexp;const t=this.set;if(!t.length)return this.regexp=!1,this.regexp;const e=this.options,n=e.noglobstar?"[^/]*?":e.dot?"(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?":"(?:(?!(?:\\/|^)\\.).)*?",i=new Set(e.nocase?["i"]:[]);let s=t.map((t=>{const e=t.map((t=>{if(t instanceof RegExp)for(const e of t.flags.split(""))i.add(e);return"string"==typeof t?(t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"))(t):t===Ut?Ut:t._src}));return e.forEach(((t,i)=>{const s=e[i+1],r=e[i-1];t===Ut&&r!==Ut&&(void 0===r?void 0!==s&&s!==Ut?e[i+1]="(?:\\/|"+n+"\\/)?"+s:e[i]=n:void 0===s?e[i-1]=r+"(?:\\/|"+n+")?":s!==Ut&&(e[i-1]=r+"(?:\\/|\\/"+n+"\\/)"+s,e[i+1]=Ut))})),e.filter((t=>t!==Ut)).join("/")})).join("|");const[r,o]=t.length>1?["(?:",")"]:["",""];s="^"+r+s+o+"$",this.negate&&(s="^(?!"+s+").+$");try{this.regexp=RegExp(s,[...i].join(""))}catch(t){this.regexp=!1}return this.regexp}slashSplit(t){return this.preserveMultipleSlashes?t.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(t)?["",...t.split(/\/+/)]:t.split(/\/+/)}match(t,e=this.partial){if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return""===t;if("/"===t&&e)return!0;const n=this.options;this.isWindows&&(t=t.split("\\").join("/"));const i=this.slashSplit(t);this.debug(this.pattern,"split",i);const s=this.set;this.debug(this.pattern,"set",s);let r=i[i.length-1];if(!r)for(let t=i.length-2;!r&&t>=0;t--)r=i[t];for(let t=0;t<s.length;t++){const o=s[t];let l=i;if(n.matchBase&&1===o.length&&(l=[r]),this.matchOne(l,o,e))return!!n.flipNegate||!this.negate}return!n.flipNegate&&this.negate}static defaults(t){return gt.defaults(t).Minimatch}};gt.AST=wt,gt.Minimatch=Vt,gt.escape=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/[?*()[\]]/g,"[$&]"):t.replace(/[?*()[\]\\]/g,"\\$&"),gt.unescape=ot,((t,e)=>{for(var n in e)w(t,n,{get:e[n],enumerable:!0})})({},{err:()=>qt,map:()=>Bt,ok:()=>Ht,unwrap:()=>Yt,unwrapErr:()=>Kt});var Ht=t=>({isOk:!0,isErr:!1,value:t}),qt=t=>({isOk:!1,isErr:!0,value:t});function Bt(t,e){if(t.isOk){const n=e(t.value);return n instanceof Promise?n.then((t=>Ht(t))):Ht(n)}if(t.isErr)return qt(t.value);throw"should never get here"}var Jt,Yt=t=>{if(t.isOk)return t.value;throw t.value},Kt=t=>{if(t.isErr)return t.value;throw t.value};function Qt(){const t=this.attachShadow({mode:"open"});void 0===Jt&&(Jt=null),Jt&&(U?t.adoptedStyleSheets.push(Jt):t.adoptedStyleSheets=[...t.adoptedStyleSheets,Jt])}function Xt(t,e,n){let i,s=0,r=[];for(;s<t.length;s++){if(i=t[s],i["s-sr"]&&(!e||i["s-hn"]===e)&&(void 0===n||te(i)===n)&&(r.push(i),void 0!==n))return r;r=[...r,...Xt(i.childNodes,e,n)]}return r}var te=t=>"string"==typeof t["s-sn"]?t["s-sn"]:1===t.nodeType&&t.getAttribute("slot")||void 0;var ee=new WeakMap,ne=t=>"sc-"+t.u,ie=(t,e,...n)=>{let i=null,s=null,r=!1,o=!1;const l=[],h=e=>{for(let n=0;n<e.length;n++)i=e[n],Array.isArray(i)?h(i):null!=i&&"boolean"!=typeof i&&((r="function"!=typeof t&&!Q(i))&&(i+=""),r&&o?l[l.length-1].p+=i:l.push(r?se(null,i):i),o=r)};if(h(n),e){e.key&&(s=e.key);{const t=e.className||e.class;t&&(e.class="object"!=typeof t?t:Object.keys(t).filter((e=>t[e])).join(" "))}}if("function"==typeof t)return t(null===e?{}:e,l,oe);const f=se(t,null);return f.v=e,l.length>0&&(f.m=l),f.$=s,f},se=(t,e)=>({l:0,O:t,p:e,j:null,m:null,v:null,$:null}),re={},oe={forEach:(t,e)=>t.map(le).forEach(e),map:(t,e)=>t.map(le).map(e).map(he)},le=t=>({vattrs:t.v,vchildren:t.m,vkey:t.$,vname:t.S,vtag:t.O,vtext:t.p}),he=t=>{if("function"==typeof t.vtag){const e={...t.vattrs};return t.vkey&&(e.key=t.vkey),t.vname&&(e.name=t.vname),ie(t.vtag,e,...t.vchildren||[])}const e=se(t.vtag,t.vtext);return e.v=t.vattrs,e.m=t.vchildren,e.$=t.vkey,e.S=t.vname,e},fe=t=>{const e=(t=>t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))(t);return RegExp(`(^|[^@]|@(?!supports\\s+selector\\s*\\([^{]*?${e}))(${e}\\b)`,"g")};fe("::slotted"),fe(":host"),fe(":host-context");var ce,ue=(t,e)=>null==t||Q(t)?t:4&e?"false"!==t&&(""===t||!!t):t,ae=(t,e,n,i,s,r)=>{if(n===i)return;let o=C(t,e),l=e.toLowerCase();if("class"===e){const e=t.classList,s=de(n);let r=de(i);e.remove(...s.filter((t=>t&&!r.includes(t)))),e.add(...r.filter((t=>t&&!s.includes(t))))}else if("style"===e){for(const e in n)i&&null!=i[e]||(e.includes("-")?t.style.removeProperty(e):t.style[e]="");for(const e in i)n&&i[e]===n[e]||(e.includes("-")?t.style.setProperty(e,i[e]):t.style[e]=i[e])}else if("key"===e);else if(t.__lookupSetter__(e)||"o"!==e[0]||"n"!==e[1]){const l=Q(i);if(o||l&&null!==i)try{if(t.tagName.includes("-"))t[e]!==i&&(t[e]=i);else{const s=null==i?"":i;"list"===e?o=!1:null!=n&&t[e]==s||("function"==typeof t.__lookupSetter__(e)?t[e]=s:t.setAttribute(e,s))}}catch(t){}null==i||!1===i?!1===i&&""!==t.getAttribute(e)||t.removeAttribute(e):(!o||4&r||s)&&!l&&1===t.nodeType&&t.setAttribute(e,i=!0===i?"":i)}else if(e="-"===e[2]?e.slice(3):C(_,l)?l.slice(2):l[2]+e.slice(3),n||i){const s=e.endsWith(ve);e=e.replace(me,""),n&&T.rel(t,e,n,s),i&&T.ael(t,e,i,s)}},pe=/\s/,de=t=>("object"==typeof t&&t&&"baseVal"in t&&(t=t.baseVal),t&&"string"==typeof t?t.split(pe):[]),ve="Capture",me=RegExp(ve+"$"),be=(t,e,n)=>{const i=11===e.j.nodeType&&e.j.host?e.j.host:e.j,s=t&&t.v||{},r=e.v||{};for(const t of we(Object.keys(s)))t in r||ae(i,t,s[t],void 0,n,e.l);for(const t of we(Object.keys(r)))ae(i,t,s[t],r[t],n,e.l)};function we(t){return t.includes("ref")?[...t.filter((t=>"ref"!==t)),"ref"]:t}var ge=!1,ye=(t,e,n)=>{const i=e.m[n];let s,r,o=0;if(null!==i.p)s=i.j=_.document.createTextNode(i.p);else{if(!_.document)throw Error("You are trying to render a Stencil component in an environment that doesn't support the DOM. Make sure to populate the [`window`](https://developer.mozilla.org/en-US/docs/Web/API/Window/window) object before rendering a component.");if(s=i.j=_.document.createElement(i.O),be(null,i,ge),i.m){const e="template"===i.O?s.content:s;for(o=0;o<i.m.length;++o)r=ye(t,i,o),r&&e.appendChild(r)}}return s["s-hn"]=ce,s},$e=(t,e,n,i,s,r)=>{let o,l=t;for(l.shadowRoot&&l.tagName===ce&&(l=l.shadowRoot),"template"===n.O&&(l=l.content);s<=r;++s)i[s]&&(o=ye(null,n,s),o&&(i[s].j=o,Ee(l,o,e)))},Oe=(t,e,n)=>{for(let i=e;i<=n;++i){const e=t[i];if(e){const t=e.j;t&&t.remove()}}},je=(t,e,n=!1)=>t.O===e.O&&(n?(n&&!t.$&&e.$&&(t.$=e.$),!0):t.$===e.$),Se=(t,e,n=!1)=>{const i=e.j=t.j,s=t.m,r=e.m,o=e.p;null===o?(be(t,e,ge),null!==s&&null!==r?((t,e,n,i,s=!1)=>{let r,o,l=0,h=0,f=0,c=0,u=e.length-1,a=e[0],p=e[u],d=i.length-1,v=i[0],m=i[d];const b="template"===n.O?t.content:t;for(;l<=u&&h<=d;)if(null==a)a=e[++l];else if(null==p)p=e[--u];else if(null==v)v=i[++h];else if(null==m)m=i[--d];else if(je(a,v,s))Se(a,v,s),a=e[++l],v=i[++h];else if(je(p,m,s))Se(p,m,s),p=e[--u],m=i[--d];else if(je(a,m,s))Se(a,m,s),Ee(b,a.j,p.j.nextSibling),a=e[++l],m=i[--d];else if(je(p,v,s))Se(p,v,s),Ee(b,p.j,a.j),p=e[--u],v=i[++h];else{for(f=-1,c=l;c<=u;++c)if(e[c]&&null!==e[c].$&&e[c].$===v.$){f=c;break}f>=0?(o=e[f],o.O!==v.O?r=ye(e&&e[h],n,f):(Se(o,v,s),e[f]=void 0,r=o.j),v=i[++h]):(r=ye(e&&e[h],n,h),v=i[++h]),r&&Ee(a.j.parentNode,r,a.j)}l>u?$e(t,null==i[d+1]?null:i[d+1].j,n,i,h,d):h>d&&Oe(e,l,u)})(i,s,e,r,n):null!==r?(null!==t.p&&(i.textContent=""),$e(i,null,e,r,0,r.length-1)):!n&&null!==s&&Oe(s,0,s.length-1)):t.p!==o&&(i.data=o)},Ee=(t,e,n)=>{if("string"==typeof e["s-sn"]){t.insertBefore(e,n);const{slotNode:i}=function(t,e){var n;if(!(e=e||(null==(n=t["s-ol"])?void 0:n.parentElement)))return{slotNode:null,slotName:""};const i=t["s-sn"]=te(t)||"";return{slotNode:Xt(function(t,e){if("__"+e in t){const n=t["__"+e];return"function"!=typeof n?n:n.bind(t)}return"function"!=typeof t[e]?t[e]:t[e].bind(t)}(e,"childNodes"),e.tagName,i)[0],slotName:i}}(e);return i&&function(t){t.dispatchEvent(new CustomEvent("slotchange",{bubbles:!1,cancelable:!1,composed:!1}))}(i),e}return t.__insertBefore?t.__insertBefore(e,n):null==t?void 0:t.insertBefore(e,n)},Me=(t,e,n=!1)=>{const i=t.$hostElement$,s=t.M||se(null,null),r=(t=>t&&t.O===re)(e)?e:ie(null,null,e);if(ce=i.tagName,n&&r.v)for(const t of Object.keys(r.v))i.hasAttribute(t)&&!["key","ref","style","class"].includes(t)&&(r.v[t]=i[t]);r.O=null,r.l|=4,t.M=r,r.j=s.j=i.shadowRoot||i,Se(s,r,n)},ke=(t,e)=>{if(e&&!t.k&&e["s-p"]){const n=e["s-p"].push(new Promise((i=>t.k=()=>{e["s-p"].splice(n-1,1),i()})))}},xe=(t,e)=>{if(t.l|=16,4&t.l)return void(t.l|=512);ke(t,t.N);const n=()=>Ne(t,e);if(!e)return J(n);queueMicrotask((()=>{n()}))},Ne=(t,e)=>{const n=t.$hostElement$,i=n;if(!i)throw Error(`Can't render component <${n.tagName.toLowerCase()} /> with invalid Stencil runtime! Make sure this imported component is compiled with a \`externalRuntime: true\` flag. For more information, please refer to https://stenciljs.com/docs/custom-elements#externalruntime`);let s;return s=_e(i,e?"componentWillLoad":"componentWillUpdate",void 0,n),s=Pe(s,(()=>_e(i,"componentWillRender",void 0,n))),Pe(s,(()=>Ae(t,i,e)))},Pe=(t,e)=>We(t)?t.then(e).catch((t=>{console.error(t),e()})):e(),We=t=>t instanceof Promise||t&&t.then&&"function"==typeof t.then,Ae=async(t,e,n)=>{var i;const s=t.$hostElement$,r=s["s-rc"];n&&(t=>{const e=t.i,n=t.$hostElement$,i=e.l,s=((t,e)=>{var n,i,s;const r=ne(e),o=L.get(r);if(!_.document)return r;if(t=11===t.nodeType?t:_.document,o)if("string"==typeof o){let s,l=ee.get(t=t.head||t);if(l||ee.set(t,l=new Set),!l.has(r)){s=_.document.createElement("style"),s.innerHTML=o;const h=null!=(n=T.P)?n:function(){var t,e,n;return null!=(n=null==(e=null==(t=_.document.head)?void 0:t.querySelector('meta[name="csp-nonce"]'))?void 0:e.getAttribute("content"))?n:void 0}();if(null!=h&&s.setAttribute("nonce",h),!(1&e.l))if("HEAD"===t.nodeName){const e=t.querySelectorAll("link[rel=preconnect]"),n=e.length>0?e[e.length-1].nextSibling:t.querySelector("style");t.insertBefore(s,(null==n?void 0:n.parentNode)===t?n:null)}else if("host"in t)if(F){const e=new(null!=(i=t.defaultView)?i:t.ownerDocument.defaultView).CSSStyleSheet;e.replaceSync(o),U?t.adoptedStyleSheets.unshift(e):t.adoptedStyleSheets=[e,...t.adoptedStyleSheets]}else{const e=t.querySelector("style");e?e.innerHTML=o+e.innerHTML:t.prepend(s)}else t.append(s);1&e.l&&t.insertBefore(s,null),4&e.l&&(s.innerHTML+="slot-fb{display:contents}slot-fb[hidden]{display:none}"),l&&l.add(r)}}else{let e=ee.get(t);if(e||ee.set(t,e=new Set),!e.has(r)){const n=null!=(s=t.defaultView)?s:t.ownerDocument.defaultView;let i;if(o.constructor===n.CSSStyleSheet)i=o;else{i=new n.CSSStyleSheet;for(let t=0;t<o.cssRules.length;t++)i.insertRule(o.cssRules[t].cssText,t)}U?t.adoptedStyleSheets.push(i):t.adoptedStyleSheets=[...t.adoptedStyleSheets,i],e.add(r)}}return r})(n.shadowRoot?n.shadowRoot:n.getRootNode(),e);10&i&&(n["s-sc"]=s,n.classList.add(s+"-h"))})(t);Re(t,e,s,n),r&&(r.map((t=>t())),s["s-rc"]=void 0);{const e=null!=(i=s["s-p"])?i:[],n=()=>Ce(t);0===e.length?n():(Promise.all(e).then(n),t.l|=4,e.length=0)}},Re=(t,e,n,i)=>{try{e=e.render(),t.l&=-17,t.l|=2,Me(t,e,i)}catch(e){z(e,t.$hostElement$)}return null},Ce=t=>{const e=t.$hostElement$,n=e,i=t.N;_e(n,"componentDidRender",void 0,e),64&t.l?_e(n,"componentDidUpdate",void 0,e):(t.l|=64,De(e),_e(n,"componentDidLoad",void 0,e),t.W(e),i||Le()),t.k&&(t.k(),t.k=void 0),512&t.l&&B((()=>xe(t,!1))),t.l&=-517},ze=t=>{var e;{const n=R(t),i=null==(e=null==n?void 0:n.$hostElement$)?void 0:e.isConnected;return i&&2==(18&n.l)&&xe(n,!1),i}},Le=()=>{B((()=>(t=>{const e=T.ce("appload",{detail:{namespace:"mb-crossword"}});return t.dispatchEvent(e),e})(_)))},_e=(t,e,n,i)=>{if(t&&t[e])try{return t[e](n)}catch(t){z(t,i)}},De=t=>t.classList.add("hydrated"),Te=(t,e,n,i)=>{const s=R(t);if(!s)return;const r=t,o=s.o.get(e),l=s.l,h=r;if(!((n=ue(n,i.t[e][0]))===o||Number.isNaN(o)&&Number.isNaN(n)||(s.o.set(e,n),2!=(18&l)))){if(h.componentShouldUpdate&&!1===h.componentShouldUpdate(n,o,e))return;xe(s,!1)}},Fe=(t,e)=>{var n,i;const s=t.prototype;if(e.t){const r=Object.entries(null!=(n=e.t)?n:{});r.map((([t,[n]])=>{if(31&n||32&n){const{get:i,set:r}=Object.getOwnPropertyDescriptor(s,t)||{};i&&(e.t[t][0]|=2048),r&&(e.t[t][0]|=4096),Object.defineProperty(s,t,{get(){return i?i.apply(this):((t,e)=>R(this).o.get(e))(0,t)},configurable:!0,enumerable:!0}),Object.defineProperty(s,t,{set(i){const s=R(this);if(s){if(r)return void 0===(32&n?this[t]:s.$hostElement$[t])&&s.o.get(t)&&(i=s.o.get(t)),r.call(this,ue(i,n)),void Te(this,t,i=32&n?this[t]:s.$hostElement$[t],e);Te(this,t,i,e)}}})}}));{const n=new Map;s.attributeChangedCallback=function(t,i,o){T.jmp((()=>{var l;const h=n.get(t),f=R(this);if(this.hasOwnProperty(h),s.hasOwnProperty(h)&&"number"==typeof this[h]&&this[h]==o)return;if(null==h){const n=null==f?void 0:f.l;if(f&&n&&!(8&n)&&o!==i){const s=this,r=null==(l=e.A)?void 0:l[t];null==r||r.forEach((e=>{const[[r,l]]=Object.entries(e);null!=s[r]&&(128&n||1&l)&&s[r].call(s,o,i,t)}))}return}const c=r.find((([t])=>t===h));c&&4&c[1][0]&&(o=null!==o&&"false"!==o);const u=Object.getOwnPropertyDescriptor(s,h);o==this[h]||u.get&&!u.set||(this[h]=o)}))},t.observedAttributes=Array.from(new Set([...Object.keys(null!=(i=e.A)?i:{}),...r.filter((([t,e])=>31&e[0])).map((([t,e])=>{const i=e[1]||t;return n.set(i,t),i}))]))}}return t},Ue=(t,e)=>{const n={l:e[0],u:e[1]};n.t=e[2];const i=t.prototype.connectedCallback,s=t.prototype.disconnectedCallback;return Object.assign(t.prototype,{__hasHostListenerAttached:!1,__registerHost(){((t,e)=>{const n={l:0,$hostElement$:t,i:e,o:new Map,R:new Map};n.C=new Promise((t=>n.W=t)),t["s-p"]=[],t["s-rc"]=[];const i=n;t.__stencil__getHostRef=()=>i,512&e.l&&A(t,n)})(this,n)},connectedCallback(){if(!this.__hasHostListenerAttached){if(!R(this))return;this.__hasHostListenerAttached=!0}(t=>{if(!(1&T.l)){const e=R(t);if(!e)return;const n=e.i,i=()=>{};if(1&e.l)(null==e?void 0:e.L)||(null==e?void 0:e.C)&&e.C.then((()=>{}));else{e.l|=1;{let n=t;for(;n=n.parentNode||n.host;)if(n["s-p"]){ke(e,e.N=n);break}}n.t&&Object.entries(n.t).map((([e,[n]])=>{if(31&n&&e in t&&t[e]!==Object.prototype[e]){const n=t[e];delete t[e],t[e]=n}})),(async(t,e,n)=>{let i;if(!(32&e.l)&&(e.l|=32,i=t.constructor,customElements.whenDefined(t.localName).then((()=>e.l|=128)),i&&i.style)){let t;"string"==typeof i.style&&(t=i.style);const e=ne(n);if(!L.has(e)){const i=()=>{};((t,e,n)=>{let i=L.get(t);F&&n?(i=i||new CSSStyleSheet,"string"==typeof i?i=e:i.replaceSync(e)):i=e,L.set(t,i)})(e,t,!!(1&n.l)),i()}}const s=e.N,r=()=>xe(e,!0);s&&s["s-rc"]?s["s-rc"].push(r):r()})(t,e,n)}i()}})(this),i&&i.call(this)},disconnectedCallback(){(async t=>{ee.has(t)&&ee.delete(t),t.shadowRoot&&ee.has(t.shadowRoot)&&ee.delete(t.shadowRoot)})(this),s&&s.call(this)},__attachShadow(){if(this.shadowRoot){if("open"!==this.shadowRoot.mode)throw Error(`Unable to re-use existing shadow root for ${n.u}! Mode is set to ${this.shadowRoot.mode} but Stencil only supports open shadow roots.`)}else Qt.call(this,n)}}),t.is=n.u,Fe(t,n)},Ze=t=>T.P=t,Ge=t=>Object.assign(T,t);function Ie(t,e){Me({$hostElement$:e},t)}function Ve(t){return t}class He{x;y;get 0(){return this.x}set 0(t){this.x=t}get 1(){return this.y}set 1(t){this.y=t}get xy(){return[this.x,this.y]}*[Symbol.iterator](){yield this.x,yield this.y}constructor(t,e){this.x=t,this.y=e}static from(t){if("number"==typeof t)return new He(t,t);if(Array.isArray(t))return new He(t[0],t[1]);if("object"==typeof t&&"number"==typeof t.x&&"number"==typeof t.y)return new He(t.x,t.y);throw Error("Wrong Vec2 source")}}function qe(t,e){return new He(t%e,Math.floor(t/e))}function Be(t,e){return t.y*e+t.x}function Je(t){if(1!==t.key.length)return!1;const e=t.key.toLowerCase();return/[0-9a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u024F]/.test(e)}export{D as H,He as V,qe as Vec2fromIndex,ze as f,Y as getAssetPath,ie as h,Be as indexFromXY,Je as isKeyboardEventLetter,Ue as p,Ie as render,K as setAssetPath,Ze as setNonce,Ge as setPlatformOptions,Ve as t}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../types/components";
|
|
2
|
+
|
|
3
|
+
interface MbCrossword extends Components.MbCrossword, HTMLElement {}
|
|
4
|
+
export const MbCrossword: {
|
|
5
|
+
prototype: MbCrossword;
|
|
6
|
+
new (): MbCrossword;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as t,t as i,p as s,H as e,Vec2fromIndex as r,V as n,f as l,isKeyboardEventLetter as o,indexFromXY as h}from"./index.js";function c({isCurrent:i,word:s,onPointerDown:e}){return t("p",{onPointerDown:e,part:"clue",class:{"--current":i}},s.clue)}function a({data:i,isInCurrentClue:s,isSelected:e}){return t("div",{part:"cell",class:{"--blocked":i.isBlocked,"--in-current-clue":s,"--selected":e}},t("div",{class:"_inner",style:{position:"absolute",width:"100%"}},i.value))}const d=s(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow()}init=!0;data;hWords=[];vWords=[];currentClueId=null;currentClue=null;isFocused=!1;selectedCell=null;componentWillLoad(){this.init&&this.data&&this.initGame()}get allWords(){return[...this.hWords,...this.vWords]}async initGame(t=this.data){if(!t.words)throw Error("Words definition missing");this.hWords=[],this.vWords=[],t.words.forEach(((t,i)=>{const s=Math.random();void 0===t.id&&(t.id=`${s}_${i}`),"horizontal"===t.orientation&&(this.hWords=[...this.hWords,t]),"vertical"===t.orientation&&(this.vWords=[...this.vWords,t])})),this.buildBoard()}boardWidth=0;boardHeight=0;cells=[];buildBoard(){let t=0,i=0;this.allWords.forEach((s=>{"horizontal"===s.orientation&&(t=Math.max(t,s.x+s.word.length),i=Math.max(i,s.y+1)),"vertical"===s.orientation&&(t=Math.max(t,s.x+1),i=Math.max(i,s.y+s.word.length))}));const s=Array(i*t).fill(null).map(((i,s)=>{const[e,n]=r(s,t);return{index:s,x:e,y:n,value:null,isCurrent:!1,isInCurrentWord:!1,isBlocked:!0}}));this.allWords.forEach((i=>{if("horizontal"===i.orientation)for(let e=0;e<i.word.length;e++){const r=n.from(i),l=h(new n(r.x+e,r.y),t);s[l].isBlocked=!1}if("vertical"===i.orientation)for(let e=0;e<i.word.length;e++){const r=n.from(i),l=h(new n(r.x,r.y+e),t);s[l].isBlocked=!1}})),this.cells=s,this.boardWidth=t,this.boardHeight=i}isInClue(t,i=this.currentClue){return null!==i&&(t.x===i.x||t.y===i.y)&&("horizontal"===i.orientation?!(t.y!==i.y||t.x<i.x||t.x>=i.x+i.word.length):"vertical"===i.orientation?!(t.x!==i.x||t.y<i.y||t.y>=i.y+i.word.length):void 0)}isSelectedCell(t){return!!this.selectedCell&&t.x===this.selectedCell.x&&t.y===this.selectedCell.y}getNextClueId(){if(!this.currentClueId)return this.allWords[0]?.id??null;const t=this.allWords.findIndex((t=>t.id===this.currentClueId));return t<0?this.allWords[0]?.id??null:this.allWords[t+1]?.id??null}getPrevClueId(){if(!this.currentClueId)return this.allWords[0]?.id??null;const t=this.allWords.findIndex((t=>t.id===this.currentClueId));return t<0?this.allWords[0]?.id??null:this.allWords[t-1]?.id??null}inputLetter(t){this.selectedCell&&(this.selectedCell.value=t,this.selectNextCell(),l(this))}selectNextCell(){if(!this.selectedCell||!this.currentClue)return;const t=this.currentClue.orientation;if(function(t,i){const s=[t.x+("horizontal"===t.orientation?t.word.length-1:0),t.y+("vertical"===t.orientation?t.word.length-1:0)];return i.x===s[0]&&i.y===s[1]}(this.currentClue,this.selectedCell)){const t=this.getNextClueId();this.selectClue(t||(this.hWords[0]?.id??this.vWords[0]?.id))}else"horizontal"===t&&this.selectCellByXY(new n(this.selectedCell.x+1,this.selectedCell.y)),"vertical"===t&&this.selectCellByXY(new n(this.selectedCell.x,this.selectedCell.y+1))}onFocusin(){this.isFocused=!0,this.currentClueId||(this.currentClueId=this.allWords[0]?.id??null)}onFocusOut(){this.isFocused=!1}selectClue(t,{row:i,col:s}={}){if(!t)return;this.currentClueId=t;const e=this.allWords.find((i=>i.id===t));e||(this.currentClueId=null,this.currentClue=null),this.currentClue=e;const r=[e.x,e.y];void 0!==i&&"vertical"===e.orientation&&i>=e.y&&i<e.y+e.word.length&&(r[1]=i),void 0!==s&&"horizontal"===e.orientation&&s>=e.x&&s<e.x+e.word.length&&(r[0]=s),this.selectCellByXY(n.from(r))}selectCellByXY(t){const i=h(t,this.boardWidth);this.selectedCell=this.cells[i]??null}findNonblockedCell(t,i){const s=new n(t[0]+i[0],t[1]+i[1]),e=this.boardWidth*this.boardHeight;let r=0;for(;this.isCellBlocked(s)&&r<e;)r++,s[0]+=i[0],s[1]+=i[1],s[0]<0&&(s[0]=this.boardWidth-1),s[0]>=this.boardWidth&&(s[0]=0),s[1]<0&&(s[1]=this.boardHeight-1),s[1]>=this.boardHeight&&(s[1]=0);return s}isCellBlocked(t){const i=this.cells[h(t,this.boardWidth)];return i?.isBlocked??!0}selectClueByXY(t){const i=this.allWords.filter((i=>this.isInClue(t,i)));if(!i.length)return;const s=i.find((t=>t.orientation===this.currentClue?.orientation));this.selectClue(s?.id??i[0].id,{row:t.y,col:t.x})}onKeyPress(t){if(console.log(t),"Tab"===t.key){const i=t.shiftKey?this.getPrevClueId():this.getNextClueId();i&&(t.preventDefault(),this.selectClue(i))}if(o(t)&&this.inputLetter(t.key.toLowerCase()[0]),this.selectedCell)switch(t.key){case"ArrowLeft":return this.selectClueByXY(this.findNonblockedCell(new n(this.selectedCell.x,this.selectedCell.y),new n(-1,0))),void t.preventDefault();case"ArrowRight":return this.selectClueByXY(this.findNonblockedCell(new n(this.selectedCell.x,this.selectedCell.y),new n(1,0))),void t.preventDefault();case"ArrowUp":return this.selectClueByXY(this.findNonblockedCell(new n(this.selectedCell.x,this.selectedCell.y),new n(0,-1))),void t.preventDefault();case"ArrowDown":return this.selectClueByXY(this.findNonblockedCell(new n(this.selectedCell.x,this.selectedCell.y),new n(0,1))),void t.preventDefault()}}render(){return t("div",{key:"e298ac6f3a1d95bc41c4854b39600f8ac7f1696d",part:"main",class:{"--focused":this.isFocused},onFocusin:this.onFocusin.bind(this),onFocusout:this.onFocusOut.bind(this),tabIndex:0,onKeyDown:this.onKeyPress.bind(this)},t("div",{key:"74be935779266effb4605f2aa5883bf564610bc0",part:"clues"},t("div",{key:"125d8938e4f084562b54794158074bdaeda722b5",part:"clue-list"},this.hWords.map((i=>t(c,{word:i,isCurrent:i.id===this.currentClueId,onPointerDown:()=>this.selectClue(i.id)})))),t("div",{key:"4469227db5156a2d0b30e4dc7ef9ea8f8a1fc3bc",part:"clue-list"},this.vWords.map((i=>t(c,{word:i,isCurrent:i.id===this.currentClueId,onPointerDown:()=>this.selectClue(i.id)}))))),t("div",{key:"965b2e99d1fbf273907f722e8b15749fbd728070",part:"board",style:{"--test":"12","grid-template-columns":`repeat(${this.boardWidth}, 1fr)`}},this.cells.map((i=>{const s=this.isInClue(i),e=this.isSelectedCell(i);return t(a,{isInCurrentClue:s,isSelected:e,data:i})}))),t("div",{key:"3d97bcc65c5eb1d25b60aa5183a7c63f6eecebf9",part:"preview"},"Tu bedzie podgląd: ",this.currentClueId))}static get style(){return'*[part=main]{display:grid;grid-template-areas:"clues board";grid-template-columns:1fr 1fr}*[part=main].--focused{background:lightgrey}[part=clues]{grid-area:clues;display:grid;grid-template-columns:1fr 1fr}[part=clue].--current{background:lightcyan}[part=board]{grid-area:board;display:grid}[part=cell]{aspect-ratio:1;background:#d9d9d9;position:relative;container-type:size}[part=cell]:nth-child(2n){background:#999}[part=cell].--blocked{background:black}[part=cell].--in-current-clue{box-shadow:inset 0 0 2px 2px lightblue}[part=cell].--selected{background:lightblue}[part=cell] ._inner{position:absolute;top:0;left:0;right:0;bottom:0;display:grid;place-content:center;text-transform:uppercase;font-size:80cqh}[part=preview]{display:none}'}},[513,"mb-crossword",{init:[4],data:[16],hWords:[32],vWords:[32],currentClueId:[32],currentClue:[32],isFocused:[32],selectedCell:[32],boardWidth:[32],boardHeight:[32],cells:[32],initGame:[64]}]);function u(){"undefined"!=typeof customElements&&["mb-crossword"].forEach((t=>{"mb-crossword"===t&&(customElements.get(i(t))||customElements.define(i(t),d))}))}u();const p=d,f=u;export{p as MbCrossword,f as defineCustomElement}
|