@fairfox/polly 0.71.0 → 0.73.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/src/client/index.js +2 -2
  2. package/dist/src/client/index.js.map +2 -2
  3. package/dist/src/elysia/index.js +464 -4
  4. package/dist/src/elysia/index.js.map +6 -4
  5. package/dist/src/peer.d.ts +2 -0
  6. package/dist/src/peer.js +468 -4
  7. package/dist/src/peer.js.map +8 -5
  8. package/dist/src/polly-ui/ActionInput.d.ts +12 -2
  9. package/dist/src/polly-ui/ActionSelect.d.ts +36 -0
  10. package/dist/src/polly-ui/Button.d.ts +4 -0
  11. package/dist/src/polly-ui/Cluster.d.ts +36 -0
  12. package/dist/src/polly-ui/Code.d.ts +18 -0
  13. package/dist/src/polly-ui/Surface.d.ts +12 -1
  14. package/dist/src/polly-ui/Text.d.ts +43 -0
  15. package/dist/src/polly-ui/index.css +320 -194
  16. package/dist/src/polly-ui/index.d.ts +5 -1
  17. package/dist/src/polly-ui/index.js +533 -284
  18. package/dist/src/polly-ui/index.js.map +14 -8
  19. package/dist/src/polly-ui/internal/dispatch-action.d.ts +13 -0
  20. package/dist/src/polly-ui/internal/passthrough.d.ts +25 -0
  21. package/dist/src/polly-ui/markdown.js +3 -3
  22. package/dist/src/polly-ui/markdown.js.map +2 -2
  23. package/dist/src/polly-ui/styles.css +345 -194
  24. package/dist/src/polly-ui/theme.css +1 -0
  25. package/dist/src/shared/lib/peer-repo-server.d.ts +18 -0
  26. package/dist/src/shared/lib/sweep-sealed.d.ts +111 -0
  27. package/dist/tools/quality/src/cli.js +6 -2
  28. package/dist/tools/quality/src/cli.js.map +3 -3
  29. package/dist/tools/quality/src/index.js +6 -2
  30. package/dist/tools/quality/src/index.js.map +3 -3
  31. package/dist/tools/test/src/browser/run.js +89 -49
  32. package/dist/tools/test/src/browser/run.js.map +6 -5
  33. package/dist/tools/test/src/browser/runner-core.d.ts +32 -0
  34. package/dist/tools/test/src/e2e-mesh/index.js +193 -171
  35. package/dist/tools/test/src/e2e-mesh/index.js.map +4 -4
  36. package/dist/tools/test/src/visual/index.js +270 -251
  37. package/dist/tools/test/src/visual/index.js.map +5 -5
  38. package/dist/tools/verify/specs/tla/MeshSeed.cfg +27 -0
  39. package/dist/tools/verify/specs/tla/MeshSeed.tla +179 -0
  40. package/dist/tools/verify/specs/tla/README.md +11 -1
  41. package/dist/tools/verify/src/cli.js +136 -51
  42. package/dist/tools/verify/src/cli.js.map +9 -7
  43. package/dist/tools/visualize/src/cli.js +72 -2
  44. package/dist/tools/visualize/src/cli.js.map +5 -5
  45. package/package.json +3 -2
@@ -66,6 +66,16 @@
66
66
  line-height: var(--polly-line-height-tight);
67
67
  }
68
68
 
