+1
.envrc
+1
.envrc
···
1
+
use flake
+24
README.md
+24
README.md
···
1
+
# voyagers_bingo
2
+
3
+
[](https://hex.pm/packages/voyagers_bingo)
4
+
[](https://hexdocs.pm/voyagers_bingo/)
5
+
6
+
```sh
7
+
gleam add voyagers_bingo@1
8
+
```
9
+
```gleam
10
+
import voyagers_bingo
11
+
12
+
pub fn main() -> Nil {
13
+
// TODO: An example of the project in use
14
+
}
15
+
```
16
+
17
+
Further documentation can be found at <https://hexdocs.pm/voyagers_bingo>.
18
+
19
+
## Development
20
+
21
+
```sh
22
+
gleam run # Run the project
23
+
gleam test # Run the tests
24
+
```
+27
flake.lock
+27
flake.lock
···
1
+
{
2
+
"nodes": {
3
+
"nixpkgs": {
4
+
"locked": {
5
+
"lastModified": 1754278406,
6
+
"narHash": "sha256-jvIQTMN5EzoOP5RaGztpVese8a3wqy0M/h6tNzycW28=",
7
+
"owner": "NixOS",
8
+
"repo": "nixpkgs",
9
+
"rev": "6a489c9482ca676ce23c0bcd7f2e1795383325fa",
10
+
"type": "github"
11
+
},
12
+
"original": {
13
+
"owner": "NixOS",
14
+
"ref": "nixpkgs-unstable",
15
+
"repo": "nixpkgs",
16
+
"type": "github"
17
+
}
18
+
},
19
+
"root": {
20
+
"inputs": {
21
+
"nixpkgs": "nixpkgs"
22
+
}
23
+
}
24
+
},
25
+
"root": "root",
26
+
"version": 7
27
+
}
+25
flake.nix
+25
flake.nix
···
1
+
{
2
+
inputs = {
3
+
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
4
+
};
5
+
6
+
outputs = {nixpkgs, ...} @ inputs: let
7
+
lib = nixpkgs.lib;
8
+
supportedSystems = ["x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin"];
9
+
forEachSupportedSystem = f:
10
+
lib.genAttrs supportedSystems (system:
11
+
f {
12
+
pkgs = import nixpkgs {inherit system;};
13
+
});
14
+
in {
15
+
devShells = forEachSupportedSystem ({pkgs}: {
16
+
default = pkgs.mkShell {
17
+
packages = with pkgs; [
18
+
gleam
19
+
erlang_28
20
+
beam28Packages.rebar3
21
+
];
22
+
};
23
+
});
24
+
};
25
+
}
+19
gleam.toml
+19
gleam.toml
···
1
+
name = "voyagers_bingo"
2
+
version = "1.0.0"
3
+
4
+
# Fill out these fields if you intend to generate HTML documentation or publish
5
+
# your project to the Hex package manager.
6
+
#
7
+
# description = ""
8
+
# licences = ["Apache-2.0"]
9
+
# repository = { type = "github", user = "", repo = "" }
10
+
# links = [{ title = "Website", href = "" }]
11
+
#
12
+
# For a full reference of all the available options, you can have a look at
13
+
# https://gleam.run/writing-gleam/gleam-toml/.
14
+
15
+
[dependencies]
16
+
gleam_stdlib = ">= 0.44.0 and < 2.0.0"
17
+
18
+
[dev-dependencies]
19
+
gleeunit = ">= 1.0.0 and < 2.0.0"
+11
manifest.toml
+11
manifest.toml
···
1
+
# This file was generated by Gleam
2
+
# You typically do not need to edit this file
3
+
4
+
packages = [
5
+
{ name = "gleam_stdlib", version = "0.62.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "DC8872BC0B8550F6E22F0F698CFE7F1E4BDA7312FDEB40D6C3F44C5B706C8310" },
6
+
{ name = "gleeunit", version = "1.6.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "FDC68A8C492B1E9B429249062CD9BAC9B5538C6FBF584817205D0998C42E1DAC" },
7
+
]
8
+
9
+
[requirements]
10
+
gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" }
11
+
gleeunit = { version = ">= 1.0.0 and < 2.0.0" }
+7847
priv/static/voyagers_bingo.mjs
+7847
priv/static/voyagers_bingo.mjs
···
1
+
// build/dev/javascript/gleam_stdlib/gleam/bool.mjs
2
+
function guard(requirement, consequence, alternative) {
3
+
if (requirement) {
4
+
return consequence;
5
+
} else {
6
+
return alternative();
7
+
}
8
+
}
9
+
function lazy_guard(requirement, consequence, alternative) {
10
+
if (requirement) {
11
+
return consequence();
12
+
} else {
13
+
return alternative();
14
+
}
15
+
}
16
+
17
+
// build/dev/javascript/prelude.mjs
18
+
var CustomType = class {
19
+
withFields(fields) {
20
+
let properties = Object.keys(this).map(
21
+
(label) => label in fields ? fields[label] : this[label]
22
+
);
23
+
return new this.constructor(...properties);
24
+
}
25
+
};
26
+
var List = class {
27
+
static fromArray(array4, tail) {
28
+
let t = tail || new Empty();
29
+
for (let i = array4.length - 1; i >= 0; --i) {
30
+
t = new NonEmpty(array4[i], t);
31
+
}
32
+
return t;
33
+
}
34
+
[Symbol.iterator]() {
35
+
return new ListIterator(this);
36
+
}
37
+
toArray() {
38
+
return [...this];
39
+
}
40
+
// @internal
41
+
atLeastLength(desired) {
42
+
let current = this;
43
+
while (desired-- > 0 && current) current = current.tail;
44
+
return current !== void 0;
45
+
}
46
+
// @internal
47
+
hasLength(desired) {
48
+
let current = this;
49
+
while (desired-- > 0 && current) current = current.tail;
50
+
return desired === -1 && current instanceof Empty;
51
+
}
52
+
// @internal
53
+
countLength() {
54
+
let current = this;
55
+
let length4 = 0;
56
+
while (current) {
57
+
current = current.tail;
58
+
length4++;
59
+
}
60
+
return length4 - 1;
61
+
}
62
+
};
63
+
function prepend(element4, tail) {
64
+
return new NonEmpty(element4, tail);
65
+
}
66
+
function toList(elements, tail) {
67
+
return List.fromArray(elements, tail);
68
+
}
69
+
var ListIterator = class {
70
+
#current;
71
+
constructor(current) {
72
+
this.#current = current;
73
+
}
74
+
next() {
75
+
if (this.#current instanceof Empty) {
76
+
return { done: true };
77
+
} else {
78
+
let { head, tail } = this.#current;
79
+
this.#current = tail;
80
+
return { value: head, done: false };
81
+
}
82
+
}
83
+
};
84
+
var Empty = class extends List {
85
+
};
86
+
var NonEmpty = class extends List {
87
+
constructor(head, tail) {
88
+
super();
89
+
this.head = head;
90
+
this.tail = tail;
91
+
}
92
+
};
93
+
var BitArray = class {
94
+
/**
95
+
* The size in bits of this bit array's data.
96
+
*
97
+
* @type {number}
98
+
*/
99
+
bitSize;
100
+
/**
101
+
* The size in bytes of this bit array's data. If this bit array doesn't store
102
+
* a whole number of bytes then this value is rounded up.
103
+
*
104
+
* @type {number}
105
+
*/
106
+
byteSize;
107
+
/**
108
+
* The number of unused high bits in the first byte of this bit array's
109
+
* buffer prior to the start of its data. The value of any unused high bits is
110
+
* undefined.
111
+
*
112
+
* The bit offset will be in the range 0-7.
113
+
*
114
+
* @type {number}
115
+
*/
116
+
bitOffset;
117
+
/**
118
+
* The raw bytes that hold this bit array's data.
119
+
*
120
+
* If `bitOffset` is not zero then there are unused high bits in the first
121
+
* byte of this buffer.
122
+
*
123
+
* If `bitOffset + bitSize` is not a multiple of 8 then there are unused low
124
+
* bits in the last byte of this buffer.
125
+
*
126
+
* @type {Uint8Array}
127
+
*/
128
+
rawBuffer;
129
+
/**
130
+
* Constructs a new bit array from a `Uint8Array`, an optional size in
131
+
* bits, and an optional bit offset.
132
+
*
133
+
* If no bit size is specified it is taken as `buffer.length * 8`, i.e. all
134
+
* bytes in the buffer make up the new bit array's data.
135
+
*
136
+
* If no bit offset is specified it defaults to zero, i.e. there are no unused
137
+
* high bits in the first byte of the buffer.
138
+
*
139
+
* @param {Uint8Array} buffer
140
+
* @param {number} [bitSize]
141
+
* @param {number} [bitOffset]
142
+
*/
143
+
constructor(buffer, bitSize, bitOffset) {
144
+
if (!(buffer instanceof Uint8Array)) {
145
+
throw globalThis.Error(
146
+
"BitArray can only be constructed from a Uint8Array"
147
+
);
148
+
}
149
+
this.bitSize = bitSize ?? buffer.length * 8;
150
+
this.byteSize = Math.trunc((this.bitSize + 7) / 8);
151
+
this.bitOffset = bitOffset ?? 0;
152
+
if (this.bitSize < 0) {
153
+
throw globalThis.Error(`BitArray bit size is invalid: ${this.bitSize}`);
154
+
}
155
+
if (this.bitOffset < 0 || this.bitOffset > 7) {
156
+
throw globalThis.Error(
157
+
`BitArray bit offset is invalid: ${this.bitOffset}`
158
+
);
159
+
}
160
+
if (buffer.length !== Math.trunc((this.bitOffset + this.bitSize + 7) / 8)) {
161
+
throw globalThis.Error("BitArray buffer length is invalid");
162
+
}
163
+
this.rawBuffer = buffer;
164
+
}
165
+
/**
166
+
* Returns a specific byte in this bit array. If the byte index is out of
167
+
* range then `undefined` is returned.
168
+
*
169
+
* When returning the final byte of a bit array with a bit size that's not a
170
+
* multiple of 8, the content of the unused low bits are undefined.
171
+
*
172
+
* @param {number} index
173
+
* @returns {number | undefined}
174
+
*/
175
+
byteAt(index4) {
176
+
if (index4 < 0 || index4 >= this.byteSize) {
177
+
return void 0;
178
+
}
179
+
return bitArrayByteAt(this.rawBuffer, this.bitOffset, index4);
180
+
}
181
+
/** @internal */
182
+
equals(other) {
183
+
if (this.bitSize !== other.bitSize) {
184
+
return false;
185
+
}
186
+
const wholeByteCount = Math.trunc(this.bitSize / 8);
187
+
if (this.bitOffset === 0 && other.bitOffset === 0) {
188
+
for (let i = 0; i < wholeByteCount; i++) {
189
+
if (this.rawBuffer[i] !== other.rawBuffer[i]) {
190
+
return false;
191
+
}
192
+
}
193
+
const trailingBitsCount = this.bitSize % 8;
194
+
if (trailingBitsCount) {
195
+
const unusedLowBitCount = 8 - trailingBitsCount;
196
+
if (this.rawBuffer[wholeByteCount] >> unusedLowBitCount !== other.rawBuffer[wholeByteCount] >> unusedLowBitCount) {
197
+
return false;
198
+
}
199
+
}
200
+
} else {
201
+
for (let i = 0; i < wholeByteCount; i++) {
202
+
const a = bitArrayByteAt(this.rawBuffer, this.bitOffset, i);
203
+
const b = bitArrayByteAt(other.rawBuffer, other.bitOffset, i);
204
+
if (a !== b) {
205
+
return false;
206
+
}
207
+
}
208
+
const trailingBitsCount = this.bitSize % 8;
209
+
if (trailingBitsCount) {
210
+
const a = bitArrayByteAt(
211
+
this.rawBuffer,
212
+
this.bitOffset,
213
+
wholeByteCount
214
+
);
215
+
const b = bitArrayByteAt(
216
+
other.rawBuffer,
217
+
other.bitOffset,
218
+
wholeByteCount
219
+
);
220
+
const unusedLowBitCount = 8 - trailingBitsCount;
221
+
if (a >> unusedLowBitCount !== b >> unusedLowBitCount) {
222
+
return false;
223
+
}
224
+
}
225
+
}
226
+
return true;
227
+
}
228
+
/**
229
+
* Returns this bit array's internal buffer.
230
+
*
231
+
* @deprecated Use `BitArray.byteAt()` or `BitArray.rawBuffer` instead.
232
+
*
233
+
* @returns {Uint8Array}
234
+
*/
235
+
get buffer() {
236
+
bitArrayPrintDeprecationWarning(
237
+
"buffer",
238
+
"Use BitArray.byteAt() or BitArray.rawBuffer instead"
239
+
);
240
+
if (this.bitOffset !== 0 || this.bitSize % 8 !== 0) {
241
+
throw new globalThis.Error(
242
+
"BitArray.buffer does not support unaligned bit arrays"
243
+
);
244
+
}
245
+
return this.rawBuffer;
246
+
}
247
+
/**
248
+
* Returns the length in bytes of this bit array's internal buffer.
249
+
*
250
+
* @deprecated Use `BitArray.bitSize` or `BitArray.byteSize` instead.
251
+
*
252
+
* @returns {number}
253
+
*/
254
+
get length() {
255
+
bitArrayPrintDeprecationWarning(
256
+
"length",
257
+
"Use BitArray.bitSize or BitArray.byteSize instead"
258
+
);
259
+
if (this.bitOffset !== 0 || this.bitSize % 8 !== 0) {
260
+
throw new globalThis.Error(
261
+
"BitArray.length does not support unaligned bit arrays"
262
+
);
263
+
}
264
+
return this.rawBuffer.length;
265
+
}
266
+
};
267
+
function bitArrayByteAt(buffer, bitOffset, index4) {
268
+
if (bitOffset === 0) {
269
+
return buffer[index4] ?? 0;
270
+
} else {
271
+
const a = buffer[index4] << bitOffset & 255;
272
+
const b = buffer[index4 + 1] >> 8 - bitOffset;
273
+
return a | b;
274
+
}
275
+
}
276
+
var UtfCodepoint = class {
277
+
constructor(value) {
278
+
this.value = value;
279
+
}
280
+
};
281
+
var isBitArrayDeprecationMessagePrinted = {};
282
+
function bitArrayPrintDeprecationWarning(name, message) {
283
+
if (isBitArrayDeprecationMessagePrinted[name]) {
284
+
return;
285
+
}
286
+
console.warn(
287
+
`Deprecated BitArray.${name} property used in JavaScript FFI code. ${message}.`
288
+
);
289
+
isBitArrayDeprecationMessagePrinted[name] = true;
290
+
}
291
+
function toBitArray(segments) {
292
+
if (segments.length === 0) {
293
+
return new BitArray(new Uint8Array());
294
+
}
295
+
if (segments.length === 1) {
296
+
const segment = segments[0];
297
+
if (segment instanceof BitArray) {
298
+
return segment;
299
+
}
300
+
if (segment instanceof Uint8Array) {
301
+
return new BitArray(segment);
302
+
}
303
+
return new BitArray(new Uint8Array(
304
+
/** @type {number[]} */
305
+
segments
306
+
));
307
+
}
308
+
let bitSize = 0;
309
+
let areAllSegmentsNumbers = true;
310
+
for (const segment of segments) {
311
+
if (segment instanceof BitArray) {
312
+
bitSize += segment.bitSize;
313
+
areAllSegmentsNumbers = false;
314
+
} else if (segment instanceof Uint8Array) {
315
+
bitSize += segment.byteLength * 8;
316
+
areAllSegmentsNumbers = false;
317
+
} else {
318
+
bitSize += 8;
319
+
}
320
+
}
321
+
if (areAllSegmentsNumbers) {
322
+
return new BitArray(new Uint8Array(
323
+
/** @type {number[]} */
324
+
segments
325
+
));
326
+
}
327
+
const buffer = new Uint8Array(Math.trunc((bitSize + 7) / 8));
328
+
let cursor = 0;
329
+
for (let segment of segments) {
330
+
const isCursorByteAligned = cursor % 8 === 0;
331
+
if (segment instanceof BitArray) {
332
+
if (isCursorByteAligned && segment.bitOffset === 0) {
333
+
buffer.set(segment.rawBuffer, cursor / 8);
334
+
cursor += segment.bitSize;
335
+
const trailingBitsCount = segment.bitSize % 8;
336
+
if (trailingBitsCount !== 0) {
337
+
const lastByteIndex = Math.trunc(cursor / 8);
338
+
buffer[lastByteIndex] >>= 8 - trailingBitsCount;
339
+
buffer[lastByteIndex] <<= 8 - trailingBitsCount;
340
+
}
341
+
} else {
342
+
appendUnalignedBits(
343
+
segment.rawBuffer,
344
+
segment.bitSize,
345
+
segment.bitOffset
346
+
);
347
+
}
348
+
} else if (segment instanceof Uint8Array) {
349
+
if (isCursorByteAligned) {
350
+
buffer.set(segment, cursor / 8);
351
+
cursor += segment.byteLength * 8;
352
+
} else {
353
+
appendUnalignedBits(segment, segment.byteLength * 8, 0);
354
+
}
355
+
} else {
356
+
if (isCursorByteAligned) {
357
+
buffer[cursor / 8] = segment;
358
+
cursor += 8;
359
+
} else {
360
+
appendUnalignedBits(new Uint8Array([segment]), 8, 0);
361
+
}
362
+
}
363
+
}
364
+
function appendUnalignedBits(unalignedBits, size3, offset) {
365
+
if (size3 === 0) {
366
+
return;
367
+
}
368
+
const byteSize = Math.trunc(size3 + 7 / 8);
369
+
const highBitsCount = cursor % 8;
370
+
const lowBitsCount = 8 - highBitsCount;
371
+
let byteIndex = Math.trunc(cursor / 8);
372
+
for (let i = 0; i < byteSize; i++) {
373
+
let byte = bitArrayByteAt(unalignedBits, offset, i);
374
+
if (size3 < 8) {
375
+
byte >>= 8 - size3;
376
+
byte <<= 8 - size3;
377
+
}
378
+
buffer[byteIndex] |= byte >> highBitsCount;
379
+
let appendedBitsCount = size3 - Math.max(0, size3 - lowBitsCount);
380
+
size3 -= appendedBitsCount;
381
+
cursor += appendedBitsCount;
382
+
if (size3 === 0) {
383
+
break;
384
+
}
385
+
buffer[++byteIndex] = byte << lowBitsCount;
386
+
appendedBitsCount = size3 - Math.max(0, size3 - highBitsCount);
387
+
size3 -= appendedBitsCount;
388
+
cursor += appendedBitsCount;
389
+
}
390
+
}
391
+
return new BitArray(buffer, bitSize);
392
+
}
393
+
function sizedInt(value, size3, isBigEndian) {
394
+
if (size3 <= 0) {
395
+
return new Uint8Array();
396
+
}
397
+
if (size3 === 8) {
398
+
return new Uint8Array([value]);
399
+
}
400
+
if (size3 < 8) {
401
+
value <<= 8 - size3;
402
+
return new BitArray(new Uint8Array([value]), size3);
403
+
}
404
+
const buffer = new Uint8Array(Math.trunc((size3 + 7) / 8));
405
+
const trailingBitsCount = size3 % 8;
406
+
const unusedBitsCount = 8 - trailingBitsCount;
407
+
if (size3 <= 32) {
408
+
if (isBigEndian) {
409
+
let i = buffer.length - 1;
410
+
if (trailingBitsCount) {
411
+
buffer[i--] = value << unusedBitsCount & 255;
412
+
value >>= trailingBitsCount;
413
+
}
414
+
for (; i >= 0; i--) {
415
+
buffer[i] = value;
416
+
value >>= 8;
417
+
}
418
+
} else {
419
+
let i = 0;
420
+
const wholeByteCount = Math.trunc(size3 / 8);
421
+
for (; i < wholeByteCount; i++) {
422
+
buffer[i] = value;
423
+
value >>= 8;
424
+
}
425
+
if (trailingBitsCount) {
426
+
buffer[i] = value << unusedBitsCount;
427
+
}
428
+
}
429
+
} else {
430
+
const bigTrailingBitsCount = BigInt(trailingBitsCount);
431
+
const bigUnusedBitsCount = BigInt(unusedBitsCount);
432
+
let bigValue = BigInt(value);
433
+
if (isBigEndian) {
434
+
let i = buffer.length - 1;
435
+
if (trailingBitsCount) {
436
+
buffer[i--] = Number(bigValue << bigUnusedBitsCount);
437
+
bigValue >>= bigTrailingBitsCount;
438
+
}
439
+
for (; i >= 0; i--) {
440
+
buffer[i] = Number(bigValue);
441
+
bigValue >>= 8n;
442
+
}
443
+
} else {
444
+
let i = 0;
445
+
const wholeByteCount = Math.trunc(size3 / 8);
446
+
for (; i < wholeByteCount; i++) {
447
+
buffer[i] = Number(bigValue);
448
+
bigValue >>= 8n;
449
+
}
450
+
if (trailingBitsCount) {
451
+
buffer[i] = Number(bigValue << bigUnusedBitsCount);
452
+
}
453
+
}
454
+
}
455
+
if (trailingBitsCount) {
456
+
return new BitArray(buffer, size3);
457
+
}
458
+
return buffer;
459
+
}
460
+
var Result = class _Result extends CustomType {
461
+
// @internal
462
+
static isResult(data) {
463
+
return data instanceof _Result;
464
+
}
465
+
};
466
+
var Ok = class extends Result {
467
+
constructor(value) {
468
+
super();
469
+
this[0] = value;
470
+
}
471
+
// @internal
472
+
isOk() {
473
+
return true;
474
+
}
475
+
};
476
+
var Error = class extends Result {
477
+
constructor(detail) {
478
+
super();
479
+
this[0] = detail;
480
+
}
481
+
// @internal
482
+
isOk() {
483
+
return false;
484
+
}
485
+
};
486
+
function isEqual(x, y) {
487
+
let values3 = [x, y];
488
+
while (values3.length) {
489
+
let a = values3.pop();
490
+
let b = values3.pop();
491
+
if (a === b) continue;
492
+
if (!isObject(a) || !isObject(b)) return false;
493
+
let unequal = !structurallyCompatibleObjects(a, b) || unequalDates(a, b) || unequalBuffers(a, b) || unequalArrays(a, b) || unequalMaps(a, b) || unequalSets(a, b) || unequalRegExps(a, b);
494
+
if (unequal) return false;
495
+
const proto = Object.getPrototypeOf(a);
496
+
if (proto !== null && typeof proto.equals === "function") {
497
+
try {
498
+
if (a.equals(b)) continue;
499
+
else return false;
500
+
} catch {
501
+
}
502
+
}
503
+
let [keys2, get4] = getters(a);
504
+
for (let k of keys2(a)) {
505
+
values3.push(get4(a, k), get4(b, k));
506
+
}
507
+
}
508
+
return true;
509
+
}
510
+
function getters(object4) {
511
+
if (object4 instanceof Map) {
512
+
return [(x) => x.keys(), (x, y) => x.get(y)];
513
+
} else {
514
+
let extra = object4 instanceof globalThis.Error ? ["message"] : [];
515
+
return [(x) => [...extra, ...Object.keys(x)], (x, y) => x[y]];
516
+
}
517
+
}
518
+
function unequalDates(a, b) {
519
+
return a instanceof Date && (a > b || a < b);
520
+
}
521
+
function unequalBuffers(a, b) {
522
+
return !(a instanceof BitArray) && a.buffer instanceof ArrayBuffer && a.BYTES_PER_ELEMENT && !(a.byteLength === b.byteLength && a.every((n, i) => n === b[i]));
523
+
}
524
+
function unequalArrays(a, b) {
525
+
return Array.isArray(a) && a.length !== b.length;
526
+
}
527
+
function unequalMaps(a, b) {
528
+
return a instanceof Map && a.size !== b.size;
529
+
}
530
+
function unequalSets(a, b) {
531
+
return a instanceof Set && (a.size != b.size || [...a].some((e) => !b.has(e)));
532
+
}
533
+
function unequalRegExps(a, b) {
534
+
return a instanceof RegExp && (a.source !== b.source || a.flags !== b.flags);
535
+
}
536
+
function isObject(a) {
537
+
return typeof a === "object" && a !== null;
538
+
}
539
+
function structurallyCompatibleObjects(a, b) {
540
+
if (typeof a !== "object" && typeof b !== "object" && (!a || !b))
541
+
return false;
542
+
let nonstructural = [Promise, WeakSet, WeakMap, Function];
543
+
if (nonstructural.some((c) => a instanceof c)) return false;
544
+
return a.constructor === b.constructor;
545
+
}
546
+
function makeError(variant, file, module, line, fn, message, extra) {
547
+
let error = new globalThis.Error(message);
548
+
error.gleam_error = variant;
549
+
error.file = file;
550
+
error.module = module;
551
+
error.line = line;
552
+
error.function = fn;
553
+
error.fn = fn;
554
+
for (let k in extra) error[k] = extra[k];
555
+
return error;
556
+
}
557
+
558
+
// build/dev/javascript/gleam_stdlib/gleam/order.mjs
559
+
var Lt = class extends CustomType {
560
+
};
561
+
var Eq = class extends CustomType {
562
+
};
563
+
var Gt = class extends CustomType {
564
+
};
565
+
566
+
// build/dev/javascript/gleam_stdlib/gleam/option.mjs
567
+
var Some = class extends CustomType {
568
+
constructor($0) {
569
+
super();
570
+
this[0] = $0;
571
+
}
572
+
};
573
+
var None = class extends CustomType {
574
+
};
575
+
function unwrap(option, default$) {
576
+
if (option instanceof Some) {
577
+
let x = option[0];
578
+
return x;
579
+
} else {
580
+
return default$;
581
+
}
582
+
}
583
+
function lazy_unwrap(option, default$) {
584
+
if (option instanceof Some) {
585
+
let x = option[0];
586
+
return x;
587
+
} else {
588
+
return default$();
589
+
}
590
+
}
591
+
592
+
// build/dev/javascript/gleam_stdlib/dict.mjs
593
+
var referenceMap = /* @__PURE__ */ new WeakMap();
594
+
var tempDataView = /* @__PURE__ */ new DataView(
595
+
/* @__PURE__ */ new ArrayBuffer(8)
596
+
);
597
+
var referenceUID = 0;
598
+
function hashByReference(o) {
599
+
const known = referenceMap.get(o);
600
+
if (known !== void 0) {
601
+
return known;
602
+
}
603
+
const hash = referenceUID++;
604
+
if (referenceUID === 2147483647) {
605
+
referenceUID = 0;
606
+
}
607
+
referenceMap.set(o, hash);
608
+
return hash;
609
+
}
610
+
function hashMerge(a, b) {
611
+
return a ^ b + 2654435769 + (a << 6) + (a >> 2) | 0;
612
+
}
613
+
function hashString(s) {
614
+
let hash = 0;
615
+
const len = s.length;
616
+
for (let i = 0; i < len; i++) {
617
+
hash = Math.imul(31, hash) + s.charCodeAt(i) | 0;
618
+
}
619
+
return hash;
620
+
}
621
+
function hashNumber(n) {
622
+
tempDataView.setFloat64(0, n);
623
+
const i = tempDataView.getInt32(0);
624
+
const j = tempDataView.getInt32(4);
625
+
return Math.imul(73244475, i >> 16 ^ i) ^ j;
626
+
}
627
+
function hashBigInt(n) {
628
+
return hashString(n.toString());
629
+
}
630
+
function hashObject(o) {
631
+
const proto = Object.getPrototypeOf(o);
632
+
if (proto !== null && typeof proto.hashCode === "function") {
633
+
try {
634
+
const code = o.hashCode(o);
635
+
if (typeof code === "number") {
636
+
return code;
637
+
}
638
+
} catch {
639
+
}
640
+
}
641
+
if (o instanceof Promise || o instanceof WeakSet || o instanceof WeakMap) {
642
+
return hashByReference(o);
643
+
}
644
+
if (o instanceof Date) {
645
+
return hashNumber(o.getTime());
646
+
}
647
+
let h = 0;
648
+
if (o instanceof ArrayBuffer) {
649
+
o = new Uint8Array(o);
650
+
}
651
+
if (Array.isArray(o) || o instanceof Uint8Array) {
652
+
for (let i = 0; i < o.length; i++) {
653
+
h = Math.imul(31, h) + getHash(o[i]) | 0;
654
+
}
655
+
} else if (o instanceof Set) {
656
+
o.forEach((v) => {
657
+
h = h + getHash(v) | 0;
658
+
});
659
+
} else if (o instanceof Map) {
660
+
o.forEach((v, k) => {
661
+
h = h + hashMerge(getHash(v), getHash(k)) | 0;
662
+
});
663
+
} else {
664
+
const keys2 = Object.keys(o);
665
+
for (let i = 0; i < keys2.length; i++) {
666
+
const k = keys2[i];
667
+
const v = o[k];
668
+
h = h + hashMerge(getHash(v), hashString(k)) | 0;
669
+
}
670
+
}
671
+
return h;
672
+
}
673
+
function getHash(u) {
674
+
if (u === null) return 1108378658;
675
+
if (u === void 0) return 1108378659;
676
+
if (u === true) return 1108378657;
677
+
if (u === false) return 1108378656;
678
+
switch (typeof u) {
679
+
case "number":
680
+
return hashNumber(u);
681
+
case "string":
682
+
return hashString(u);
683
+
case "bigint":
684
+
return hashBigInt(u);
685
+
case "object":
686
+
return hashObject(u);
687
+
case "symbol":
688
+
return hashByReference(u);
689
+
case "function":
690
+
return hashByReference(u);
691
+
default:
692
+
return 0;
693
+
}
694
+
}
695
+
var SHIFT = 5;
696
+
var BUCKET_SIZE = Math.pow(2, SHIFT);
697
+
var MASK = BUCKET_SIZE - 1;
698
+
var MAX_INDEX_NODE = BUCKET_SIZE / 2;
699
+
var MIN_ARRAY_NODE = BUCKET_SIZE / 4;
700
+
var ENTRY = 0;
701
+
var ARRAY_NODE = 1;
702
+
var INDEX_NODE = 2;
703
+
var COLLISION_NODE = 3;
704
+
var EMPTY = {
705
+
type: INDEX_NODE,
706
+
bitmap: 0,
707
+
array: []
708
+
};
709
+
function mask(hash, shift) {
710
+
return hash >>> shift & MASK;
711
+
}
712
+
function bitpos(hash, shift) {
713
+
return 1 << mask(hash, shift);
714
+
}
715
+
function bitcount(x) {
716
+
x -= x >> 1 & 1431655765;
717
+
x = (x & 858993459) + (x >> 2 & 858993459);
718
+
x = x + (x >> 4) & 252645135;
719
+
x += x >> 8;
720
+
x += x >> 16;
721
+
return x & 127;
722
+
}
723
+
function index(bitmap, bit) {
724
+
return bitcount(bitmap & bit - 1);
725
+
}
726
+
function cloneAndSet(arr, at, val) {
727
+
const len = arr.length;
728
+
const out = new Array(len);
729
+
for (let i = 0; i < len; ++i) {
730
+
out[i] = arr[i];
731
+
}
732
+
out[at] = val;
733
+
return out;
734
+
}
735
+
function spliceIn(arr, at, val) {
736
+
const len = arr.length;
737
+
const out = new Array(len + 1);
738
+
let i = 0;
739
+
let g = 0;
740
+
while (i < at) {
741
+
out[g++] = arr[i++];
742
+
}
743
+
out[g++] = val;
744
+
while (i < len) {
745
+
out[g++] = arr[i++];
746
+
}
747
+
return out;
748
+
}
749
+
function spliceOut(arr, at) {
750
+
const len = arr.length;
751
+
const out = new Array(len - 1);
752
+
let i = 0;
753
+
let g = 0;
754
+
while (i < at) {
755
+
out[g++] = arr[i++];
756
+
}
757
+
++i;
758
+
while (i < len) {
759
+
out[g++] = arr[i++];
760
+
}
761
+
return out;
762
+
}
763
+
function createNode(shift, key1, val1, key2hash, key2, val2) {
764
+
const key1hash = getHash(key1);
765
+
if (key1hash === key2hash) {
766
+
return {
767
+
type: COLLISION_NODE,
768
+
hash: key1hash,
769
+
array: [
770
+
{ type: ENTRY, k: key1, v: val1 },
771
+
{ type: ENTRY, k: key2, v: val2 }
772
+
]
773
+
};
774
+
}
775
+
const addedLeaf = { val: false };
776
+
return assoc(
777
+
assocIndex(EMPTY, shift, key1hash, key1, val1, addedLeaf),
778
+
shift,
779
+
key2hash,
780
+
key2,
781
+
val2,
782
+
addedLeaf
783
+
);
784
+
}
785
+
function assoc(root3, shift, hash, key, val, addedLeaf) {
786
+
switch (root3.type) {
787
+
case ARRAY_NODE:
788
+
return assocArray(root3, shift, hash, key, val, addedLeaf);
789
+
case INDEX_NODE:
790
+
return assocIndex(root3, shift, hash, key, val, addedLeaf);
791
+
case COLLISION_NODE:
792
+
return assocCollision(root3, shift, hash, key, val, addedLeaf);
793
+
}
794
+
}
795
+
function assocArray(root3, shift, hash, key, val, addedLeaf) {
796
+
const idx = mask(hash, shift);
797
+
const node2 = root3.array[idx];
798
+
if (node2 === void 0) {
799
+
addedLeaf.val = true;
800
+
return {
801
+
type: ARRAY_NODE,
802
+
size: root3.size + 1,
803
+
array: cloneAndSet(root3.array, idx, { type: ENTRY, k: key, v: val })
804
+
};
805
+
}
806
+
if (node2.type === ENTRY) {
807
+
if (isEqual(key, node2.k)) {
808
+
if (val === node2.v) {
809
+
return root3;
810
+
}
811
+
return {
812
+
type: ARRAY_NODE,
813
+
size: root3.size,
814
+
array: cloneAndSet(root3.array, idx, {
815
+
type: ENTRY,
816
+
k: key,
817
+
v: val
818
+
})
819
+
};
820
+
}
821
+
addedLeaf.val = true;
822
+
return {
823
+
type: ARRAY_NODE,
824
+
size: root3.size,
825
+
array: cloneAndSet(
826
+
root3.array,
827
+
idx,
828
+
createNode(shift + SHIFT, node2.k, node2.v, hash, key, val)
829
+
)
830
+
};
831
+
}
832
+
const n = assoc(node2, shift + SHIFT, hash, key, val, addedLeaf);
833
+
if (n === node2) {
834
+
return root3;
835
+
}
836
+
return {
837
+
type: ARRAY_NODE,
838
+
size: root3.size,
839
+
array: cloneAndSet(root3.array, idx, n)
840
+
};
841
+
}
842
+
function assocIndex(root3, shift, hash, key, val, addedLeaf) {
843
+
const bit = bitpos(hash, shift);
844
+
const idx = index(root3.bitmap, bit);
845
+
if ((root3.bitmap & bit) !== 0) {
846
+
const node2 = root3.array[idx];
847
+
if (node2.type !== ENTRY) {
848
+
const n = assoc(node2, shift + SHIFT, hash, key, val, addedLeaf);
849
+
if (n === node2) {
850
+
return root3;
851
+
}
852
+
return {
853
+
type: INDEX_NODE,
854
+
bitmap: root3.bitmap,
855
+
array: cloneAndSet(root3.array, idx, n)
856
+
};
857
+
}
858
+
const nodeKey = node2.k;
859
+
if (isEqual(key, nodeKey)) {
860
+
if (val === node2.v) {
861
+
return root3;
862
+
}
863
+
return {
864
+
type: INDEX_NODE,
865
+
bitmap: root3.bitmap,
866
+
array: cloneAndSet(root3.array, idx, {
867
+
type: ENTRY,
868
+
k: key,
869
+
v: val
870
+
})
871
+
};
872
+
}
873
+
addedLeaf.val = true;
874
+
return {
875
+
type: INDEX_NODE,
876
+
bitmap: root3.bitmap,
877
+
array: cloneAndSet(
878
+
root3.array,
879
+
idx,
880
+
createNode(shift + SHIFT, nodeKey, node2.v, hash, key, val)
881
+
)
882
+
};
883
+
} else {
884
+
const n = root3.array.length;
885
+
if (n >= MAX_INDEX_NODE) {
886
+
const nodes = new Array(32);
887
+
const jdx = mask(hash, shift);
888
+
nodes[jdx] = assocIndex(EMPTY, shift + SHIFT, hash, key, val, addedLeaf);
889
+
let j = 0;
890
+
let bitmap = root3.bitmap;
891
+
for (let i = 0; i < 32; i++) {
892
+
if ((bitmap & 1) !== 0) {
893
+
const node2 = root3.array[j++];
894
+
nodes[i] = node2;
895
+
}
896
+
bitmap = bitmap >>> 1;
897
+
}
898
+
return {
899
+
type: ARRAY_NODE,
900
+
size: n + 1,
901
+
array: nodes
902
+
};
903
+
} else {
904
+
const newArray = spliceIn(root3.array, idx, {
905
+
type: ENTRY,
906
+
k: key,
907
+
v: val
908
+
});
909
+
addedLeaf.val = true;
910
+
return {
911
+
type: INDEX_NODE,
912
+
bitmap: root3.bitmap | bit,
913
+
array: newArray
914
+
};
915
+
}
916
+
}
917
+
}
918
+
function assocCollision(root3, shift, hash, key, val, addedLeaf) {
919
+
if (hash === root3.hash) {
920
+
const idx = collisionIndexOf(root3, key);
921
+
if (idx !== -1) {
922
+
const entry = root3.array[idx];
923
+
if (entry.v === val) {
924
+
return root3;
925
+
}
926
+
return {
927
+
type: COLLISION_NODE,
928
+
hash,
929
+
array: cloneAndSet(root3.array, idx, { type: ENTRY, k: key, v: val })
930
+
};
931
+
}
932
+
const size3 = root3.array.length;
933
+
addedLeaf.val = true;
934
+
return {
935
+
type: COLLISION_NODE,
936
+
hash,
937
+
array: cloneAndSet(root3.array, size3, { type: ENTRY, k: key, v: val })
938
+
};
939
+
}
940
+
return assoc(
941
+
{
942
+
type: INDEX_NODE,
943
+
bitmap: bitpos(root3.hash, shift),
944
+
array: [root3]
945
+
},
946
+
shift,
947
+
hash,
948
+
key,
949
+
val,
950
+
addedLeaf
951
+
);
952
+
}
953
+
function collisionIndexOf(root3, key) {
954
+
const size3 = root3.array.length;
955
+
for (let i = 0; i < size3; i++) {
956
+
if (isEqual(key, root3.array[i].k)) {
957
+
return i;
958
+
}
959
+
}
960
+
return -1;
961
+
}
962
+
function find(root3, shift, hash, key) {
963
+
switch (root3.type) {
964
+
case ARRAY_NODE:
965
+
return findArray(root3, shift, hash, key);
966
+
case INDEX_NODE:
967
+
return findIndex(root3, shift, hash, key);
968
+
case COLLISION_NODE:
969
+
return findCollision(root3, key);
970
+
}
971
+
}
972
+
function findArray(root3, shift, hash, key) {
973
+
const idx = mask(hash, shift);
974
+
const node2 = root3.array[idx];
975
+
if (node2 === void 0) {
976
+
return void 0;
977
+
}
978
+
if (node2.type !== ENTRY) {
979
+
return find(node2, shift + SHIFT, hash, key);
980
+
}
981
+
if (isEqual(key, node2.k)) {
982
+
return node2;
983
+
}
984
+
return void 0;
985
+
}
986
+
function findIndex(root3, shift, hash, key) {
987
+
const bit = bitpos(hash, shift);
988
+
if ((root3.bitmap & bit) === 0) {
989
+
return void 0;
990
+
}
991
+
const idx = index(root3.bitmap, bit);
992
+
const node2 = root3.array[idx];
993
+
if (node2.type !== ENTRY) {
994
+
return find(node2, shift + SHIFT, hash, key);
995
+
}
996
+
if (isEqual(key, node2.k)) {
997
+
return node2;
998
+
}
999
+
return void 0;
1000
+
}
1001
+
function findCollision(root3, key) {
1002
+
const idx = collisionIndexOf(root3, key);
1003
+
if (idx < 0) {
1004
+
return void 0;
1005
+
}
1006
+
return root3.array[idx];
1007
+
}
1008
+
function without(root3, shift, hash, key) {
1009
+
switch (root3.type) {
1010
+
case ARRAY_NODE:
1011
+
return withoutArray(root3, shift, hash, key);
1012
+
case INDEX_NODE:
1013
+
return withoutIndex(root3, shift, hash, key);
1014
+
case COLLISION_NODE:
1015
+
return withoutCollision(root3, key);
1016
+
}
1017
+
}
1018
+
function withoutArray(root3, shift, hash, key) {
1019
+
const idx = mask(hash, shift);
1020
+
const node2 = root3.array[idx];
1021
+
if (node2 === void 0) {
1022
+
return root3;
1023
+
}
1024
+
let n = void 0;
1025
+
if (node2.type === ENTRY) {
1026
+
if (!isEqual(node2.k, key)) {
1027
+
return root3;
1028
+
}
1029
+
} else {
1030
+
n = without(node2, shift + SHIFT, hash, key);
1031
+
if (n === node2) {
1032
+
return root3;
1033
+
}
1034
+
}
1035
+
if (n === void 0) {
1036
+
if (root3.size <= MIN_ARRAY_NODE) {
1037
+
const arr = root3.array;
1038
+
const out = new Array(root3.size - 1);
1039
+
let i = 0;
1040
+
let j = 0;
1041
+
let bitmap = 0;
1042
+
while (i < idx) {
1043
+
const nv = arr[i];
1044
+
if (nv !== void 0) {
1045
+
out[j] = nv;
1046
+
bitmap |= 1 << i;
1047
+
++j;
1048
+
}
1049
+
++i;
1050
+
}
1051
+
++i;
1052
+
while (i < arr.length) {
1053
+
const nv = arr[i];
1054
+
if (nv !== void 0) {
1055
+
out[j] = nv;
1056
+
bitmap |= 1 << i;
1057
+
++j;
1058
+
}
1059
+
++i;
1060
+
}
1061
+
return {
1062
+
type: INDEX_NODE,
1063
+
bitmap,
1064
+
array: out
1065
+
};
1066
+
}
1067
+
return {
1068
+
type: ARRAY_NODE,
1069
+
size: root3.size - 1,
1070
+
array: cloneAndSet(root3.array, idx, n)
1071
+
};
1072
+
}
1073
+
return {
1074
+
type: ARRAY_NODE,
1075
+
size: root3.size,
1076
+
array: cloneAndSet(root3.array, idx, n)
1077
+
};
1078
+
}
1079
+
function withoutIndex(root3, shift, hash, key) {
1080
+
const bit = bitpos(hash, shift);
1081
+
if ((root3.bitmap & bit) === 0) {
1082
+
return root3;
1083
+
}
1084
+
const idx = index(root3.bitmap, bit);
1085
+
const node2 = root3.array[idx];
1086
+
if (node2.type !== ENTRY) {
1087
+
const n = without(node2, shift + SHIFT, hash, key);
1088
+
if (n === node2) {
1089
+
return root3;
1090
+
}
1091
+
if (n !== void 0) {
1092
+
return {
1093
+
type: INDEX_NODE,
1094
+
bitmap: root3.bitmap,
1095
+
array: cloneAndSet(root3.array, idx, n)
1096
+
};
1097
+
}
1098
+
if (root3.bitmap === bit) {
1099
+
return void 0;
1100
+
}
1101
+
return {
1102
+
type: INDEX_NODE,
1103
+
bitmap: root3.bitmap ^ bit,
1104
+
array: spliceOut(root3.array, idx)
1105
+
};
1106
+
}
1107
+
if (isEqual(key, node2.k)) {
1108
+
if (root3.bitmap === bit) {
1109
+
return void 0;
1110
+
}
1111
+
return {
1112
+
type: INDEX_NODE,
1113
+
bitmap: root3.bitmap ^ bit,
1114
+
array: spliceOut(root3.array, idx)
1115
+
};
1116
+
}
1117
+
return root3;
1118
+
}
1119
+
function withoutCollision(root3, key) {
1120
+
const idx = collisionIndexOf(root3, key);
1121
+
if (idx < 0) {
1122
+
return root3;
1123
+
}
1124
+
if (root3.array.length === 1) {
1125
+
return void 0;
1126
+
}
1127
+
return {
1128
+
type: COLLISION_NODE,
1129
+
hash: root3.hash,
1130
+
array: spliceOut(root3.array, idx)
1131
+
};
1132
+
}
1133
+
function forEach(root3, fn) {
1134
+
if (root3 === void 0) {
1135
+
return;
1136
+
}
1137
+
const items = root3.array;
1138
+
const size3 = items.length;
1139
+
for (let i = 0; i < size3; i++) {
1140
+
const item = items[i];
1141
+
if (item === void 0) {
1142
+
continue;
1143
+
}
1144
+
if (item.type === ENTRY) {
1145
+
fn(item.v, item.k);
1146
+
continue;
1147
+
}
1148
+
forEach(item, fn);
1149
+
}
1150
+
}
1151
+
var Dict = class _Dict {
1152
+
/**
1153
+
* @template V
1154
+
* @param {Record<string,V>} o
1155
+
* @returns {Dict<string,V>}
1156
+
*/
1157
+
static fromObject(o) {
1158
+
const keys2 = Object.keys(o);
1159
+
let m = _Dict.new();
1160
+
for (let i = 0; i < keys2.length; i++) {
1161
+
const k = keys2[i];
1162
+
m = m.set(k, o[k]);
1163
+
}
1164
+
return m;
1165
+
}
1166
+
/**
1167
+
* @template K,V
1168
+
* @param {Map<K,V>} o
1169
+
* @returns {Dict<K,V>}
1170
+
*/
1171
+
static fromMap(o) {
1172
+
let m = _Dict.new();
1173
+
o.forEach((v, k) => {
1174
+
m = m.set(k, v);
1175
+
});
1176
+
return m;
1177
+
}
1178
+
static new() {
1179
+
return new _Dict(void 0, 0);
1180
+
}
1181
+
/**
1182
+
* @param {undefined | Node<K,V>} root
1183
+
* @param {number} size
1184
+
*/
1185
+
constructor(root3, size3) {
1186
+
this.root = root3;
1187
+
this.size = size3;
1188
+
}
1189
+
/**
1190
+
* @template NotFound
1191
+
* @param {K} key
1192
+
* @param {NotFound} notFound
1193
+
* @returns {NotFound | V}
1194
+
*/
1195
+
get(key, notFound) {
1196
+
if (this.root === void 0) {
1197
+
return notFound;
1198
+
}
1199
+
const found = find(this.root, 0, getHash(key), key);
1200
+
if (found === void 0) {
1201
+
return notFound;
1202
+
}
1203
+
return found.v;
1204
+
}
1205
+
/**
1206
+
* @param {K} key
1207
+
* @param {V} val
1208
+
* @returns {Dict<K,V>}
1209
+
*/
1210
+
set(key, val) {
1211
+
const addedLeaf = { val: false };
1212
+
const root3 = this.root === void 0 ? EMPTY : this.root;
1213
+
const newRoot = assoc(root3, 0, getHash(key), key, val, addedLeaf);
1214
+
if (newRoot === this.root) {
1215
+
return this;
1216
+
}
1217
+
return new _Dict(newRoot, addedLeaf.val ? this.size + 1 : this.size);
1218
+
}
1219
+
/**
1220
+
* @param {K} key
1221
+
* @returns {Dict<K,V>}
1222
+
*/
1223
+
delete(key) {
1224
+
if (this.root === void 0) {
1225
+
return this;
1226
+
}
1227
+
const newRoot = without(this.root, 0, getHash(key), key);
1228
+
if (newRoot === this.root) {
1229
+
return this;
1230
+
}
1231
+
if (newRoot === void 0) {
1232
+
return _Dict.new();
1233
+
}
1234
+
return new _Dict(newRoot, this.size - 1);
1235
+
}
1236
+
/**
1237
+
* @param {K} key
1238
+
* @returns {boolean}
1239
+
*/
1240
+
has(key) {
1241
+
if (this.root === void 0) {
1242
+
return false;
1243
+
}
1244
+
return find(this.root, 0, getHash(key), key) !== void 0;
1245
+
}
1246
+
/**
1247
+
* @returns {[K,V][]}
1248
+
*/
1249
+
entries() {
1250
+
if (this.root === void 0) {
1251
+
return [];
1252
+
}
1253
+
const result = [];
1254
+
this.forEach((v, k) => result.push([k, v]));
1255
+
return result;
1256
+
}
1257
+
/**
1258
+
*
1259
+
* @param {(val:V,key:K)=>void} fn
1260
+
*/
1261
+
forEach(fn) {
1262
+
forEach(this.root, fn);
1263
+
}
1264
+
hashCode() {
1265
+
let h = 0;
1266
+
this.forEach((v, k) => {
1267
+
h = h + hashMerge(getHash(v), getHash(k)) | 0;
1268
+
});
1269
+
return h;
1270
+
}
1271
+
/**
1272
+
* @param {unknown} o
1273
+
* @returns {boolean}
1274
+
*/
1275
+
equals(o) {
1276
+
if (!(o instanceof _Dict) || this.size !== o.size) {
1277
+
return false;
1278
+
}
1279
+
try {
1280
+
this.forEach((v, k) => {
1281
+
if (!isEqual(o.get(k, !v), v)) {
1282
+
throw unequalDictSymbol;
1283
+
}
1284
+
});
1285
+
return true;
1286
+
} catch (e) {
1287
+
if (e === unequalDictSymbol) {
1288
+
return false;
1289
+
}
1290
+
throw e;
1291
+
}
1292
+
}
1293
+
};
1294
+
var unequalDictSymbol = /* @__PURE__ */ Symbol();
1295
+
1296
+
// build/dev/javascript/gleam_stdlib/gleam/dict.mjs
1297
+
function insert(dict2, key, value) {
1298
+
return map_insert(key, value, dict2);
1299
+
}
1300
+
function reverse_and_concat(loop$remaining, loop$accumulator) {
1301
+
while (true) {
1302
+
let remaining = loop$remaining;
1303
+
let accumulator = loop$accumulator;
1304
+
if (remaining instanceof Empty) {
1305
+
return accumulator;
1306
+
} else {
1307
+
let first2 = remaining.head;
1308
+
let rest = remaining.tail;
1309
+
loop$remaining = rest;
1310
+
loop$accumulator = prepend(first2, accumulator);
1311
+
}
1312
+
}
1313
+
}
1314
+
function do_values_loop(loop$list, loop$acc) {
1315
+
while (true) {
1316
+
let list4 = loop$list;
1317
+
let acc = loop$acc;
1318
+
if (list4 instanceof Empty) {
1319
+
return reverse_and_concat(acc, toList([]));
1320
+
} else {
1321
+
let rest = list4.tail;
1322
+
let value = list4.head[1];
1323
+
loop$list = rest;
1324
+
loop$acc = prepend(value, acc);
1325
+
}
1326
+
}
1327
+
}
1328
+
function values(dict2) {
1329
+
let list_of_pairs = map_to_list(dict2);
1330
+
return do_values_loop(list_of_pairs, toList([]));
1331
+
}
1332
+
1333
+
// build/dev/javascript/gleam_stdlib/gleam/int.mjs
1334
+
function square_root2(x) {
1335
+
let _pipe = identity(x);
1336
+
return square_root(_pipe);
1337
+
}
1338
+
function min(a, b) {
1339
+
let $ = a < b;
1340
+
if ($) {
1341
+
return a;
1342
+
} else {
1343
+
return b;
1344
+
}
1345
+
}
1346
+
function add(a, b) {
1347
+
return a + b;
1348
+
}
1349
+
1350
+
// build/dev/javascript/gleam_stdlib/gleam/list.mjs
1351
+
var Ascending = class extends CustomType {
1352
+
};
1353
+
var Descending = class extends CustomType {
1354
+
};
1355
+
function length_loop(loop$list, loop$count) {
1356
+
while (true) {
1357
+
let list4 = loop$list;
1358
+
let count = loop$count;
1359
+
if (list4 instanceof Empty) {
1360
+
return count;
1361
+
} else {
1362
+
let list$1 = list4.tail;
1363
+
loop$list = list$1;
1364
+
loop$count = count + 1;
1365
+
}
1366
+
}
1367
+
}
1368
+
function length(list4) {
1369
+
return length_loop(list4, 0);
1370
+
}
1371
+
function reverse_and_prepend(loop$prefix, loop$suffix) {
1372
+
while (true) {
1373
+
let prefix = loop$prefix;
1374
+
let suffix = loop$suffix;
1375
+
if (prefix instanceof Empty) {
1376
+
return suffix;
1377
+
} else {
1378
+
let first$1 = prefix.head;
1379
+
let rest$1 = prefix.tail;
1380
+
loop$prefix = rest$1;
1381
+
loop$suffix = prepend(first$1, suffix);
1382
+
}
1383
+
}
1384
+
}
1385
+
function reverse(list4) {
1386
+
return reverse_and_prepend(list4, toList([]));
1387
+
}
1388
+
function is_empty2(list4) {
1389
+
return isEqual(list4, toList([]));
1390
+
}
1391
+
function first(list4) {
1392
+
if (list4 instanceof Empty) {
1393
+
return new Error(void 0);
1394
+
} else {
1395
+
let first$1 = list4.head;
1396
+
return new Ok(first$1);
1397
+
}
1398
+
}
1399
+
function map_loop(loop$list, loop$fun, loop$acc) {
1400
+
while (true) {
1401
+
let list4 = loop$list;
1402
+
let fun = loop$fun;
1403
+
let acc = loop$acc;
1404
+
if (list4 instanceof Empty) {
1405
+
return reverse(acc);
1406
+
} else {
1407
+
let first$1 = list4.head;
1408
+
let rest$1 = list4.tail;
1409
+
loop$list = rest$1;
1410
+
loop$fun = fun;
1411
+
loop$acc = prepend(fun(first$1), acc);
1412
+
}
1413
+
}
1414
+
}
1415
+
function map(list4, fun) {
1416
+
return map_loop(list4, fun, toList([]));
1417
+
}
1418
+
function append_loop(loop$first, loop$second) {
1419
+
while (true) {
1420
+
let first2 = loop$first;
1421
+
let second = loop$second;
1422
+
if (first2 instanceof Empty) {
1423
+
return second;
1424
+
} else {
1425
+
let first$1 = first2.head;
1426
+
let rest$1 = first2.tail;
1427
+
loop$first = rest$1;
1428
+
loop$second = prepend(first$1, second);
1429
+
}
1430
+
}
1431
+
}
1432
+
function append(first2, second) {
1433
+
return append_loop(reverse(first2), second);
1434
+
}
1435
+
function prepend2(list4, item) {
1436
+
return prepend(item, list4);
1437
+
}
1438
+
function flatten_loop(loop$lists, loop$acc) {
1439
+
while (true) {
1440
+
let lists = loop$lists;
1441
+
let acc = loop$acc;
1442
+
if (lists instanceof Empty) {
1443
+
return reverse(acc);
1444
+
} else {
1445
+
let list4 = lists.head;
1446
+
let further_lists = lists.tail;
1447
+
loop$lists = further_lists;
1448
+
loop$acc = reverse_and_prepend(list4, acc);
1449
+
}
1450
+
}
1451
+
}
1452
+
function flatten(lists) {
1453
+
return flatten_loop(lists, toList([]));
1454
+
}
1455
+
function flat_map(list4, fun) {
1456
+
return flatten(map(list4, fun));
1457
+
}
1458
+
function fold(loop$list, loop$initial, loop$fun) {
1459
+
while (true) {
1460
+
let list4 = loop$list;
1461
+
let initial = loop$initial;
1462
+
let fun = loop$fun;
1463
+
if (list4 instanceof Empty) {
1464
+
return initial;
1465
+
} else {
1466
+
let first$1 = list4.head;
1467
+
let rest$1 = list4.tail;
1468
+
loop$list = rest$1;
1469
+
loop$initial = fun(initial, first$1);
1470
+
loop$fun = fun;
1471
+
}
1472
+
}
1473
+
}
1474
+
function sequences(loop$list, loop$compare, loop$growing, loop$direction, loop$prev, loop$acc) {
1475
+
while (true) {
1476
+
let list4 = loop$list;
1477
+
let compare4 = loop$compare;
1478
+
let growing = loop$growing;
1479
+
let direction = loop$direction;
1480
+
let prev = loop$prev;
1481
+
let acc = loop$acc;
1482
+
let growing$1 = prepend(prev, growing);
1483
+
if (list4 instanceof Empty) {
1484
+
if (direction instanceof Ascending) {
1485
+
return prepend(reverse(growing$1), acc);
1486
+
} else {
1487
+
return prepend(growing$1, acc);
1488
+
}
1489
+
} else {
1490
+
let new$1 = list4.head;
1491
+
let rest$1 = list4.tail;
1492
+
let $ = compare4(prev, new$1);
1493
+
if (direction instanceof Ascending) {
1494
+
if ($ instanceof Lt) {
1495
+
loop$list = rest$1;
1496
+
loop$compare = compare4;
1497
+
loop$growing = growing$1;
1498
+
loop$direction = direction;
1499
+
loop$prev = new$1;
1500
+
loop$acc = acc;
1501
+
} else if ($ instanceof Eq) {
1502
+
loop$list = rest$1;
1503
+
loop$compare = compare4;
1504
+
loop$growing = growing$1;
1505
+
loop$direction = direction;
1506
+
loop$prev = new$1;
1507
+
loop$acc = acc;
1508
+
} else {
1509
+
let _block;
1510
+
if (direction instanceof Ascending) {
1511
+
_block = prepend(reverse(growing$1), acc);
1512
+
} else {
1513
+
_block = prepend(growing$1, acc);
1514
+
}
1515
+
let acc$1 = _block;
1516
+
if (rest$1 instanceof Empty) {
1517
+
return prepend(toList([new$1]), acc$1);
1518
+
} else {
1519
+
let next = rest$1.head;
1520
+
let rest$2 = rest$1.tail;
1521
+
let _block$1;
1522
+
let $1 = compare4(new$1, next);
1523
+
if ($1 instanceof Lt) {
1524
+
_block$1 = new Ascending();
1525
+
} else if ($1 instanceof Eq) {
1526
+
_block$1 = new Ascending();
1527
+
} else {
1528
+
_block$1 = new Descending();
1529
+
}
1530
+
let direction$1 = _block$1;
1531
+
loop$list = rest$2;
1532
+
loop$compare = compare4;
1533
+
loop$growing = toList([new$1]);
1534
+
loop$direction = direction$1;
1535
+
loop$prev = next;
1536
+
loop$acc = acc$1;
1537
+
}
1538
+
}
1539
+
} else if ($ instanceof Lt) {
1540
+
let _block;
1541
+
if (direction instanceof Ascending) {
1542
+
_block = prepend(reverse(growing$1), acc);
1543
+
} else {
1544
+
_block = prepend(growing$1, acc);
1545
+
}
1546
+
let acc$1 = _block;
1547
+
if (rest$1 instanceof Empty) {
1548
+
return prepend(toList([new$1]), acc$1);
1549
+
} else {
1550
+
let next = rest$1.head;
1551
+
let rest$2 = rest$1.tail;
1552
+
let _block$1;
1553
+
let $1 = compare4(new$1, next);
1554
+
if ($1 instanceof Lt) {
1555
+
_block$1 = new Ascending();
1556
+
} else if ($1 instanceof Eq) {
1557
+
_block$1 = new Ascending();
1558
+
} else {
1559
+
_block$1 = new Descending();
1560
+
}
1561
+
let direction$1 = _block$1;
1562
+
loop$list = rest$2;
1563
+
loop$compare = compare4;
1564
+
loop$growing = toList([new$1]);
1565
+
loop$direction = direction$1;
1566
+
loop$prev = next;
1567
+
loop$acc = acc$1;
1568
+
}
1569
+
} else if ($ instanceof Eq) {
1570
+
let _block;
1571
+
if (direction instanceof Ascending) {
1572
+
_block = prepend(reverse(growing$1), acc);
1573
+
} else {
1574
+
_block = prepend(growing$1, acc);
1575
+
}
1576
+
let acc$1 = _block;
1577
+
if (rest$1 instanceof Empty) {
1578
+
return prepend(toList([new$1]), acc$1);
1579
+
} else {
1580
+
let next = rest$1.head;
1581
+
let rest$2 = rest$1.tail;
1582
+
let _block$1;
1583
+
let $1 = compare4(new$1, next);
1584
+
if ($1 instanceof Lt) {
1585
+
_block$1 = new Ascending();
1586
+
} else if ($1 instanceof Eq) {
1587
+
_block$1 = new Ascending();
1588
+
} else {
1589
+
_block$1 = new Descending();
1590
+
}
1591
+
let direction$1 = _block$1;
1592
+
loop$list = rest$2;
1593
+
loop$compare = compare4;
1594
+
loop$growing = toList([new$1]);
1595
+
loop$direction = direction$1;
1596
+
loop$prev = next;
1597
+
loop$acc = acc$1;
1598
+
}
1599
+
} else {
1600
+
loop$list = rest$1;
1601
+
loop$compare = compare4;
1602
+
loop$growing = growing$1;
1603
+
loop$direction = direction;
1604
+
loop$prev = new$1;
1605
+
loop$acc = acc;
1606
+
}
1607
+
}
1608
+
}
1609
+
}
1610
+
function merge_ascendings(loop$list1, loop$list2, loop$compare, loop$acc) {
1611
+
while (true) {
1612
+
let list1 = loop$list1;
1613
+
let list22 = loop$list2;
1614
+
let compare4 = loop$compare;
1615
+
let acc = loop$acc;
1616
+
if (list1 instanceof Empty) {
1617
+
let list4 = list22;
1618
+
return reverse_and_prepend(list4, acc);
1619
+
} else if (list22 instanceof Empty) {
1620
+
let list4 = list1;
1621
+
return reverse_and_prepend(list4, acc);
1622
+
} else {
1623
+
let first1 = list1.head;
1624
+
let rest1 = list1.tail;
1625
+
let first2 = list22.head;
1626
+
let rest2 = list22.tail;
1627
+
let $ = compare4(first1, first2);
1628
+
if ($ instanceof Lt) {
1629
+
loop$list1 = rest1;
1630
+
loop$list2 = list22;
1631
+
loop$compare = compare4;
1632
+
loop$acc = prepend(first1, acc);
1633
+
} else if ($ instanceof Eq) {
1634
+
loop$list1 = list1;
1635
+
loop$list2 = rest2;
1636
+
loop$compare = compare4;
1637
+
loop$acc = prepend(first2, acc);
1638
+
} else {
1639
+
loop$list1 = list1;
1640
+
loop$list2 = rest2;
1641
+
loop$compare = compare4;
1642
+
loop$acc = prepend(first2, acc);
1643
+
}
1644
+
}
1645
+
}
1646
+
}
1647
+
function merge_ascending_pairs(loop$sequences, loop$compare, loop$acc) {
1648
+
while (true) {
1649
+
let sequences2 = loop$sequences;
1650
+
let compare4 = loop$compare;
1651
+
let acc = loop$acc;
1652
+
if (sequences2 instanceof Empty) {
1653
+
return reverse(acc);
1654
+
} else {
1655
+
let $ = sequences2.tail;
1656
+
if ($ instanceof Empty) {
1657
+
let sequence = sequences2.head;
1658
+
return reverse(prepend(reverse(sequence), acc));
1659
+
} else {
1660
+
let ascending1 = sequences2.head;
1661
+
let ascending2 = $.head;
1662
+
let rest$1 = $.tail;
1663
+
let descending = merge_ascendings(
1664
+
ascending1,
1665
+
ascending2,
1666
+
compare4,
1667
+
toList([])
1668
+
);
1669
+
loop$sequences = rest$1;
1670
+
loop$compare = compare4;
1671
+
loop$acc = prepend(descending, acc);
1672
+
}
1673
+
}
1674
+
}
1675
+
}
1676
+
function merge_descendings(loop$list1, loop$list2, loop$compare, loop$acc) {
1677
+
while (true) {
1678
+
let list1 = loop$list1;
1679
+
let list22 = loop$list2;
1680
+
let compare4 = loop$compare;
1681
+
let acc = loop$acc;
1682
+
if (list1 instanceof Empty) {
1683
+
let list4 = list22;
1684
+
return reverse_and_prepend(list4, acc);
1685
+
} else if (list22 instanceof Empty) {
1686
+
let list4 = list1;
1687
+
return reverse_and_prepend(list4, acc);
1688
+
} else {
1689
+
let first1 = list1.head;
1690
+
let rest1 = list1.tail;
1691
+
let first2 = list22.head;
1692
+
let rest2 = list22.tail;
1693
+
let $ = compare4(first1, first2);
1694
+
if ($ instanceof Lt) {
1695
+
loop$list1 = list1;
1696
+
loop$list2 = rest2;
1697
+
loop$compare = compare4;
1698
+
loop$acc = prepend(first2, acc);
1699
+
} else if ($ instanceof Eq) {
1700
+
loop$list1 = rest1;
1701
+
loop$list2 = list22;
1702
+
loop$compare = compare4;
1703
+
loop$acc = prepend(first1, acc);
1704
+
} else {
1705
+
loop$list1 = rest1;
1706
+
loop$list2 = list22;
1707
+
loop$compare = compare4;
1708
+
loop$acc = prepend(first1, acc);
1709
+
}
1710
+
}
1711
+
}
1712
+
}
1713
+
function merge_descending_pairs(loop$sequences, loop$compare, loop$acc) {
1714
+
while (true) {
1715
+
let sequences2 = loop$sequences;
1716
+
let compare4 = loop$compare;
1717
+
let acc = loop$acc;
1718
+
if (sequences2 instanceof Empty) {
1719
+
return reverse(acc);
1720
+
} else {
1721
+
let $ = sequences2.tail;
1722
+
if ($ instanceof Empty) {
1723
+
let sequence = sequences2.head;
1724
+
return reverse(prepend(reverse(sequence), acc));
1725
+
} else {
1726
+
let descending1 = sequences2.head;
1727
+
let descending2 = $.head;
1728
+
let rest$1 = $.tail;
1729
+
let ascending = merge_descendings(
1730
+
descending1,
1731
+
descending2,
1732
+
compare4,
1733
+
toList([])
1734
+
);
1735
+
loop$sequences = rest$1;
1736
+
loop$compare = compare4;
1737
+
loop$acc = prepend(ascending, acc);
1738
+
}
1739
+
}
1740
+
}
1741
+
}
1742
+
function merge_all(loop$sequences, loop$direction, loop$compare) {
1743
+
while (true) {
1744
+
let sequences2 = loop$sequences;
1745
+
let direction = loop$direction;
1746
+
let compare4 = loop$compare;
1747
+
if (sequences2 instanceof Empty) {
1748
+
return toList([]);
1749
+
} else if (direction instanceof Ascending) {
1750
+
let $ = sequences2.tail;
1751
+
if ($ instanceof Empty) {
1752
+
let sequence = sequences2.head;
1753
+
return sequence;
1754
+
} else {
1755
+
let sequences$1 = merge_ascending_pairs(sequences2, compare4, toList([]));
1756
+
loop$sequences = sequences$1;
1757
+
loop$direction = new Descending();
1758
+
loop$compare = compare4;
1759
+
}
1760
+
} else {
1761
+
let $ = sequences2.tail;
1762
+
if ($ instanceof Empty) {
1763
+
let sequence = sequences2.head;
1764
+
return reverse(sequence);
1765
+
} else {
1766
+
let sequences$1 = merge_descending_pairs(sequences2, compare4, toList([]));
1767
+
loop$sequences = sequences$1;
1768
+
loop$direction = new Ascending();
1769
+
loop$compare = compare4;
1770
+
}
1771
+
}
1772
+
}
1773
+
}
1774
+
function sort(list4, compare4) {
1775
+
if (list4 instanceof Empty) {
1776
+
return toList([]);
1777
+
} else {
1778
+
let $ = list4.tail;
1779
+
if ($ instanceof Empty) {
1780
+
let x = list4.head;
1781
+
return toList([x]);
1782
+
} else {
1783
+
let x = list4.head;
1784
+
let y = $.head;
1785
+
let rest$1 = $.tail;
1786
+
let _block;
1787
+
let $1 = compare4(x, y);
1788
+
if ($1 instanceof Lt) {
1789
+
_block = new Ascending();
1790
+
} else if ($1 instanceof Eq) {
1791
+
_block = new Ascending();
1792
+
} else {
1793
+
_block = new Descending();
1794
+
}
1795
+
let direction = _block;
1796
+
let sequences$1 = sequences(
1797
+
rest$1,
1798
+
compare4,
1799
+
toList([x]),
1800
+
direction,
1801
+
y,
1802
+
toList([])
1803
+
);
1804
+
return merge_all(sequences$1, new Ascending(), compare4);
1805
+
}
1806
+
}
1807
+
}
1808
+
function sized_chunk_loop(loop$list, loop$count, loop$left, loop$current_chunk, loop$acc) {
1809
+
while (true) {
1810
+
let list4 = loop$list;
1811
+
let count = loop$count;
1812
+
let left = loop$left;
1813
+
let current_chunk = loop$current_chunk;
1814
+
let acc = loop$acc;
1815
+
if (list4 instanceof Empty) {
1816
+
if (current_chunk instanceof Empty) {
1817
+
return reverse(acc);
1818
+
} else {
1819
+
let remaining = current_chunk;
1820
+
return reverse(prepend(reverse(remaining), acc));
1821
+
}
1822
+
} else {
1823
+
let first$1 = list4.head;
1824
+
let rest$1 = list4.tail;
1825
+
let chunk$1 = prepend(first$1, current_chunk);
1826
+
let $ = left > 1;
1827
+
if ($) {
1828
+
loop$list = rest$1;
1829
+
loop$count = count;
1830
+
loop$left = left - 1;
1831
+
loop$current_chunk = chunk$1;
1832
+
loop$acc = acc;
1833
+
} else {
1834
+
loop$list = rest$1;
1835
+
loop$count = count;
1836
+
loop$left = count;
1837
+
loop$current_chunk = toList([]);
1838
+
loop$acc = prepend(reverse(chunk$1), acc);
1839
+
}
1840
+
}
1841
+
}
1842
+
}
1843
+
function sized_chunk(list4, count) {
1844
+
return sized_chunk_loop(list4, count, count, toList([]), toList([]));
1845
+
}
1846
+
function shuffle_pair_unwrap_loop(loop$list, loop$acc) {
1847
+
while (true) {
1848
+
let list4 = loop$list;
1849
+
let acc = loop$acc;
1850
+
if (list4 instanceof Empty) {
1851
+
return acc;
1852
+
} else {
1853
+
let elem_pair = list4.head;
1854
+
let enumerable = list4.tail;
1855
+
loop$list = enumerable;
1856
+
loop$acc = prepend(elem_pair[1], acc);
1857
+
}
1858
+
}
1859
+
}
1860
+
function do_shuffle_by_pair_indexes(list_of_pairs) {
1861
+
return sort(
1862
+
list_of_pairs,
1863
+
(a_pair, b_pair) => {
1864
+
return compare(a_pair[0], b_pair[0]);
1865
+
}
1866
+
);
1867
+
}
1868
+
function shuffle(list4) {
1869
+
let _pipe = list4;
1870
+
let _pipe$1 = fold(
1871
+
_pipe,
1872
+
toList([]),
1873
+
(acc, a) => {
1874
+
return prepend([random_uniform(), a], acc);
1875
+
}
1876
+
);
1877
+
let _pipe$2 = do_shuffle_by_pair_indexes(_pipe$1);
1878
+
return shuffle_pair_unwrap_loop(_pipe$2, toList([]));
1879
+
}
1880
+
1881
+
// build/dev/javascript/gleam_stdlib/gleam/string.mjs
1882
+
function append2(first2, second) {
1883
+
return first2 + second;
1884
+
}
1885
+
function concat_loop(loop$strings, loop$accumulator) {
1886
+
while (true) {
1887
+
let strings = loop$strings;
1888
+
let accumulator = loop$accumulator;
1889
+
if (strings instanceof Empty) {
1890
+
return accumulator;
1891
+
} else {
1892
+
let string5 = strings.head;
1893
+
let strings$1 = strings.tail;
1894
+
loop$strings = strings$1;
1895
+
loop$accumulator = accumulator + string5;
1896
+
}
1897
+
}
1898
+
}
1899
+
function concat2(strings) {
1900
+
return concat_loop(strings, "");
1901
+
}
1902
+
function repeat_loop(loop$string, loop$times, loop$acc) {
1903
+
while (true) {
1904
+
let string5 = loop$string;
1905
+
let times = loop$times;
1906
+
let acc = loop$acc;
1907
+
let $ = times <= 0;
1908
+
if ($) {
1909
+
return acc;
1910
+
} else {
1911
+
loop$string = string5;
1912
+
loop$times = times - 1;
1913
+
loop$acc = acc + string5;
1914
+
}
1915
+
}
1916
+
}
1917
+
function repeat(string5, times) {
1918
+
return repeat_loop(string5, times, "");
1919
+
}
1920
+
function join_loop(loop$strings, loop$separator, loop$accumulator) {
1921
+
while (true) {
1922
+
let strings = loop$strings;
1923
+
let separator = loop$separator;
1924
+
let accumulator = loop$accumulator;
1925
+
if (strings instanceof Empty) {
1926
+
return accumulator;
1927
+
} else {
1928
+
let string5 = strings.head;
1929
+
let strings$1 = strings.tail;
1930
+
loop$strings = strings$1;
1931
+
loop$separator = separator;
1932
+
loop$accumulator = accumulator + separator + string5;
1933
+
}
1934
+
}
1935
+
}
1936
+
function join(strings, separator) {
1937
+
if (strings instanceof Empty) {
1938
+
return "";
1939
+
} else {
1940
+
let first$1 = strings.head;
1941
+
let rest = strings.tail;
1942
+
return join_loop(rest, separator, first$1);
1943
+
}
1944
+
}
1945
+
function do_to_utf_codepoints(string5) {
1946
+
let _pipe = string5;
1947
+
let _pipe$1 = string_to_codepoint_integer_list(_pipe);
1948
+
return map(_pipe$1, codepoint);
1949
+
}
1950
+
function to_utf_codepoints(string5) {
1951
+
return do_to_utf_codepoints(string5);
1952
+
}
1953
+
function inspect2(term) {
1954
+
let _pipe = inspect(term);
1955
+
return identity(_pipe);
1956
+
}
1957
+
1958
+
// build/dev/javascript/gleam_stdlib/gleam/dynamic/decode.mjs
1959
+
var DecodeError = class extends CustomType {
1960
+
constructor(expected, found, path) {
1961
+
super();
1962
+
this.expected = expected;
1963
+
this.found = found;
1964
+
this.path = path;
1965
+
}
1966
+
};
1967
+
var Decoder = class extends CustomType {
1968
+
constructor(function$) {
1969
+
super();
1970
+
this.function = function$;
1971
+
}
1972
+
};
1973
+
function run(data, decoder) {
1974
+
let $ = decoder.function(data);
1975
+
let maybe_invalid_data = $[0];
1976
+
let errors = $[1];
1977
+
if (errors instanceof Empty) {
1978
+
return new Ok(maybe_invalid_data);
1979
+
} else {
1980
+
return new Error(errors);
1981
+
}
1982
+
}
1983
+
function success(data) {
1984
+
return new Decoder((_) => {
1985
+
return [data, toList([])];
1986
+
});
1987
+
}
1988
+
function map2(decoder, transformer) {
1989
+
return new Decoder(
1990
+
(d) => {
1991
+
let $ = decoder.function(d);
1992
+
let data = $[0];
1993
+
let errors = $[1];
1994
+
return [transformer(data), errors];
1995
+
}
1996
+
);
1997
+
}
1998
+
function run_decoders(loop$data, loop$failure, loop$decoders) {
1999
+
while (true) {
2000
+
let data = loop$data;
2001
+
let failure2 = loop$failure;
2002
+
let decoders = loop$decoders;
2003
+
if (decoders instanceof Empty) {
2004
+
return failure2;
2005
+
} else {
2006
+
let decoder = decoders.head;
2007
+
let decoders$1 = decoders.tail;
2008
+
let $ = decoder.function(data);
2009
+
let layer = $;
2010
+
let errors = $[1];
2011
+
if (errors instanceof Empty) {
2012
+
return layer;
2013
+
} else {
2014
+
loop$data = data;
2015
+
loop$failure = failure2;
2016
+
loop$decoders = decoders$1;
2017
+
}
2018
+
}
2019
+
}
2020
+
}
2021
+
function one_of(first2, alternatives) {
2022
+
return new Decoder(
2023
+
(dynamic_data) => {
2024
+
let $ = first2.function(dynamic_data);
2025
+
let layer = $;
2026
+
let errors = $[1];
2027
+
if (errors instanceof Empty) {
2028
+
return layer;
2029
+
} else {
2030
+
return run_decoders(dynamic_data, layer, alternatives);
2031
+
}
2032
+
}
2033
+
);
2034
+
}
2035
+
function run_dynamic_function(data, name, f) {
2036
+
let $ = f(data);
2037
+
if ($ instanceof Ok) {
2038
+
let data$1 = $[0];
2039
+
return [data$1, toList([])];
2040
+
} else {
2041
+
let zero = $[0];
2042
+
return [
2043
+
zero,
2044
+
toList([new DecodeError(name, classify_dynamic(data), toList([]))])
2045
+
];
2046
+
}
2047
+
}
2048
+
function decode_int(data) {
2049
+
return run_dynamic_function(data, "Int", int);
2050
+
}
2051
+
var int2 = /* @__PURE__ */ new Decoder(decode_int);
2052
+
function decode_string(data) {
2053
+
return run_dynamic_function(data, "String", string);
2054
+
}
2055
+
var string2 = /* @__PURE__ */ new Decoder(decode_string);
2056
+
function push_path(layer, path) {
2057
+
let decoder = one_of(
2058
+
string2,
2059
+
toList([
2060
+
(() => {
2061
+
let _pipe = int2;
2062
+
return map2(_pipe, to_string);
2063
+
})()
2064
+
])
2065
+
);
2066
+
let path$1 = map(
2067
+
path,
2068
+
(key) => {
2069
+
let key$1 = identity(key);
2070
+
let $ = run(key$1, decoder);
2071
+
if ($ instanceof Ok) {
2072
+
let key$2 = $[0];
2073
+
return key$2;
2074
+
} else {
2075
+
return "<" + classify_dynamic(key$1) + ">";
2076
+
}
2077
+
}
2078
+
);
2079
+
let errors = map(
2080
+
layer[1],
2081
+
(error) => {
2082
+
let _record = error;
2083
+
return new DecodeError(
2084
+
_record.expected,
2085
+
_record.found,
2086
+
append(path$1, error.path)
2087
+
);
2088
+
}
2089
+
);
2090
+
return [layer[0], errors];
2091
+
}
2092
+
function index3(loop$path, loop$position, loop$inner, loop$data, loop$handle_miss) {
2093
+
while (true) {
2094
+
let path = loop$path;
2095
+
let position = loop$position;
2096
+
let inner = loop$inner;
2097
+
let data = loop$data;
2098
+
let handle_miss = loop$handle_miss;
2099
+
if (path instanceof Empty) {
2100
+
let _pipe = inner(data);
2101
+
return push_path(_pipe, reverse(position));
2102
+
} else {
2103
+
let key = path.head;
2104
+
let path$1 = path.tail;
2105
+
let $ = index2(data, key);
2106
+
if ($ instanceof Ok) {
2107
+
let $1 = $[0];
2108
+
if ($1 instanceof Some) {
2109
+
let data$1 = $1[0];
2110
+
loop$path = path$1;
2111
+
loop$position = prepend(key, position);
2112
+
loop$inner = inner;
2113
+
loop$data = data$1;
2114
+
loop$handle_miss = handle_miss;
2115
+
} else {
2116
+
return handle_miss(data, prepend(key, position));
2117
+
}
2118
+
} else {
2119
+
let kind = $[0];
2120
+
let $1 = inner(data);
2121
+
let default$ = $1[0];
2122
+
let _pipe = [
2123
+
default$,
2124
+
toList([new DecodeError(kind, classify_dynamic(data), toList([]))])
2125
+
];
2126
+
return push_path(_pipe, reverse(position));
2127
+
}
2128
+
}
2129
+
}
2130
+
}
2131
+
function subfield(field_path, field_decoder, next) {
2132
+
return new Decoder(
2133
+
(data) => {
2134
+
let $ = index3(
2135
+
field_path,
2136
+
toList([]),
2137
+
field_decoder.function,
2138
+
data,
2139
+
(data2, position) => {
2140
+
let $12 = field_decoder.function(data2);
2141
+
let default$ = $12[0];
2142
+
let _pipe = [
2143
+
default$,
2144
+
toList([new DecodeError("Field", "Nothing", toList([]))])
2145
+
];
2146
+
return push_path(_pipe, reverse(position));
2147
+
}
2148
+
);
2149
+
let out = $[0];
2150
+
let errors1 = $[1];
2151
+
let $1 = next(out).function(data);
2152
+
let out$1 = $1[0];
2153
+
let errors2 = $1[1];
2154
+
return [out$1, append(errors1, errors2)];
2155
+
}
2156
+
);
2157
+
}
2158
+
2159
+
// build/dev/javascript/gleam_stdlib/gleam_stdlib.mjs
2160
+
var Nil = void 0;
2161
+
var NOT_FOUND = {};
2162
+
function identity(x) {
2163
+
return x;
2164
+
}
2165
+
function parse_int(value) {
2166
+
if (/^[-+]?(\d+)$/.test(value)) {
2167
+
return new Ok(parseInt(value));
2168
+
} else {
2169
+
return new Error(Nil);
2170
+
}
2171
+
}
2172
+
function to_string(term) {
2173
+
return term.toString();
2174
+
}
2175
+
function starts_with(haystack, needle) {
2176
+
return haystack.startsWith(needle);
2177
+
}
2178
+
var unicode_whitespaces = [
2179
+
" ",
2180
+
// Space
2181
+
" ",
2182
+
// Horizontal tab
2183
+
"\n",
2184
+
// Line feed
2185
+
"\v",
2186
+
// Vertical tab
2187
+
"\f",
2188
+
// Form feed
2189
+
"\r",
2190
+
// Carriage return
2191
+
"\x85",
2192
+
// Next line
2193
+
"\u2028",
2194
+
// Line separator
2195
+
"\u2029"
2196
+
// Paragraph separator
2197
+
].join("");
2198
+
var trim_start_regex = /* @__PURE__ */ new RegExp(
2199
+
`^[${unicode_whitespaces}]*`
2200
+
);
2201
+
var trim_end_regex = /* @__PURE__ */ new RegExp(`[${unicode_whitespaces}]*$`);
2202
+
function ceiling(float2) {
2203
+
return Math.ceil(float2);
2204
+
}
2205
+
function floor(float2) {
2206
+
return Math.floor(float2);
2207
+
}
2208
+
function round2(float2) {
2209
+
return Math.round(float2);
2210
+
}
2211
+
function power2(base, exponent) {
2212
+
return Math.pow(base, exponent);
2213
+
}
2214
+
function random_uniform() {
2215
+
const random_uniform_result = Math.random();
2216
+
if (random_uniform_result === 1) {
2217
+
return random_uniform();
2218
+
}
2219
+
return random_uniform_result;
2220
+
}
2221
+
function codepoint(int5) {
2222
+
return new UtfCodepoint(int5);
2223
+
}
2224
+
function string_to_codepoint_integer_list(string5) {
2225
+
return List.fromArray(Array.from(string5).map((item) => item.codePointAt(0)));
2226
+
}
2227
+
function utf_codepoint_to_int(utf_codepoint) {
2228
+
return utf_codepoint.value;
2229
+
}
2230
+
function new_map() {
2231
+
return Dict.new();
2232
+
}
2233
+
function map_to_list(map7) {
2234
+
return List.fromArray(map7.entries());
2235
+
}
2236
+
function map_get(map7, key) {
2237
+
const value = map7.get(key, NOT_FOUND);
2238
+
if (value === NOT_FOUND) {
2239
+
return new Error(Nil);
2240
+
}
2241
+
return new Ok(value);
2242
+
}
2243
+
function map_insert(key, value, map7) {
2244
+
return map7.set(key, value);
2245
+
}
2246
+
function classify_dynamic(data) {
2247
+
if (typeof data === "string") {
2248
+
return "String";
2249
+
} else if (typeof data === "boolean") {
2250
+
return "Bool";
2251
+
} else if (data instanceof Result) {
2252
+
return "Result";
2253
+
} else if (data instanceof List) {
2254
+
return "List";
2255
+
} else if (data instanceof BitArray) {
2256
+
return "BitArray";
2257
+
} else if (data instanceof Dict) {
2258
+
return "Dict";
2259
+
} else if (Number.isInteger(data)) {
2260
+
return "Int";
2261
+
} else if (Array.isArray(data)) {
2262
+
return `Array`;
2263
+
} else if (typeof data === "number") {
2264
+
return "Float";
2265
+
} else if (data === null) {
2266
+
return "Nil";
2267
+
} else if (data === void 0) {
2268
+
return "Nil";
2269
+
} else {
2270
+
const type = typeof data;
2271
+
return type.charAt(0).toUpperCase() + type.slice(1);
2272
+
}
2273
+
}
2274
+
function bitwise_and(x, y) {
2275
+
return Number(BigInt(x) & BigInt(y));
2276
+
}
2277
+
function bitwise_or(x, y) {
2278
+
return Number(BigInt(x) | BigInt(y));
2279
+
}
2280
+
function bitwise_exclusive_or(x, y) {
2281
+
return Number(BigInt(x) ^ BigInt(y));
2282
+
}
2283
+
function bitwise_shift_left(x, y) {
2284
+
return Number(BigInt(x) << BigInt(y));
2285
+
}
2286
+
function bitwise_shift_right(x, y) {
2287
+
return Number(BigInt(x) >> BigInt(y));
2288
+
}
2289
+
function inspect(v) {
2290
+
return new Inspector().inspect(v);
2291
+
}
2292
+
function float_to_string(float2) {
2293
+
const string5 = float2.toString().replace("+", "");
2294
+
if (string5.indexOf(".") >= 0) {
2295
+
return string5;
2296
+
} else {
2297
+
const index4 = string5.indexOf("e");
2298
+
if (index4 >= 0) {
2299
+
return string5.slice(0, index4) + ".0" + string5.slice(index4);
2300
+
} else {
2301
+
return string5 + ".0";
2302
+
}
2303
+
}
2304
+
}
2305
+
var Inspector = class {
2306
+
#references = /* @__PURE__ */ new Set();
2307
+
inspect(v) {
2308
+
const t = typeof v;
2309
+
if (v === true) return "True";
2310
+
if (v === false) return "False";
2311
+
if (v === null) return "//js(null)";
2312
+
if (v === void 0) return "Nil";
2313
+
if (t === "string") return this.#string(v);
2314
+
if (t === "bigint" || Number.isInteger(v)) return v.toString();
2315
+
if (t === "number") return float_to_string(v);
2316
+
if (v instanceof UtfCodepoint) return this.#utfCodepoint(v);
2317
+
if (v instanceof BitArray) return this.#bit_array(v);
2318
+
if (v instanceof RegExp) return `//js(${v})`;
2319
+
if (v instanceof Date) return `//js(Date("${v.toISOString()}"))`;
2320
+
if (v instanceof globalThis.Error) return `//js(${v.toString()})`;
2321
+
if (v instanceof Function) {
2322
+
const args = [];
2323
+
for (const i of Array(v.length).keys())
2324
+
args.push(String.fromCharCode(i + 97));
2325
+
return `//fn(${args.join(", ")}) { ... }`;
2326
+
}
2327
+
if (this.#references.size === this.#references.add(v).size) {
2328
+
return "//js(circular reference)";
2329
+
}
2330
+
let printed;
2331
+
if (Array.isArray(v)) {
2332
+
printed = `#(${v.map((v2) => this.inspect(v2)).join(", ")})`;
2333
+
} else if (v instanceof List) {
2334
+
printed = this.#list(v);
2335
+
} else if (v instanceof CustomType) {
2336
+
printed = this.#customType(v);
2337
+
} else if (v instanceof Dict) {
2338
+
printed = this.#dict(v);
2339
+
} else if (v instanceof Set) {
2340
+
return `//js(Set(${[...v].map((v2) => this.inspect(v2)).join(", ")}))`;
2341
+
} else {
2342
+
printed = this.#object(v);
2343
+
}
2344
+
this.#references.delete(v);
2345
+
return printed;
2346
+
}
2347
+
#object(v) {
2348
+
const name = Object.getPrototypeOf(v)?.constructor?.name || "Object";
2349
+
const props = [];
2350
+
for (const k of Object.keys(v)) {
2351
+
props.push(`${this.inspect(k)}: ${this.inspect(v[k])}`);
2352
+
}
2353
+
const body = props.length ? " " + props.join(", ") + " " : "";
2354
+
const head = name === "Object" ? "" : name + " ";
2355
+
return `//js(${head}{${body}})`;
2356
+
}
2357
+
#dict(map7) {
2358
+
let body = "dict.from_list([";
2359
+
let first2 = true;
2360
+
map7.forEach((value, key) => {
2361
+
if (!first2) body = body + ", ";
2362
+
body = body + "#(" + this.inspect(key) + ", " + this.inspect(value) + ")";
2363
+
first2 = false;
2364
+
});
2365
+
return body + "])";
2366
+
}
2367
+
#customType(record) {
2368
+
const props = Object.keys(record).map((label) => {
2369
+
const value = this.inspect(record[label]);
2370
+
return isNaN(parseInt(label)) ? `${label}: ${value}` : value;
2371
+
}).join(", ");
2372
+
return props ? `${record.constructor.name}(${props})` : record.constructor.name;
2373
+
}
2374
+
#list(list4) {
2375
+
if (list4 instanceof Empty) {
2376
+
return "[]";
2377
+
}
2378
+
let char_out = 'charlist.from_string("';
2379
+
let list_out = "[";
2380
+
let current = list4;
2381
+
while (current instanceof NonEmpty) {
2382
+
let element4 = current.head;
2383
+
current = current.tail;
2384
+
if (list_out !== "[") {
2385
+
list_out += ", ";
2386
+
}
2387
+
list_out += this.inspect(element4);
2388
+
if (char_out) {
2389
+
if (Number.isInteger(element4) && element4 >= 32 && element4 <= 126) {
2390
+
char_out += String.fromCharCode(element4);
2391
+
} else {
2392
+
char_out = null;
2393
+
}
2394
+
}
2395
+
}
2396
+
if (char_out) {
2397
+
return char_out + '")';
2398
+
} else {
2399
+
return list_out + "]";
2400
+
}
2401
+
}
2402
+
#string(str) {
2403
+
let new_str = '"';
2404
+
for (let i = 0; i < str.length; i++) {
2405
+
const char = str[i];
2406
+
switch (char) {
2407
+
case "\n":
2408
+
new_str += "\\n";
2409
+
break;
2410
+
case "\r":
2411
+
new_str += "\\r";
2412
+
break;
2413
+
case " ":
2414
+
new_str += "\\t";
2415
+
break;
2416
+
case "\f":
2417
+
new_str += "\\f";
2418
+
break;
2419
+
case "\\":
2420
+
new_str += "\\\\";
2421
+
break;
2422
+
case '"':
2423
+
new_str += '\\"';
2424
+
break;
2425
+
default:
2426
+
if (char < " " || char > "~" && char < "\xA0") {
2427
+
new_str += "\\u{" + char.charCodeAt(0).toString(16).toUpperCase().padStart(4, "0") + "}";
2428
+
} else {
2429
+
new_str += char;
2430
+
}
2431
+
}
2432
+
}
2433
+
new_str += '"';
2434
+
return new_str;
2435
+
}
2436
+
#utfCodepoint(codepoint2) {
2437
+
return `//utfcodepoint(${String.fromCodePoint(codepoint2.value)})`;
2438
+
}
2439
+
#bit_array(bits) {
2440
+
if (bits.bitSize === 0) {
2441
+
return "<<>>";
2442
+
}
2443
+
let acc = "<<";
2444
+
for (let i = 0; i < bits.byteSize - 1; i++) {
2445
+
acc += bits.byteAt(i).toString();
2446
+
acc += ", ";
2447
+
}
2448
+
if (bits.byteSize * 8 === bits.bitSize) {
2449
+
acc += bits.byteAt(bits.byteSize - 1).toString();
2450
+
} else {
2451
+
const trailingBitsCount = bits.bitSize % 8;
2452
+
acc += bits.byteAt(bits.byteSize - 1) >> 8 - trailingBitsCount;
2453
+
acc += `:size(${trailingBitsCount})`;
2454
+
}
2455
+
acc += ">>";
2456
+
return acc;
2457
+
}
2458
+
};
2459
+
function base16_encode(bit_array2) {
2460
+
const trailingBitsCount = bit_array2.bitSize % 8;
2461
+
let result = "";
2462
+
for (let i = 0; i < bit_array2.byteSize; i++) {
2463
+
let byte = bit_array2.byteAt(i);
2464
+
if (i === bit_array2.byteSize - 1 && trailingBitsCount !== 0) {
2465
+
const unusedBitsCount = 8 - trailingBitsCount;
2466
+
byte = byte >> unusedBitsCount << unusedBitsCount;
2467
+
}
2468
+
result += byte.toString(16).padStart(2, "0").toUpperCase();
2469
+
}
2470
+
return result;
2471
+
}
2472
+
function index2(data, key) {
2473
+
if (data instanceof Dict || data instanceof WeakMap || data instanceof Map) {
2474
+
const token2 = {};
2475
+
const entry = data.get(key, token2);
2476
+
if (entry === token2) return new Ok(new None());
2477
+
return new Ok(new Some(entry));
2478
+
}
2479
+
const key_is_int = Number.isInteger(key);
2480
+
if (key_is_int && key >= 0 && key < 8 && data instanceof List) {
2481
+
let i = 0;
2482
+
for (const value of data) {
2483
+
if (i === key) return new Ok(new Some(value));
2484
+
i++;
2485
+
}
2486
+
return new Error("Indexable");
2487
+
}
2488
+
if (key_is_int && Array.isArray(data) || data && typeof data === "object" || data && Object.getPrototypeOf(data) === Object.prototype) {
2489
+
if (key in data) return new Ok(new Some(data[key]));
2490
+
return new Ok(new None());
2491
+
}
2492
+
return new Error(key_is_int ? "Indexable" : "Dict");
2493
+
}
2494
+
function int(data) {
2495
+
if (Number.isInteger(data)) return new Ok(data);
2496
+
return new Error(0);
2497
+
}
2498
+
function string(data) {
2499
+
if (typeof data === "string") return new Ok(data);
2500
+
return new Error("");
2501
+
}
2502
+
2503
+
// build/dev/javascript/gleam_stdlib/gleam/float.mjs
2504
+
function compare(a, b) {
2505
+
let $ = a === b;
2506
+
if ($) {
2507
+
return new Eq();
2508
+
} else {
2509
+
let $1 = a < b;
2510
+
if ($1) {
2511
+
return new Lt();
2512
+
} else {
2513
+
return new Gt();
2514
+
}
2515
+
}
2516
+
}
2517
+
function power(base, exponent) {
2518
+
let fractional = ceiling(exponent) - exponent > 0;
2519
+
let $ = base < 0 && fractional || base === 0 && exponent < 0;
2520
+
if ($) {
2521
+
return new Error(void 0);
2522
+
} else {
2523
+
return new Ok(power2(base, exponent));
2524
+
}
2525
+
}
2526
+
function square_root(x) {
2527
+
return power(x, 0.5);
2528
+
}
2529
+
function negate(x) {
2530
+
return -1 * x;
2531
+
}
2532
+
function round(x) {
2533
+
let $ = x >= 0;
2534
+
if ($) {
2535
+
return round2(x);
2536
+
} else {
2537
+
return 0 - round2(negate(x));
2538
+
}
2539
+
}
2540
+
2541
+
// build/dev/javascript/gleam_stdlib/gleam/result.mjs
2542
+
function is_ok(result) {
2543
+
if (result instanceof Ok) {
2544
+
return true;
2545
+
} else {
2546
+
return false;
2547
+
}
2548
+
}
2549
+
function unwrap2(result, default$) {
2550
+
if (result instanceof Ok) {
2551
+
let v = result[0];
2552
+
return v;
2553
+
} else {
2554
+
return default$;
2555
+
}
2556
+
}
2557
+
2558
+
// build/dev/javascript/iv/iv_ffi.mjs
2559
+
var empty = () => [];
2560
+
var singleton = (x) => [x];
2561
+
var append3 = (xs, x) => [...xs, x];
2562
+
var get1 = (idx, xs) => xs[idx - 1];
2563
+
var set1 = (idx, xs, x) => xs.with(idx - 1, x);
2564
+
var length3 = (xs) => xs.length;
2565
+
var bsl = (a, b) => a << b;
2566
+
var bsr = (a, b) => a >> b;
2567
+
2568
+
// build/dev/javascript/iv/iv/internal/vector.mjs
2569
+
function fold_loop(loop$xs, loop$state, loop$idx, loop$len, loop$fun) {
2570
+
while (true) {
2571
+
let xs = loop$xs;
2572
+
let state = loop$state;
2573
+
let idx = loop$idx;
2574
+
let len = loop$len;
2575
+
let fun = loop$fun;
2576
+
let $ = idx <= len;
2577
+
if ($) {
2578
+
loop$xs = xs;
2579
+
loop$state = fun(state, get1(idx, xs));
2580
+
loop$idx = idx + 1;
2581
+
loop$len = len;
2582
+
loop$fun = fun;
2583
+
} else {
2584
+
return state;
2585
+
}
2586
+
}
2587
+
}
2588
+
function fold_skip_first(xs, state, fun) {
2589
+
let len = length3(xs);
2590
+
return fold_loop(xs, state, 2, len, fun);
2591
+
}
2592
+
function fold_right_loop(loop$xs, loop$state, loop$idx, loop$fun) {
2593
+
while (true) {
2594
+
let xs = loop$xs;
2595
+
let state = loop$state;
2596
+
let idx = loop$idx;
2597
+
let fun = loop$fun;
2598
+
let $ = idx > 0;
2599
+
if ($) {
2600
+
loop$xs = xs;
2601
+
loop$state = fun(state, get1(idx, xs));
2602
+
loop$idx = idx - 1;
2603
+
loop$fun = fun;
2604
+
} else {
2605
+
return state;
2606
+
}
2607
+
}
2608
+
}
2609
+
function fold_right(xs, state, fun) {
2610
+
let len = length3(xs);
2611
+
return fold_right_loop(xs, state, len, fun);
2612
+
}
2613
+
function index_fold_loop(loop$xs, loop$state, loop$idx, loop$len, loop$fun) {
2614
+
while (true) {
2615
+
let xs = loop$xs;
2616
+
let state = loop$state;
2617
+
let idx = loop$idx;
2618
+
let len = loop$len;
2619
+
let fun = loop$fun;
2620
+
let $ = idx <= len;
2621
+
if ($) {
2622
+
loop$xs = xs;
2623
+
loop$state = fun(state, get1(idx, xs), idx);
2624
+
loop$idx = idx + 1;
2625
+
loop$len = len;
2626
+
loop$fun = fun;
2627
+
} else {
2628
+
return state;
2629
+
}
2630
+
}
2631
+
}
2632
+
function index_fold(xs, state, fun) {
2633
+
let len = length3(xs);
2634
+
return index_fold_loop(xs, state, 1, len, fun);
2635
+
}
2636
+
function index_map(xs, fun) {
2637
+
return index_fold(
2638
+
xs,
2639
+
empty(),
2640
+
(result, item, index4) => {
2641
+
return append3(result, fun(item, index4));
2642
+
}
2643
+
);
2644
+
}
2645
+
2646
+
// build/dev/javascript/iv/iv/internal/node.mjs
2647
+
var Balanced = class extends CustomType {
2648
+
constructor(size3, children) {
2649
+
super();
2650
+
this.size = size3;
2651
+
this.children = children;
2652
+
}
2653
+
};
2654
+
var Unbalanced = class extends CustomType {
2655
+
constructor(sizes, children) {
2656
+
super();
2657
+
this.sizes = sizes;
2658
+
this.children = children;
2659
+
}
2660
+
};
2661
+
var Leaf = class extends CustomType {
2662
+
constructor(children) {
2663
+
super();
2664
+
this.children = children;
2665
+
}
2666
+
};
2667
+
function leaf(items) {
2668
+
return new Leaf(items);
2669
+
}
2670
+
function size(node2) {
2671
+
if (node2 instanceof Balanced) {
2672
+
let size$1 = node2.size;
2673
+
return size$1;
2674
+
} else if (node2 instanceof Unbalanced) {
2675
+
let sizes = node2.sizes;
2676
+
return get1(length3(sizes), sizes);
2677
+
} else {
2678
+
let children = node2.children;
2679
+
return length3(children);
2680
+
}
2681
+
}
2682
+
function compute_sizes(nodes) {
2683
+
let first_size = size(get1(1, nodes));
2684
+
return fold_skip_first(
2685
+
nodes,
2686
+
singleton(first_size),
2687
+
(sizes, node2) => {
2688
+
let size$1 = get1(length3(sizes), sizes) + size(node2);
2689
+
return append3(sizes, size$1);
2690
+
}
2691
+
);
2692
+
}
2693
+
function find_size(loop$sizes, loop$size_idx_plus_one, loop$index) {
2694
+
while (true) {
2695
+
let sizes = loop$sizes;
2696
+
let size_idx_plus_one = loop$size_idx_plus_one;
2697
+
let index4 = loop$index;
2698
+
let $ = get1(size_idx_plus_one, sizes) > index4;
2699
+
if ($) {
2700
+
return size_idx_plus_one - 1;
2701
+
} else {
2702
+
loop$sizes = sizes;
2703
+
loop$size_idx_plus_one = size_idx_plus_one + 1;
2704
+
loop$index = index4;
2705
+
}
2706
+
}
2707
+
}
2708
+
function fold_right2(node2, state, fun) {
2709
+
if (node2 instanceof Balanced) {
2710
+
let children = node2.children;
2711
+
return fold_right(
2712
+
children,
2713
+
state,
2714
+
(state2, node3) => {
2715
+
return fold_right2(node3, state2, fun);
2716
+
}
2717
+
);
2718
+
} else if (node2 instanceof Unbalanced) {
2719
+
let children = node2.children;
2720
+
return fold_right(
2721
+
children,
2722
+
state,
2723
+
(state2, node3) => {
2724
+
return fold_right2(node3, state2, fun);
2725
+
}
2726
+
);
2727
+
} else {
2728
+
let children = node2.children;
2729
+
return fold_right(children, state, fun);
2730
+
}
2731
+
}
2732
+
function balanced(shift, nodes) {
2733
+
let len = length3(nodes);
2734
+
let last_child = get1(len, nodes);
2735
+
let max_size = bsl(1, shift);
2736
+
let size$1 = max_size * (len - 1) + size(last_child);
2737
+
return new Balanced(size$1, nodes);
2738
+
}
2739
+
function branch(shift, nodes) {
2740
+
let len = length3(nodes);
2741
+
let max_size = bsl(1, shift);
2742
+
let sizes = compute_sizes(nodes);
2743
+
let _block;
2744
+
if (len === 1) {
2745
+
_block = 0;
2746
+
} else {
2747
+
_block = get1(len - 1, sizes);
2748
+
}
2749
+
let prefix_size = _block;
2750
+
let is_balanced = prefix_size === max_size * (len - 1);
2751
+
if (is_balanced) {
2752
+
let size$1 = get1(len, sizes);
2753
+
return new Balanced(size$1, nodes);
2754
+
} else {
2755
+
return new Unbalanced(sizes, nodes);
2756
+
}
2757
+
}
2758
+
var branch_bits = 5;
2759
+
function get(loop$node, loop$shift, loop$index) {
2760
+
while (true) {
2761
+
let node2 = loop$node;
2762
+
let shift = loop$shift;
2763
+
let index4 = loop$index;
2764
+
if (node2 instanceof Balanced) {
2765
+
let children = node2.children;
2766
+
let node_index = bsr(index4, shift);
2767
+
let index$1 = index4 - bsl(node_index, shift);
2768
+
let child = get1(node_index + 1, children);
2769
+
loop$node = child;
2770
+
loop$shift = shift - branch_bits;
2771
+
loop$index = index$1;
2772
+
} else if (node2 instanceof Unbalanced) {
2773
+
let sizes = node2.sizes;
2774
+
let children = node2.children;
2775
+
let start_search_index = bsr(index4, shift);
2776
+
let node_index = find_size(sizes, start_search_index + 1, index4);
2777
+
let _block;
2778
+
if (node_index === 0) {
2779
+
_block = index4;
2780
+
} else {
2781
+
_block = index4 - get1(node_index, sizes);
2782
+
}
2783
+
let index$1 = _block;
2784
+
let child = get1(node_index + 1, children);
2785
+
loop$node = child;
2786
+
loop$shift = shift - branch_bits;
2787
+
loop$index = index$1;
2788
+
} else {
2789
+
let children = node2.children;
2790
+
return get1(index4 + 1, children);
2791
+
}
2792
+
}
2793
+
}
2794
+
function update(shift, node2, index4, fun) {
2795
+
if (node2 instanceof Balanced) {
2796
+
let size$1 = node2.size;
2797
+
let children = node2.children;
2798
+
let node_index = bsr(index4, shift);
2799
+
let index$1 = index4 - bsl(node_index, shift);
2800
+
let _block;
2801
+
let _pipe = get1(node_index + 1, children);
2802
+
let _pipe$1 = ((_capture) => {
2803
+
return update(shift - branch_bits, _capture, index$1, fun);
2804
+
})(_pipe);
2805
+
_block = ((_capture) => {
2806
+
return set1(node_index + 1, children, _capture);
2807
+
})(_pipe$1);
2808
+
let new_children = _block;
2809
+
return new Balanced(size$1, new_children);
2810
+
} else if (node2 instanceof Unbalanced) {
2811
+
let sizes = node2.sizes;
2812
+
let children = node2.children;
2813
+
let start_search_index = bsr(index4, shift);
2814
+
let node_index = find_size(sizes, start_search_index + 1, index4);
2815
+
let _block;
2816
+
if (node_index === 0) {
2817
+
_block = index4;
2818
+
} else {
2819
+
_block = index4 - get1(node_index, sizes);
2820
+
}
2821
+
let index$1 = _block;
2822
+
let _block$1;
2823
+
let _pipe = get1(node_index + 1, children);
2824
+
let _pipe$1 = ((_capture) => {
2825
+
return update(shift - branch_bits, _capture, index$1, fun);
2826
+
})(_pipe);
2827
+
_block$1 = ((_capture) => {
2828
+
return set1(node_index + 1, children, _capture);
2829
+
})(_pipe$1);
2830
+
let new_children = _block$1;
2831
+
return new Unbalanced(sizes, new_children);
2832
+
} else {
2833
+
let children = node2.children;
2834
+
let new_children = set1(
2835
+
index4 + 1,
2836
+
children,
2837
+
fun(get1(index4 + 1, children))
2838
+
);
2839
+
return new Leaf(new_children);
2840
+
}
2841
+
}
2842
+
var branch_factor = 32;
2843
+
function index_map2(offset, node2, fun) {
2844
+
if (node2 instanceof Balanced) {
2845
+
let size$1 = node2.size;
2846
+
let children = node2.children;
2847
+
let children$1 = index_map(
2848
+
children,
2849
+
(child, index4) => {
2850
+
return index_map2(offset + (index4 - 1) * branch_factor, child, fun);
2851
+
}
2852
+
);
2853
+
return new Balanced(size$1, children$1);
2854
+
} else if (node2 instanceof Unbalanced) {
2855
+
let sizes = node2.sizes;
2856
+
let children = node2.children;
2857
+
let children$1 = index_map(
2858
+
children,
2859
+
(child, index4) => {
2860
+
let _block;
2861
+
if (index4 === 1) {
2862
+
_block = 0;
2863
+
} else {
2864
+
_block = get1(index4 - 1, sizes);
2865
+
}
2866
+
let child_offset = _block;
2867
+
return index_map2(offset + child_offset, child, fun);
2868
+
}
2869
+
);
2870
+
return new Unbalanced(sizes, children$1);
2871
+
} else {
2872
+
let children = node2.children;
2873
+
let children$1 = index_map(
2874
+
children,
2875
+
(item, index4) => {
2876
+
return fun(item, index4 + offset - 1);
2877
+
}
2878
+
);
2879
+
return new Leaf(children$1);
2880
+
}
2881
+
}
2882
+
2883
+
// build/dev/javascript/iv/iv/internal/builder.mjs
2884
+
var Builder = class extends CustomType {
2885
+
constructor(nodes, items, push_node, push_item) {
2886
+
super();
2887
+
this.nodes = nodes;
2888
+
this.items = items;
2889
+
this.push_node = push_node;
2890
+
this.push_item = push_item;
2891
+
}
2892
+
};
2893
+
function append_node(nodes, node2, shift) {
2894
+
if (nodes instanceof Empty) {
2895
+
return toList([singleton(node2)]);
2896
+
} else {
2897
+
let nodes$1 = nodes.head;
2898
+
let rest = nodes.tail;
2899
+
let $ = length3(nodes$1) < branch_factor;
2900
+
if ($) {
2901
+
return prepend(append3(nodes$1, node2), rest);
2902
+
} else {
2903
+
let shift$1 = shift + branch_bits;
2904
+
let new_node = balanced(shift$1, nodes$1);
2905
+
return prepend(
2906
+
singleton(node2),
2907
+
append_node(rest, new_node, shift$1)
2908
+
);
2909
+
}
2910
+
}
2911
+
}
2912
+
function new$() {
2913
+
return new Builder(toList([]), empty(), append_node, append3);
2914
+
}
2915
+
function push(builder, item) {
2916
+
let nodes = builder.nodes;
2917
+
let items = builder.items;
2918
+
let push_node = builder.push_node;
2919
+
let push_item = builder.push_item;
2920
+
let $ = length3(items) === branch_factor;
2921
+
if ($) {
2922
+
let leaf2 = leaf(items);
2923
+
return new Builder(
2924
+
push_node(nodes, leaf2, 0),
2925
+
singleton(item),
2926
+
push_node,
2927
+
push_item
2928
+
);
2929
+
} else {
2930
+
return new Builder(nodes, push_item(items, item), push_node, push_item);
2931
+
}
2932
+
}
2933
+
function compress_nodes(loop$nodes, loop$push_node, loop$shift) {
2934
+
while (true) {
2935
+
let nodes = loop$nodes;
2936
+
let push_node = loop$push_node;
2937
+
let shift = loop$shift;
2938
+
if (nodes instanceof Empty) {
2939
+
return new Error(void 0);
2940
+
} else {
2941
+
let $ = nodes.tail;
2942
+
if ($ instanceof Empty) {
2943
+
let root3 = nodes.head;
2944
+
return new Ok([shift, root3]);
2945
+
} else {
2946
+
let nodes$1 = nodes.head;
2947
+
let rest = $;
2948
+
let shift$1 = shift + branch_bits;
2949
+
let compressed = push_node(
2950
+
rest,
2951
+
branch(shift$1, nodes$1),
2952
+
shift$1
2953
+
);
2954
+
loop$nodes = compressed;
2955
+
loop$push_node = push_node;
2956
+
loop$shift = shift$1;
2957
+
}
2958
+
}
2959
+
}
2960
+
}
2961
+
function build(builder) {
2962
+
let nodes = builder.nodes;
2963
+
let items = builder.items;
2964
+
let push_node = builder.push_node;
2965
+
let items_len = length3(items);
2966
+
let _block;
2967
+
let $ = items_len > 0;
2968
+
if ($) {
2969
+
_block = push_node(nodes, leaf(items), 0);
2970
+
} else {
2971
+
_block = nodes;
2972
+
}
2973
+
let nodes$1 = _block;
2974
+
return compress_nodes(nodes$1, push_node, 0);
2975
+
}
2976
+
2977
+
// build/dev/javascript/iv/iv.mjs
2978
+
var Empty2 = class extends CustomType {
2979
+
};
2980
+
var Array2 = class extends CustomType {
2981
+
constructor(shift, root3) {
2982
+
super();
2983
+
this.shift = shift;
2984
+
this.root = root3;
2985
+
}
2986
+
};
2987
+
function array(shift, nodes) {
2988
+
let $ = length3(nodes);
2989
+
if ($ === 0) {
2990
+
return new Empty2();
2991
+
} else if ($ === 1) {
2992
+
return new Array2(shift, get1(1, nodes));
2993
+
} else {
2994
+
let shift$1 = shift + branch_bits;
2995
+
return new Array2(shift$1, branch(shift$1, nodes));
2996
+
}
2997
+
}
2998
+
function from_list2(list4) {
2999
+
let $ = (() => {
3000
+
let _pipe = list4;
3001
+
let _pipe$1 = fold(_pipe, new$(), push);
3002
+
return build(_pipe$1);
3003
+
})();
3004
+
if ($ instanceof Ok) {
3005
+
let shift = $[0][0];
3006
+
let nodes = $[0][1];
3007
+
return array(shift, nodes);
3008
+
} else {
3009
+
return new Empty2();
3010
+
}
3011
+
}
3012
+
function get2(array4, index4) {
3013
+
if (array4 instanceof Empty2) {
3014
+
return new Error(void 0);
3015
+
} else {
3016
+
let shift = array4.shift;
3017
+
let root3 = array4.root;
3018
+
let $ = 0 <= index4 && index4 < size(root3);
3019
+
if ($) {
3020
+
return new Ok(get(root3, shift, index4));
3021
+
} else {
3022
+
return new Error(void 0);
3023
+
}
3024
+
}
3025
+
}
3026
+
function update2(array4, index4, fun) {
3027
+
if (array4 instanceof Empty2) {
3028
+
return new Error(void 0);
3029
+
} else {
3030
+
let shift = array4.shift;
3031
+
let root3 = array4.root;
3032
+
let $ = 0 <= index4 && index4 < size(root3);
3033
+
if ($) {
3034
+
return new Ok(new Array2(shift, update(shift, root3, index4, fun)));
3035
+
} else {
3036
+
return new Error(void 0);
3037
+
}
3038
+
}
3039
+
}
3040
+
function set(array4, index4, item) {
3041
+
return update2(array4, index4, (_) => {
3042
+
return item;
3043
+
});
3044
+
}
3045
+
function index_map3(array4, fun) {
3046
+
if (array4 instanceof Empty2) {
3047
+
return new Empty2();
3048
+
} else {
3049
+
let shift = array4.shift;
3050
+
let root3 = array4.root;
3051
+
return new Array2(shift, index_map2(0, root3, fun));
3052
+
}
3053
+
}
3054
+
function fold_right3(array4, state, fun) {
3055
+
if (array4 instanceof Empty2) {
3056
+
return state;
3057
+
} else {
3058
+
let root3 = array4.root;
3059
+
return fold_right2(root3, state, fun);
3060
+
}
3061
+
}
3062
+
function to_list(array4) {
3063
+
return fold_right3(array4, toList([]), prepend2);
3064
+
}
3065
+
3066
+
// build/dev/javascript/gleam_stdlib/gleam/function.mjs
3067
+
function identity2(x) {
3068
+
return x;
3069
+
}
3070
+
function tap(arg, effect) {
3071
+
effect(arg);
3072
+
return arg;
3073
+
}
3074
+
3075
+
// build/dev/javascript/gleam_stdlib/gleam/set.mjs
3076
+
var Set2 = class extends CustomType {
3077
+
constructor(dict2) {
3078
+
super();
3079
+
this.dict = dict2;
3080
+
}
3081
+
};
3082
+
function new$3() {
3083
+
return new Set2(new_map());
3084
+
}
3085
+
function contains(set2, member) {
3086
+
let _pipe = set2.dict;
3087
+
let _pipe$1 = map_get(_pipe, member);
3088
+
return is_ok(_pipe$1);
3089
+
}
3090
+
var token = void 0;
3091
+
function insert2(set2, member) {
3092
+
return new Set2(insert(set2.dict, member, token));
3093
+
}
3094
+
3095
+
// build/dev/javascript/lustre/lustre/internals/constants.ffi.mjs
3096
+
var EMPTY_DICT = /* @__PURE__ */ Dict.new();
3097
+
var EMPTY_SET = /* @__PURE__ */ new$3();
3098
+
var empty_dict = () => EMPTY_DICT;
3099
+
var empty_set = () => EMPTY_SET;
3100
+
var document2 = () => globalThis?.document;
3101
+
var NAMESPACE_HTML = "http://www.w3.org/1999/xhtml";
3102
+
var ELEMENT_NODE = 1;
3103
+
var TEXT_NODE = 3;
3104
+
var DOCUMENT_FRAGMENT_NODE = 11;
3105
+
var SUPPORTS_MOVE_BEFORE = !!globalThis.HTMLElement?.prototype?.moveBefore;
3106
+
3107
+
// build/dev/javascript/lustre/lustre/internals/constants.mjs
3108
+
var empty_list = /* @__PURE__ */ toList([]);
3109
+
var option_none = /* @__PURE__ */ new None();
3110
+
3111
+
// build/dev/javascript/lustre/lustre/vdom/vattr.ffi.mjs
3112
+
var GT = /* @__PURE__ */ new Gt();
3113
+
var LT = /* @__PURE__ */ new Lt();
3114
+
var EQ = /* @__PURE__ */ new Eq();
3115
+
function compare3(a, b) {
3116
+
if (a.name === b.name) {
3117
+
return EQ;
3118
+
} else if (a.name < b.name) {
3119
+
return LT;
3120
+
} else {
3121
+
return GT;
3122
+
}
3123
+
}
3124
+
3125
+
// build/dev/javascript/lustre/lustre/vdom/vattr.mjs
3126
+
var Attribute = class extends CustomType {
3127
+
constructor(kind, name, value) {
3128
+
super();
3129
+
this.kind = kind;
3130
+
this.name = name;
3131
+
this.value = value;
3132
+
}
3133
+
};
3134
+
var Property = class extends CustomType {
3135
+
constructor(kind, name, value) {
3136
+
super();
3137
+
this.kind = kind;
3138
+
this.name = name;
3139
+
this.value = value;
3140
+
}
3141
+
};
3142
+
var Event2 = class extends CustomType {
3143
+
constructor(kind, name, handler, include, prevent_default, stop_propagation, immediate2, debounce, throttle) {
3144
+
super();
3145
+
this.kind = kind;
3146
+
this.name = name;
3147
+
this.handler = handler;
3148
+
this.include = include;
3149
+
this.prevent_default = prevent_default;
3150
+
this.stop_propagation = stop_propagation;
3151
+
this.immediate = immediate2;
3152
+
this.debounce = debounce;
3153
+
this.throttle = throttle;
3154
+
}
3155
+
};
3156
+
var Handler = class extends CustomType {
3157
+
constructor(prevent_default, stop_propagation, message) {
3158
+
super();
3159
+
this.prevent_default = prevent_default;
3160
+
this.stop_propagation = stop_propagation;
3161
+
this.message = message;
3162
+
}
3163
+
};
3164
+
var Never = class extends CustomType {
3165
+
constructor(kind) {
3166
+
super();
3167
+
this.kind = kind;
3168
+
}
3169
+
};
3170
+
function merge(loop$attributes, loop$merged) {
3171
+
while (true) {
3172
+
let attributes = loop$attributes;
3173
+
let merged = loop$merged;
3174
+
if (attributes instanceof Empty) {
3175
+
return merged;
3176
+
} else {
3177
+
let $ = attributes.head;
3178
+
if ($ instanceof Attribute) {
3179
+
let $1 = $.name;
3180
+
if ($1 === "") {
3181
+
let rest = attributes.tail;
3182
+
loop$attributes = rest;
3183
+
loop$merged = merged;
3184
+
} else if ($1 === "class") {
3185
+
let $2 = $.value;
3186
+
if ($2 === "") {
3187
+
let rest = attributes.tail;
3188
+
loop$attributes = rest;
3189
+
loop$merged = merged;
3190
+
} else {
3191
+
let $3 = attributes.tail;
3192
+
if ($3 instanceof Empty) {
3193
+
let attribute$1 = $;
3194
+
let rest = $3;
3195
+
loop$attributes = rest;
3196
+
loop$merged = prepend(attribute$1, merged);
3197
+
} else {
3198
+
let $4 = $3.head;
3199
+
if ($4 instanceof Attribute) {
3200
+
let $5 = $4.name;
3201
+
if ($5 === "class") {
3202
+
let kind = $.kind;
3203
+
let class1 = $2;
3204
+
let rest = $3.tail;
3205
+
let class2 = $4.value;
3206
+
let value = class1 + " " + class2;
3207
+
let attribute$1 = new Attribute(kind, "class", value);
3208
+
loop$attributes = prepend(attribute$1, rest);
3209
+
loop$merged = merged;
3210
+
} else {
3211
+
let attribute$1 = $;
3212
+
let rest = $3;
3213
+
loop$attributes = rest;
3214
+
loop$merged = prepend(attribute$1, merged);
3215
+
}
3216
+
} else {
3217
+
let attribute$1 = $;
3218
+
let rest = $3;
3219
+
loop$attributes = rest;
3220
+
loop$merged = prepend(attribute$1, merged);
3221
+
}
3222
+
}
3223
+
}
3224
+
} else if ($1 === "style") {
3225
+
let $2 = $.value;
3226
+
if ($2 === "") {
3227
+
let rest = attributes.tail;
3228
+
loop$attributes = rest;
3229
+
loop$merged = merged;
3230
+
} else {
3231
+
let $3 = attributes.tail;
3232
+
if ($3 instanceof Empty) {
3233
+
let attribute$1 = $;
3234
+
let rest = $3;
3235
+
loop$attributes = rest;
3236
+
loop$merged = prepend(attribute$1, merged);
3237
+
} else {
3238
+
let $4 = $3.head;
3239
+
if ($4 instanceof Attribute) {
3240
+
let $5 = $4.name;
3241
+
if ($5 === "style") {
3242
+
let kind = $.kind;
3243
+
let style1 = $2;
3244
+
let rest = $3.tail;
3245
+
let style2 = $4.value;
3246
+
let value = style1 + ";" + style2;
3247
+
let attribute$1 = new Attribute(kind, "style", value);
3248
+
loop$attributes = prepend(attribute$1, rest);
3249
+
loop$merged = merged;
3250
+
} else {
3251
+
let attribute$1 = $;
3252
+
let rest = $3;
3253
+
loop$attributes = rest;
3254
+
loop$merged = prepend(attribute$1, merged);
3255
+
}
3256
+
} else {
3257
+
let attribute$1 = $;
3258
+
let rest = $3;
3259
+
loop$attributes = rest;
3260
+
loop$merged = prepend(attribute$1, merged);
3261
+
}
3262
+
}
3263
+
}
3264
+
} else {
3265
+
let attribute$1 = $;
3266
+
let rest = attributes.tail;
3267
+
loop$attributes = rest;
3268
+
loop$merged = prepend(attribute$1, merged);
3269
+
}
3270
+
} else {
3271
+
let attribute$1 = $;
3272
+
let rest = attributes.tail;
3273
+
loop$attributes = rest;
3274
+
loop$merged = prepend(attribute$1, merged);
3275
+
}
3276
+
}
3277
+
}
3278
+
}
3279
+
function prepare(attributes) {
3280
+
if (attributes instanceof Empty) {
3281
+
return attributes;
3282
+
} else {
3283
+
let $ = attributes.tail;
3284
+
if ($ instanceof Empty) {
3285
+
return attributes;
3286
+
} else {
3287
+
let _pipe = attributes;
3288
+
let _pipe$1 = sort(_pipe, (a, b) => {
3289
+
return compare3(b, a);
3290
+
});
3291
+
return merge(_pipe$1, empty_list);
3292
+
}
3293
+
}
3294
+
}
3295
+
var attribute_kind = 0;
3296
+
function attribute(name, value) {
3297
+
return new Attribute(attribute_kind, name, value);
3298
+
}
3299
+
var property_kind = 1;
3300
+
var event_kind = 2;
3301
+
function event(name, handler, include, prevent_default, stop_propagation, immediate2, debounce, throttle) {
3302
+
return new Event2(
3303
+
event_kind,
3304
+
name,
3305
+
handler,
3306
+
include,
3307
+
prevent_default,
3308
+
stop_propagation,
3309
+
immediate2,
3310
+
debounce,
3311
+
throttle
3312
+
);
3313
+
}
3314
+
var never_kind = 0;
3315
+
var never = /* @__PURE__ */ new Never(never_kind);
3316
+
var always_kind = 2;
3317
+
3318
+
// build/dev/javascript/lustre/lustre/attribute.mjs
3319
+
function attribute2(name, value) {
3320
+
return attribute(name, value);
3321
+
}
3322
+
function class$(name) {
3323
+
return attribute2("class", name);
3324
+
}
3325
+
function placeholder(text5) {
3326
+
return attribute2("placeholder", text5);
3327
+
}
3328
+
function type_(control_type) {
3329
+
return attribute2("type", control_type);
3330
+
}
3331
+
3332
+
// build/dev/javascript/lustre/lustre/effect.mjs
3333
+
var Effect = class extends CustomType {
3334
+
constructor(synchronous, before_paint2, after_paint) {
3335
+
super();
3336
+
this.synchronous = synchronous;
3337
+
this.before_paint = before_paint2;
3338
+
this.after_paint = after_paint;
3339
+
}
3340
+
};
3341
+
var empty3 = /* @__PURE__ */ new Effect(
3342
+
/* @__PURE__ */ toList([]),
3343
+
/* @__PURE__ */ toList([]),
3344
+
/* @__PURE__ */ toList([])
3345
+
);
3346
+
function none() {
3347
+
return empty3;
3348
+
}
3349
+
function from(effect) {
3350
+
let task = (actions) => {
3351
+
let dispatch = actions.dispatch;
3352
+
return effect(dispatch);
3353
+
};
3354
+
let _record = empty3;
3355
+
return new Effect(toList([task]), _record.before_paint, _record.after_paint);
3356
+
}
3357
+
3358
+
// build/dev/javascript/lustre/lustre/internals/mutable_map.ffi.mjs
3359
+
function empty4() {
3360
+
return null;
3361
+
}
3362
+
function get3(map7, key) {
3363
+
const value = map7?.get(key);
3364
+
if (value != null) {
3365
+
return new Ok(value);
3366
+
} else {
3367
+
return new Error(void 0);
3368
+
}
3369
+
}
3370
+
function insert3(map7, key, value) {
3371
+
map7 ??= /* @__PURE__ */ new Map();
3372
+
map7.set(key, value);
3373
+
return map7;
3374
+
}
3375
+
function remove(map7, key) {
3376
+
map7?.delete(key);
3377
+
return map7;
3378
+
}
3379
+
3380
+
// build/dev/javascript/lustre/lustre/vdom/path.mjs
3381
+
var Root = class extends CustomType {
3382
+
};
3383
+
var Key = class extends CustomType {
3384
+
constructor(key, parent) {
3385
+
super();
3386
+
this.key = key;
3387
+
this.parent = parent;
3388
+
}
3389
+
};
3390
+
var Index = class extends CustomType {
3391
+
constructor(index4, parent) {
3392
+
super();
3393
+
this.index = index4;
3394
+
this.parent = parent;
3395
+
}
3396
+
};
3397
+
function do_matches(loop$path, loop$candidates) {
3398
+
while (true) {
3399
+
let path = loop$path;
3400
+
let candidates = loop$candidates;
3401
+
if (candidates instanceof Empty) {
3402
+
return false;
3403
+
} else {
3404
+
let candidate = candidates.head;
3405
+
let rest = candidates.tail;
3406
+
let $ = starts_with(path, candidate);
3407
+
if ($) {
3408
+
return true;
3409
+
} else {
3410
+
loop$path = path;
3411
+
loop$candidates = rest;
3412
+
}
3413
+
}
3414
+
}
3415
+
}
3416
+
function add3(parent, index4, key) {
3417
+
if (key === "") {
3418
+
return new Index(index4, parent);
3419
+
} else {
3420
+
return new Key(key, parent);
3421
+
}
3422
+
}
3423
+
var root2 = /* @__PURE__ */ new Root();
3424
+
var separator_element = " ";
3425
+
function do_to_string(loop$path, loop$acc) {
3426
+
while (true) {
3427
+
let path = loop$path;
3428
+
let acc = loop$acc;
3429
+
if (path instanceof Root) {
3430
+
if (acc instanceof Empty) {
3431
+
return "";
3432
+
} else {
3433
+
let segments = acc.tail;
3434
+
return concat2(segments);
3435
+
}
3436
+
} else if (path instanceof Key) {
3437
+
let key = path.key;
3438
+
let parent = path.parent;
3439
+
loop$path = parent;
3440
+
loop$acc = prepend(separator_element, prepend(key, acc));
3441
+
} else {
3442
+
let index4 = path.index;
3443
+
let parent = path.parent;
3444
+
loop$path = parent;
3445
+
loop$acc = prepend(
3446
+
separator_element,
3447
+
prepend(to_string(index4), acc)
3448
+
);
3449
+
}
3450
+
}
3451
+
}
3452
+
function to_string2(path) {
3453
+
return do_to_string(path, toList([]));
3454
+
}
3455
+
function matches(path, candidates) {
3456
+
if (candidates instanceof Empty) {
3457
+
return false;
3458
+
} else {
3459
+
return do_matches(to_string2(path), candidates);
3460
+
}
3461
+
}
3462
+
var separator_event = "\n";
3463
+
function event2(path, event4) {
3464
+
return do_to_string(path, toList([separator_event, event4]));
3465
+
}
3466
+
3467
+
// build/dev/javascript/lustre/lustre/vdom/vnode.mjs
3468
+
var Fragment = class extends CustomType {
3469
+
constructor(kind, key, mapper, children, keyed_children, children_count) {
3470
+
super();
3471
+
this.kind = kind;
3472
+
this.key = key;
3473
+
this.mapper = mapper;
3474
+
this.children = children;
3475
+
this.keyed_children = keyed_children;
3476
+
this.children_count = children_count;
3477
+
}
3478
+
};
3479
+
var Element = class extends CustomType {
3480
+
constructor(kind, key, mapper, namespace, tag, attributes, children, keyed_children, self_closing, void$) {
3481
+
super();
3482
+
this.kind = kind;
3483
+
this.key = key;
3484
+
this.mapper = mapper;
3485
+
this.namespace = namespace;
3486
+
this.tag = tag;
3487
+
this.attributes = attributes;
3488
+
this.children = children;
3489
+
this.keyed_children = keyed_children;
3490
+
this.self_closing = self_closing;
3491
+
this.void = void$;
3492
+
}
3493
+
};
3494
+
var Text = class extends CustomType {
3495
+
constructor(kind, key, mapper, content) {
3496
+
super();
3497
+
this.kind = kind;
3498
+
this.key = key;
3499
+
this.mapper = mapper;
3500
+
this.content = content;
3501
+
}
3502
+
};
3503
+
var UnsafeInnerHtml = class extends CustomType {
3504
+
constructor(kind, key, mapper, namespace, tag, attributes, inner_html) {
3505
+
super();
3506
+
this.kind = kind;
3507
+
this.key = key;
3508
+
this.mapper = mapper;
3509
+
this.namespace = namespace;
3510
+
this.tag = tag;
3511
+
this.attributes = attributes;
3512
+
this.inner_html = inner_html;
3513
+
}
3514
+
};
3515
+
function is_void_element(tag, namespace) {
3516
+
if (namespace === "") {
3517
+
if (tag === "area") {
3518
+
return true;
3519
+
} else if (tag === "base") {
3520
+
return true;
3521
+
} else if (tag === "br") {
3522
+
return true;
3523
+
} else if (tag === "col") {
3524
+
return true;
3525
+
} else if (tag === "embed") {
3526
+
return true;
3527
+
} else if (tag === "hr") {
3528
+
return true;
3529
+
} else if (tag === "img") {
3530
+
return true;
3531
+
} else if (tag === "input") {
3532
+
return true;
3533
+
} else if (tag === "link") {
3534
+
return true;
3535
+
} else if (tag === "meta") {
3536
+
return true;
3537
+
} else if (tag === "param") {
3538
+
return true;
3539
+
} else if (tag === "source") {
3540
+
return true;
3541
+
} else if (tag === "track") {
3542
+
return true;
3543
+
} else if (tag === "wbr") {
3544
+
return true;
3545
+
} else {
3546
+
return false;
3547
+
}
3548
+
} else {
3549
+
return false;
3550
+
}
3551
+
}
3552
+
function advance(node2) {
3553
+
if (node2 instanceof Fragment) {
3554
+
let children_count = node2.children_count;
3555
+
return 1 + children_count;
3556
+
} else {
3557
+
return 1;
3558
+
}
3559
+
}
3560
+
var fragment_kind = 0;
3561
+
function fragment(key, mapper, children, keyed_children, children_count) {
3562
+
return new Fragment(
3563
+
fragment_kind,
3564
+
key,
3565
+
mapper,
3566
+
children,
3567
+
keyed_children,
3568
+
children_count
3569
+
);
3570
+
}
3571
+
var element_kind = 1;
3572
+
function element(key, mapper, namespace, tag, attributes, children, keyed_children, self_closing, void$) {
3573
+
return new Element(
3574
+
element_kind,
3575
+
key,
3576
+
mapper,
3577
+
namespace,
3578
+
tag,
3579
+
prepare(attributes),
3580
+
children,
3581
+
keyed_children,
3582
+
self_closing,
3583
+
void$ || is_void_element(tag, namespace)
3584
+
);
3585
+
}
3586
+
var text_kind = 2;
3587
+
function text(key, mapper, content) {
3588
+
return new Text(text_kind, key, mapper, content);
3589
+
}
3590
+
var unsafe_inner_html_kind = 3;
3591
+
function unsafe_inner_html(key, mapper, namespace, tag, attributes, inner_html) {
3592
+
return new UnsafeInnerHtml(
3593
+
unsafe_inner_html_kind,
3594
+
key,
3595
+
mapper,
3596
+
namespace,
3597
+
tag,
3598
+
prepare(attributes),
3599
+
inner_html
3600
+
);
3601
+
}
3602
+
function set_fragment_key(loop$key, loop$children, loop$index, loop$new_children, loop$keyed_children) {
3603
+
while (true) {
3604
+
let key = loop$key;
3605
+
let children = loop$children;
3606
+
let index4 = loop$index;
3607
+
let new_children = loop$new_children;
3608
+
let keyed_children = loop$keyed_children;
3609
+
if (children instanceof Empty) {
3610
+
return [reverse(new_children), keyed_children];
3611
+
} else {
3612
+
let $ = children.head;
3613
+
if ($ instanceof Fragment) {
3614
+
let node2 = $;
3615
+
if (node2.key === "") {
3616
+
let children$1 = children.tail;
3617
+
let child_key = key + "::" + to_string(index4);
3618
+
let $1 = set_fragment_key(
3619
+
child_key,
3620
+
node2.children,
3621
+
0,
3622
+
empty_list,
3623
+
empty4()
3624
+
);
3625
+
let node_children = $1[0];
3626
+
let node_keyed_children = $1[1];
3627
+
let _block;
3628
+
let _record = node2;
3629
+
_block = new Fragment(
3630
+
_record.kind,
3631
+
_record.key,
3632
+
_record.mapper,
3633
+
node_children,
3634
+
node_keyed_children,
3635
+
_record.children_count
3636
+
);
3637
+
let new_node = _block;
3638
+
let new_children$1 = prepend(new_node, new_children);
3639
+
let index$1 = index4 + 1;
3640
+
loop$key = key;
3641
+
loop$children = children$1;
3642
+
loop$index = index$1;
3643
+
loop$new_children = new_children$1;
3644
+
loop$keyed_children = keyed_children;
3645
+
} else {
3646
+
let node$1 = $;
3647
+
if (node$1.key !== "") {
3648
+
let children$1 = children.tail;
3649
+
let child_key = key + "::" + node$1.key;
3650
+
let keyed_node = to_keyed(child_key, node$1);
3651
+
let new_children$1 = prepend(keyed_node, new_children);
3652
+
let keyed_children$1 = insert3(
3653
+
keyed_children,
3654
+
child_key,
3655
+
keyed_node
3656
+
);
3657
+
let index$1 = index4 + 1;
3658
+
loop$key = key;
3659
+
loop$children = children$1;
3660
+
loop$index = index$1;
3661
+
loop$new_children = new_children$1;
3662
+
loop$keyed_children = keyed_children$1;
3663
+
} else {
3664
+
let node$2 = $;
3665
+
let children$1 = children.tail;
3666
+
let new_children$1 = prepend(node$2, new_children);
3667
+
let index$1 = index4 + 1;
3668
+
loop$key = key;
3669
+
loop$children = children$1;
3670
+
loop$index = index$1;
3671
+
loop$new_children = new_children$1;
3672
+
loop$keyed_children = keyed_children;
3673
+
}
3674
+
}
3675
+
} else {
3676
+
let node2 = $;
3677
+
if (node2.key !== "") {
3678
+
let children$1 = children.tail;
3679
+
let child_key = key + "::" + node2.key;
3680
+
let keyed_node = to_keyed(child_key, node2);
3681
+
let new_children$1 = prepend(keyed_node, new_children);
3682
+
let keyed_children$1 = insert3(
3683
+
keyed_children,
3684
+
child_key,
3685
+
keyed_node
3686
+
);
3687
+
let index$1 = index4 + 1;
3688
+
loop$key = key;
3689
+
loop$children = children$1;
3690
+
loop$index = index$1;
3691
+
loop$new_children = new_children$1;
3692
+
loop$keyed_children = keyed_children$1;
3693
+
} else {
3694
+
let node$1 = $;
3695
+
let children$1 = children.tail;
3696
+
let new_children$1 = prepend(node$1, new_children);
3697
+
let index$1 = index4 + 1;
3698
+
loop$key = key;
3699
+
loop$children = children$1;
3700
+
loop$index = index$1;
3701
+
loop$new_children = new_children$1;
3702
+
loop$keyed_children = keyed_children;
3703
+
}
3704
+
}
3705
+
}
3706
+
}
3707
+
}
3708
+
function to_keyed(key, node2) {
3709
+
if (node2 instanceof Fragment) {
3710
+
let children = node2.children;
3711
+
let $ = set_fragment_key(
3712
+
key,
3713
+
children,
3714
+
0,
3715
+
empty_list,
3716
+
empty4()
3717
+
);
3718
+
let children$1 = $[0];
3719
+
let keyed_children = $[1];
3720
+
let _record = node2;
3721
+
return new Fragment(
3722
+
_record.kind,
3723
+
key,
3724
+
_record.mapper,
3725
+
children$1,
3726
+
keyed_children,
3727
+
_record.children_count
3728
+
);
3729
+
} else if (node2 instanceof Element) {
3730
+
let _record = node2;
3731
+
return new Element(
3732
+
_record.kind,
3733
+
key,
3734
+
_record.mapper,
3735
+
_record.namespace,
3736
+
_record.tag,
3737
+
_record.attributes,
3738
+
_record.children,
3739
+
_record.keyed_children,
3740
+
_record.self_closing,
3741
+
_record.void
3742
+
);
3743
+
} else if (node2 instanceof Text) {
3744
+
let _record = node2;
3745
+
return new Text(_record.kind, key, _record.mapper, _record.content);
3746
+
} else {
3747
+
let _record = node2;
3748
+
return new UnsafeInnerHtml(
3749
+
_record.kind,
3750
+
key,
3751
+
_record.mapper,
3752
+
_record.namespace,
3753
+
_record.tag,
3754
+
_record.attributes,
3755
+
_record.inner_html
3756
+
);
3757
+
}
3758
+
}
3759
+
3760
+
// build/dev/javascript/lustre/lustre/internals/equals.ffi.mjs
3761
+
var isReferenceEqual = (a, b) => a === b;
3762
+
var isEqual2 = (a, b) => {
3763
+
if (a === b) {
3764
+
return true;
3765
+
}
3766
+
if (a == null || b == null) {
3767
+
return false;
3768
+
}
3769
+
const type = typeof a;
3770
+
if (type !== typeof b) {
3771
+
return false;
3772
+
}
3773
+
if (type !== "object") {
3774
+
return false;
3775
+
}
3776
+
const ctor = a.constructor;
3777
+
if (ctor !== b.constructor) {
3778
+
return false;
3779
+
}
3780
+
if (Array.isArray(a)) {
3781
+
return areArraysEqual(a, b);
3782
+
}
3783
+
return areObjectsEqual(a, b);
3784
+
};
3785
+
var areArraysEqual = (a, b) => {
3786
+
let index4 = a.length;
3787
+
if (index4 !== b.length) {
3788
+
return false;
3789
+
}
3790
+
while (index4--) {
3791
+
if (!isEqual2(a[index4], b[index4])) {
3792
+
return false;
3793
+
}
3794
+
}
3795
+
return true;
3796
+
};
3797
+
var areObjectsEqual = (a, b) => {
3798
+
const properties = Object.keys(a);
3799
+
let index4 = properties.length;
3800
+
if (Object.keys(b).length !== index4) {
3801
+
return false;
3802
+
}
3803
+
while (index4--) {
3804
+
const property4 = properties[index4];
3805
+
if (!Object.hasOwn(b, property4)) {
3806
+
return false;
3807
+
}
3808
+
if (!isEqual2(a[property4], b[property4])) {
3809
+
return false;
3810
+
}
3811
+
}
3812
+
return true;
3813
+
};
3814
+
3815
+
// build/dev/javascript/lustre/lustre/vdom/events.mjs
3816
+
var Events = class extends CustomType {
3817
+
constructor(handlers, dispatched_paths, next_dispatched_paths) {
3818
+
super();
3819
+
this.handlers = handlers;
3820
+
this.dispatched_paths = dispatched_paths;
3821
+
this.next_dispatched_paths = next_dispatched_paths;
3822
+
}
3823
+
};
3824
+
function new$5() {
3825
+
return new Events(
3826
+
empty4(),
3827
+
empty_list,
3828
+
empty_list
3829
+
);
3830
+
}
3831
+
function tick(events) {
3832
+
return new Events(
3833
+
events.handlers,
3834
+
events.next_dispatched_paths,
3835
+
empty_list
3836
+
);
3837
+
}
3838
+
function do_remove_event(handlers, path, name) {
3839
+
return remove(handlers, event2(path, name));
3840
+
}
3841
+
function remove_event(events, path, name) {
3842
+
let handlers = do_remove_event(events.handlers, path, name);
3843
+
let _record = events;
3844
+
return new Events(
3845
+
handlers,
3846
+
_record.dispatched_paths,
3847
+
_record.next_dispatched_paths
3848
+
);
3849
+
}
3850
+
function remove_attributes(handlers, path, attributes) {
3851
+
return fold(
3852
+
attributes,
3853
+
handlers,
3854
+
(events, attribute3) => {
3855
+
if (attribute3 instanceof Event2) {
3856
+
let name = attribute3.name;
3857
+
return do_remove_event(events, path, name);
3858
+
} else {
3859
+
return events;
3860
+
}
3861
+
}
3862
+
);
3863
+
}
3864
+
function handle(events, path, name, event4) {
3865
+
let next_dispatched_paths = prepend(path, events.next_dispatched_paths);
3866
+
let _block;
3867
+
let _record = events;
3868
+
_block = new Events(
3869
+
_record.handlers,
3870
+
_record.dispatched_paths,
3871
+
next_dispatched_paths
3872
+
);
3873
+
let events$1 = _block;
3874
+
let $ = get3(
3875
+
events$1.handlers,
3876
+
path + separator_event + name
3877
+
);
3878
+
if ($ instanceof Ok) {
3879
+
let handler = $[0];
3880
+
return [events$1, run(event4, handler)];
3881
+
} else {
3882
+
return [events$1, new Error(toList([]))];
3883
+
}
3884
+
}
3885
+
function has_dispatched_events(events, path) {
3886
+
return matches(path, events.dispatched_paths);
3887
+
}
3888
+
function do_add_event(handlers, mapper, path, name, handler) {
3889
+
return insert3(
3890
+
handlers,
3891
+
event2(path, name),
3892
+
map2(
3893
+
handler,
3894
+
(handler2) => {
3895
+
let _record = handler2;
3896
+
return new Handler(
3897
+
_record.prevent_default,
3898
+
_record.stop_propagation,
3899
+
identity2(mapper)(handler2.message)
3900
+
);
3901
+
}
3902
+
)
3903
+
);
3904
+
}
3905
+
function add_event(events, mapper, path, name, handler) {
3906
+
let handlers = do_add_event(events.handlers, mapper, path, name, handler);
3907
+
let _record = events;
3908
+
return new Events(
3909
+
handlers,
3910
+
_record.dispatched_paths,
3911
+
_record.next_dispatched_paths
3912
+
);
3913
+
}
3914
+
function add_attributes(handlers, mapper, path, attributes) {
3915
+
return fold(
3916
+
attributes,
3917
+
handlers,
3918
+
(events, attribute3) => {
3919
+
if (attribute3 instanceof Event2) {
3920
+
let name = attribute3.name;
3921
+
let handler = attribute3.handler;
3922
+
return do_add_event(events, mapper, path, name, handler);
3923
+
} else {
3924
+
return events;
3925
+
}
3926
+
}
3927
+
);
3928
+
}
3929
+
function compose_mapper(mapper, child_mapper) {
3930
+
let $ = isReferenceEqual(mapper, identity2);
3931
+
let $1 = isReferenceEqual(child_mapper, identity2);
3932
+
if ($1) {
3933
+
return mapper;
3934
+
} else if ($) {
3935
+
return child_mapper;
3936
+
} else {
3937
+
return (msg) => {
3938
+
return mapper(child_mapper(msg));
3939
+
};
3940
+
}
3941
+
}
3942
+
function do_remove_children(loop$handlers, loop$path, loop$child_index, loop$children) {
3943
+
while (true) {
3944
+
let handlers = loop$handlers;
3945
+
let path = loop$path;
3946
+
let child_index = loop$child_index;
3947
+
let children = loop$children;
3948
+
if (children instanceof Empty) {
3949
+
return handlers;
3950
+
} else {
3951
+
let child = children.head;
3952
+
let rest = children.tail;
3953
+
let _pipe = handlers;
3954
+
let _pipe$1 = do_remove_child(_pipe, path, child_index, child);
3955
+
loop$handlers = _pipe$1;
3956
+
loop$path = path;
3957
+
loop$child_index = child_index + advance(child);
3958
+
loop$children = rest;
3959
+
}
3960
+
}
3961
+
}
3962
+
function do_remove_child(handlers, parent, child_index, child) {
3963
+
if (child instanceof Fragment) {
3964
+
let children = child.children;
3965
+
return do_remove_children(handlers, parent, child_index + 1, children);
3966
+
} else if (child instanceof Element) {
3967
+
let attributes = child.attributes;
3968
+
let children = child.children;
3969
+
let path = add3(parent, child_index, child.key);
3970
+
let _pipe = handlers;
3971
+
let _pipe$1 = remove_attributes(_pipe, path, attributes);
3972
+
return do_remove_children(_pipe$1, path, 0, children);
3973
+
} else if (child instanceof Text) {
3974
+
return handlers;
3975
+
} else {
3976
+
let attributes = child.attributes;
3977
+
let path = add3(parent, child_index, child.key);
3978
+
return remove_attributes(handlers, path, attributes);
3979
+
}
3980
+
}
3981
+
function remove_child(events, parent, child_index, child) {
3982
+
let handlers = do_remove_child(events.handlers, parent, child_index, child);
3983
+
let _record = events;
3984
+
return new Events(
3985
+
handlers,
3986
+
_record.dispatched_paths,
3987
+
_record.next_dispatched_paths
3988
+
);
3989
+
}
3990
+
function do_add_children(loop$handlers, loop$mapper, loop$path, loop$child_index, loop$children) {
3991
+
while (true) {
3992
+
let handlers = loop$handlers;
3993
+
let mapper = loop$mapper;
3994
+
let path = loop$path;
3995
+
let child_index = loop$child_index;
3996
+
let children = loop$children;
3997
+
if (children instanceof Empty) {
3998
+
return handlers;
3999
+
} else {
4000
+
let child = children.head;
4001
+
let rest = children.tail;
4002
+
let _pipe = handlers;
4003
+
let _pipe$1 = do_add_child(_pipe, mapper, path, child_index, child);
4004
+
loop$handlers = _pipe$1;
4005
+
loop$mapper = mapper;
4006
+
loop$path = path;
4007
+
loop$child_index = child_index + advance(child);
4008
+
loop$children = rest;
4009
+
}
4010
+
}
4011
+
}
4012
+
function do_add_child(handlers, mapper, parent, child_index, child) {
4013
+
if (child instanceof Fragment) {
4014
+
let children = child.children;
4015
+
let composed_mapper = compose_mapper(mapper, child.mapper);
4016
+
let child_index$1 = child_index + 1;
4017
+
return do_add_children(
4018
+
handlers,
4019
+
composed_mapper,
4020
+
parent,
4021
+
child_index$1,
4022
+
children
4023
+
);
4024
+
} else if (child instanceof Element) {
4025
+
let attributes = child.attributes;
4026
+
let children = child.children;
4027
+
let path = add3(parent, child_index, child.key);
4028
+
let composed_mapper = compose_mapper(mapper, child.mapper);
4029
+
let _pipe = handlers;
4030
+
let _pipe$1 = add_attributes(_pipe, composed_mapper, path, attributes);
4031
+
return do_add_children(_pipe$1, composed_mapper, path, 0, children);
4032
+
} else if (child instanceof Text) {
4033
+
return handlers;
4034
+
} else {
4035
+
let attributes = child.attributes;
4036
+
let path = add3(parent, child_index, child.key);
4037
+
let composed_mapper = compose_mapper(mapper, child.mapper);
4038
+
return add_attributes(handlers, composed_mapper, path, attributes);
4039
+
}
4040
+
}
4041
+
function add_child(events, mapper, parent, index4, child) {
4042
+
let handlers = do_add_child(events.handlers, mapper, parent, index4, child);
4043
+
let _record = events;
4044
+
return new Events(
4045
+
handlers,
4046
+
_record.dispatched_paths,
4047
+
_record.next_dispatched_paths
4048
+
);
4049
+
}
4050
+
function add_children(events, mapper, path, child_index, children) {
4051
+
let handlers = do_add_children(
4052
+
events.handlers,
4053
+
mapper,
4054
+
path,
4055
+
child_index,
4056
+
children
4057
+
);
4058
+
let _record = events;
4059
+
return new Events(
4060
+
handlers,
4061
+
_record.dispatched_paths,
4062
+
_record.next_dispatched_paths
4063
+
);
4064
+
}
4065
+
4066
+
// build/dev/javascript/lustre/lustre/element.mjs
4067
+
function element2(tag, attributes, children) {
4068
+
return element(
4069
+
"",
4070
+
identity2,
4071
+
"",
4072
+
tag,
4073
+
attributes,
4074
+
children,
4075
+
empty4(),
4076
+
false,
4077
+
false
4078
+
);
4079
+
}
4080
+
function namespaced(namespace, tag, attributes, children) {
4081
+
return element(
4082
+
"",
4083
+
identity2,
4084
+
namespace,
4085
+
tag,
4086
+
attributes,
4087
+
children,
4088
+
empty4(),
4089
+
false,
4090
+
false
4091
+
);
4092
+
}
4093
+
function text2(content) {
4094
+
return text("", identity2, content);
4095
+
}
4096
+
function none2() {
4097
+
return text("", identity2, "");
4098
+
}
4099
+
function count_fragment_children(loop$children, loop$count) {
4100
+
while (true) {
4101
+
let children = loop$children;
4102
+
let count = loop$count;
4103
+
if (children instanceof Empty) {
4104
+
return count;
4105
+
} else {
4106
+
let child = children.head;
4107
+
let rest = children.tail;
4108
+
loop$children = rest;
4109
+
loop$count = count + advance(child);
4110
+
}
4111
+
}
4112
+
}
4113
+
function fragment2(children) {
4114
+
return fragment(
4115
+
"",
4116
+
identity2,
4117
+
children,
4118
+
empty4(),
4119
+
count_fragment_children(children, 0)
4120
+
);
4121
+
}
4122
+
function unsafe_raw_html(namespace, tag, attributes, inner_html) {
4123
+
return unsafe_inner_html(
4124
+
"",
4125
+
identity2,
4126
+
namespace,
4127
+
tag,
4128
+
attributes,
4129
+
inner_html
4130
+
);
4131
+
}
4132
+
4133
+
// build/dev/javascript/lustre/lustre/element/html.mjs
4134
+
function style(attrs, css) {
4135
+
return unsafe_raw_html("", "style", attrs, css);
4136
+
}
4137
+
4138
+
// build/dev/javascript/lustre/lustre/vdom/patch.mjs
4139
+
var Patch = class extends CustomType {
4140
+
constructor(index4, removed, changes, children) {
4141
+
super();
4142
+
this.index = index4;
4143
+
this.removed = removed;
4144
+
this.changes = changes;
4145
+
this.children = children;
4146
+
}
4147
+
};
4148
+
var ReplaceText = class extends CustomType {
4149
+
constructor(kind, content) {
4150
+
super();
4151
+
this.kind = kind;
4152
+
this.content = content;
4153
+
}
4154
+
};
4155
+
var ReplaceInnerHtml = class extends CustomType {
4156
+
constructor(kind, inner_html) {
4157
+
super();
4158
+
this.kind = kind;
4159
+
this.inner_html = inner_html;
4160
+
}
4161
+
};
4162
+
var Update = class extends CustomType {
4163
+
constructor(kind, added, removed) {
4164
+
super();
4165
+
this.kind = kind;
4166
+
this.added = added;
4167
+
this.removed = removed;
4168
+
}
4169
+
};
4170
+
var Move = class extends CustomType {
4171
+
constructor(kind, key, before, count) {
4172
+
super();
4173
+
this.kind = kind;
4174
+
this.key = key;
4175
+
this.before = before;
4176
+
this.count = count;
4177
+
}
4178
+
};
4179
+
var RemoveKey = class extends CustomType {
4180
+
constructor(kind, key, count) {
4181
+
super();
4182
+
this.kind = kind;
4183
+
this.key = key;
4184
+
this.count = count;
4185
+
}
4186
+
};
4187
+
var Replace = class extends CustomType {
4188
+
constructor(kind, from2, count, with$) {
4189
+
super();
4190
+
this.kind = kind;
4191
+
this.from = from2;
4192
+
this.count = count;
4193
+
this.with = with$;
4194
+
}
4195
+
};
4196
+
var Insert = class extends CustomType {
4197
+
constructor(kind, children, before) {
4198
+
super();
4199
+
this.kind = kind;
4200
+
this.children = children;
4201
+
this.before = before;
4202
+
}
4203
+
};
4204
+
var Remove = class extends CustomType {
4205
+
constructor(kind, from2, count) {
4206
+
super();
4207
+
this.kind = kind;
4208
+
this.from = from2;
4209
+
this.count = count;
4210
+
}
4211
+
};
4212
+
function new$7(index4, removed, changes, children) {
4213
+
return new Patch(index4, removed, changes, children);
4214
+
}
4215
+
var replace_text_kind = 0;
4216
+
function replace_text(content) {
4217
+
return new ReplaceText(replace_text_kind, content);
4218
+
}
4219
+
var replace_inner_html_kind = 1;
4220
+
function replace_inner_html(inner_html) {
4221
+
return new ReplaceInnerHtml(replace_inner_html_kind, inner_html);
4222
+
}
4223
+
var update_kind = 2;
4224
+
function update3(added, removed) {
4225
+
return new Update(update_kind, added, removed);
4226
+
}
4227
+
var move_kind = 3;
4228
+
function move(key, before, count) {
4229
+
return new Move(move_kind, key, before, count);
4230
+
}
4231
+
var remove_key_kind = 4;
4232
+
function remove_key(key, count) {
4233
+
return new RemoveKey(remove_key_kind, key, count);
4234
+
}
4235
+
var replace_kind = 5;
4236
+
function replace2(from2, count, with$) {
4237
+
return new Replace(replace_kind, from2, count, with$);
4238
+
}
4239
+
var insert_kind = 6;
4240
+
function insert4(children, before) {
4241
+
return new Insert(insert_kind, children, before);
4242
+
}
4243
+
var remove_kind = 7;
4244
+
function remove2(from2, count) {
4245
+
return new Remove(remove_kind, from2, count);
4246
+
}
4247
+
4248
+
// build/dev/javascript/lustre/lustre/vdom/diff.mjs
4249
+
var Diff = class extends CustomType {
4250
+
constructor(patch, events) {
4251
+
super();
4252
+
this.patch = patch;
4253
+
this.events = events;
4254
+
}
4255
+
};
4256
+
var AttributeChange = class extends CustomType {
4257
+
constructor(added, removed, events) {
4258
+
super();
4259
+
this.added = added;
4260
+
this.removed = removed;
4261
+
this.events = events;
4262
+
}
4263
+
};
4264
+
function is_controlled(events, namespace, tag, path) {
4265
+
if (tag === "input") {
4266
+
if (namespace === "") {
4267
+
return has_dispatched_events(events, path);
4268
+
} else {
4269
+
return false;
4270
+
}
4271
+
} else if (tag === "select") {
4272
+
if (namespace === "") {
4273
+
return has_dispatched_events(events, path);
4274
+
} else {
4275
+
return false;
4276
+
}
4277
+
} else if (tag === "textarea") {
4278
+
if (namespace === "") {
4279
+
return has_dispatched_events(events, path);
4280
+
} else {
4281
+
return false;
4282
+
}
4283
+
} else {
4284
+
return false;
4285
+
}
4286
+
}
4287
+
function diff_attributes(loop$controlled, loop$path, loop$mapper, loop$events, loop$old, loop$new, loop$added, loop$removed) {
4288
+
while (true) {
4289
+
let controlled = loop$controlled;
4290
+
let path = loop$path;
4291
+
let mapper = loop$mapper;
4292
+
let events = loop$events;
4293
+
let old = loop$old;
4294
+
let new$11 = loop$new;
4295
+
let added = loop$added;
4296
+
let removed = loop$removed;
4297
+
if (new$11 instanceof Empty) {
4298
+
if (old instanceof Empty) {
4299
+
return new AttributeChange(added, removed, events);
4300
+
} else {
4301
+
let $ = old.head;
4302
+
if ($ instanceof Event2) {
4303
+
let prev = $;
4304
+
let old$1 = old.tail;
4305
+
let name = $.name;
4306
+
let removed$1 = prepend(prev, removed);
4307
+
let events$1 = remove_event(events, path, name);
4308
+
loop$controlled = controlled;
4309
+
loop$path = path;
4310
+
loop$mapper = mapper;
4311
+
loop$events = events$1;
4312
+
loop$old = old$1;
4313
+
loop$new = new$11;
4314
+
loop$added = added;
4315
+
loop$removed = removed$1;
4316
+
} else {
4317
+
let prev = $;
4318
+
let old$1 = old.tail;
4319
+
let removed$1 = prepend(prev, removed);
4320
+
loop$controlled = controlled;
4321
+
loop$path = path;
4322
+
loop$mapper = mapper;
4323
+
loop$events = events;
4324
+
loop$old = old$1;
4325
+
loop$new = new$11;
4326
+
loop$added = added;
4327
+
loop$removed = removed$1;
4328
+
}
4329
+
}
4330
+
} else if (old instanceof Empty) {
4331
+
let $ = new$11.head;
4332
+
if ($ instanceof Event2) {
4333
+
let next = $;
4334
+
let new$1 = new$11.tail;
4335
+
let name = $.name;
4336
+
let handler = $.handler;
4337
+
let added$1 = prepend(next, added);
4338
+
let events$1 = add_event(events, mapper, path, name, handler);
4339
+
loop$controlled = controlled;
4340
+
loop$path = path;
4341
+
loop$mapper = mapper;
4342
+
loop$events = events$1;
4343
+
loop$old = old;
4344
+
loop$new = new$1;
4345
+
loop$added = added$1;
4346
+
loop$removed = removed;
4347
+
} else {
4348
+
let next = $;
4349
+
let new$1 = new$11.tail;
4350
+
let added$1 = prepend(next, added);
4351
+
loop$controlled = controlled;
4352
+
loop$path = path;
4353
+
loop$mapper = mapper;
4354
+
loop$events = events;
4355
+
loop$old = old;
4356
+
loop$new = new$1;
4357
+
loop$added = added$1;
4358
+
loop$removed = removed;
4359
+
}
4360
+
} else {
4361
+
let next = new$11.head;
4362
+
let remaining_new = new$11.tail;
4363
+
let prev = old.head;
4364
+
let remaining_old = old.tail;
4365
+
let $ = compare3(prev, next);
4366
+
if ($ instanceof Lt) {
4367
+
if (prev instanceof Event2) {
4368
+
let name = prev.name;
4369
+
let removed$1 = prepend(prev, removed);
4370
+
let events$1 = remove_event(events, path, name);
4371
+
loop$controlled = controlled;
4372
+
loop$path = path;
4373
+
loop$mapper = mapper;
4374
+
loop$events = events$1;
4375
+
loop$old = remaining_old;
4376
+
loop$new = new$11;
4377
+
loop$added = added;
4378
+
loop$removed = removed$1;
4379
+
} else {
4380
+
let removed$1 = prepend(prev, removed);
4381
+
loop$controlled = controlled;
4382
+
loop$path = path;
4383
+
loop$mapper = mapper;
4384
+
loop$events = events;
4385
+
loop$old = remaining_old;
4386
+
loop$new = new$11;
4387
+
loop$added = added;
4388
+
loop$removed = removed$1;
4389
+
}
4390
+
} else if ($ instanceof Eq) {
4391
+
if (next instanceof Attribute) {
4392
+
if (prev instanceof Attribute) {
4393
+
let _block;
4394
+
let $1 = next.name;
4395
+
if ($1 === "value") {
4396
+
_block = controlled || prev.value !== next.value;
4397
+
} else if ($1 === "checked") {
4398
+
_block = controlled || prev.value !== next.value;
4399
+
} else if ($1 === "selected") {
4400
+
_block = controlled || prev.value !== next.value;
4401
+
} else {
4402
+
_block = prev.value !== next.value;
4403
+
}
4404
+
let has_changes = _block;
4405
+
let _block$1;
4406
+
if (has_changes) {
4407
+
_block$1 = prepend(next, added);
4408
+
} else {
4409
+
_block$1 = added;
4410
+
}
4411
+
let added$1 = _block$1;
4412
+
loop$controlled = controlled;
4413
+
loop$path = path;
4414
+
loop$mapper = mapper;
4415
+
loop$events = events;
4416
+
loop$old = remaining_old;
4417
+
loop$new = remaining_new;
4418
+
loop$added = added$1;
4419
+
loop$removed = removed;
4420
+
} else if (prev instanceof Event2) {
4421
+
let name = prev.name;
4422
+
let added$1 = prepend(next, added);
4423
+
let removed$1 = prepend(prev, removed);
4424
+
let events$1 = remove_event(events, path, name);
4425
+
loop$controlled = controlled;
4426
+
loop$path = path;
4427
+
loop$mapper = mapper;
4428
+
loop$events = events$1;
4429
+
loop$old = remaining_old;
4430
+
loop$new = remaining_new;
4431
+
loop$added = added$1;
4432
+
loop$removed = removed$1;
4433
+
} else {
4434
+
let added$1 = prepend(next, added);
4435
+
let removed$1 = prepend(prev, removed);
4436
+
loop$controlled = controlled;
4437
+
loop$path = path;
4438
+
loop$mapper = mapper;
4439
+
loop$events = events;
4440
+
loop$old = remaining_old;
4441
+
loop$new = remaining_new;
4442
+
loop$added = added$1;
4443
+
loop$removed = removed$1;
4444
+
}
4445
+
} else if (next instanceof Property) {
4446
+
if (prev instanceof Property) {
4447
+
let _block;
4448
+
let $1 = next.name;
4449
+
if ($1 === "scrollLeft") {
4450
+
_block = true;
4451
+
} else if ($1 === "scrollRight") {
4452
+
_block = true;
4453
+
} else if ($1 === "value") {
4454
+
_block = controlled || !isEqual2(
4455
+
prev.value,
4456
+
next.value
4457
+
);
4458
+
} else if ($1 === "checked") {
4459
+
_block = controlled || !isEqual2(
4460
+
prev.value,
4461
+
next.value
4462
+
);
4463
+
} else if ($1 === "selected") {
4464
+
_block = controlled || !isEqual2(
4465
+
prev.value,
4466
+
next.value
4467
+
);
4468
+
} else {
4469
+
_block = !isEqual2(prev.value, next.value);
4470
+
}
4471
+
let has_changes = _block;
4472
+
let _block$1;
4473
+
if (has_changes) {
4474
+
_block$1 = prepend(next, added);
4475
+
} else {
4476
+
_block$1 = added;
4477
+
}
4478
+
let added$1 = _block$1;
4479
+
loop$controlled = controlled;
4480
+
loop$path = path;
4481
+
loop$mapper = mapper;
4482
+
loop$events = events;
4483
+
loop$old = remaining_old;
4484
+
loop$new = remaining_new;
4485
+
loop$added = added$1;
4486
+
loop$removed = removed;
4487
+
} else if (prev instanceof Event2) {
4488
+
let name = prev.name;
4489
+
let added$1 = prepend(next, added);
4490
+
let removed$1 = prepend(prev, removed);
4491
+
let events$1 = remove_event(events, path, name);
4492
+
loop$controlled = controlled;
4493
+
loop$path = path;
4494
+
loop$mapper = mapper;
4495
+
loop$events = events$1;
4496
+
loop$old = remaining_old;
4497
+
loop$new = remaining_new;
4498
+
loop$added = added$1;
4499
+
loop$removed = removed$1;
4500
+
} else {
4501
+
let added$1 = prepend(next, added);
4502
+
let removed$1 = prepend(prev, removed);
4503
+
loop$controlled = controlled;
4504
+
loop$path = path;
4505
+
loop$mapper = mapper;
4506
+
loop$events = events;
4507
+
loop$old = remaining_old;
4508
+
loop$new = remaining_new;
4509
+
loop$added = added$1;
4510
+
loop$removed = removed$1;
4511
+
}
4512
+
} else if (prev instanceof Event2) {
4513
+
let name = next.name;
4514
+
let handler = next.handler;
4515
+
let has_changes = !isEqual(
4516
+
prev.prevent_default,
4517
+
next.prevent_default
4518
+
) || !isEqual(prev.stop_propagation, next.stop_propagation) || prev.immediate !== next.immediate || prev.debounce !== next.debounce || prev.throttle !== next.throttle;
4519
+
let _block;
4520
+
if (has_changes) {
4521
+
_block = prepend(next, added);
4522
+
} else {
4523
+
_block = added;
4524
+
}
4525
+
let added$1 = _block;
4526
+
let events$1 = add_event(events, mapper, path, name, handler);
4527
+
loop$controlled = controlled;
4528
+
loop$path = path;
4529
+
loop$mapper = mapper;
4530
+
loop$events = events$1;
4531
+
loop$old = remaining_old;
4532
+
loop$new = remaining_new;
4533
+
loop$added = added$1;
4534
+
loop$removed = removed;
4535
+
} else {
4536
+
let name = next.name;
4537
+
let handler = next.handler;
4538
+
let added$1 = prepend(next, added);
4539
+
let removed$1 = prepend(prev, removed);
4540
+
let events$1 = add_event(events, mapper, path, name, handler);
4541
+
loop$controlled = controlled;
4542
+
loop$path = path;
4543
+
loop$mapper = mapper;
4544
+
loop$events = events$1;
4545
+
loop$old = remaining_old;
4546
+
loop$new = remaining_new;
4547
+
loop$added = added$1;
4548
+
loop$removed = removed$1;
4549
+
}
4550
+
} else if (next instanceof Event2) {
4551
+
let name = next.name;
4552
+
let handler = next.handler;
4553
+
let added$1 = prepend(next, added);
4554
+
let events$1 = add_event(events, mapper, path, name, handler);
4555
+
loop$controlled = controlled;
4556
+
loop$path = path;
4557
+
loop$mapper = mapper;
4558
+
loop$events = events$1;
4559
+
loop$old = old;
4560
+
loop$new = remaining_new;
4561
+
loop$added = added$1;
4562
+
loop$removed = removed;
4563
+
} else {
4564
+
let added$1 = prepend(next, added);
4565
+
loop$controlled = controlled;
4566
+
loop$path = path;
4567
+
loop$mapper = mapper;
4568
+
loop$events = events;
4569
+
loop$old = old;
4570
+
loop$new = remaining_new;
4571
+
loop$added = added$1;
4572
+
loop$removed = removed;
4573
+
}
4574
+
}
4575
+
}
4576
+
}
4577
+
function do_diff(loop$old, loop$old_keyed, loop$new, loop$new_keyed, loop$moved, loop$moved_offset, loop$removed, loop$node_index, loop$patch_index, loop$path, loop$changes, loop$children, loop$mapper, loop$events) {
4578
+
while (true) {
4579
+
let old = loop$old;
4580
+
let old_keyed = loop$old_keyed;
4581
+
let new$11 = loop$new;
4582
+
let new_keyed = loop$new_keyed;
4583
+
let moved = loop$moved;
4584
+
let moved_offset = loop$moved_offset;
4585
+
let removed = loop$removed;
4586
+
let node_index = loop$node_index;
4587
+
let patch_index = loop$patch_index;
4588
+
let path = loop$path;
4589
+
let changes = loop$changes;
4590
+
let children = loop$children;
4591
+
let mapper = loop$mapper;
4592
+
let events = loop$events;
4593
+
if (new$11 instanceof Empty) {
4594
+
if (old instanceof Empty) {
4595
+
return new Diff(
4596
+
new Patch(patch_index, removed, changes, children),
4597
+
events
4598
+
);
4599
+
} else {
4600
+
let prev = old.head;
4601
+
let old$1 = old.tail;
4602
+
let _block;
4603
+
let $ = prev.key === "" || !contains(moved, prev.key);
4604
+
if ($) {
4605
+
_block = removed + advance(prev);
4606
+
} else {
4607
+
_block = removed;
4608
+
}
4609
+
let removed$1 = _block;
4610
+
let events$1 = remove_child(events, path, node_index, prev);
4611
+
loop$old = old$1;
4612
+
loop$old_keyed = old_keyed;
4613
+
loop$new = new$11;
4614
+
loop$new_keyed = new_keyed;
4615
+
loop$moved = moved;
4616
+
loop$moved_offset = moved_offset;
4617
+
loop$removed = removed$1;
4618
+
loop$node_index = node_index;
4619
+
loop$patch_index = patch_index;
4620
+
loop$path = path;
4621
+
loop$changes = changes;
4622
+
loop$children = children;
4623
+
loop$mapper = mapper;
4624
+
loop$events = events$1;
4625
+
}
4626
+
} else if (old instanceof Empty) {
4627
+
let events$1 = add_children(
4628
+
events,
4629
+
mapper,
4630
+
path,
4631
+
node_index,
4632
+
new$11
4633
+
);
4634
+
let insert5 = insert4(new$11, node_index - moved_offset);
4635
+
let changes$1 = prepend(insert5, changes);
4636
+
return new Diff(
4637
+
new Patch(patch_index, removed, changes$1, children),
4638
+
events$1
4639
+
);
4640
+
} else {
4641
+
let next = new$11.head;
4642
+
let prev = old.head;
4643
+
if (prev.key !== next.key) {
4644
+
let new_remaining = new$11.tail;
4645
+
let old_remaining = old.tail;
4646
+
let next_did_exist = get3(old_keyed, next.key);
4647
+
let prev_does_exist = get3(new_keyed, prev.key);
4648
+
let prev_has_moved = contains(moved, prev.key);
4649
+
if (next_did_exist instanceof Ok) {
4650
+
if (prev_does_exist instanceof Ok) {
4651
+
if (prev_has_moved) {
4652
+
loop$old = old_remaining;
4653
+
loop$old_keyed = old_keyed;
4654
+
loop$new = new$11;
4655
+
loop$new_keyed = new_keyed;
4656
+
loop$moved = moved;
4657
+
loop$moved_offset = moved_offset - advance(prev);
4658
+
loop$removed = removed;
4659
+
loop$node_index = node_index;
4660
+
loop$patch_index = patch_index;
4661
+
loop$path = path;
4662
+
loop$changes = changes;
4663
+
loop$children = children;
4664
+
loop$mapper = mapper;
4665
+
loop$events = events;
4666
+
} else {
4667
+
let match = next_did_exist[0];
4668
+
let count = advance(next);
4669
+
let before = node_index - moved_offset;
4670
+
let move2 = move(next.key, before, count);
4671
+
let changes$1 = prepend(move2, changes);
4672
+
let moved$1 = insert2(moved, next.key);
4673
+
let moved_offset$1 = moved_offset + count;
4674
+
loop$old = prepend(match, old);
4675
+
loop$old_keyed = old_keyed;
4676
+
loop$new = new$11;
4677
+
loop$new_keyed = new_keyed;
4678
+
loop$moved = moved$1;
4679
+
loop$moved_offset = moved_offset$1;
4680
+
loop$removed = removed;
4681
+
loop$node_index = node_index;
4682
+
loop$patch_index = patch_index;
4683
+
loop$path = path;
4684
+
loop$changes = changes$1;
4685
+
loop$children = children;
4686
+
loop$mapper = mapper;
4687
+
loop$events = events;
4688
+
}
4689
+
} else {
4690
+
let count = advance(prev);
4691
+
let moved_offset$1 = moved_offset - count;
4692
+
let events$1 = remove_child(events, path, node_index, prev);
4693
+
let remove3 = remove_key(prev.key, count);
4694
+
let changes$1 = prepend(remove3, changes);
4695
+
loop$old = old_remaining;
4696
+
loop$old_keyed = old_keyed;
4697
+
loop$new = new$11;
4698
+
loop$new_keyed = new_keyed;
4699
+
loop$moved = moved;
4700
+
loop$moved_offset = moved_offset$1;
4701
+
loop$removed = removed;
4702
+
loop$node_index = node_index;
4703
+
loop$patch_index = patch_index;
4704
+
loop$path = path;
4705
+
loop$changes = changes$1;
4706
+
loop$children = children;
4707
+
loop$mapper = mapper;
4708
+
loop$events = events$1;
4709
+
}
4710
+
} else if (prev_does_exist instanceof Ok) {
4711
+
let before = node_index - moved_offset;
4712
+
let count = advance(next);
4713
+
let events$1 = add_child(
4714
+
events,
4715
+
mapper,
4716
+
path,
4717
+
node_index,
4718
+
next
4719
+
);
4720
+
let insert5 = insert4(toList([next]), before);
4721
+
let changes$1 = prepend(insert5, changes);
4722
+
loop$old = old;
4723
+
loop$old_keyed = old_keyed;
4724
+
loop$new = new_remaining;
4725
+
loop$new_keyed = new_keyed;
4726
+
loop$moved = moved;
4727
+
loop$moved_offset = moved_offset + count;
4728
+
loop$removed = removed;
4729
+
loop$node_index = node_index + count;
4730
+
loop$patch_index = patch_index;
4731
+
loop$path = path;
4732
+
loop$changes = changes$1;
4733
+
loop$children = children;
4734
+
loop$mapper = mapper;
4735
+
loop$events = events$1;
4736
+
} else {
4737
+
let prev_count = advance(prev);
4738
+
let next_count = advance(next);
4739
+
let change = replace2(
4740
+
node_index - moved_offset,
4741
+
prev_count,
4742
+
next
4743
+
);
4744
+
let _block;
4745
+
let _pipe = events;
4746
+
let _pipe$1 = remove_child(_pipe, path, node_index, prev);
4747
+
_block = add_child(_pipe$1, mapper, path, node_index, next);
4748
+
let events$1 = _block;
4749
+
loop$old = old_remaining;
4750
+
loop$old_keyed = old_keyed;
4751
+
loop$new = new_remaining;
4752
+
loop$new_keyed = new_keyed;
4753
+
loop$moved = moved;
4754
+
loop$moved_offset = moved_offset - prev_count + next_count;
4755
+
loop$removed = removed;
4756
+
loop$node_index = node_index + next_count;
4757
+
loop$patch_index = patch_index;
4758
+
loop$path = path;
4759
+
loop$changes = prepend(change, changes);
4760
+
loop$children = children;
4761
+
loop$mapper = mapper;
4762
+
loop$events = events$1;
4763
+
}
4764
+
} else {
4765
+
let $ = old.head;
4766
+
if ($ instanceof Fragment) {
4767
+
let $1 = new$11.head;
4768
+
if ($1 instanceof Fragment) {
4769
+
let next$1 = $1;
4770
+
let new$1 = new$11.tail;
4771
+
let prev$1 = $;
4772
+
let old$1 = old.tail;
4773
+
let node_index$1 = node_index + 1;
4774
+
let prev_count = prev$1.children_count;
4775
+
let next_count = next$1.children_count;
4776
+
let composed_mapper = compose_mapper(mapper, next$1.mapper);
4777
+
let child = do_diff(
4778
+
prev$1.children,
4779
+
prev$1.keyed_children,
4780
+
next$1.children,
4781
+
next$1.keyed_children,
4782
+
empty_set(),
4783
+
moved_offset,
4784
+
0,
4785
+
node_index$1,
4786
+
-1,
4787
+
path,
4788
+
empty_list,
4789
+
children,
4790
+
composed_mapper,
4791
+
events
4792
+
);
4793
+
let _block;
4794
+
let $2 = child.patch.removed > 0;
4795
+
if ($2) {
4796
+
let remove_from = node_index$1 + next_count - moved_offset;
4797
+
let patch = remove2(remove_from, child.patch.removed);
4798
+
_block = append(
4799
+
child.patch.changes,
4800
+
prepend(patch, changes)
4801
+
);
4802
+
} else {
4803
+
_block = append(child.patch.changes, changes);
4804
+
}
4805
+
let changes$1 = _block;
4806
+
loop$old = old$1;
4807
+
loop$old_keyed = old_keyed;
4808
+
loop$new = new$1;
4809
+
loop$new_keyed = new_keyed;
4810
+
loop$moved = moved;
4811
+
loop$moved_offset = moved_offset + next_count - prev_count;
4812
+
loop$removed = removed;
4813
+
loop$node_index = node_index$1 + next_count;
4814
+
loop$patch_index = patch_index;
4815
+
loop$path = path;
4816
+
loop$changes = changes$1;
4817
+
loop$children = child.patch.children;
4818
+
loop$mapper = mapper;
4819
+
loop$events = child.events;
4820
+
} else {
4821
+
let next$1 = $1;
4822
+
let new_remaining = new$11.tail;
4823
+
let prev$1 = $;
4824
+
let old_remaining = old.tail;
4825
+
let prev_count = advance(prev$1);
4826
+
let next_count = advance(next$1);
4827
+
let change = replace2(
4828
+
node_index - moved_offset,
4829
+
prev_count,
4830
+
next$1
4831
+
);
4832
+
let _block;
4833
+
let _pipe = events;
4834
+
let _pipe$1 = remove_child(_pipe, path, node_index, prev$1);
4835
+
_block = add_child(
4836
+
_pipe$1,
4837
+
mapper,
4838
+
path,
4839
+
node_index,
4840
+
next$1
4841
+
);
4842
+
let events$1 = _block;
4843
+
loop$old = old_remaining;
4844
+
loop$old_keyed = old_keyed;
4845
+
loop$new = new_remaining;
4846
+
loop$new_keyed = new_keyed;
4847
+
loop$moved = moved;
4848
+
loop$moved_offset = moved_offset - prev_count + next_count;
4849
+
loop$removed = removed;
4850
+
loop$node_index = node_index + next_count;
4851
+
loop$patch_index = patch_index;
4852
+
loop$path = path;
4853
+
loop$changes = prepend(change, changes);
4854
+
loop$children = children;
4855
+
loop$mapper = mapper;
4856
+
loop$events = events$1;
4857
+
}
4858
+
} else if ($ instanceof Element) {
4859
+
let $1 = new$11.head;
4860
+
if ($1 instanceof Element) {
4861
+
let next$1 = $1;
4862
+
let prev$1 = $;
4863
+
if (prev$1.namespace === next$1.namespace && prev$1.tag === next$1.tag) {
4864
+
let new$1 = new$11.tail;
4865
+
let old$1 = old.tail;
4866
+
let composed_mapper = compose_mapper(
4867
+
mapper,
4868
+
next$1.mapper
4869
+
);
4870
+
let child_path = add3(path, node_index, next$1.key);
4871
+
let controlled = is_controlled(
4872
+
events,
4873
+
next$1.namespace,
4874
+
next$1.tag,
4875
+
child_path
4876
+
);
4877
+
let $2 = diff_attributes(
4878
+
controlled,
4879
+
child_path,
4880
+
composed_mapper,
4881
+
events,
4882
+
prev$1.attributes,
4883
+
next$1.attributes,
4884
+
empty_list,
4885
+
empty_list
4886
+
);
4887
+
let added_attrs = $2.added;
4888
+
let removed_attrs = $2.removed;
4889
+
let events$1 = $2.events;
4890
+
let _block;
4891
+
if (removed_attrs instanceof Empty) {
4892
+
if (added_attrs instanceof Empty) {
4893
+
_block = empty_list;
4894
+
} else {
4895
+
_block = toList([update3(added_attrs, removed_attrs)]);
4896
+
}
4897
+
} else {
4898
+
_block = toList([update3(added_attrs, removed_attrs)]);
4899
+
}
4900
+
let initial_child_changes = _block;
4901
+
let child = do_diff(
4902
+
prev$1.children,
4903
+
prev$1.keyed_children,
4904
+
next$1.children,
4905
+
next$1.keyed_children,
4906
+
empty_set(),
4907
+
0,
4908
+
0,
4909
+
0,
4910
+
node_index,
4911
+
child_path,
4912
+
initial_child_changes,
4913
+
empty_list,
4914
+
composed_mapper,
4915
+
events$1
4916
+
);
4917
+
let _block$1;
4918
+
let $3 = child.patch;
4919
+
let $4 = $3.children;
4920
+
if ($4 instanceof Empty) {
4921
+
let $5 = $3.changes;
4922
+
if ($5 instanceof Empty) {
4923
+
let $6 = $3.removed;
4924
+
if ($6 === 0) {
4925
+
_block$1 = children;
4926
+
} else {
4927
+
_block$1 = prepend(child.patch, children);
4928
+
}
4929
+
} else {
4930
+
_block$1 = prepend(child.patch, children);
4931
+
}
4932
+
} else {
4933
+
_block$1 = prepend(child.patch, children);
4934
+
}
4935
+
let children$1 = _block$1;
4936
+
loop$old = old$1;
4937
+
loop$old_keyed = old_keyed;
4938
+
loop$new = new$1;
4939
+
loop$new_keyed = new_keyed;
4940
+
loop$moved = moved;
4941
+
loop$moved_offset = moved_offset;
4942
+
loop$removed = removed;
4943
+
loop$node_index = node_index + 1;
4944
+
loop$patch_index = patch_index;
4945
+
loop$path = path;
4946
+
loop$changes = changes;
4947
+
loop$children = children$1;
4948
+
loop$mapper = mapper;
4949
+
loop$events = child.events;
4950
+
} else {
4951
+
let next$2 = $1;
4952
+
let new_remaining = new$11.tail;
4953
+
let prev$2 = $;
4954
+
let old_remaining = old.tail;
4955
+
let prev_count = advance(prev$2);
4956
+
let next_count = advance(next$2);
4957
+
let change = replace2(
4958
+
node_index - moved_offset,
4959
+
prev_count,
4960
+
next$2
4961
+
);
4962
+
let _block;
4963
+
let _pipe = events;
4964
+
let _pipe$1 = remove_child(
4965
+
_pipe,
4966
+
path,
4967
+
node_index,
4968
+
prev$2
4969
+
);
4970
+
_block = add_child(
4971
+
_pipe$1,
4972
+
mapper,
4973
+
path,
4974
+
node_index,
4975
+
next$2
4976
+
);
4977
+
let events$1 = _block;
4978
+
loop$old = old_remaining;
4979
+
loop$old_keyed = old_keyed;
4980
+
loop$new = new_remaining;
4981
+
loop$new_keyed = new_keyed;
4982
+
loop$moved = moved;
4983
+
loop$moved_offset = moved_offset - prev_count + next_count;
4984
+
loop$removed = removed;
4985
+
loop$node_index = node_index + next_count;
4986
+
loop$patch_index = patch_index;
4987
+
loop$path = path;
4988
+
loop$changes = prepend(change, changes);
4989
+
loop$children = children;
4990
+
loop$mapper = mapper;
4991
+
loop$events = events$1;
4992
+
}
4993
+
} else {
4994
+
let next$1 = $1;
4995
+
let new_remaining = new$11.tail;
4996
+
let prev$1 = $;
4997
+
let old_remaining = old.tail;
4998
+
let prev_count = advance(prev$1);
4999
+
let next_count = advance(next$1);
5000
+
let change = replace2(
5001
+
node_index - moved_offset,
5002
+
prev_count,
5003
+
next$1
5004
+
);
5005
+
let _block;
5006
+
let _pipe = events;
5007
+
let _pipe$1 = remove_child(_pipe, path, node_index, prev$1);
5008
+
_block = add_child(
5009
+
_pipe$1,
5010
+
mapper,
5011
+
path,
5012
+
node_index,
5013
+
next$1
5014
+
);
5015
+
let events$1 = _block;
5016
+
loop$old = old_remaining;
5017
+
loop$old_keyed = old_keyed;
5018
+
loop$new = new_remaining;
5019
+
loop$new_keyed = new_keyed;
5020
+
loop$moved = moved;
5021
+
loop$moved_offset = moved_offset - prev_count + next_count;
5022
+
loop$removed = removed;
5023
+
loop$node_index = node_index + next_count;
5024
+
loop$patch_index = patch_index;
5025
+
loop$path = path;
5026
+
loop$changes = prepend(change, changes);
5027
+
loop$children = children;
5028
+
loop$mapper = mapper;
5029
+
loop$events = events$1;
5030
+
}
5031
+
} else if ($ instanceof Text) {
5032
+
let $1 = new$11.head;
5033
+
if ($1 instanceof Text) {
5034
+
let next$1 = $1;
5035
+
let prev$1 = $;
5036
+
if (prev$1.content === next$1.content) {
5037
+
let new$1 = new$11.tail;
5038
+
let old$1 = old.tail;
5039
+
loop$old = old$1;
5040
+
loop$old_keyed = old_keyed;
5041
+
loop$new = new$1;
5042
+
loop$new_keyed = new_keyed;
5043
+
loop$moved = moved;
5044
+
loop$moved_offset = moved_offset;
5045
+
loop$removed = removed;
5046
+
loop$node_index = node_index + 1;
5047
+
loop$patch_index = patch_index;
5048
+
loop$path = path;
5049
+
loop$changes = changes;
5050
+
loop$children = children;
5051
+
loop$mapper = mapper;
5052
+
loop$events = events;
5053
+
} else {
5054
+
let next$2 = $1;
5055
+
let new$1 = new$11.tail;
5056
+
let old$1 = old.tail;
5057
+
let child = new$7(
5058
+
node_index,
5059
+
0,
5060
+
toList([replace_text(next$2.content)]),
5061
+
empty_list
5062
+
);
5063
+
loop$old = old$1;
5064
+
loop$old_keyed = old_keyed;
5065
+
loop$new = new$1;
5066
+
loop$new_keyed = new_keyed;
5067
+
loop$moved = moved;
5068
+
loop$moved_offset = moved_offset;
5069
+
loop$removed = removed;
5070
+
loop$node_index = node_index + 1;
5071
+
loop$patch_index = patch_index;
5072
+
loop$path = path;
5073
+
loop$changes = changes;
5074
+
loop$children = prepend(child, children);
5075
+
loop$mapper = mapper;
5076
+
loop$events = events;
5077
+
}
5078
+
} else {
5079
+
let next$1 = $1;
5080
+
let new_remaining = new$11.tail;
5081
+
let prev$1 = $;
5082
+
let old_remaining = old.tail;
5083
+
let prev_count = advance(prev$1);
5084
+
let next_count = advance(next$1);
5085
+
let change = replace2(
5086
+
node_index - moved_offset,
5087
+
prev_count,
5088
+
next$1
5089
+
);
5090
+
let _block;
5091
+
let _pipe = events;
5092
+
let _pipe$1 = remove_child(_pipe, path, node_index, prev$1);
5093
+
_block = add_child(
5094
+
_pipe$1,
5095
+
mapper,
5096
+
path,
5097
+
node_index,
5098
+
next$1
5099
+
);
5100
+
let events$1 = _block;
5101
+
loop$old = old_remaining;
5102
+
loop$old_keyed = old_keyed;
5103
+
loop$new = new_remaining;
5104
+
loop$new_keyed = new_keyed;
5105
+
loop$moved = moved;
5106
+
loop$moved_offset = moved_offset - prev_count + next_count;
5107
+
loop$removed = removed;
5108
+
loop$node_index = node_index + next_count;
5109
+
loop$patch_index = patch_index;
5110
+
loop$path = path;
5111
+
loop$changes = prepend(change, changes);
5112
+
loop$children = children;
5113
+
loop$mapper = mapper;
5114
+
loop$events = events$1;
5115
+
}
5116
+
} else {
5117
+
let $1 = new$11.head;
5118
+
if ($1 instanceof UnsafeInnerHtml) {
5119
+
let next$1 = $1;
5120
+
let new$1 = new$11.tail;
5121
+
let prev$1 = $;
5122
+
let old$1 = old.tail;
5123
+
let composed_mapper = compose_mapper(mapper, next$1.mapper);
5124
+
let child_path = add3(path, node_index, next$1.key);
5125
+
let $2 = diff_attributes(
5126
+
false,
5127
+
child_path,
5128
+
composed_mapper,
5129
+
events,
5130
+
prev$1.attributes,
5131
+
next$1.attributes,
5132
+
empty_list,
5133
+
empty_list
5134
+
);
5135
+
let added_attrs = $2.added;
5136
+
let removed_attrs = $2.removed;
5137
+
let events$1 = $2.events;
5138
+
let _block;
5139
+
if (removed_attrs instanceof Empty) {
5140
+
if (added_attrs instanceof Empty) {
5141
+
_block = empty_list;
5142
+
} else {
5143
+
_block = toList([update3(added_attrs, removed_attrs)]);
5144
+
}
5145
+
} else {
5146
+
_block = toList([update3(added_attrs, removed_attrs)]);
5147
+
}
5148
+
let child_changes = _block;
5149
+
let _block$1;
5150
+
let $3 = prev$1.inner_html === next$1.inner_html;
5151
+
if ($3) {
5152
+
_block$1 = child_changes;
5153
+
} else {
5154
+
_block$1 = prepend(
5155
+
replace_inner_html(next$1.inner_html),
5156
+
child_changes
5157
+
);
5158
+
}
5159
+
let child_changes$1 = _block$1;
5160
+
let _block$2;
5161
+
if (child_changes$1 instanceof Empty) {
5162
+
_block$2 = children;
5163
+
} else {
5164
+
_block$2 = prepend(
5165
+
new$7(node_index, 0, child_changes$1, toList([])),
5166
+
children
5167
+
);
5168
+
}
5169
+
let children$1 = _block$2;
5170
+
loop$old = old$1;
5171
+
loop$old_keyed = old_keyed;
5172
+
loop$new = new$1;
5173
+
loop$new_keyed = new_keyed;
5174
+
loop$moved = moved;
5175
+
loop$moved_offset = moved_offset;
5176
+
loop$removed = removed;
5177
+
loop$node_index = node_index + 1;
5178
+
loop$patch_index = patch_index;
5179
+
loop$path = path;
5180
+
loop$changes = changes;
5181
+
loop$children = children$1;
5182
+
loop$mapper = mapper;
5183
+
loop$events = events$1;
5184
+
} else {
5185
+
let next$1 = $1;
5186
+
let new_remaining = new$11.tail;
5187
+
let prev$1 = $;
5188
+
let old_remaining = old.tail;
5189
+
let prev_count = advance(prev$1);
5190
+
let next_count = advance(next$1);
5191
+
let change = replace2(
5192
+
node_index - moved_offset,
5193
+
prev_count,
5194
+
next$1
5195
+
);
5196
+
let _block;
5197
+
let _pipe = events;
5198
+
let _pipe$1 = remove_child(_pipe, path, node_index, prev$1);
5199
+
_block = add_child(
5200
+
_pipe$1,
5201
+
mapper,
5202
+
path,
5203
+
node_index,
5204
+
next$1
5205
+
);
5206
+
let events$1 = _block;
5207
+
loop$old = old_remaining;
5208
+
loop$old_keyed = old_keyed;
5209
+
loop$new = new_remaining;
5210
+
loop$new_keyed = new_keyed;
5211
+
loop$moved = moved;
5212
+
loop$moved_offset = moved_offset - prev_count + next_count;
5213
+
loop$removed = removed;
5214
+
loop$node_index = node_index + next_count;
5215
+
loop$patch_index = patch_index;
5216
+
loop$path = path;
5217
+
loop$changes = prepend(change, changes);
5218
+
loop$children = children;
5219
+
loop$mapper = mapper;
5220
+
loop$events = events$1;
5221
+
}
5222
+
}
5223
+
}
5224
+
}
5225
+
}
5226
+
}
5227
+
function diff(events, old, new$11) {
5228
+
return do_diff(
5229
+
toList([old]),
5230
+
empty4(),
5231
+
toList([new$11]),
5232
+
empty4(),
5233
+
empty_set(),
5234
+
0,
5235
+
0,
5236
+
0,
5237
+
0,
5238
+
root2,
5239
+
empty_list,
5240
+
empty_list,
5241
+
identity2,
5242
+
tick(events)
5243
+
);
5244
+
}
5245
+
5246
+
// build/dev/javascript/lustre/lustre/vdom/reconciler.ffi.mjs
5247
+
var Reconciler = class {
5248
+
offset = 0;
5249
+
#root = null;
5250
+
#dispatch = () => {
5251
+
};
5252
+
#useServerEvents = false;
5253
+
#exposeKeys = false;
5254
+
constructor(root3, dispatch, { useServerEvents = false, exposeKeys = false } = {}) {
5255
+
this.#root = root3;
5256
+
this.#dispatch = dispatch;
5257
+
this.#useServerEvents = useServerEvents;
5258
+
this.#exposeKeys = exposeKeys;
5259
+
}
5260
+
mount(vdom) {
5261
+
appendChild(this.#root, this.#createChild(this.#root, 0, vdom));
5262
+
}
5263
+
#stack = [];
5264
+
push(patch) {
5265
+
const offset = this.offset;
5266
+
if (offset) {
5267
+
iterate(patch.changes, (change) => {
5268
+
switch (change.kind) {
5269
+
case insert_kind:
5270
+
case move_kind:
5271
+
change.before = (change.before | 0) + offset;
5272
+
break;
5273
+
case remove_kind:
5274
+
case replace_kind:
5275
+
change.from = (change.from | 0) + offset;
5276
+
break;
5277
+
}
5278
+
});
5279
+
iterate(patch.children, (child) => {
5280
+
child.index = (child.index | 0) + offset;
5281
+
});
5282
+
}
5283
+
this.#stack.push({ node: this.#root, patch });
5284
+
this.#reconcile();
5285
+
}
5286
+
// PATCHING ------------------------------------------------------------------
5287
+
#reconcile() {
5288
+
const self = this;
5289
+
while (self.#stack.length) {
5290
+
const { node: node2, patch } = self.#stack.pop();
5291
+
iterate(patch.changes, (change) => {
5292
+
switch (change.kind) {
5293
+
case insert_kind:
5294
+
self.#insert(node2, change.children, change.before);
5295
+
break;
5296
+
case move_kind:
5297
+
self.#move(node2, change.key, change.before, change.count);
5298
+
break;
5299
+
case remove_key_kind:
5300
+
self.#removeKey(node2, change.key, change.count);
5301
+
break;
5302
+
case remove_kind:
5303
+
self.#remove(node2, change.from, change.count);
5304
+
break;
5305
+
case replace_kind:
5306
+
self.#replace(node2, change.from, change.count, change.with);
5307
+
break;
5308
+
case replace_text_kind:
5309
+
self.#replaceText(node2, change.content);
5310
+
break;
5311
+
case replace_inner_html_kind:
5312
+
self.#replaceInnerHtml(node2, change.inner_html);
5313
+
break;
5314
+
case update_kind:
5315
+
self.#update(node2, change.added, change.removed);
5316
+
break;
5317
+
}
5318
+
});
5319
+
if (patch.removed) {
5320
+
self.#remove(
5321
+
node2,
5322
+
node2.childNodes.length - patch.removed,
5323
+
patch.removed
5324
+
);
5325
+
}
5326
+
let lastIndex = -1;
5327
+
let lastChild = null;
5328
+
iterate(patch.children, (child) => {
5329
+
const index4 = child.index | 0;
5330
+
const next = lastChild && lastIndex - index4 === 1 ? lastChild.previousSibling : childAt(node2, index4);
5331
+
self.#stack.push({ node: next, patch: child });
5332
+
lastChild = next;
5333
+
lastIndex = index4;
5334
+
});
5335
+
}
5336
+
}
5337
+
// CHANGES -------------------------------------------------------------------
5338
+
#insert(node2, children, before) {
5339
+
const fragment3 = createDocumentFragment();
5340
+
let childIndex = before | 0;
5341
+
iterate(children, (child) => {
5342
+
const el = this.#createChild(node2, childIndex, child);
5343
+
appendChild(fragment3, el);
5344
+
childIndex += advance(child);
5345
+
});
5346
+
insertBefore(node2, fragment3, childAt(node2, before));
5347
+
}
5348
+
#move(node2, key, before, count) {
5349
+
let el = getKeyedChild(node2, key);
5350
+
const beforeEl = childAt(node2, before);
5351
+
for (let i = 0; i < count && el !== null; ++i) {
5352
+
const next = el.nextSibling;
5353
+
if (SUPPORTS_MOVE_BEFORE) {
5354
+
node2.moveBefore(el, beforeEl);
5355
+
} else {
5356
+
insertBefore(node2, el, beforeEl);
5357
+
}
5358
+
el = next;
5359
+
}
5360
+
}
5361
+
#removeKey(node2, key, count) {
5362
+
this.#removeFromChild(node2, getKeyedChild(node2, key), count);
5363
+
}
5364
+
#remove(node2, from2, count) {
5365
+
this.#removeFromChild(node2, childAt(node2, from2), count);
5366
+
}
5367
+
#removeFromChild(parent, child, count) {
5368
+
while (count-- > 0 && child !== null) {
5369
+
const next = child.nextSibling;
5370
+
const key = child[meta].key;
5371
+
if (key) {
5372
+
parent[meta].keyedChildren.delete(key);
5373
+
}
5374
+
for (const [_, { timeout }] of child[meta].debouncers ?? []) {
5375
+
clearTimeout(timeout);
5376
+
}
5377
+
parent.removeChild(child);
5378
+
child = next;
5379
+
}
5380
+
}
5381
+
#replace(parent, from2, count, child) {
5382
+
this.#remove(parent, from2, count);
5383
+
const el = this.#createChild(parent, from2, child);
5384
+
insertBefore(parent, el, childAt(parent, from2));
5385
+
}
5386
+
#replaceText(node2, content) {
5387
+
node2.data = content ?? "";
5388
+
}
5389
+
#replaceInnerHtml(node2, inner_html) {
5390
+
node2.innerHTML = inner_html ?? "";
5391
+
}
5392
+
#update(node2, added, removed) {
5393
+
iterate(removed, (attribute3) => {
5394
+
const name = attribute3.name;
5395
+
if (node2[meta].handlers.has(name)) {
5396
+
node2.removeEventListener(name, handleEvent);
5397
+
node2[meta].handlers.delete(name);
5398
+
if (node2[meta].throttles.has(name)) {
5399
+
node2[meta].throttles.delete(name);
5400
+
}
5401
+
if (node2[meta].debouncers.has(name)) {
5402
+
clearTimeout(node2[meta].debouncers.get(name).timeout);
5403
+
node2[meta].debouncers.delete(name);
5404
+
}
5405
+
} else {
5406
+
node2.removeAttribute(name);
5407
+
SYNCED_ATTRIBUTES[name]?.removed?.(node2, name);
5408
+
}
5409
+
});
5410
+
iterate(added, (attribute3) => {
5411
+
this.#createAttribute(node2, attribute3);
5412
+
});
5413
+
}
5414
+
// CONSTRUCTORS --------------------------------------------------------------
5415
+
#createChild(parent, index4, vnode) {
5416
+
switch (vnode.kind) {
5417
+
case element_kind: {
5418
+
const node2 = createChildElement(parent, index4, vnode);
5419
+
this.#createAttributes(node2, vnode);
5420
+
this.#insert(node2, vnode.children);
5421
+
return node2;
5422
+
}
5423
+
case text_kind: {
5424
+
return createChildText(parent, index4, vnode);
5425
+
}
5426
+
case fragment_kind: {
5427
+
const node2 = createDocumentFragment();
5428
+
const head = createChildText(parent, index4, vnode);
5429
+
appendChild(node2, head);
5430
+
let childIndex = index4 + 1;
5431
+
iterate(vnode.children, (child) => {
5432
+
appendChild(node2, this.#createChild(parent, childIndex, child));
5433
+
childIndex += advance(child);
5434
+
});
5435
+
return node2;
5436
+
}
5437
+
case unsafe_inner_html_kind: {
5438
+
const node2 = createChildElement(parent, index4, vnode);
5439
+
this.#createAttributes(node2, vnode);
5440
+
this.#replaceInnerHtml(node2, vnode.inner_html);
5441
+
return node2;
5442
+
}
5443
+
}
5444
+
}
5445
+
#createAttributes(node2, { key, attributes }) {
5446
+
if (this.#exposeKeys && key) {
5447
+
node2.setAttribute("data-lustre-key", key);
5448
+
}
5449
+
iterate(attributes, (attribute3) => this.#createAttribute(node2, attribute3));
5450
+
}
5451
+
#createAttribute(node2, attribute3) {
5452
+
const { debouncers, handlers, throttles } = node2[meta];
5453
+
const {
5454
+
kind,
5455
+
name,
5456
+
value,
5457
+
prevent_default: prevent,
5458
+
stop_propagation: stop,
5459
+
immediate: immediate2,
5460
+
include,
5461
+
debounce: debounceDelay,
5462
+
throttle: throttleDelay
5463
+
} = attribute3;
5464
+
switch (kind) {
5465
+
case attribute_kind: {
5466
+
const valueOrDefault = value ?? "";
5467
+
if (name === "virtual:defaultValue") {
5468
+
node2.defaultValue = valueOrDefault;
5469
+
return;
5470
+
}
5471
+
if (valueOrDefault !== node2.getAttribute(name)) {
5472
+
node2.setAttribute(name, valueOrDefault);
5473
+
}
5474
+
SYNCED_ATTRIBUTES[name]?.added?.(node2, value);
5475
+
break;
5476
+
}
5477
+
case property_kind:
5478
+
node2[name] = value;
5479
+
break;
5480
+
case event_kind: {
5481
+
if (handlers.has(name)) {
5482
+
node2.removeEventListener(name, handleEvent);
5483
+
}
5484
+
node2.addEventListener(name, handleEvent, {
5485
+
passive: prevent.kind === never_kind
5486
+
});
5487
+
if (throttleDelay > 0) {
5488
+
const throttle = throttles.get(name) ?? {};
5489
+
throttle.delay = throttleDelay;
5490
+
throttles.set(name, throttle);
5491
+
} else {
5492
+
throttles.delete(name);
5493
+
}
5494
+
if (debounceDelay > 0) {
5495
+
const debounce = debouncers.get(name) ?? {};
5496
+
debounce.delay = debounceDelay;
5497
+
debouncers.set(name, debounce);
5498
+
} else {
5499
+
clearTimeout(debouncers.get(name)?.timeout);
5500
+
debouncers.delete(name);
5501
+
}
5502
+
handlers.set(name, (event4) => {
5503
+
if (prevent.kind === always_kind) event4.preventDefault();
5504
+
if (stop.kind === always_kind) event4.stopPropagation();
5505
+
const type = event4.type;
5506
+
const path = event4.currentTarget[meta].path;
5507
+
const data = this.#useServerEvents ? createServerEvent(event4, include ?? []) : event4;
5508
+
const throttle = throttles.get(type);
5509
+
if (throttle) {
5510
+
const now = Date.now();
5511
+
const last = throttle.last || 0;
5512
+
if (now > last + throttle.delay) {
5513
+
throttle.last = now;
5514
+
throttle.lastEvent = event4;
5515
+
this.#dispatch(data, path, type, immediate2);
5516
+
}
5517
+
}
5518
+
const debounce = debouncers.get(type);
5519
+
if (debounce) {
5520
+
clearTimeout(debounce.timeout);
5521
+
debounce.timeout = setTimeout(() => {
5522
+
if (event4 === throttles.get(type)?.lastEvent) return;
5523
+
this.#dispatch(data, path, type, immediate2);
5524
+
}, debounce.delay);
5525
+
}
5526
+
if (!throttle && !debounce) {
5527
+
this.#dispatch(data, path, type, immediate2);
5528
+
}
5529
+
});
5530
+
break;
5531
+
}
5532
+
}
5533
+
}
5534
+
};
5535
+
var iterate = (list4, callback) => {
5536
+
if (Array.isArray(list4)) {
5537
+
for (let i = 0; i < list4.length; i++) {
5538
+
callback(list4[i]);
5539
+
}
5540
+
} else if (list4) {
5541
+
for (list4; list4.tail; list4 = list4.tail) {
5542
+
callback(list4.head);
5543
+
}
5544
+
}
5545
+
};
5546
+
var appendChild = (node2, child) => node2.appendChild(child);
5547
+
var insertBefore = (parent, node2, referenceNode) => parent.insertBefore(node2, referenceNode ?? null);
5548
+
var createChildElement = (parent, index4, { key, tag, namespace }) => {
5549
+
const node2 = document2().createElementNS(namespace || NAMESPACE_HTML, tag);
5550
+
initialiseMetadata(parent, node2, index4, key);
5551
+
return node2;
5552
+
};
5553
+
var createChildText = (parent, index4, { key, content }) => {
5554
+
const node2 = document2().createTextNode(content ?? "");
5555
+
initialiseMetadata(parent, node2, index4, key);
5556
+
return node2;
5557
+
};
5558
+
var createDocumentFragment = () => document2().createDocumentFragment();
5559
+
var childAt = (node2, at) => node2.childNodes[at | 0];
5560
+
var meta = Symbol("lustre");
5561
+
var initialiseMetadata = (parent, node2, index4 = 0, key = "") => {
5562
+
const segment = `${key || index4}`;
5563
+
switch (node2.nodeType) {
5564
+
case ELEMENT_NODE:
5565
+
case DOCUMENT_FRAGMENT_NODE:
5566
+
node2[meta] = {
5567
+
key,
5568
+
path: segment,
5569
+
keyedChildren: /* @__PURE__ */ new Map(),
5570
+
handlers: /* @__PURE__ */ new Map(),
5571
+
throttles: /* @__PURE__ */ new Map(),
5572
+
debouncers: /* @__PURE__ */ new Map()
5573
+
};
5574
+
break;
5575
+
case TEXT_NODE:
5576
+
node2[meta] = { key };
5577
+
break;
5578
+
}
5579
+
if (parent && parent[meta] && key) {
5580
+
parent[meta].keyedChildren.set(key, new WeakRef(node2));
5581
+
}
5582
+
if (parent && parent[meta] && parent[meta].path) {
5583
+
node2[meta].path = `${parent[meta].path}${separator_element}${segment}`;
5584
+
}
5585
+
};
5586
+
var getKeyedChild = (node2, key) => node2[meta].keyedChildren.get(key).deref();
5587
+
var handleEvent = (event4) => {
5588
+
const target = event4.currentTarget;
5589
+
const handler = target[meta].handlers.get(event4.type);
5590
+
if (event4.type === "submit") {
5591
+
event4.detail ??= {};
5592
+
event4.detail.formData = [...new FormData(event4.target).entries()];
5593
+
}
5594
+
handler(event4);
5595
+
};
5596
+
var createServerEvent = (event4, include = []) => {
5597
+
const data = {};
5598
+
if (event4.type === "input" || event4.type === "change") {
5599
+
include.push("target.value");
5600
+
}
5601
+
if (event4.type === "submit") {
5602
+
include.push("detail.formData");
5603
+
}
5604
+
for (const property4 of include) {
5605
+
const path = property4.split(".");
5606
+
for (let i = 0, input = event4, output = data; i < path.length; i++) {
5607
+
if (i === path.length - 1) {
5608
+
output[path[i]] = input[path[i]];
5609
+
break;
5610
+
}
5611
+
output = output[path[i]] ??= {};
5612
+
input = input[path[i]];
5613
+
}
5614
+
}
5615
+
return data;
5616
+
};
5617
+
var syncedBooleanAttribute = (name) => {
5618
+
return {
5619
+
added(node2) {
5620
+
node2[name] = true;
5621
+
},
5622
+
removed(node2) {
5623
+
node2[name] = false;
5624
+
}
5625
+
};
5626
+
};
5627
+
var syncedAttribute = (name) => {
5628
+
return {
5629
+
added(node2, value) {
5630
+
node2[name] = value;
5631
+
}
5632
+
};
5633
+
};
5634
+
var SYNCED_ATTRIBUTES = {
5635
+
checked: syncedBooleanAttribute("checked"),
5636
+
selected: syncedBooleanAttribute("selected"),
5637
+
value: syncedAttribute("value"),
5638
+
autofocus: {
5639
+
added(node2) {
5640
+
queueMicrotask(() => node2.focus?.());
5641
+
}
5642
+
},
5643
+
autoplay: {
5644
+
added(node2) {
5645
+
try {
5646
+
node2.play?.();
5647
+
} catch (e) {
5648
+
console.error(e);
5649
+
}
5650
+
}
5651
+
}
5652
+
};
5653
+
5654
+
// build/dev/javascript/lustre/lustre/vdom/virtualise.ffi.mjs
5655
+
var virtualise = (root3) => {
5656
+
const vdom = virtualiseNode(null, root3, "");
5657
+
if (vdom === null || vdom.children instanceof Empty) {
5658
+
const empty5 = emptyTextNode(root3);
5659
+
root3.appendChild(empty5);
5660
+
return none2();
5661
+
} else if (vdom.children instanceof NonEmpty && vdom.children.tail instanceof Empty) {
5662
+
return vdom.children.head;
5663
+
} else {
5664
+
const head = emptyTextNode(root3);
5665
+
root3.insertBefore(head, root3.firstChild);
5666
+
return fragment2(vdom.children);
5667
+
}
5668
+
};
5669
+
var emptyTextNode = (parent) => {
5670
+
const node2 = document2().createTextNode("");
5671
+
initialiseMetadata(parent, node2);
5672
+
return node2;
5673
+
};
5674
+
var virtualiseNode = (parent, node2, index4) => {
5675
+
switch (node2.nodeType) {
5676
+
case ELEMENT_NODE: {
5677
+
const key = node2.getAttribute("data-lustre-key");
5678
+
initialiseMetadata(parent, node2, index4, key);
5679
+
if (key) {
5680
+
node2.removeAttribute("data-lustre-key");
5681
+
}
5682
+
const tag = node2.localName;
5683
+
const namespace = node2.namespaceURI;
5684
+
const isHtmlElement = !namespace || namespace === NAMESPACE_HTML;
5685
+
if (isHtmlElement && INPUT_ELEMENTS.includes(tag)) {
5686
+
virtualiseInputEvents(tag, node2);
5687
+
}
5688
+
const attributes = virtualiseAttributes(node2);
5689
+
const children = virtualiseChildNodes(node2);
5690
+
const vnode = isHtmlElement ? element2(tag, attributes, children) : namespaced(namespace, tag, attributes, children);
5691
+
return key ? to_keyed(key, vnode) : vnode;
5692
+
}
5693
+
case TEXT_NODE:
5694
+
initialiseMetadata(parent, node2, index4);
5695
+
return node2.data ? text2(node2.data) : null;
5696
+
case DOCUMENT_FRAGMENT_NODE:
5697
+
initialiseMetadata(parent, node2, index4);
5698
+
return node2.childNodes.length > 0 ? fragment2(virtualiseChildNodes(node2)) : null;
5699
+
default:
5700
+
return null;
5701
+
}
5702
+
};
5703
+
var INPUT_ELEMENTS = ["input", "select", "textarea"];
5704
+
var virtualiseInputEvents = (tag, node2) => {
5705
+
const value = node2.value;
5706
+
const checked = node2.checked;
5707
+
if (tag === "input" && node2.type === "checkbox" && !checked) return;
5708
+
if (tag === "input" && node2.type === "radio" && !checked) return;
5709
+
if (node2.type !== "checkbox" && node2.type !== "radio" && !value) return;
5710
+
queueMicrotask(() => {
5711
+
node2.value = value;
5712
+
node2.checked = checked;
5713
+
node2.dispatchEvent(new Event("input", { bubbles: true }));
5714
+
node2.dispatchEvent(new Event("change", { bubbles: true }));
5715
+
if (document2().activeElement !== node2) {
5716
+
node2.dispatchEvent(new Event("blur", { bubbles: true }));
5717
+
}
5718
+
});
5719
+
};
5720
+
var virtualiseChildNodes = (node2) => {
5721
+
let children = null;
5722
+
let index4 = 0;
5723
+
let child = node2.firstChild;
5724
+
let ptr = null;
5725
+
while (child) {
5726
+
const vnode = virtualiseNode(node2, child, index4);
5727
+
const next = child.nextSibling;
5728
+
if (vnode) {
5729
+
const list_node = new NonEmpty(vnode, null);
5730
+
if (ptr) {
5731
+
ptr = ptr.tail = list_node;
5732
+
} else {
5733
+
ptr = children = list_node;
5734
+
}
5735
+
index4 += 1;
5736
+
} else {
5737
+
node2.removeChild(child);
5738
+
}
5739
+
child = next;
5740
+
}
5741
+
if (!ptr) return empty_list;
5742
+
ptr.tail = empty_list;
5743
+
return children;
5744
+
};
5745
+
var virtualiseAttributes = (node2) => {
5746
+
let index4 = node2.attributes.length;
5747
+
let attributes = empty_list;
5748
+
while (index4-- > 0) {
5749
+
attributes = new NonEmpty(
5750
+
virtualiseAttribute(node2.attributes[index4]),
5751
+
attributes
5752
+
);
5753
+
}
5754
+
return attributes;
5755
+
};
5756
+
var virtualiseAttribute = (attr) => {
5757
+
const name = attr.localName;
5758
+
const value = attr.value;
5759
+
return attribute2(name, value);
5760
+
};
5761
+
5762
+
// build/dev/javascript/lustre/lustre/runtime/client/runtime.ffi.mjs
5763
+
var is_browser = () => !!document2();
5764
+
var Runtime = class {
5765
+
constructor(root3, [model, effects], view2, update5) {
5766
+
this.root = root3;
5767
+
this.#model = model;
5768
+
this.#view = view2;
5769
+
this.#update = update5;
5770
+
this.#reconciler = new Reconciler(this.root, (event4, path, name) => {
5771
+
const [events, result] = handle(this.#events, path, name, event4);
5772
+
this.#events = events;
5773
+
if (result.isOk()) {
5774
+
const handler = result[0];
5775
+
if (handler.stop_propagation) event4.stopPropagation();
5776
+
if (handler.prevent_default) event4.preventDefault();
5777
+
this.dispatch(handler.message, false);
5778
+
}
5779
+
});
5780
+
this.#vdom = virtualise(this.root);
5781
+
this.#events = new$5();
5782
+
this.#shouldFlush = true;
5783
+
this.#tick(effects);
5784
+
}
5785
+
// PUBLIC API ----------------------------------------------------------------
5786
+
root = null;
5787
+
set offset(offset) {
5788
+
this.#reconciler.offset = offset;
5789
+
}
5790
+
dispatch(msg, immediate2 = false) {
5791
+
this.#shouldFlush ||= immediate2;
5792
+
if (this.#shouldQueue) {
5793
+
this.#queue.push(msg);
5794
+
} else {
5795
+
const [model, effects] = this.#update(this.#model, msg);
5796
+
this.#model = model;
5797
+
this.#tick(effects);
5798
+
}
5799
+
}
5800
+
emit(event4, data) {
5801
+
const target = this.root.host ?? this.root;
5802
+
target.dispatchEvent(
5803
+
new CustomEvent(event4, {
5804
+
detail: data,
5805
+
bubbles: true,
5806
+
composed: true
5807
+
})
5808
+
);
5809
+
}
5810
+
// PRIVATE API ---------------------------------------------------------------
5811
+
#model;
5812
+
#view;
5813
+
#update;
5814
+
#vdom;
5815
+
#events;
5816
+
#reconciler;
5817
+
#shouldQueue = false;
5818
+
#queue = [];
5819
+
#beforePaint = empty_list;
5820
+
#afterPaint = empty_list;
5821
+
#renderTimer = null;
5822
+
#shouldFlush = false;
5823
+
#actions = {
5824
+
dispatch: (msg, immediate2) => this.dispatch(msg, immediate2),
5825
+
emit: (event4, data) => this.emit(event4, data),
5826
+
select: () => {
5827
+
},
5828
+
root: () => this.root
5829
+
};
5830
+
// A `#tick` is where we process effects and trigger any synchronous updates.
5831
+
// Once a tick has been processed a render will be scheduled if none is already.
5832
+
// p0
5833
+
#tick(effects) {
5834
+
this.#shouldQueue = true;
5835
+
while (true) {
5836
+
for (let list4 = effects.synchronous; list4.tail; list4 = list4.tail) {
5837
+
list4.head(this.#actions);
5838
+
}
5839
+
this.#beforePaint = listAppend(this.#beforePaint, effects.before_paint);
5840
+
this.#afterPaint = listAppend(this.#afterPaint, effects.after_paint);
5841
+
if (!this.#queue.length) break;
5842
+
[this.#model, effects] = this.#update(this.#model, this.#queue.shift());
5843
+
}
5844
+
this.#shouldQueue = false;
5845
+
if (this.#shouldFlush) {
5846
+
cancelAnimationFrame(this.#renderTimer);
5847
+
this.#render();
5848
+
} else if (!this.#renderTimer) {
5849
+
this.#renderTimer = requestAnimationFrame(() => {
5850
+
this.#render();
5851
+
});
5852
+
}
5853
+
}
5854
+
#render() {
5855
+
this.#shouldFlush = false;
5856
+
this.#renderTimer = null;
5857
+
const next = this.#view(this.#model);
5858
+
const { patch, events } = diff(this.#events, this.#vdom, next);
5859
+
this.#events = events;
5860
+
this.#vdom = next;
5861
+
this.#reconciler.push(patch);
5862
+
if (this.#beforePaint instanceof NonEmpty) {
5863
+
const effects = makeEffect(this.#beforePaint);
5864
+
this.#beforePaint = empty_list;
5865
+
queueMicrotask(() => {
5866
+
this.#shouldFlush = true;
5867
+
this.#tick(effects);
5868
+
});
5869
+
}
5870
+
if (this.#afterPaint instanceof NonEmpty) {
5871
+
const effects = makeEffect(this.#afterPaint);
5872
+
this.#afterPaint = empty_list;
5873
+
requestAnimationFrame(() => {
5874
+
this.#shouldFlush = true;
5875
+
this.#tick(effects);
5876
+
});
5877
+
}
5878
+
}
5879
+
};
5880
+
function makeEffect(synchronous) {
5881
+
return {
5882
+
synchronous,
5883
+
after_paint: empty_list,
5884
+
before_paint: empty_list
5885
+
};
5886
+
}
5887
+
function listAppend(a, b) {
5888
+
if (a instanceof Empty) {
5889
+
return b;
5890
+
} else if (b instanceof Empty) {
5891
+
return a;
5892
+
} else {
5893
+
return append(a, b);
5894
+
}
5895
+
}
5896
+
5897
+
// build/dev/javascript/lustre/lustre/runtime/server/runtime.mjs
5898
+
var EffectDispatchedMessage = class extends CustomType {
5899
+
constructor(message) {
5900
+
super();
5901
+
this.message = message;
5902
+
}
5903
+
};
5904
+
var EffectEmitEvent = class extends CustomType {
5905
+
constructor(name, data) {
5906
+
super();
5907
+
this.name = name;
5908
+
this.data = data;
5909
+
}
5910
+
};
5911
+
var SystemRequestedShutdown = class extends CustomType {
5912
+
};
5913
+
5914
+
// build/dev/javascript/lustre/lustre/component.mjs
5915
+
var Config2 = class extends CustomType {
5916
+
constructor(open_shadow_root, adopt_styles, attributes, properties, is_form_associated, on_form_autofill, on_form_reset, on_form_restore) {
5917
+
super();
5918
+
this.open_shadow_root = open_shadow_root;
5919
+
this.adopt_styles = adopt_styles;
5920
+
this.attributes = attributes;
5921
+
this.properties = properties;
5922
+
this.is_form_associated = is_form_associated;
5923
+
this.on_form_autofill = on_form_autofill;
5924
+
this.on_form_reset = on_form_reset;
5925
+
this.on_form_restore = on_form_restore;
5926
+
}
5927
+
};
5928
+
function new$8(options) {
5929
+
let init2 = new Config2(
5930
+
false,
5931
+
true,
5932
+
empty_dict(),
5933
+
empty_dict(),
5934
+
false,
5935
+
option_none,
5936
+
option_none,
5937
+
option_none
5938
+
);
5939
+
return fold(
5940
+
options,
5941
+
init2,
5942
+
(config, option) => {
5943
+
return option.apply(config);
5944
+
}
5945
+
);
5946
+
}
5947
+
5948
+
// build/dev/javascript/lustre/lustre/runtime/client/spa.ffi.mjs
5949
+
var Spa = class _Spa {
5950
+
static start({ init: init2, update: update5, view: view2 }, selector, flags) {
5951
+
if (!is_browser()) return new Error(new NotABrowser());
5952
+
const root3 = selector instanceof HTMLElement ? selector : document2().querySelector(selector);
5953
+
if (!root3) return new Error(new ElementNotFound(selector));
5954
+
return new Ok(new _Spa(root3, init2(flags), update5, view2));
5955
+
}
5956
+
#runtime;
5957
+
constructor(root3, [init2, effects], update5, view2) {
5958
+
this.#runtime = new Runtime(root3, [init2, effects], view2, update5);
5959
+
}
5960
+
send(message) {
5961
+
switch (message.constructor) {
5962
+
case EffectDispatchedMessage: {
5963
+
this.dispatch(message.message, false);
5964
+
break;
5965
+
}
5966
+
case EffectEmitEvent: {
5967
+
this.emit(message.name, message.data);
5968
+
break;
5969
+
}
5970
+
case SystemRequestedShutdown:
5971
+
break;
5972
+
}
5973
+
}
5974
+
dispatch(msg, immediate2) {
5975
+
this.#runtime.dispatch(msg, immediate2);
5976
+
}
5977
+
emit(event4, data) {
5978
+
this.#runtime.emit(event4, data);
5979
+
}
5980
+
};
5981
+
var start = Spa.start;
5982
+
5983
+
// build/dev/javascript/lustre/lustre.mjs
5984
+
var App = class extends CustomType {
5985
+
constructor(init2, update5, view2, config) {
5986
+
super();
5987
+
this.init = init2;
5988
+
this.update = update5;
5989
+
this.view = view2;
5990
+
this.config = config;
5991
+
}
5992
+
};
5993
+
var ElementNotFound = class extends CustomType {
5994
+
constructor(selector) {
5995
+
super();
5996
+
this.selector = selector;
5997
+
}
5998
+
};
5999
+
var NotABrowser = class extends CustomType {
6000
+
};
6001
+
function application(init2, update5, view2) {
6002
+
return new App(init2, update5, view2, new$8(empty_list));
6003
+
}
6004
+
function start3(app, selector, start_args) {
6005
+
return guard(
6006
+
!is_browser(),
6007
+
new Error(new NotABrowser()),
6008
+
() => {
6009
+
return start(app, selector, start_args);
6010
+
}
6011
+
);
6012
+
}
6013
+
6014
+
// build/dev/javascript/gleam_stdlib/gleam/pair.mjs
6015
+
function map_second(pair2, fun) {
6016
+
let a = pair2[0];
6017
+
let b = pair2[1];
6018
+
return [a, fun(b)];
6019
+
}
6020
+
6021
+
// build/dev/javascript/lustre/lustre/event.mjs
6022
+
function is_immediate_event(name) {
6023
+
if (name === "input") {
6024
+
return true;
6025
+
} else if (name === "change") {
6026
+
return true;
6027
+
} else if (name === "focus") {
6028
+
return true;
6029
+
} else if (name === "focusin") {
6030
+
return true;
6031
+
} else if (name === "focusout") {
6032
+
return true;
6033
+
} else if (name === "blur") {
6034
+
return true;
6035
+
} else if (name === "select") {
6036
+
return true;
6037
+
} else {
6038
+
return false;
6039
+
}
6040
+
}
6041
+
function on(name, handler) {
6042
+
return event(
6043
+
name,
6044
+
map2(handler, (msg) => {
6045
+
return new Handler(false, false, msg);
6046
+
}),
6047
+
empty_list,
6048
+
never,
6049
+
never,
6050
+
is_immediate_event(name),
6051
+
0,
6052
+
0
6053
+
);
6054
+
}
6055
+
function on_click(msg) {
6056
+
return on("click", success(msg));
6057
+
}
6058
+
function on_input(msg) {
6059
+
return on(
6060
+
"input",
6061
+
subfield(
6062
+
toList(["target", "value"]),
6063
+
string2,
6064
+
(value) => {
6065
+
return success(msg(value));
6066
+
}
6067
+
)
6068
+
);
6069
+
}
6070
+
6071
+
// build/dev/javascript/sketch/sketch.ffi.mjs
6072
+
var id = 0;
6073
+
function uniqueId() {
6074
+
return id++;
6075
+
}
6076
+
6077
+
// build/dev/javascript/murmur3a/murmur3a_ffi.mjs
6078
+
var signed_multiply = Math.imul;
6079
+
6080
+
// build/dev/javascript/murmur3a/murmur3a.mjs
6081
+
var Hash = class extends CustomType {
6082
+
constructor(seed, shift, state) {
6083
+
super();
6084
+
this.seed = seed;
6085
+
this.shift = shift;
6086
+
this.state = state;
6087
+
}
6088
+
};
6089
+
function int_digest(hash) {
6090
+
return hash.state;
6091
+
}
6092
+
function bit_array_digest(hash) {
6093
+
return toBitArray([sizedInt(int_digest(hash), 32, true)]);
6094
+
}
6095
+
function hex_digest(hash) {
6096
+
let _pipe = hash;
6097
+
let _pipe$1 = bit_array_digest(_pipe);
6098
+
return base16_encode(_pipe$1);
6099
+
}
6100
+
var c1 = 3432918353;
6101
+
var c2 = 461845907;
6102
+
var m1 = 4294967295;
6103
+
function rotate_left(n, shift) {
6104
+
let n$1 = bitwise_and(n, m1);
6105
+
let _pipe = bitwise_shift_left(n$1, shift);
6106
+
let _pipe$1 = bitwise_and(_pipe, m1);
6107
+
return bitwise_or(_pipe$1, bitwise_shift_right(n$1, 32 - shift));
6108
+
}
6109
+
function mix(state, seed) {
6110
+
let _pipe = state;
6111
+
let _pipe$1 = signed_multiply(_pipe, c1);
6112
+
let _pipe$2 = rotate_left(_pipe$1, 15);
6113
+
let _pipe$3 = signed_multiply(_pipe$2, c2);
6114
+
let _pipe$4 = bitwise_exclusive_or(_pipe$3, seed);
6115
+
let _pipe$5 = rotate_left(_pipe$4, 13);
6116
+
let _pipe$6 = signed_multiply(_pipe$5, 5);
6117
+
return add(_pipe$6, 3864292196);
6118
+
}
6119
+
function hash_chunk(hash, chunk) {
6120
+
let _block;
6121
+
let _pipe = chunk;
6122
+
let _pipe$1 = bitwise_and(_pipe, 255);
6123
+
let _pipe$2 = bitwise_shift_left(_pipe$1, hash.shift);
6124
+
_block = bitwise_or(_pipe$2, hash.state);
6125
+
let state = _block;
6126
+
let $ = hash.shift;
6127
+
if ($ === 24) {
6128
+
return new Hash(mix(state, hash.seed), 0, 0);
6129
+
} else {
6130
+
let _record = hash;
6131
+
return new Hash(_record.seed, hash.shift + 8, state);
6132
+
}
6133
+
}
6134
+
function finalize(hash, length4) {
6135
+
let _block;
6136
+
let _block$1;
6137
+
let $ = hash.state;
6138
+
if ($ === 0) {
6139
+
_block$1 = hash.seed;
6140
+
} else {
6141
+
let _pipe2 = hash.state;
6142
+
let _pipe$12 = signed_multiply(_pipe2, c1);
6143
+
let _pipe$22 = rotate_left(_pipe$12, 15);
6144
+
let _pipe$32 = signed_multiply(_pipe$22, c2);
6145
+
let _pipe$42 = bitwise_exclusive_or(_pipe$32, hash.seed);
6146
+
_block$1 = bitwise_and(_pipe$42, m1);
6147
+
}
6148
+
let _pipe = _block$1;
6149
+
_block = bitwise_exclusive_or(_pipe, length4);
6150
+
let state = _block;
6151
+
let _block$2;
6152
+
let _pipe$1 = bitwise_shift_right(state, 16);
6153
+
let _pipe$2 = bitwise_exclusive_or(_pipe$1, state);
6154
+
let _pipe$3 = signed_multiply(_pipe$2, 2246822507);
6155
+
_block$2 = bitwise_and(_pipe$3, m1);
6156
+
let state$1 = _block$2;
6157
+
let _block$3;
6158
+
let _pipe$4 = bitwise_shift_right(state$1, 13);
6159
+
let _pipe$5 = bitwise_exclusive_or(_pipe$4, state$1);
6160
+
_block$3 = signed_multiply(_pipe$5, 3266489909);
6161
+
let state$2 = _block$3;
6162
+
let _record = hash;
6163
+
return new Hash(
6164
+
_record.seed,
6165
+
_record.shift,
6166
+
(() => {
6167
+
let _pipe$6 = bitwise_shift_right(state$2, 16);
6168
+
let _pipe$7 = bitwise_and(_pipe$6, 65535);
6169
+
return bitwise_exclusive_or(_pipe$7, state$2);
6170
+
})()
6171
+
);
6172
+
}
6173
+
function hash_ints(key, seed) {
6174
+
let _pipe = key;
6175
+
let _pipe$1 = fold(_pipe, new Hash(seed, 0, 0), hash_chunk);
6176
+
return finalize(_pipe$1, length(key));
6177
+
}
6178
+
function hash_string(key, seed) {
6179
+
let _pipe = key;
6180
+
let _pipe$1 = to_utf_codepoints(_pipe);
6181
+
let _pipe$2 = map(_pipe$1, utf_codepoint_to_int);
6182
+
return hash_ints(_pipe$2, seed);
6183
+
}
6184
+
6185
+
// build/dev/javascript/sketch/sketch/internals/string.mjs
6186
+
function indent(indent2) {
6187
+
return repeat(" ", indent2);
6188
+
}
6189
+
function wrap_class(id2, properties, indentation, pseudo) {
6190
+
let base_indent = indent(indentation);
6191
+
let pseudo_ = unwrap(pseudo, "");
6192
+
let _pipe = prepend(base_indent + id2 + pseudo_ + " {", properties);
6193
+
let _pipe$1 = join(_pipe, "\n");
6194
+
return append2(_pipe$1, "\n" + base_indent + "}");
6195
+
}
6196
+
6197
+
// build/dev/javascript/sketch/sketch/internals/cache/cache.mjs
6198
+
var FILEPATH = "src/sketch/internals/cache/cache.gleam";
6199
+
var Class = class extends CustomType {
6200
+
constructor(as_string, content, name) {
6201
+
super();
6202
+
this.as_string = as_string;
6203
+
this.content = content;
6204
+
this.name = name;
6205
+
}
6206
+
};
6207
+
var Definitions = class extends CustomType {
6208
+
constructor(medias, selectors, class$5) {
6209
+
super();
6210
+
this.medias = medias;
6211
+
this.selectors = selectors;
6212
+
this.class = class$5;
6213
+
}
6214
+
};
6215
+
var ComputedClass = class extends CustomType {
6216
+
constructor(id2, name, class_name4, definitions) {
6217
+
super();
6218
+
this.id = id2;
6219
+
this.name = name;
6220
+
this.class_name = class_name4;
6221
+
this.definitions = definitions;
6222
+
}
6223
+
};
6224
+
var Cache = class extends CustomType {
6225
+
constructor(cache, at_rules) {
6226
+
super();
6227
+
this.cache = cache;
6228
+
this.at_rules = at_rules;
6229
+
}
6230
+
};
6231
+
var Global = class extends CustomType {
6232
+
constructor(class$5) {
6233
+
super();
6234
+
this.class = class$5;
6235
+
}
6236
+
};
6237
+
var ClassName = class extends CustomType {
6238
+
constructor(class$5) {
6239
+
super();
6240
+
this.class = class$5;
6241
+
}
6242
+
};
6243
+
var Media = class extends CustomType {
6244
+
constructor(query, styles) {
6245
+
super();
6246
+
this.query = query;
6247
+
this.styles = styles;
6248
+
}
6249
+
};
6250
+
var Selector = class extends CustomType {
6251
+
constructor(selector, styles) {
6252
+
super();
6253
+
this.selector = selector;
6254
+
this.styles = styles;
6255
+
}
6256
+
};
6257
+
var Combinator = class extends CustomType {
6258
+
constructor(selector, class$5, styles) {
6259
+
super();
6260
+
this.selector = selector;
6261
+
this.class = class$5;
6262
+
this.styles = styles;
6263
+
}
6264
+
};
6265
+
var Property2 = class extends CustomType {
6266
+
constructor(key, value, important) {
6267
+
super();
6268
+
this.key = key;
6269
+
this.value = value;
6270
+
this.important = important;
6271
+
}
6272
+
};
6273
+
var Properties = class extends CustomType {
6274
+
constructor(properties, medias, selectors, indentation) {
6275
+
super();
6276
+
this.properties = properties;
6277
+
this.medias = medias;
6278
+
this.selectors = selectors;
6279
+
this.indentation = indentation;
6280
+
}
6281
+
};
6282
+
var MediaProperty = class extends CustomType {
6283
+
constructor(query, properties, selectors) {
6284
+
super();
6285
+
this.query = query;
6286
+
this.properties = properties;
6287
+
this.selectors = selectors;
6288
+
}
6289
+
};
6290
+
var SelectorProperty = class extends CustomType {
6291
+
constructor(selector, properties) {
6292
+
super();
6293
+
this.selector = selector;
6294
+
this.properties = properties;
6295
+
}
6296
+
};
6297
+
function new$10() {
6298
+
return new Cache(new_map(), new_map());
6299
+
}
6300
+
function class$2(content) {
6301
+
let as_string = inspect2(content);
6302
+
return new Class(as_string, content, new None());
6303
+
}
6304
+
function named(name, content) {
6305
+
let as_string = inspect2(content);
6306
+
return new Class(as_string, content, new Some(name));
6307
+
}
6308
+
function empty_computed() {
6309
+
let definitions = new Definitions(toList([]), toList([]), "");
6310
+
return new ComputedClass("", "", "", definitions);
6311
+
}
6312
+
function compute_hash(to_hash) {
6313
+
let _pipe = hash_string(to_hash, 1);
6314
+
return hex_digest(_pipe);
6315
+
}
6316
+
function wrap_selectors(id2, indentation, selectors) {
6317
+
return map(
6318
+
selectors,
6319
+
(selector) => {
6320
+
let selector$1 = selector.selector;
6321
+
let properties = selector.properties;
6322
+
return wrap_class(
6323
+
id2,
6324
+
properties,
6325
+
indentation,
6326
+
new Some(selector$1)
6327
+
);
6328
+
}
6329
+
);
6330
+
}
6331
+
function compute_classes(id2, name, properties) {
6332
+
let class_name$1 = lazy_unwrap(name, () => {
6333
+
return "css-" + id2;
6334
+
});
6335
+
let name$1 = lazy_unwrap(name, () => {
6336
+
return ".css-" + id2;
6337
+
});
6338
+
let properties$1 = properties.properties;
6339
+
let medias = properties.medias;
6340
+
let selectors = properties.selectors;
6341
+
let class$1 = wrap_class(name$1, properties$1, 0, new None());
6342
+
let selectors$1 = wrap_selectors(name$1, 0, selectors);
6343
+
return new ComputedClass(
6344
+
id2,
6345
+
name$1,
6346
+
class_name$1,
6347
+
new Definitions(
6348
+
map(
6349
+
medias,
6350
+
(_use0) => {
6351
+
let query = _use0.query;
6352
+
let properties$2 = _use0.properties;
6353
+
let selectors$2 = _use0.selectors;
6354
+
let selectors$3 = wrap_selectors(name$1, 2, selectors$2);
6355
+
let _pipe = toList([
6356
+
query + " {",
6357
+
wrap_class(name$1, properties$2, 2, new None())
6358
+
]);
6359
+
let _pipe$1 = ((_capture) => {
6360
+
return prepend2(toList([selectors$3, toList(["}"])]), _capture);
6361
+
})(_pipe);
6362
+
let _pipe$2 = flatten(_pipe$1);
6363
+
return join(_pipe$2, "\n");
6364
+
}
6365
+
),
6366
+
selectors$1,
6367
+
class$1
6368
+
)
6369
+
);
6370
+
}
6371
+
function compute_property(indent2, key, value, important) {
6372
+
let base_indent = indent(indent2);
6373
+
let _block;
6374
+
if (important) {
6375
+
_block = " !important";
6376
+
} else {
6377
+
_block = "";
6378
+
}
6379
+
let important$1 = _block;
6380
+
return base_indent + key + ": " + value + important$1 + ";";
6381
+
}
6382
+
function handle_property(props, property4) {
6383
+
if (!(property4 instanceof Property2)) {
6384
+
throw makeError(
6385
+
"let_assert",
6386
+
FILEPATH,
6387
+
"sketch/internals/cache/cache",
6388
+
243,
6389
+
"handle_property",
6390
+
"Pattern match failed, no pattern matched the value.",
6391
+
{
6392
+
value: property4,
6393
+
start: 7133,
6394
+
end: 7189,
6395
+
pattern_start: 7144,
6396
+
pattern_end: 7178
6397
+
}
6398
+
);
6399
+
}
6400
+
let key = property4.key;
6401
+
let value = property4.value;
6402
+
let important = property4.important;
6403
+
let css_property = compute_property(props.indentation, key, value, important);
6404
+
let properties = prepend(css_property, props.properties);
6405
+
let _record = props;
6406
+
return new Properties(
6407
+
properties,
6408
+
_record.medias,
6409
+
_record.selectors,
6410
+
_record.indentation
6411
+
);
6412
+
}
6413
+
function merge_computed_properties(target, argument) {
6414
+
return new Properties(
6415
+
append(argument.properties, target.properties),
6416
+
append(argument.medias, target.medias),
6417
+
append(argument.selectors, target.selectors),
6418
+
target.indentation
6419
+
);
6420
+
}
6421
+
function get_definitions(class$5) {
6422
+
let $ = class$5.definitions;
6423
+
let medias = $.medias;
6424
+
let selectors = $.selectors;
6425
+
let class$1 = $.class;
6426
+
let _pipe = toList([toList([class$1]), selectors, medias]);
6427
+
return flatten(_pipe);
6428
+
}
6429
+
function render_sheet(cache) {
6430
+
let _pipe = values(cache.at_rules);
6431
+
let _pipe$1 = append(
6432
+
_pipe,
6433
+
flat_map(
6434
+
values(cache.cache),
6435
+
(c) => {
6436
+
return get_definitions(c[0]);
6437
+
}
6438
+
)
6439
+
);
6440
+
return join(_pipe$1, "\n\n");
6441
+
}
6442
+
function handle_combinator(cache, props, combinator, existing_selector) {
6443
+
if (!(combinator instanceof Combinator)) {
6444
+
throw makeError(
6445
+
"let_assert",
6446
+
FILEPATH,
6447
+
"sketch/internals/cache/cache",
6448
+
285,
6449
+
"handle_combinator",
6450
+
"Pattern match failed, no pattern matched the value.",
6451
+
{
6452
+
value: combinator,
6453
+
start: 8551,
6454
+
end: 8613,
6455
+
pattern_start: 8562,
6456
+
pattern_end: 8600
6457
+
}
6458
+
);
6459
+
}
6460
+
let selector = combinator.selector;
6461
+
let class$1 = combinator.class;
6462
+
let styles = combinator.styles;
6463
+
let indentation = props.indentation + 2;
6464
+
let $ = computed_class(class$1, cache);
6465
+
let cache$1 = $[0];
6466
+
let class$22 = $[1];
6467
+
let selector$1 = existing_selector + selector + class$22.name;
6468
+
let $1 = compute_properties(cache$1, styles, indentation, selector$1);
6469
+
let cache$2 = $1[0];
6470
+
let properties = $1[1];
6471
+
let selector$2 = new SelectorProperty(selector$1, properties.properties);
6472
+
let selectors = prepend(selector$2, properties.selectors);
6473
+
let selectors$1 = append(selectors, props.selectors);
6474
+
return [
6475
+
cache$2,
6476
+
(() => {
6477
+
let _record = props;
6478
+
return new Properties(
6479
+
_record.properties,
6480
+
_record.medias,
6481
+
selectors$1,
6482
+
_record.indentation
6483
+
);
6484
+
})()
6485
+
];
6486
+
}
6487
+
function compute_properties(cache, properties, indentation, existing_selector) {
6488
+
let init2 = new Properties(toList([]), toList([]), toList([]), indentation);
6489
+
return fold(
6490
+
reverse(properties),
6491
+
[cache, init2],
6492
+
(_use0, p) => {
6493
+
let cache$1 = _use0[0];
6494
+
let acc = _use0[1];
6495
+
if (p instanceof ClassName) {
6496
+
let class$1 = p.class;
6497
+
let $ = map_get(cache$1.cache, class$1.as_string);
6498
+
if ($ instanceof Ok) {
6499
+
let props = $[0][1];
6500
+
return [cache$1, merge_computed_properties(acc, props)];
6501
+
} else {
6502
+
let _pipe = compute_properties(
6503
+
cache$1,
6504
+
class$1.content,
6505
+
indentation,
6506
+
""
6507
+
);
6508
+
return map_second(
6509
+
_pipe,
6510
+
(_capture) => {
6511
+
return merge_computed_properties(acc, _capture);
6512
+
}
6513
+
);
6514
+
}
6515
+
} else if (p instanceof Media) {
6516
+
return handle_media(cache$1, acc, p);
6517
+
} else if (p instanceof Selector) {
6518
+
return handle_selector(cache$1, acc, p, existing_selector);
6519
+
} else if (p instanceof Combinator) {
6520
+
return handle_combinator(cache$1, acc, p, existing_selector);
6521
+
} else if (p instanceof Property2) {
6522
+
return [cache$1, handle_property(acc, p)];
6523
+
} else {
6524
+
return [cache$1, acc];
6525
+
}
6526
+
}
6527
+
);
6528
+
}
6529
+
function insert_class_in_cache(cache, class$5) {
6530
+
let $ = compute_properties(cache, class$5.content, 2, "");
6531
+
let cache$1 = $[0];
6532
+
let properties = $[1];
6533
+
let hash = compute_hash(class$5.as_string);
6534
+
let class_ = compute_classes(hash, class$5.name, properties);
6535
+
let key = unwrap(class$5.name, class$5.as_string);
6536
+
let cache_ = insert(cache$1.cache, key, [class_, properties]);
6537
+
return [
6538
+
(() => {
6539
+
let _record = cache$1;
6540
+
return new Cache(cache_, _record.at_rules);
6541
+
})(),
6542
+
class_
6543
+
];
6544
+
}
6545
+
function computed_class(class$5, cache) {
6546
+
return lazy_guard(
6547
+
is_empty2(class$5.content),
6548
+
() => {
6549
+
return [cache, empty_computed()];
6550
+
},
6551
+
() => {
6552
+
let existing_class = map_get(cache.cache, class$5.as_string);
6553
+
if (existing_class instanceof Ok) {
6554
+
let class$1 = existing_class[0][0];
6555
+
return [cache, class$1];
6556
+
} else {
6557
+
return insert_class_in_cache(cache, class$5);
6558
+
}
6559
+
}
6560
+
);
6561
+
}
6562
+
function class_name(class$5, cache) {
6563
+
return map_second(
6564
+
computed_class(class$5, cache),
6565
+
(class$6) => {
6566
+
return class$6.class_name;
6567
+
}
6568
+
);
6569
+
}
6570
+
function handle_media(cache, props, media) {
6571
+
if (!(media instanceof Media)) {
6572
+
throw makeError(
6573
+
"let_assert",
6574
+
FILEPATH,
6575
+
"sketch/internals/cache/cache",
6576
+
254,
6577
+
"handle_media",
6578
+
"Pattern match failed, no pattern matched the value.",
6579
+
{
6580
+
value: media,
6581
+
start: 7462,
6582
+
end: 7503,
6583
+
pattern_start: 7473,
6584
+
pattern_end: 7495
6585
+
}
6586
+
);
6587
+
}
6588
+
let query = media.query;
6589
+
let styles = media.styles;
6590
+
let indentation = props.indentation + 2;
6591
+
let $ = compute_properties(cache, styles, indentation, "");
6592
+
let cache$1 = $[0];
6593
+
let properties = $[1];
6594
+
let properties$1 = properties.properties;
6595
+
let selectors = properties.selectors;
6596
+
let medias = prepend(
6597
+
new MediaProperty(query, properties$1, selectors),
6598
+
props.medias
6599
+
);
6600
+
return [
6601
+
cache$1,
6602
+
(() => {
6603
+
let _record = props;
6604
+
return new Properties(
6605
+
_record.properties,
6606
+
medias,
6607
+
_record.selectors,
6608
+
_record.indentation
6609
+
);
6610
+
})()
6611
+
];
6612
+
}
6613
+
function handle_selector(cache, props, selector, existing_selector) {
6614
+
if (!(selector instanceof Selector)) {
6615
+
throw makeError(
6616
+
"let_assert",
6617
+
FILEPATH,
6618
+
"sketch/internals/cache/cache",
6619
+
268,
6620
+
"handle_selector",
6621
+
"Pattern match failed, no pattern matched the value.",
6622
+
{
6623
+
value: selector,
6624
+
start: 7944,
6625
+
end: 7994,
6626
+
pattern_start: 7955,
6627
+
pattern_end: 7983
6628
+
}
6629
+
);
6630
+
}
6631
+
let selector$1 = selector.selector;
6632
+
let styles = selector.styles;
6633
+
let indentation = props.indentation + 2;
6634
+
let selector$2 = existing_selector + selector$1;
6635
+
let $ = compute_properties(cache, styles, indentation, selector$2);
6636
+
let cache$1 = $[0];
6637
+
let properties = $[1];
6638
+
let selector$3 = new SelectorProperty(selector$2, properties.properties);
6639
+
let selectors = prepend(selector$3, properties.selectors);
6640
+
let selectors$1 = append(selectors, props.selectors);
6641
+
return [
6642
+
cache$1,
6643
+
(() => {
6644
+
let _record = props;
6645
+
return new Properties(
6646
+
_record.properties,
6647
+
_record.medias,
6648
+
selectors$1,
6649
+
_record.indentation
6650
+
);
6651
+
})()
6652
+
];
6653
+
}
6654
+
6655
+
// build/dev/javascript/sketch/sketch/css/length.mjs
6656
+
var Px = class extends CustomType {
6657
+
constructor($0) {
6658
+
super();
6659
+
this[0] = $0;
6660
+
}
6661
+
};
6662
+
var Cm = class extends CustomType {
6663
+
constructor($0) {
6664
+
super();
6665
+
this[0] = $0;
6666
+
}
6667
+
};
6668
+
var Mm = class extends CustomType {
6669
+
constructor($0) {
6670
+
super();
6671
+
this[0] = $0;
6672
+
}
6673
+
};
6674
+
var Q = class extends CustomType {
6675
+
constructor($0) {
6676
+
super();
6677
+
this[0] = $0;
6678
+
}
6679
+
};
6680
+
var In = class extends CustomType {
6681
+
constructor($0) {
6682
+
super();
6683
+
this[0] = $0;
6684
+
}
6685
+
};
6686
+
var Pc = class extends CustomType {
6687
+
constructor($0) {
6688
+
super();
6689
+
this[0] = $0;
6690
+
}
6691
+
};
6692
+
var Pt = class extends CustomType {
6693
+
constructor($0) {
6694
+
super();
6695
+
this[0] = $0;
6696
+
}
6697
+
};
6698
+
var Vh = class extends CustomType {
6699
+
constructor($0) {
6700
+
super();
6701
+
this[0] = $0;
6702
+
}
6703
+
};
6704
+
var Vw = class extends CustomType {
6705
+
constructor($0) {
6706
+
super();
6707
+
this[0] = $0;
6708
+
}
6709
+
};
6710
+
var Em = class extends CustomType {
6711
+
constructor($0) {
6712
+
super();
6713
+
this[0] = $0;
6714
+
}
6715
+
};
6716
+
var Rem = class extends CustomType {
6717
+
constructor($0) {
6718
+
super();
6719
+
this[0] = $0;
6720
+
}
6721
+
};
6722
+
var Lh = class extends CustomType {
6723
+
constructor($0) {
6724
+
super();
6725
+
this[0] = $0;
6726
+
}
6727
+
};
6728
+
var Rlh = class extends CustomType {
6729
+
constructor($0) {
6730
+
super();
6731
+
this[0] = $0;
6732
+
}
6733
+
};
6734
+
var Ch = class extends CustomType {
6735
+
constructor($0) {
6736
+
super();
6737
+
this[0] = $0;
6738
+
}
6739
+
};
6740
+
var Pct = class extends CustomType {
6741
+
constructor($0) {
6742
+
super();
6743
+
this[0] = $0;
6744
+
}
6745
+
};
6746
+
var Cap = class extends CustomType {
6747
+
constructor($0) {
6748
+
super();
6749
+
this[0] = $0;
6750
+
}
6751
+
};
6752
+
var Ex = class extends CustomType {
6753
+
constructor($0) {
6754
+
super();
6755
+
this[0] = $0;
6756
+
}
6757
+
};
6758
+
var Ic = class extends CustomType {
6759
+
constructor($0) {
6760
+
super();
6761
+
this[0] = $0;
6762
+
}
6763
+
};
6764
+
var Rcap = class extends CustomType {
6765
+
constructor($0) {
6766
+
super();
6767
+
this[0] = $0;
6768
+
}
6769
+
};
6770
+
var Rch = class extends CustomType {
6771
+
constructor($0) {
6772
+
super();
6773
+
this[0] = $0;
6774
+
}
6775
+
};
6776
+
var Rex = class extends CustomType {
6777
+
constructor($0) {
6778
+
super();
6779
+
this[0] = $0;
6780
+
}
6781
+
};
6782
+
var Ric = class extends CustomType {
6783
+
constructor($0) {
6784
+
super();
6785
+
this[0] = $0;
6786
+
}
6787
+
};
6788
+
var Vmax = class extends CustomType {
6789
+
constructor($0) {
6790
+
super();
6791
+
this[0] = $0;
6792
+
}
6793
+
};
6794
+
var Vmin = class extends CustomType {
6795
+
constructor($0) {
6796
+
super();
6797
+
this[0] = $0;
6798
+
}
6799
+
};
6800
+
var Vb = class extends CustomType {
6801
+
constructor($0) {
6802
+
super();
6803
+
this[0] = $0;
6804
+
}
6805
+
};
6806
+
var Vi = class extends CustomType {
6807
+
constructor($0) {
6808
+
super();
6809
+
this[0] = $0;
6810
+
}
6811
+
};
6812
+
var Cqw = class extends CustomType {
6813
+
constructor($0) {
6814
+
super();
6815
+
this[0] = $0;
6816
+
}
6817
+
};
6818
+
var Cqh = class extends CustomType {
6819
+
constructor($0) {
6820
+
super();
6821
+
this[0] = $0;
6822
+
}
6823
+
};
6824
+
var Cqi = class extends CustomType {
6825
+
constructor($0) {
6826
+
super();
6827
+
this[0] = $0;
6828
+
}
6829
+
};
6830
+
var Cqb = class extends CustomType {
6831
+
constructor($0) {
6832
+
super();
6833
+
this[0] = $0;
6834
+
}
6835
+
};
6836
+
var Cqmin = class extends CustomType {
6837
+
constructor($0) {
6838
+
super();
6839
+
this[0] = $0;
6840
+
}
6841
+
};
6842
+
function px(value) {
6843
+
return new Px(identity(value));
6844
+
}
6845
+
function percent(value) {
6846
+
return new Pct(identity(value));
6847
+
}
6848
+
function vw(value) {
6849
+
return new Vw(identity(value));
6850
+
}
6851
+
function em(value) {
6852
+
return new Em(value);
6853
+
}
6854
+
function to_string4(size3) {
6855
+
if (size3 instanceof Px) {
6856
+
let value = size3[0];
6857
+
return append2(float_to_string(value), "px");
6858
+
} else if (size3 instanceof Cm) {
6859
+
let value = size3[0];
6860
+
return append2(float_to_string(value), "cm");
6861
+
} else if (size3 instanceof Mm) {
6862
+
let value = size3[0];
6863
+
return append2(float_to_string(value), "mm");
6864
+
} else if (size3 instanceof Q) {
6865
+
let value = size3[0];
6866
+
return append2(float_to_string(value), "q");
6867
+
} else if (size3 instanceof In) {
6868
+
let value = size3[0];
6869
+
return append2(float_to_string(value), "in");
6870
+
} else if (size3 instanceof Pc) {
6871
+
let value = size3[0];
6872
+
return append2(float_to_string(value), "pc");
6873
+
} else if (size3 instanceof Pt) {
6874
+
let value = size3[0];
6875
+
return append2(float_to_string(value), "pt");
6876
+
} else if (size3 instanceof Vh) {
6877
+
let value = size3[0];
6878
+
return append2(float_to_string(value), "vh");
6879
+
} else if (size3 instanceof Vw) {
6880
+
let value = size3[0];
6881
+
return append2(float_to_string(value), "vw");
6882
+
} else if (size3 instanceof Em) {
6883
+
let value = size3[0];
6884
+
return append2(float_to_string(value), "em");
6885
+
} else if (size3 instanceof Rem) {
6886
+
let value = size3[0];
6887
+
return append2(float_to_string(value), "rem");
6888
+
} else if (size3 instanceof Lh) {
6889
+
let value = size3[0];
6890
+
return append2(float_to_string(value), "lh");
6891
+
} else if (size3 instanceof Rlh) {
6892
+
let value = size3[0];
6893
+
return append2(float_to_string(value), "rlh");
6894
+
} else if (size3 instanceof Ch) {
6895
+
let value = size3[0];
6896
+
return append2(float_to_string(value), "ch");
6897
+
} else if (size3 instanceof Pct) {
6898
+
let value = size3[0];
6899
+
return append2(float_to_string(value), "%");
6900
+
} else if (size3 instanceof Cap) {
6901
+
let value = size3[0];
6902
+
return append2(float_to_string(value), "cap");
6903
+
} else if (size3 instanceof Ex) {
6904
+
let value = size3[0];
6905
+
return append2(float_to_string(value), "ex");
6906
+
} else if (size3 instanceof Ic) {
6907
+
let value = size3[0];
6908
+
return append2(float_to_string(value), "ic");
6909
+
} else if (size3 instanceof Rcap) {
6910
+
let value = size3[0];
6911
+
return append2(float_to_string(value), "rcap");
6912
+
} else if (size3 instanceof Rch) {
6913
+
let value = size3[0];
6914
+
return append2(float_to_string(value), "rch");
6915
+
} else if (size3 instanceof Rex) {
6916
+
let value = size3[0];
6917
+
return append2(float_to_string(value), "rex");
6918
+
} else if (size3 instanceof Ric) {
6919
+
let value = size3[0];
6920
+
return append2(float_to_string(value), "ric");
6921
+
} else if (size3 instanceof Vmax) {
6922
+
let value = size3[0];
6923
+
return append2(float_to_string(value), "vmax");
6924
+
} else if (size3 instanceof Vmin) {
6925
+
let value = size3[0];
6926
+
return append2(float_to_string(value), "vmin");
6927
+
} else if (size3 instanceof Vb) {
6928
+
let value = size3[0];
6929
+
return append2(float_to_string(value), "vb");
6930
+
} else if (size3 instanceof Vi) {
6931
+
let value = size3[0];
6932
+
return append2(float_to_string(value), "vi");
6933
+
} else if (size3 instanceof Cqw) {
6934
+
let value = size3[0];
6935
+
return append2(float_to_string(value), "cqw");
6936
+
} else if (size3 instanceof Cqh) {
6937
+
let value = size3[0];
6938
+
return append2(float_to_string(value), "cqh");
6939
+
} else if (size3 instanceof Cqi) {
6940
+
let value = size3[0];
6941
+
return append2(float_to_string(value), "cqi");
6942
+
} else if (size3 instanceof Cqb) {
6943
+
let value = size3[0];
6944
+
return append2(float_to_string(value), "cqb");
6945
+
} else if (size3 instanceof Cqmin) {
6946
+
let value = size3[0];
6947
+
return append2(float_to_string(value), "cqmin");
6948
+
} else {
6949
+
let value = size3[0];
6950
+
return append2(float_to_string(value), "cqmax");
6951
+
}
6952
+
}
6953
+
6954
+
// build/dev/javascript/sketch/sketch/css.mjs
6955
+
function class$4(styles) {
6956
+
return class$2(styles);
6957
+
}
6958
+
function global(name, styles) {
6959
+
return new Global(named(name, styles));
6960
+
}
6961
+
function property3(field2, content) {
6962
+
return new Property2(field2, content, false);
6963
+
}
6964
+
function align_items(align) {
6965
+
return property3("align-items", align);
6966
+
}
6967
+
function aspect_ratio(aspect_ratio2) {
6968
+
return property3("aspect-ratio", aspect_ratio2);
6969
+
}
6970
+
function background(background2) {
6971
+
return property3("background", background2);
6972
+
}
6973
+
function background_color(value) {
6974
+
return property3("background-color", value);
6975
+
}
6976
+
function border(border2) {
6977
+
return property3("border", border2);
6978
+
}
6979
+
function border_radius(border_radius2) {
6980
+
return property3("border-radius", to_string4(border_radius2));
6981
+
}
6982
+
function color(color2) {
6983
+
return property3("color", color2);
6984
+
}
6985
+
function display(display2) {
6986
+
return property3("display", display2);
6987
+
}
6988
+
function flex_direction(flex_direction2) {
6989
+
return property3("flex-direction", flex_direction2);
6990
+
}
6991
+
function gap(gap2) {
6992
+
return property3("gap", to_string4(gap2));
6993
+
}
6994
+
function margin(margin2) {
6995
+
return property3("margin", to_string4(margin2));
6996
+
}
6997
+
function margin_left(margin2) {
6998
+
return property3("margin-left", to_string4(margin2));
6999
+
}
7000
+
function max_width(width2) {
7001
+
return property3("max-width", to_string4(width2));
7002
+
}
7003
+
function padding(padding2) {
7004
+
return property3("padding", to_string4(padding2));
7005
+
}
7006
+
function width(width2) {
7007
+
return property3("width", to_string4(width2));
7008
+
}
7009
+
function width_(width2) {
7010
+
return property3("width", width2);
7011
+
}
7012
+
7013
+
// build/dev/javascript/sketch/sketch.mjs
7014
+
var StyleSheet = class extends CustomType {
7015
+
constructor(cache, id2, is_persistent) {
7016
+
super();
7017
+
this.cache = cache;
7018
+
this.id = id2;
7019
+
this.is_persistent = is_persistent;
7020
+
}
7021
+
};
7022
+
var Ephemeral = class extends CustomType {
7023
+
};
7024
+
var Persistent = class extends CustomType {
7025
+
};
7026
+
function render(cache) {
7027
+
return render_sheet(cache.cache);
7028
+
}
7029
+
function class_name2(class$5, stylesheet2) {
7030
+
let $ = class_name(class$5, stylesheet2.cache);
7031
+
let cache = $[0];
7032
+
let class_name$1 = $[1];
7033
+
return [
7034
+
(() => {
7035
+
let _record = stylesheet2;
7036
+
return new StyleSheet(cache, _record.id, _record.is_persistent);
7037
+
})(),
7038
+
class_name$1
7039
+
];
7040
+
}
7041
+
function global2(stylesheet2, global3) {
7042
+
let $ = class_name(global3.class, stylesheet2.cache);
7043
+
let cache = $[0];
7044
+
let _record = stylesheet2;
7045
+
return new StyleSheet(cache, _record.id, _record.is_persistent);
7046
+
}
7047
+
function stylesheet(strategy) {
7048
+
let id2 = uniqueId();
7049
+
return new Ok(
7050
+
(() => {
7051
+
if (strategy instanceof Ephemeral) {
7052
+
return new StyleSheet(new$10(), id2, false);
7053
+
} else {
7054
+
return new StyleSheet(new$10(), id2, true);
7055
+
}
7056
+
})()
7057
+
);
7058
+
}
7059
+
7060
+
// build/dev/javascript/sketch_lustre/sketch/lustre/internals/css-stylesheet.ffi.mjs
7061
+
function replaceSync(content, stylesheet2) {
7062
+
stylesheet2.replaceSync(content);
7063
+
}
7064
+
7065
+
// build/dev/javascript/sketch_lustre/sketch/lustre/internals/global.ffi.mjs
7066
+
var currentStylesheet = null;
7067
+
var stylesheets = {};
7068
+
function setStyleSheet(stylesheet2) {
7069
+
stylesheets[stylesheet2.id] = stylesheet2;
7070
+
return new Ok(stylesheet2);
7071
+
}
7072
+
function setCurrentStylesheet(stylesheet2) {
7073
+
currentStylesheet = stylesheet2.id;
7074
+
return new Ok(stylesheet2);
7075
+
}
7076
+
function getStyleSheet() {
7077
+
const stylesheet2 = stylesheets[currentStylesheet];
7078
+
if (!stylesheet2) return new Error();
7079
+
return new Ok(stylesheet2);
7080
+
}
7081
+
function dismissCurrentStylesheet() {
7082
+
currentStylesheet = null;
7083
+
return new Ok(void 0);
7084
+
}
7085
+
7086
+
// build/dev/javascript/sketch_lustre/sketch/lustre.mjs
7087
+
var FILEPATH2 = "src/sketch/lustre.gleam";
7088
+
var Document2 = class extends CustomType {
7089
+
constructor(css_stylesheet) {
7090
+
super();
7091
+
this.css_stylesheet = css_stylesheet;
7092
+
}
7093
+
};
7094
+
var Shadow = class extends CustomType {
7095
+
constructor(css_stylesheet) {
7096
+
super();
7097
+
this.css_stylesheet = css_stylesheet;
7098
+
}
7099
+
};
7100
+
var Node = class extends CustomType {
7101
+
};
7102
+
function setup() {
7103
+
let $ = stylesheet(new Persistent());
7104
+
if ($ instanceof Ok) {
7105
+
let stylesheet2 = $[0];
7106
+
return setStyleSheet(stylesheet2);
7107
+
} else {
7108
+
return new Error(void 0);
7109
+
}
7110
+
}
7111
+
function render2(stylesheet2, outputs, view2) {
7112
+
let $ = setCurrentStylesheet(stylesheet2);
7113
+
if (!($ instanceof Ok)) {
7114
+
throw makeError(
7115
+
"let_assert",
7116
+
FILEPATH2,
7117
+
"sketch/lustre",
7118
+
117,
7119
+
"render",
7120
+
"Pattern match failed, no pattern matched the value.",
7121
+
{
7122
+
value: $,
7123
+
start: 3944,
7124
+
end: 4004,
7125
+
pattern_start: 3955,
7126
+
pattern_end: 3960
7127
+
}
7128
+
);
7129
+
}
7130
+
let new_view = view2();
7131
+
let $1 = getStyleSheet();
7132
+
if ($1 instanceof Ok) {
7133
+
let stylesheet$1 = $1[0];
7134
+
let content = render(stylesheet$1);
7135
+
return fold(
7136
+
outputs,
7137
+
new_view,
7138
+
(view3, stylesheet3) => {
7139
+
if (stylesheet3 instanceof Document2) {
7140
+
let css_stylesheet = stylesheet3.css_stylesheet;
7141
+
return tap(
7142
+
view3,
7143
+
(_) => {
7144
+
let $2 = dismissCurrentStylesheet();
7145
+
return replaceSync(content, css_stylesheet);
7146
+
}
7147
+
);
7148
+
} else if (stylesheet3 instanceof Shadow) {
7149
+
let css_stylesheet = stylesheet3.css_stylesheet;
7150
+
return tap(
7151
+
view3,
7152
+
(_) => {
7153
+
let $2 = dismissCurrentStylesheet();
7154
+
return replaceSync(content, css_stylesheet);
7155
+
}
7156
+
);
7157
+
} else {
7158
+
return fragment2(toList([style(toList([]), content), view3]));
7159
+
}
7160
+
}
7161
+
);
7162
+
} else {
7163
+
return new_view;
7164
+
}
7165
+
}
7166
+
function node() {
7167
+
return new Node();
7168
+
}
7169
+
7170
+
// build/dev/javascript/sketch_lustre/sketch/lustre/element.mjs
7171
+
var FILEPATH3 = "src/sketch/lustre/element.gleam";
7172
+
function element_(tag, attributes, children) {
7173
+
return element2(tag, attributes, children);
7174
+
}
7175
+
var none3 = none2;
7176
+
var text3 = text2;
7177
+
var error_msg = "Stylesheet is not initialized in your application. Please, initialize a stylesheet before rendering some nodes.";
7178
+
function class_name3(class$5) {
7179
+
let $ = getStyleSheet();
7180
+
if ($ instanceof Ok) {
7181
+
let stylesheet2 = $[0];
7182
+
let $1 = class_name2(class$5, stylesheet2);
7183
+
let stylesheet$1 = $1[0];
7184
+
let class_name$1 = $1[1];
7185
+
let $2 = setStyleSheet(stylesheet$1);
7186
+
return class_name$1;
7187
+
} else {
7188
+
throw makeError(
7189
+
"panic",
7190
+
FILEPATH3,
7191
+
"sketch/lustre/element",
7192
+
77,
7193
+
"class_name",
7194
+
error_msg,
7195
+
{}
7196
+
);
7197
+
}
7198
+
}
7199
+
function element3(tag, class$5, attributes, children) {
7200
+
let class_name$1 = class_name3(class$5);
7201
+
let attributes$1 = prepend(class$(class_name$1), attributes);
7202
+
return element2(tag, attributes$1, children);
7203
+
}
7204
+
7205
+
// build/dev/javascript/sketch_lustre/sketch/lustre/element/html.mjs
7206
+
function text4(content) {
7207
+
return text3(content);
7208
+
}
7209
+
function button(class$5, attributes, children) {
7210
+
return element3("button", class$5, attributes, children);
7211
+
}
7212
+
function div(class$5, attributes, children) {
7213
+
return element3("div", class$5, attributes, children);
7214
+
}
7215
+
function h1_(attributes, children) {
7216
+
return element_("h1", attributes, children);
7217
+
}
7218
+
function h4(class$5, attributes, children) {
7219
+
return element3("h4", class$5, attributes, children);
7220
+
}
7221
+
function input_(attributes) {
7222
+
return element_("input", attributes, toList([]));
7223
+
}
7224
+
function span(class$5, attributes, children) {
7225
+
return element3("span", class$5, attributes, children);
7226
+
}
7227
+
7228
+
// build/dev/javascript/voyagers_bingo/voyagers_bingo/styles.mjs
7229
+
function container() {
7230
+
return class$4(
7231
+
toList([
7232
+
margin_left(vw(3)),
7233
+
gap(em(0.5)),
7234
+
display("flex"),
7235
+
flex_direction("column"),
7236
+
width_("fit-content"),
7237
+
align_items("center")
7238
+
])
7239
+
);
7240
+
}
7241
+
function grid() {
7242
+
return class$4(
7243
+
toList([
7244
+
display("flex"),
7245
+
flex_direction("column"),
7246
+
background_color("black"),
7247
+
width_("auto"),
7248
+
gap(em(0.5)),
7249
+
padding(em(0.5)),
7250
+
border_radius(px(4)),
7251
+
align_items("center"),
7252
+
width_("fit-content")
7253
+
])
7254
+
);
7255
+
}
7256
+
function row() {
7257
+
return class$4(
7258
+
toList([
7259
+
display("flex"),
7260
+
flex_direction("row"),
7261
+
gap(em(0.5)),
7262
+
width(percent(100))
7263
+
])
7264
+
);
7265
+
}
7266
+
function square(checked) {
7267
+
return class$4(
7268
+
toList([
7269
+
width(em(10)),
7270
+
aspect_ratio("1 / 1"),
7271
+
max_width(em(5)),
7272
+
(() => {
7273
+
if (checked) {
7274
+
return background("yellow");
7275
+
} else {
7276
+
return background("white");
7277
+
}
7278
+
})(),
7279
+
border("none"),
7280
+
border_radius(px(4))
7281
+
])
7282
+
);
7283
+
}
7284
+
7285
+
// build/dev/javascript/voyagers_bingo/voyagers_bingo.mjs
7286
+
var FILEPATH4 = "src/voyagers_bingo.gleam";
7287
+
var UserRequestedNewSheet = class extends CustomType {
7288
+
constructor(rows, columns) {
7289
+
super();
7290
+
this.rows = rows;
7291
+
this.columns = columns;
7292
+
}
7293
+
};
7294
+
var UserSelectedSquare = class extends CustomType {
7295
+
constructor(x, y) {
7296
+
super();
7297
+
this.x = x;
7298
+
this.y = y;
7299
+
}
7300
+
};
7301
+
var UserDeselectedSquare = class extends CustomType {
7302
+
constructor(x, y) {
7303
+
super();
7304
+
this.x = x;
7305
+
this.y = y;
7306
+
}
7307
+
};
7308
+
var CreatedNewSheet = class extends CustomType {
7309
+
constructor(sheet) {
7310
+
super();
7311
+
this.sheet = sheet;
7312
+
}
7313
+
};
7314
+
var FailedToCreateSheet = class extends CustomType {
7315
+
};
7316
+
var UserSetX = class extends CustomType {
7317
+
constructor(x) {
7318
+
super();
7319
+
this.x = x;
7320
+
}
7321
+
};
7322
+
var UserSetY = class extends CustomType {
7323
+
constructor(y) {
7324
+
super();
7325
+
this.y = y;
7326
+
}
7327
+
};
7328
+
var Square = class extends CustomType {
7329
+
constructor(text5, crossed) {
7330
+
super();
7331
+
this.text = text5;
7332
+
this.crossed = crossed;
7333
+
}
7334
+
};
7335
+
var Model = class extends CustomType {
7336
+
constructor(sheet, failed, x, y) {
7337
+
super();
7338
+
this.sheet = sheet;
7339
+
this.failed = failed;
7340
+
this.x = x;
7341
+
this.y = y;
7342
+
}
7343
+
};
7344
+
var available_squares = /* @__PURE__ */ toList([
7345
+
"PC Flirting",
7346
+
"Ben Blushing",
7347
+
"Off Topic",
7348
+
"Pidgeon"
7349
+
]);
7350
+
function sheet_with_size(rows, columns) {
7351
+
let _block;
7352
+
let _pipe = shuffle(available_squares);
7353
+
let _pipe$1 = sized_chunk(_pipe, rows * columns);
7354
+
_block = first(_pipe$1);
7355
+
let $ = _block;
7356
+
if (!($ instanceof Ok)) {
7357
+
throw makeError(
7358
+
"let_assert",
7359
+
FILEPATH4,
7360
+
"voyagers_bingo",
7361
+
45,
7362
+
"sheet_with_size",
7363
+
"Pattern match failed, no pattern matched the value.",
7364
+
{ value: $, start: 980, end: 1107, pattern_start: 991, pattern_end: 1009 }
7365
+
);
7366
+
}
7367
+
let random_squares = $[0];
7368
+
let _block$1;
7369
+
let _pipe$2 = random_squares;
7370
+
_block$1 = sized_chunk(_pipe$2, columns);
7371
+
let square_rows = _block$1;
7372
+
let _pipe$3 = square_rows;
7373
+
let _pipe$4 = map(
7374
+
_pipe$3,
7375
+
(row2) => {
7376
+
let _pipe$42 = row2;
7377
+
let _pipe$5 = map(
7378
+
_pipe$42,
7379
+
(text5) => {
7380
+
return new Square(text5, false);
7381
+
}
7382
+
);
7383
+
return from_list2(_pipe$5);
7384
+
}
7385
+
);
7386
+
return from_list2(_pipe$4);
7387
+
}
7388
+
function init(_) {
7389
+
let _block;
7390
+
let _pipe = square_root2(length(available_squares));
7391
+
let _pipe$1 = unwrap2(_pipe, 2);
7392
+
let _pipe$2 = floor(_pipe$1);
7393
+
let _pipe$3 = round(_pipe$2);
7394
+
_block = min(_pipe$3, 5);
7395
+
let sqrt = _block;
7396
+
return [
7397
+
new Model(sheet_with_size(sqrt, sqrt), false, sqrt, sqrt),
7398
+
none()
7399
+
];
7400
+
}
7401
+
function update4(model, msg) {
7402
+
if (msg instanceof UserRequestedNewSheet) {
7403
+
let rows = msg.rows;
7404
+
let columns = msg.columns;
7405
+
let too_big = rows * columns > length(available_squares);
7406
+
return guard(
7407
+
too_big,
7408
+
[
7409
+
model,
7410
+
from(
7411
+
(dispatch) => {
7412
+
return dispatch(new FailedToCreateSheet());
7413
+
}
7414
+
)
7415
+
],
7416
+
() => {
7417
+
return [
7418
+
model,
7419
+
from(
7420
+
(dispatch) => {
7421
+
let sheet = sheet_with_size(rows, columns);
7422
+
return dispatch(new CreatedNewSheet(sheet));
7423
+
}
7424
+
)
7425
+
];
7426
+
}
7427
+
);
7428
+
} else if (msg instanceof UserSelectedSquare) {
7429
+
let x = msg.x;
7430
+
let y = msg.y;
7431
+
let $ = get2(model.sheet, x);
7432
+
if (!($ instanceof Ok)) {
7433
+
throw makeError(
7434
+
"let_assert",
7435
+
FILEPATH4,
7436
+
"voyagers_bingo",
7437
+
95,
7438
+
"update",
7439
+
"Pattern match failed, no pattern matched the value.",
7440
+
{
7441
+
value: $,
7442
+
start: 2211,
7443
+
end: 2254,
7444
+
pattern_start: 2222,
7445
+
pattern_end: 2229
7446
+
}
7447
+
);
7448
+
}
7449
+
let row2 = $[0];
7450
+
let $1 = get2(row2, y);
7451
+
if (!($1 instanceof Ok)) {
7452
+
throw makeError(
7453
+
"let_assert",
7454
+
FILEPATH4,
7455
+
"voyagers_bingo",
7456
+
96,
7457
+
"update",
7458
+
"Pattern match failed, no pattern matched the value.",
7459
+
{
7460
+
value: $1,
7461
+
start: 2261,
7462
+
end: 2298,
7463
+
pattern_start: 2272,
7464
+
pattern_end: 2281
7465
+
}
7466
+
);
7467
+
}
7468
+
let value = $1[0];
7469
+
let $2 = set(
7470
+
row2,
7471
+
y,
7472
+
(() => {
7473
+
let _record = value;
7474
+
return new Square(_record.text, true);
7475
+
})()
7476
+
);
7477
+
if (!($2 instanceof Ok)) {
7478
+
throw makeError(
7479
+
"let_assert",
7480
+
FILEPATH4,
7481
+
"voyagers_bingo",
7482
+
97,
7483
+
"update",
7484
+
"Pattern match failed, no pattern matched the value.",
7485
+
{
7486
+
value: $2,
7487
+
start: 2305,
7488
+
end: 2388,
7489
+
pattern_start: 2316,
7490
+
pattern_end: 2331
7491
+
}
7492
+
);
7493
+
}
7494
+
let updated_row = $2[0];
7495
+
let $3 = set(model.sheet, x, updated_row);
7496
+
if (!($3 instanceof Ok)) {
7497
+
throw makeError(
7498
+
"let_assert",
7499
+
FILEPATH4,
7500
+
"voyagers_bingo",
7501
+
99,
7502
+
"update",
7503
+
"Pattern match failed, no pattern matched the value.",
7504
+
{
7505
+
value: $3,
7506
+
start: 2395,
7507
+
end: 2455,
7508
+
pattern_start: 2406,
7509
+
pattern_end: 2417
7510
+
}
7511
+
);
7512
+
}
7513
+
let updated = $3[0];
7514
+
return [
7515
+
(() => {
7516
+
let _record = model;
7517
+
return new Model(updated, _record.failed, _record.x, _record.y);
7518
+
})(),
7519
+
none()
7520
+
];
7521
+
} else if (msg instanceof UserDeselectedSquare) {
7522
+
let x = msg.x;
7523
+
let y = msg.y;
7524
+
let $ = get2(model.sheet, x);
7525
+
if (!($ instanceof Ok)) {
7526
+
throw makeError(
7527
+
"let_assert",
7528
+
FILEPATH4,
7529
+
"voyagers_bingo",
7530
+
103,
7531
+
"update",
7532
+
"Pattern match failed, no pattern matched the value.",
7533
+
{
7534
+
value: $,
7535
+
start: 2561,
7536
+
end: 2604,
7537
+
pattern_start: 2572,
7538
+
pattern_end: 2579
7539
+
}
7540
+
);
7541
+
}
7542
+
let row2 = $[0];
7543
+
let $1 = get2(row2, y);
7544
+
if (!($1 instanceof Ok)) {
7545
+
throw makeError(
7546
+
"let_assert",
7547
+
FILEPATH4,
7548
+
"voyagers_bingo",
7549
+
104,
7550
+
"update",
7551
+
"Pattern match failed, no pattern matched the value.",
7552
+
{
7553
+
value: $1,
7554
+
start: 2611,
7555
+
end: 2648,
7556
+
pattern_start: 2622,
7557
+
pattern_end: 2631
7558
+
}
7559
+
);
7560
+
}
7561
+
let value = $1[0];
7562
+
let $2 = set(
7563
+
row2,
7564
+
y,
7565
+
(() => {
7566
+
let _record = value;
7567
+
return new Square(_record.text, false);
7568
+
})()
7569
+
);
7570
+
if (!($2 instanceof Ok)) {
7571
+
throw makeError(
7572
+
"let_assert",
7573
+
FILEPATH4,
7574
+
"voyagers_bingo",
7575
+
105,
7576
+
"update",
7577
+
"Pattern match failed, no pattern matched the value.",
7578
+
{
7579
+
value: $2,
7580
+
start: 2655,
7581
+
end: 2739,
7582
+
pattern_start: 2666,
7583
+
pattern_end: 2681
7584
+
}
7585
+
);
7586
+
}
7587
+
let updated_row = $2[0];
7588
+
let $3 = set(model.sheet, x, updated_row);
7589
+
if (!($3 instanceof Ok)) {
7590
+
throw makeError(
7591
+
"let_assert",
7592
+
FILEPATH4,
7593
+
"voyagers_bingo",
7594
+
107,
7595
+
"update",
7596
+
"Pattern match failed, no pattern matched the value.",
7597
+
{
7598
+
value: $3,
7599
+
start: 2746,
7600
+
end: 2806,
7601
+
pattern_start: 2757,
7602
+
pattern_end: 2768
7603
+
}
7604
+
);
7605
+
}
7606
+
let updated = $3[0];
7607
+
return [
7608
+
(() => {
7609
+
let _record = model;
7610
+
return new Model(updated, _record.failed, _record.x, _record.y);
7611
+
})(),
7612
+
none()
7613
+
];
7614
+
} else if (msg instanceof CreatedNewSheet) {
7615
+
let sheet = msg.sheet;
7616
+
return [
7617
+
(() => {
7618
+
let _record = model;
7619
+
return new Model(sheet, false, _record.x, _record.y);
7620
+
})(),
7621
+
none()
7622
+
];
7623
+
} else if (msg instanceof FailedToCreateSheet) {
7624
+
return [
7625
+
(() => {
7626
+
let _record = model;
7627
+
return new Model(_record.sheet, true, _record.x, _record.y);
7628
+
})(),
7629
+
none()
7630
+
];
7631
+
} else if (msg instanceof UserSetX) {
7632
+
let x = msg.x;
7633
+
return [
7634
+
(() => {
7635
+
let _record = model;
7636
+
return new Model(_record.sheet, false, x, _record.y);
7637
+
})(),
7638
+
none()
7639
+
];
7640
+
} else {
7641
+
let y = msg.y;
7642
+
return [
7643
+
(() => {
7644
+
let _record = model;
7645
+
return new Model(_record.sheet, false, _record.x, y);
7646
+
})(),
7647
+
none()
7648
+
];
7649
+
}
7650
+
}
7651
+
function view(model) {
7652
+
return div(
7653
+
container(),
7654
+
toList([]),
7655
+
toList([
7656
+
h1_(toList([]), toList([text4("Voyagers Bingo")])),
7657
+
div(
7658
+
grid(),
7659
+
toList([]),
7660
+
(() => {
7661
+
let _pipe = model.sheet;
7662
+
let _pipe$1 = index_map3(
7663
+
_pipe,
7664
+
(row2, x) => {
7665
+
return span(
7666
+
row(),
7667
+
toList([]),
7668
+
(() => {
7669
+
let _pipe$12 = index_map3(
7670
+
row2,
7671
+
(square2, y) => {
7672
+
return button(
7673
+
square(square2.crossed),
7674
+
toList([
7675
+
on_click(
7676
+
(() => {
7677
+
let $ = square2.crossed;
7678
+
if ($) {
7679
+
return new UserDeselectedSquare(x, y);
7680
+
} else {
7681
+
return new UserSelectedSquare(x, y);
7682
+
}
7683
+
})()
7684
+
)
7685
+
]),
7686
+
toList([text4(square2.text)])
7687
+
);
7688
+
}
7689
+
);
7690
+
return to_list(_pipe$12);
7691
+
})()
7692
+
);
7693
+
}
7694
+
);
7695
+
return to_list(_pipe$1);
7696
+
})()
7697
+
),
7698
+
input_(
7699
+
toList([
7700
+
type_("number"),
7701
+
placeholder("Rows: 2"),
7702
+
on_input(
7703
+
(content) => {
7704
+
let $ = parse_int(content);
7705
+
if (!($ instanceof Ok)) {
7706
+
throw makeError(
7707
+
"let_assert",
7708
+
FILEPATH4,
7709
+
"voyagers_bingo",
7710
+
152,
7711
+
"view",
7712
+
"Pattern match failed, no pattern matched the value.",
7713
+
{
7714
+
value: $,
7715
+
start: 4144,
7716
+
end: 4183,
7717
+
pattern_start: 4155,
7718
+
pattern_end: 4162
7719
+
}
7720
+
);
7721
+
}
7722
+
let num = $[0];
7723
+
return new UserSetX(num);
7724
+
}
7725
+
)
7726
+
])
7727
+
),
7728
+
input_(
7729
+
toList([
7730
+
type_("number"),
7731
+
placeholder("Columns: 2"),
7732
+
on_input(
7733
+
(content) => {
7734
+
let $ = parse_int(content);
7735
+
if (!($ instanceof Ok)) {
7736
+
throw makeError(
7737
+
"let_assert",
7738
+
FILEPATH4,
7739
+
"voyagers_bingo",
7740
+
160,
7741
+
"view",
7742
+
"Pattern match failed, no pattern matched the value.",
7743
+
{
7744
+
value: $,
7745
+
start: 4361,
7746
+
end: 4400,
7747
+
pattern_start: 4372,
7748
+
pattern_end: 4379
7749
+
}
7750
+
);
7751
+
}
7752
+
let num = $[0];
7753
+
return new UserSetY(num);
7754
+
}
7755
+
)
7756
+
])
7757
+
),
7758
+
button(
7759
+
class$4(toList([width_("fit-content")])),
7760
+
toList([on_click(new UserRequestedNewSheet(model.x, model.y))]),
7761
+
toList([text4("New Sheet")])
7762
+
),
7763
+
(() => {
7764
+
let $ = model.failed;
7765
+
if ($) {
7766
+
return h4(
7767
+
class$4(toList([color("red")])),
7768
+
toList([]),
7769
+
toList([
7770
+
text4(
7771
+
"Failed to create sheet of size " + to_string(
7772
+
model.x
7773
+
) + "x" + to_string(model.y) + " (" + to_string(
7774
+
model.x * model.y
7775
+
) + ") - maximum possible size is " + to_string(
7776
+
length(available_squares)
7777
+
)
7778
+
)
7779
+
])
7780
+
);
7781
+
} else {
7782
+
return none3();
7783
+
}
7784
+
})()
7785
+
])
7786
+
);
7787
+
}
7788
+
function css_view(model, stylesheet2) {
7789
+
return render2(
7790
+
stylesheet2,
7791
+
toList([node()]),
7792
+
() => {
7793
+
return view(model);
7794
+
}
7795
+
);
7796
+
}
7797
+
function main() {
7798
+
let $ = setup();
7799
+
if (!($ instanceof Ok)) {
7800
+
throw makeError(
7801
+
"let_assert",
7802
+
FILEPATH4,
7803
+
"voyagers_bingo",
7804
+
194,
7805
+
"main",
7806
+
"Pattern match failed, no pattern matched the value.",
7807
+
{
7808
+
value: $,
7809
+
start: 5286,
7810
+
end: 5330,
7811
+
pattern_start: 5297,
7812
+
pattern_end: 5311
7813
+
}
7814
+
);
7815
+
}
7816
+
let stylesheet2 = $[0];
7817
+
global2(stylesheet2, global("body", toList([margin(vw(10))])));
7818
+
let app = application(
7819
+
init,
7820
+
update4,
7821
+
(_capture) => {
7822
+
return css_view(_capture, stylesheet2);
7823
+
}
7824
+
);
7825
+
let $1 = start3(app, "#app", void 0);
7826
+
if (!($1 instanceof Ok)) {
7827
+
throw makeError(
7828
+
"let_assert",
7829
+
FILEPATH4,
7830
+
"voyagers_bingo",
7831
+
197,
7832
+
"main",
7833
+
"Pattern match failed, no pattern matched the value.",
7834
+
{
7835
+
value: $1,
7836
+
start: 5473,
7837
+
end: 5522,
7838
+
pattern_start: 5484,
7839
+
pattern_end: 5489
7840
+
}
7841
+
);
7842
+
}
7843
+
return void 0;
7844
+
}
7845
+
7846
+
// build/.lustre/entry.mjs
7847
+
main();
+5
src/voyagers_bingo.gleam
+5
src/voyagers_bingo.gleam
+13
test/voyagers_bingo_test.gleam
+13
test/voyagers_bingo_test.gleam