69
+ /* Monospace baseline for inline code, keyboard, and sample text so a
70
+ * bare <code> reads correctly without a consumer class. The <Code>
71
+ * component layers the tinted-pill treatment on top; this rule only
72
+ * guarantees the font. :where() keeps specificity at zero so any
73
+ * class or id wins. */
74
+ :where(code, kbd, samp, pre) {
75
+ font-family: var(--polly-font-mono);
76
+ font-size: var(--polly-text-sm);
77
+ }
78
+
69
79
  /* Text overflow utilities. Both are opt-in: any element receives the
70
80
  * behaviour by carrying the data attribute. They stay compatible with
71
81
  * Layout (a grid) because the utilities change the element's OWN display,
@@ -94,6 +104,15 @@
94
104
  min-inline-size: 0;
95
105
  }
96
106
 
107
+ /* data-polly-wrap — full, unbounded wrapping of a long unbreakable
108
+ * string: a pairing URL, a recovery blob, a hex id. Where truncate and
109
+ * clamp HIDE overflow, wrap breaks the string so all of it stays
110
+ * visible. min-inline-size: 0 lets it shrink inside a Layout grid track. */
111
+ [data-polly-wrap] {
112
+ overflow-wrap: anywhere;
113
+ min-inline-size: 0;
114
+ }
115
+
97
116
  /* Honour reduced-motion by zeroing every motion token. The components
98
117
  * read only these tokens for their transitions, so a consumer preference
99
118
  * of "reduce" makes every animation instant. */
@@ -122,6 +141,12 @@
122
141
  min-block-size: 44px;
123
142
  }
124
143
 
144
+ /* Pointer affordance for non-<Button> clickables — whole-row click
145
+ * targets and the like. Applies regardless of hit-target sizing. */
146
+ [data-polly-interactive] {
147
+ cursor: pointer;
148
+ }
149
+
125
150
  /* Scroll lock — toggled by OverlayRoot when the overlay stack is
126
151
  * non-empty. The padding-right compensates for the scrollbar so content
127
152
  * behind the overlay does not reflow. */
@@ -210,6 +235,191 @@
210
235
  }
211
236
  }
212
237
 
238
+ /* src/polly-ui/Dropdown.module.css */
239
+ @layer polly-components {
240
+ .dropdown_HX48zA {
241
+ position: relative;
242
+ display: inline-block;
243
+ }
244
+
245
+ .trigger_HX48zA {
246
+ display: inline-block;
247
+ }
248
+
249
+ .menu_HX48zA {
250
+ position: absolute;
251
+ inset: unset;
252
+ z-index: var(--polly-z-raised);
253
+ margin: var(--polly-space-xs) 0 0;
254
+ padding: var(--polly-space-xs) 0;
255
+ border: var(--polly-border-width-default) solid var(--polly-border);
256
+ border-radius: var(--polly-radius-md);
257
+ background-color: var(--polly-surface);
258
+ box-shadow: var(--polly-shadow-md);
259
+ box-sizing: border-box;
260
+ overflow-y: auto;
261
+ min-width: 160px;
262
+ max-height: 280px;
263
+ top: 100%;
264
+ left: 0;
265
+ }
266
+
267
+ .alignRight_HX48zA {
268
+ left: auto;
269
+ right: 0;
270
+ }
271
+ }
272
+
273
+ /* src/polly-ui/Layout.module.css */
274
+ @layer polly-components {
275
+ .layout_QgwWPg {
276
+ --l-cols: none;
277
+ --l-rows: none;
278
+ --l-gap: 0;
279
+ --l-p: 0;
280
+ --l-h: auto;
281
+ --l-mh: auto;
282
+ --l-mis: none;
283
+ --l-ji: stretch;
284
+ --l-ai: start;
285
+ --l-jc: normal;
286
+ --l-ac: normal;
287
+ --l-js: auto;
288
+ --l-as: auto;
289
+ --l-flow: row;
290
+ --l-arows: auto;
291
+ --l-acols: auto;
292
+ --l-col: auto;
293
+ display: grid;
294
+ box-sizing: border-box;
295
+ max-inline-size: var(--l-mis);
296
+ grid-template-columns: var(--l-cols);
297
+ grid-template-rows: var(--l-rows);
298
+ gap: var(--l-gap);
299
+ padding: var(--l-p);
300
+ height: var(--l-h);
301
+ min-height: var(--l-mh);
302
+ justify-items: var(--l-ji);
303
+ align-items: var(--l-ai);
304
+ justify-content: var(--l-jc);
305
+ align-content: var(--l-ac);
306
+ justify-self: var(--l-js);
307
+ align-self: var(--l-as);
308
+ grid-auto-flow: var(--l-flow);
309
+ grid-auto-rows: var(--l-arows);
310
+ grid-auto-columns: var(--l-acols);
311
+ grid-column: var(--l-col);
312
+ inline-size: 100%;
313
+ margin-inline-start: auto;
314
+ margin-inline-end: auto;
315
+ }
316
+
317
+ .inline_QgwWPg {
318
+ display: inline-grid;
319
+ inline-size: auto;
320
+ }
321
+
322
+ @media (max-width: 640px) {
323
+ .stackOnMobile_QgwWPg {
324
+ grid-template-columns: 1fr;
325
+ grid-auto-flow: row;
326
+ grid-column: auto;
327
+ }
328
+ }
329
+ }
330
+
331
+ /* src/polly-ui/Select.module.css */
332
+ @layer polly-components {
333
+ .select_daofbw {
334
+ display: inline-block;
335
+ }
336
+
337
+ .label_daofbw {
338
+ display: block;
339
+ margin-bottom: var(--polly-space-xs);
340
+ font-size: var(--polly-text-sm);
341
+ font-weight: var(--polly-weight-medium);
342
+ color: var(--polly-text-muted);
343
+ }
344
+
345
+ .trigger_daofbw {
346
+ display: inline-block;
347
+ padding: var(--polly-space-sm) var(--polly-space-md);
348
+ border: var(--polly-border-width-default) solid var(--polly-border);
349
+ border-radius: var(--polly-radius-sm);
350
+ background-color: var(--polly-surface);
351
+ font-family: inherit;
352
+ font-size: var(--polly-text-md);
353
+ color: var(--polly-text);
354
+ text-align: left;
355
+ cursor: pointer;
356
+ white-space: nowrap;
357
+ overflow: hidden;
358
+ text-overflow: ellipsis;
359
+ min-width: 140px;
360
+ }
361
+
362
+ .trigger_daofbw:disabled {
363
+ opacity: var(--polly-opacity-disabled);
364
+ cursor: not-allowed;
365
+ }
366
+
367
+ .placeholder_daofbw {
368
+ color: var(--polly-text-muted);
369
+ }
370
+
371
+ .actions_daofbw {
372
+ padding: var(--polly-space-xs) var(--polly-space-sm);
373
+ border-bottom: var(--polly-border-width-default) solid var(--polly-border);
374
+ }
375
+
376
+ .actionBtn_daofbw {
377
+ display: inline-block;
378
+ padding: var(--polly-space-xs) var(--polly-space-sm);
379
+ border-radius: var(--polly-radius-sm);
380
+ font-family: inherit;
381
+ font-size: var(--polly-text-xs);
382
+ color: var(--polly-accent);
383
+ cursor: pointer;
384
+ text-align: center;
385
+ background: none;
386
+ border: none;
387
+ width: 100%;
388
+ }
389
+
390
+ .actionBtn_daofbw:hover {
391
+ background-color: var(--polly-surface-sunken);
392
+ }
393
+
394
+ .option_daofbw {
395
+ display: block;
396
+ padding: var(--polly-space-sm) var(--polly-space-md);
397
+ font-family: inherit;
398
+ font-size: var(--polly-text-sm);
399
+ color: var(--polly-text);
400
+ text-align: left;
401
+ cursor: pointer;
402
+ background: none;
403
+ border: none;
404
+ width: 100%;
405
+ }
406
+
407
+ .option_daofbw:hover {
408
+ background-color: var(--polly-surface-sunken);
409
+ }
410
+
411
+ .optionSelected_daofbw {
412
+ background-color: color-mix(in srgb, var(--polly-accent) 8%, var(--polly-surface));
413
+ }
414
+
415
+ .optionCheck_daofbw {
416
+ accent-color: var(--polly-accent);
417
+ margin-right: var(--polly-space-sm);
418
+ vertical-align: middle;
419
+ pointer-events: none;
420
+ }
421
+ }
422
+
213
423
  /* src/polly-ui/Badge.module.css */
214
424
  @layer polly-components {
215
425
  .badge_cZd0Aw {
@@ -358,64 +568,6 @@
358
568
  }
359
569
  }
360
570
 
361
- /* src/polly-ui/Layout.module.css */
362
- @layer polly-components {
363
- .layout_QgwWPg {
364
- --l-cols: none;
365
- --l-rows: none;
366
- --l-gap: 0;
367
- --l-p: 0;
368
- --l-h: auto;
369
- --l-mh: auto;
370
- --l-mis: none;
371
- --l-ji: stretch;
372
- --l-ai: start;
373
- --l-jc: normal;
374
- --l-ac: normal;
375
- --l-js: auto;
376
- --l-as: auto;
377
- --l-flow: row;
378
- --l-arows: auto;
379
- --l-acols: auto;
380
- --l-col: auto;
381
- display: grid;
382
- box-sizing: border-box;
383
- max-inline-size: var(--l-mis);
384
- grid-template-columns: var(--l-cols);
385
- grid-template-rows: var(--l-rows);
386
- gap: var(--l-gap);
387
- padding: var(--l-p);
388
- height: var(--l-h);
389
- min-height: var(--l-mh);
390
- justify-items: var(--l-ji);
391
- align-items: var(--l-ai);
392
- justify-content: var(--l-jc);
393
- align-content: var(--l-ac);
394
- justify-self: var(--l-js);
395
- align-self: var(--l-as);
396
- grid-auto-flow: var(--l-flow);
397
- grid-auto-rows: var(--l-arows);
398
- grid-auto-columns: var(--l-acols);
399
- grid-column: var(--l-col);
400
- inline-size: 100%;
401
- margin-inline-start: auto;
402
- margin-inline-end: auto;
403
- }
404
-
405
- .inline_QgwWPg {
406
- display: inline-grid;
407
- inline-size: auto;
408
- }
409
-
410
- @media (max-width: 640px) {
411
- .stackOnMobile_QgwWPg {
412
- grid-template-columns: 1fr;
413
- grid-auto-flow: row;
414
- grid-column: auto;
415
- }
416
- }
417
- }
418
-
419
571
  /* src/polly-ui/Surface.module.css */
420
572
  @layer polly-components {
421
573
  .surface_pQCFqA {
@@ -424,18 +576,22 @@
424
576
  --s-radius: 0;
425
577
  --s-border-color: transparent;
426
578
  --s-border-width: 0;
579
+ --s-border-style: solid;
427
580
  --s-shadow: none;
428
581
  --s-w: auto;
429
582
  --s-h: auto;
430
583
  --s-mh: auto;
584
+ --s-maxh: none;
431
585
  --s-mis: none;
586
+ --s-overflow: visible;
432
587
  --s-position: static;
433
588
  --s-inset: auto;
589
+ --s-transform: none;
434
590
  --s-z: auto;
435
591
  box-sizing: border-box;
436
592
  padding: var(--s-p);
437
593
  background: var(--s-bg);
438
- border-style: solid;
594
+ border-style: var(--s-border-style);
439
595
  border-color: var(--s-border-color);
440
596
  border-width: var(--s-border-width);
441
597
  border-radius: var(--s-radius);
@@ -443,9 +599,12 @@
443
599
  inline-size: var(--s-w);
444
600
  block-size: var(--s-h);
445
601
  min-block-size: var(--s-mh);
602
+ max-block-size: var(--s-maxh);
446
603
  max-inline-size: var(--s-mis);
604
+ overflow: var(--s-overflow);
447
605
  position: var(--s-position);
448
606
  inset: var(--s-inset);
607
+ transform: var(--s-transform);
449
608
  z-index: var(--s-z);
450
609
  }
451
610
 
@@ -456,34 +615,32 @@
456
615
 
457
616
  .sides-block-start_pQCFqA {
458
617
  border-style: none;
459
- border-block-start-style: solid;
618
+ border-block-start-style: var(--s-border-style);
460
619
  }
461
620
 
462
621
  .sides-block-end_pQCFqA {
463
622
  border-style: none;
464
- border-block-end-style: solid;
623
+ border-block-end-style: var(--s-border-style);
465
624
  }
466
625
 
467
626
  .sides-inline-start_pQCFqA {
468
627
  border-style: none;
469
- border-inline-start-style: solid;
628
+ border-inline-start-style: var(--s-border-style);
470
629
  }
471
630
 
472
631
  .sides-inline-end_pQCFqA {
473
632
  border-style: none;
474
- border-inline-end-style: solid;
633
+ border-inline-end-style: var(--s-border-style);
475
634
  }
476
635
 
477
636
  .sides-block_pQCFqA {
478
637
  border-style: none;
479
- border-block-start-style: solid;
480
- border-block-end-style: solid;
638
+ border-block-style: var(--s-border-style);
481
639
  }
482
640
 
483
641
  .sides-inline_pQCFqA {
484
642
  border-style: none;
485
- border-left-style: solid;
486
- border-right-style: solid;
643
+ border-inline-style: var(--s-border-style);
487
644
  }
488
645
  }
489
646
 
@@ -516,6 +673,55 @@
516
673
  }
517
674
  }
518
675
 
676
+ /* src/polly-ui/Cluster.module.css */
677
+ @layer polly-components {
678
+ .cluster_pNLz5g {
679
+ --c-gap: 0;
680
+ --c-p: 0;
681
+ --c-jc: flex-start;
682
+ --c-ai: center;
683
+ display: flex;
684
+ box-sizing: border-box;
685
+ gap: var(--c-gap);
686
+ padding: var(--c-p);
687
+ justify-content: var(--c-jc);
688
+ align-items: var(--c-ai);
689
+ flex-wrap: wrap;
690
+ }
691
+
692
+ .inline_pNLz5g {
693
+ display: inline-flex;
694
+ }
695
+ }
696
+
697
+ /* src/polly-ui/Code.module.css */
698
+ @layer polly-components {
699
+ .code_Vc8yiw {
700
+ font-family: var(--polly-font-mono);
701
+ font-size: var(--polly-text-sm);
702
+ padding: .1em var(--polly-space-xs);
703
+ border-radius: var(--polly-radius-sm);
704
+ background-color: var(--polly-surface-sunken);
705
+ color: var(--polly-text);
706
+ word-break: break-word;
707
+ }
708
+
709
+ .block_Vc8yiw {
710
+ padding: var(--polly-space-md);
711
+ border-radius: var(--polly-radius-md);
712
+ background-color: var(--polly-surface-sunken);
713
+ overflow-x: auto;
714
+ margin: 0;
715
+ }
716
+
717
+ .block_Vc8yiw code {
718
+ font-family: var(--polly-font-mono);
719
+ font-size: var(--polly-text-sm);
720
+ color: var(--polly-text);
721
+ white-space: pre;
722
+ }
723
+ }
724
+
519
725
  /* src/polly-ui/Collapsible.module.css */
520
726
  @layer polly-components {
521
727
  .collapsible_sEhnPw {
@@ -685,133 +891,6 @@
685
891
  }
686
892
  }
687
893
 
688
- /* src/polly-ui/Dropdown.module.css */
689
- @layer polly-components {
690
- .dropdown_HX48zA {
691
- position: relative;
692
- display: inline-block;
693
- }
694
-
695
- .trigger_HX48zA {
696
- display: inline-block;
697
- }
698
-
699
- .menu_HX48zA {
700
- position: absolute;
701
- inset: unset;
702
- z-index: var(--polly-z-raised);
703
- margin: var(--polly-space-xs) 0 0;
704
- padding: var(--polly-space-xs) 0;
705
- border: var(--polly-border-width-default) solid var(--polly-border);
706
- border-radius: var(--polly-radius-md);
707
- background-color: var(--polly-surface);
708
- box-shadow: var(--polly-shadow-md);
709
- box-sizing: border-box;
710
- overflow-y: auto;
711
- min-width: 160px;
712
- max-height: 280px;
713
- top: 100%;
714
- left: 0;
715
- }
716
-
717
- .alignRight_HX48zA {
718
- left: auto;
719
- right: 0;
720
- }
721
- }
722
-
723
- /* src/polly-ui/Select.module.css */
724
- @layer polly-components {
725
- .select_daofbw {
726
- display: inline-block;
727
- }
728
-
729
- .label_daofbw {
730
- display: block;
731
- margin-bottom: var(--polly-space-xs);
732
- font-size: var(--polly-text-sm);
733
- font-weight: var(--polly-weight-medium);
734
- color: var(--polly-text-muted);
735
- }
736
-
737
- .trigger_daofbw {
738
- display: inline-block;
739
- padding: var(--polly-space-sm) var(--polly-space-md);
740
- border: var(--polly-border-width-default) solid var(--polly-border);
741
- border-radius: var(--polly-radius-sm);
742
- background-color: var(--polly-surface);
743
- font-family: inherit;
744
- font-size: var(--polly-text-md);
745
- color: var(--polly-text);
746
- text-align: left;
747
- cursor: pointer;
748
- white-space: nowrap;
749
- overflow: hidden;
750
- text-overflow: ellipsis;
751
- min-width: 140px;
752
- }
753
-
754
- .trigger_daofbw:disabled {
755
- opacity: var(--polly-opacity-disabled);
756
- cursor: not-allowed;
757
- }
758
-
759
- .placeholder_daofbw {
760
- color: var(--polly-text-muted);
761
- }
762
-
763
- .actions_daofbw {
764
- padding: var(--polly-space-xs) var(--polly-space-sm);
765
- border-bottom: var(--polly-border-width-default) solid var(--polly-border);
766
- }
767
-
768
- .actionBtn_daofbw {
769
- display: inline-block;
770
- padding: var(--polly-space-xs) var(--polly-space-sm);
771
- border-radius: var(--polly-radius-sm);
772
- font-family: inherit;
773
- font-size: var(--polly-text-xs);
774
- color: var(--polly-accent);
775
- cursor: pointer;
776
- text-align: center;
777
- background: none;
778
- border: none;
779
- width: 100%;
780
- }
781
-
782
- .actionBtn_daofbw:hover {
783
- background-color: var(--polly-surface-sunken);
784
- }
785
-
786
- .option_daofbw {
787
- display: block;
788
- padding: var(--polly-space-sm) var(--polly-space-md);
789
- font-family: inherit;
790
- font-size: var(--polly-text-sm);
791
- color: var(--polly-text);
792
- text-align: left;
793
- cursor: pointer;
794
- background: none;
795
- border: none;
796
- width: 100%;
797
- }
798
-
799
- .option_daofbw:hover {
800
- background-color: var(--polly-surface-sunken);
801
- }
802
-
803
- .optionSelected_daofbw {
804
- background-color: color-mix(in srgb, var(--polly-accent) 8%, var(--polly-surface));
805
- }
806
-
807
- .optionCheck_daofbw {
808
- accent-color: var(--polly-accent);
809
- margin-right: var(--polly-space-sm);
810
- vertical-align: middle;
811
- pointer-events: none;
812
- }
813
- }
814
-
815
894
  /* src/polly-ui/Skeleton.module.css */
816
895
  @layer polly-components {
817
896
  @keyframes pollyShimmer_gpBHJA {
@@ -891,6 +970,78 @@
891
970
  }
892
971
  }
893
972
 
973
+ /* src/polly-ui/Text.module.css */
974
+ @layer polly-components {
975
+ .text_75HKdQ {
976
+ color: var(--polly-text);
977
+ font-family: inherit;
978
+ }
979
+
980
+ .muted_75HKdQ {
981
+ color: var(--polly-text-muted);
982
+ }
983
+
984
+ .danger_75HKdQ {
985
+ color: var(--polly-status-danger-text);
986
+ }
987
+
988
+ .warning_75HKdQ {
989
+ color: var(--polly-status-warning-text);
990
+ }
991
+
992
+ .success_75HKdQ {
993
+ color: var(--polly-status-success-text);
994
+ }
995
+
996
+ .italic_75HKdQ {
997
+ font-style: italic;
998
+ }
999
+
1000
+ .tight_75HKdQ {
1001
+ line-height: var(--polly-line-height-tight);
1002
+ }
1003
+
1004
+ .base_75HKdQ {
1005
+ line-height: var(--polly-line-height-base);
1006
+ }
1007
+
1008
+ .loose_75HKdQ {
1009
+ line-height: var(--polly-line-height-loose);
1010
+ }
1011
+
1012
+ .xs_75HKdQ {
1013
+ font-size: var(--polly-text-xs);
1014
+ }
1015
+
1016
+ .sm_75HKdQ {
1017
+ font-size: var(--polly-text-sm);
1018
+ }
1019
+
1020
+ .md_75HKdQ {
1021
+ font-size: var(--polly-text-md);
1022
+ }
1023
+
1024
+ .lg_75HKdQ {
1025
+ font-size: var(--polly-text-lg);
1026
+ }
1027
+
1028
+ .xl_75HKdQ {
1029
+ font-size: var(--polly-text-xl);
1030
+ }
1031
+
1032
+ .normal_75HKdQ {
1033
+ font-weight: var(--polly-weight-normal);
1034
+ }
1035
+
1036
+ .medium_75HKdQ {
1037
+ font-weight: var(--polly-weight-medium);
1038
+ }
1039
+
1040
+ .bold_75HKdQ {
1041
+ font-weight: var(--polly-weight-bold);
1042
+ }
1043
+ }
1044
+
894
1045
  /* src/polly-ui/TextInput.module.css */
895
1046
  @layer polly-components {
896
1047
  .input_ez4_Vg {
@@ -103,6 +103,7 @@
103
103
  --polly-line-height-tight: 1.25;
104
104
  --polly-line-height-heading: 1.15;
105
105
  --polly-line-height-base: 1.5;
106
+ --polly-line-height-loose: 1.7;
106
107
 
107
108
  /* Z-index scale */
108
109
  --polly-z-base: 0;
@@ -38,6 +38,7 @@ import type { Repo as RepoType } from "@automerge/automerge-repo/slim";
38
38
  import type { WebSocketServerAdapter as WebSocketServerAdapterType } from "@automerge/automerge-repo-network-websocket";
39
39
  import type { NodeFSStorageAdapter as NodeFSStorageAdapterType } from "@automerge/automerge-repo-storage-nodefs";
40
40
  import type * as wsType from "ws";
41
+ import type { SweepResult } from "./sweep-sealed";
41
42
  type WebSocketServer = wsType.WebSocketServer;
42
43
  export interface CreatePeerRepoServerOptions {
43
44
  /** Port to listen on. The factory creates its own `WebSocketServer` and
@@ -69,6 +70,23 @@ export interface PeerRepoServer {
69
70
  * underlying WebSocket server. Returns a promise that resolves once the
70
71
  * tear-down is complete. */
71
72
  close: () => Promise<void>;
73
+ /**
74
+ * Garbage-collect sealed mesh-doc bytes from {@link storage}. Walks the
75
+ * storage adapter, removes documents the `isSealed` predicate
76
+ * recognises as sealed longer ago than `olderThan`, and skips any
77
+ * document with an open handle on {@link repo}. With `dryRun`, reports
78
+ * the candidates without removing anything.
79
+ *
80
+ * Convenience binding of the standalone `sweepSealed` to this server's
81
+ * `repo` and `storage`. See `sweepSealed` for the full contract,
82
+ * including the redirect-index-not-yet-synced hazard that `olderThan`
83
+ * is sized to bound. polly never runs this on a timer — call it
84
+ * explicitly. */
85
+ sweepSealed: (options: {
86
+ isSealed: (doc: unknown) => number | undefined;
87
+ olderThan: number;
88
+ dryRun?: boolean;
89
+ }) => Promise<SweepResult>;
72
90
  }
73
91
  /**
74
92
  * Construct a Polly peer-relay server. Returns a Repo that participates as