@ascribed/review 0.1.2-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +183 -0
  3. package/dist/github/index.d.ts +7 -0
  4. package/dist/github/index.js +8 -0
  5. package/dist/github/index.js.map +1 -0
  6. package/dist/github/marker.d.ts +63 -0
  7. package/dist/github/marker.js +156 -0
  8. package/dist/github/marker.js.map +1 -0
  9. package/dist/github/queries.d.ts +16 -0
  10. package/dist/github/queries.js +174 -0
  11. package/dist/github/queries.js.map +1 -0
  12. package/dist/github/read.d.ts +84 -0
  13. package/dist/github/read.js +141 -0
  14. package/dist/github/read.js.map +1 -0
  15. package/dist/github/repository.d.ts +30 -0
  16. package/dist/github/repository.js +77 -0
  17. package/dist/github/repository.js.map +1 -0
  18. package/dist/github/requests.d.ts +65 -0
  19. package/dist/github/requests.js +274 -0
  20. package/dist/github/requests.js.map +1 -0
  21. package/dist/github/session.d.ts +143 -0
  22. package/dist/github/session.js +581 -0
  23. package/dist/github/session.js.map +1 -0
  24. package/dist/github/transport.d.ts +33 -0
  25. package/dist/github/transport.js +206 -0
  26. package/dist/github/transport.js.map +1 -0
  27. package/dist/marks/index.d.ts +92 -0
  28. package/dist/marks/index.js +766 -0
  29. package/dist/marks/index.js.map +1 -0
  30. package/dist/overlay/index.d.ts +4 -0
  31. package/dist/overlay/index.js +7 -0
  32. package/dist/overlay/index.js.map +1 -0
  33. package/dist/overlay/markdown.d.ts +4 -0
  34. package/dist/overlay/markdown.js +368 -0
  35. package/dist/overlay/markdown.js.map +1 -0
  36. package/dist/overlay/overlay.d.ts +47 -0
  37. package/dist/overlay/overlay.js +1710 -0
  38. package/dist/overlay/overlay.js.map +1 -0
  39. package/dist/overlay/style.d.ts +1 -0
  40. package/dist/overlay/style.js +570 -0
  41. package/dist/overlay/style.js.map +1 -0
  42. package/dist/overlay/text.d.ts +33 -0
  43. package/dist/overlay/text.js +200 -0
  44. package/dist/overlay/text.js.map +1 -0
  45. package/dist/overlay/types.d.ts +60 -0
  46. package/dist/overlay/types.js +2 -0
  47. package/dist/overlay/types.js.map +1 -0
  48. package/dist/place/anchor.d.ts +23 -0
  49. package/dist/place/anchor.js +49 -0
  50. package/dist/place/anchor.js.map +1 -0
  51. package/dist/place/index.d.ts +4 -0
  52. package/dist/place/index.js +6 -0
  53. package/dist/place/index.js.map +1 -0
  54. package/dist/place/lines.d.ts +56 -0
  55. package/dist/place/lines.js +280 -0
  56. package/dist/place/lines.js.map +1 -0
  57. package/dist/place/place.d.ts +77 -0
  58. package/dist/place/place.js +182 -0
  59. package/dist/place/place.js.map +1 -0
  60. package/dist/shared/errors.d.ts +40 -0
  61. package/dist/shared/errors.js +22 -0
  62. package/dist/shared/errors.js.map +1 -0
  63. package/dist/shared/git.d.ts +4 -0
  64. package/dist/shared/git.js +29 -0
  65. package/dist/shared/git.js.map +1 -0
  66. package/dist/shared/types.d.ts +56 -0
  67. package/dist/shared/types.js +3 -0
  68. package/dist/shared/types.js.map +1 -0
  69. package/package.json +61 -0
  70. package/src/marks/marks.css +361 -0
@@ -0,0 +1,570 @@
1
+ // The overlay's stylesheet. It applies inside the overlay's shadow roots only,
2
+ // so the page's styles don't reach the overlay and the overlay's don't reach
3
+ // the page. Colors come from the page's --ascribe-review-* custom properties
4
+ // (`marks.css` sets them, with light and dark values; a host can set its own),
5
+ // which reach inside shadow roots by inheritance.
6
+ export const OVERLAY_CSS = `
7
+ :host {
8
+ all: initial;
9
+ --text: var(--ascribe-review-text, CanvasText);
10
+ --muted: var(--ascribe-review-muted, #5b6475);
11
+ --line: var(--ascribe-review-border, #d3d8e0);
12
+ --surface: var(--ascribe-review-surface, Canvas);
13
+ --thread: var(--ascribe-review-thread, #f5f7fb);
14
+ --accent: var(--ascribe-review-focus, #1f6feb);
15
+ --accent-text: var(--ascribe-review-accent-text, #ffffff);
16
+ --input: var(--ascribe-review-input, var(--surface));
17
+ --flash: var(--ascribe-review-flash, #fff6bf);
18
+ --added: var(--ascribe-review-added, #1a7f37);
19
+ --changed: var(--ascribe-review-changed, #8a5a00);
20
+ --changed-background: var(--ascribe-review-changed-background, #fff1c2);
21
+ --removed: var(--ascribe-review-removed, #c4222d);
22
+ --removed-background: var(--ascribe-review-removed-background, #ffe4e2);
23
+ --mono: var(--ascribe-review-mono, ui-monospace, monospace);
24
+ font-family: var(--ascribe-review-font, system-ui, -apple-system, "Segoe UI", sans-serif);
25
+ font-size: 12.5px;
26
+ line-height: 1.45;
27
+ color: var(--text);
28
+ }
29
+ * {
30
+ box-sizing: border-box;
31
+ }
32
+ [hidden] {
33
+ display: none !important;
34
+ }
35
+ button,
36
+ textarea,
37
+ input {
38
+ font: inherit;
39
+ color: inherit;
40
+ }
41
+ button {
42
+ cursor: pointer;
43
+ }
44
+ button:disabled,
45
+ button[aria-disabled="true"] {
46
+ cursor: not-allowed;
47
+ opacity: 0.5;
48
+ }
49
+ button:focus-visible,
50
+ textarea:focus-visible,
51
+ input:focus-visible,
52
+ .thread:focus-visible {
53
+ outline: 2px solid var(--accent);
54
+ outline-offset: 1px;
55
+ }
56
+ .sr-only {
57
+ position: absolute;
58
+ width: 1px;
59
+ height: 1px;
60
+ overflow: hidden;
61
+ clip-path: inset(50%);
62
+ white-space: nowrap;
63
+ }
64
+
65
+ /* Buttons */
66
+ .ghost {
67
+ border: 1px solid var(--line);
68
+ background: var(--surface);
69
+ border-radius: 5px;
70
+ padding: 2px 8px;
71
+ font-size: 12px;
72
+ min-height: 24px;
73
+ }
74
+ .ghost:hover:not(:disabled):not([aria-disabled="true"]) {
75
+ border-color: var(--accent);
76
+ color: var(--accent);
77
+ }
78
+ .primary {
79
+ border: 1px solid var(--accent);
80
+ background: var(--accent);
81
+ color: var(--accent-text);
82
+ border-radius: 5px;
83
+ padding: 2px 10px;
84
+ font-size: 12.5px;
85
+ font-weight: 600;
86
+ min-height: 24px;
87
+ }
88
+ .danger {
89
+ border: 1px solid var(--removed);
90
+ background: var(--removed);
91
+ color: var(--surface);
92
+ border-radius: 5px;
93
+ padding: 2px 10px;
94
+ font-size: 12.5px;
95
+ font-weight: 600;
96
+ min-height: 24px;
97
+ }
98
+ .link {
99
+ border: 0;
100
+ background: transparent;
101
+ color: var(--accent);
102
+ padding: 0;
103
+ font-size: inherit;
104
+ text-align: inherit;
105
+ }
106
+ a.link {
107
+ text-decoration: none;
108
+ }
109
+ .link:hover {
110
+ text-decoration: underline;
111
+ }
112
+ .hint {
113
+ color: var(--muted);
114
+ font-size: 11.5px;
115
+ }
116
+ .refuse,
117
+ .error {
118
+ color: var(--removed);
119
+ font-size: 12px;
120
+ }
121
+ .spacer {
122
+ flex: 1;
123
+ }
124
+
125
+ /* The layer over the page: the column, markers' panel, dialogs. */
126
+ .layer {
127
+ position: absolute;
128
+ inset: 0;
129
+ pointer-events: none;
130
+ }
131
+ .layer > *,
132
+ .column > * {
133
+ pointer-events: auto;
134
+ }
135
+ .column {
136
+ position: absolute;
137
+ top: 0;
138
+ width: 250px;
139
+ pointer-events: none;
140
+ }
141
+ .slot {
142
+ position: absolute;
143
+ left: 0;
144
+ right: 0;
145
+ }
146
+ .slot > .thread,
147
+ .slot > .composer {
148
+ margin: 0 0 6px;
149
+ }
150
+ .slot.linked .thread,
151
+ .slot.linked .composer {
152
+ border-color: var(--accent);
153
+ }
154
+ .highlight {
155
+ position: absolute;
156
+ pointer-events: none;
157
+ background: color-mix(in srgb, var(--flash) 55%, transparent);
158
+ border-radius: 3px;
159
+ /* Over the page's text, a tint that keeps the text as it was: multiplied
160
+ on a light page, screened on a dark one. */
161
+ mix-blend-mode: var(--ascribe-review-blend, multiply);
162
+ }
163
+ svg.connector {
164
+ position: absolute;
165
+ inset: 0;
166
+ width: 100%;
167
+ height: 100%;
168
+ overflow: visible;
169
+ pointer-events: none;
170
+ }
171
+ svg.connector path {
172
+ fill: none;
173
+ stroke: var(--accent);
174
+ stroke-width: 1.5;
175
+ }
176
+
177
+ /* The block tools: the Comment button, and the count marker at narrow widths. */
178
+ .tool {
179
+ border: 1px solid var(--line);
180
+ background: var(--surface);
181
+ border-radius: 5px;
182
+ font-size: 11.5px;
183
+ padding: 0 7px;
184
+ min-height: 22px;
185
+ color: var(--accent);
186
+ white-space: nowrap;
187
+ }
188
+ .hint-count {
189
+ margin-inline-start: 2px;
190
+ font-size: 11px;
191
+ font-weight: 600;
192
+ color: var(--accent);
193
+ }
194
+
195
+ .marker {
196
+ border: 1px solid var(--accent);
197
+ background: var(--surface);
198
+ color: var(--accent);
199
+ border-radius: 999px;
200
+ font-size: 11px;
201
+ font-weight: 700;
202
+ padding: 0 8px;
203
+ min-width: 30px;
204
+ min-height: 24px;
205
+ }
206
+
207
+ /* Threads */
208
+ .thread {
209
+ background: var(--thread);
210
+ border: 1px solid var(--line);
211
+ border-radius: 6px;
212
+ margin: 6px 0 10px;
213
+ }
214
+ .th {
215
+ display: flex;
216
+ flex-wrap: wrap;
217
+ gap: 3px 8px;
218
+ align-items: center;
219
+ padding: 5px 9px 2px;
220
+ font-size: 11.5px;
221
+ color: var(--muted);
222
+ }
223
+ .acts {
224
+ display: flex;
225
+ flex-wrap: wrap;
226
+ gap: 2px 12px;
227
+ padding: 0 9px 5px;
228
+ border-bottom: 1px solid var(--line);
229
+ font-size: 11.5px;
230
+ }
231
+ .thread.collapsed .acts {
232
+ border-bottom: 0;
233
+ }
234
+ .orig,
235
+ .inside {
236
+ padding: 5px 9px;
237
+ border-bottom: 1px solid var(--line);
238
+ font-size: 11.5px;
239
+ color: var(--muted);
240
+ }
241
+ .orig q {
242
+ color: var(--text);
243
+ white-space: pre-wrap;
244
+ }
245
+ .badge {
246
+ border-radius: 999px;
247
+ padding: 0 7px;
248
+ font-size: 10.5px;
249
+ font-weight: 600;
250
+ border: 1px solid currentColor;
251
+ white-space: nowrap;
252
+ }
253
+ .badge.unsent {
254
+ color: var(--changed);
255
+ }
256
+ .badge.resolved {
257
+ color: var(--added);
258
+ }
259
+ .badge.outdated {
260
+ color: var(--muted);
261
+ }
262
+ .badge.summary {
263
+ color: var(--accent);
264
+ }
265
+ .badge.removed,
266
+ .badge.detached {
267
+ color: var(--removed);
268
+ }
269
+ .comment {
270
+ display: grid;
271
+ grid-template-columns: 22px minmax(0, 1fr);
272
+ gap: 7px;
273
+ padding: 6px 9px;
274
+ }
275
+ .comment + .comment {
276
+ border-top: 1px dashed var(--line);
277
+ }
278
+ .avatar {
279
+ width: 22px;
280
+ height: 22px;
281
+ border-radius: 50%;
282
+ background: var(--accent);
283
+ color: var(--accent-text);
284
+ display: grid;
285
+ place-items: center;
286
+ font-size: 9.5px;
287
+ font-weight: 700;
288
+ }
289
+ .who {
290
+ font-weight: 600;
291
+ }
292
+ .when {
293
+ color: var(--muted);
294
+ font-size: 11px;
295
+ margin-left: 6px;
296
+ }
297
+ .body {
298
+ overflow-wrap: anywhere;
299
+ }
300
+ .body > :first-child {
301
+ margin-top: 1px;
302
+ }
303
+ .body > :last-child {
304
+ margin-bottom: 0;
305
+ }
306
+ .body p,
307
+ .body ul,
308
+ .body ol,
309
+ .body blockquote,
310
+ .body pre {
311
+ margin: 4px 0;
312
+ }
313
+ .body ul,
314
+ .body ol {
315
+ padding-left: 18px;
316
+ }
317
+ .body blockquote {
318
+ border-left: 3px solid var(--line);
319
+ padding-left: 8px;
320
+ color: var(--muted);
321
+ }
322
+ .body code {
323
+ font-family: var(--mono);
324
+ font-size: 0.92em;
325
+ background: color-mix(in srgb, var(--muted) 14%, transparent);
326
+ padding: 0.05em 0.3em;
327
+ border-radius: 3px;
328
+ }
329
+ .body pre {
330
+ overflow-x: auto;
331
+ padding: 6px 8px;
332
+ border-radius: 4px;
333
+ background: color-mix(in srgb, var(--muted) 14%, transparent);
334
+ }
335
+ .body pre code {
336
+ background: none;
337
+ padding: 0;
338
+ }
339
+ .body a {
340
+ color: var(--accent);
341
+ }
342
+ .reply {
343
+ display: flex;
344
+ flex-wrap: wrap;
345
+ gap: 6px;
346
+ padding: 6px 9px 8px;
347
+ border-top: 1px solid var(--line);
348
+ }
349
+ .reply textarea {
350
+ flex: 1 1 100%;
351
+ min-width: 80px;
352
+ padding: 2px 8px;
353
+ border: 1px solid var(--line);
354
+ border-radius: 5px;
355
+ background: var(--input);
356
+ resize: vertical;
357
+ field-sizing: content;
358
+ min-height: 26px;
359
+ max-height: 160px;
360
+ }
361
+ .reply .error,
362
+ .reply .hint {
363
+ flex-basis: 100%;
364
+ }
365
+ .composer {
366
+ background: var(--thread);
367
+ border: 1px solid var(--accent);
368
+ border-radius: 6px;
369
+ padding: 8px 10px;
370
+ margin: 6px 0 10px;
371
+ display: flex;
372
+ flex-direction: column;
373
+ gap: 6px;
374
+ }
375
+ .composer textarea {
376
+ width: 100%;
377
+ min-height: 56px;
378
+ resize: vertical;
379
+ padding: 6px 8px;
380
+ border: 1px solid var(--line);
381
+ border-radius: 5px;
382
+ background: var(--input);
383
+ }
384
+ .row {
385
+ display: flex;
386
+ gap: 6px;
387
+ flex-wrap: wrap;
388
+ align-items: center;
389
+ }
390
+
391
+ /* The detached list, above the page */
392
+ .detached {
393
+ margin: 12px 0;
394
+ border: 1px dashed var(--line);
395
+ border-radius: 6px;
396
+ padding: 8px 10px 2px;
397
+ color: var(--muted);
398
+ max-width: 520px;
399
+ }
400
+ .detached .thread {
401
+ color: var(--text);
402
+ }
403
+
404
+ /* The unsent bar, at the bottom */
405
+ .unsent-bar {
406
+ background: var(--changed-background);
407
+ border-top: 1px solid var(--line);
408
+ padding: 6px 10px;
409
+ display: flex;
410
+ flex-wrap: wrap;
411
+ gap: 6px 10px;
412
+ align-items: center;
413
+ }
414
+ .unsent-bar .hint {
415
+ font-size: 12px;
416
+ }
417
+
418
+ /* The panel for one block's threads, at narrow widths */
419
+ .sheet {
420
+ position: fixed;
421
+ left: 0;
422
+ right: 0;
423
+ bottom: 0;
424
+ max-height: 62vh;
425
+ overflow: auto;
426
+ background: var(--surface);
427
+ border-top: 2px solid var(--accent);
428
+ box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.22);
429
+ padding: 8px 12px 10px;
430
+ z-index: 4;
431
+ }
432
+ .sheet .head {
433
+ display: flex;
434
+ gap: 8px;
435
+ align-items: center;
436
+ font-size: 12px;
437
+ color: var(--muted);
438
+ }
439
+
440
+ /* Dialogs */
441
+ .backdrop {
442
+ position: fixed;
443
+ inset: 0;
444
+ background: rgba(0, 0, 0, 0.4);
445
+ z-index: 8;
446
+ display: grid;
447
+ place-items: center;
448
+ padding: 12px;
449
+ }
450
+ .dialog {
451
+ background: var(--surface);
452
+ border: 1px solid var(--line);
453
+ border-radius: 8px;
454
+ width: min(480px, 100%);
455
+ max-height: 100%;
456
+ overflow: auto;
457
+ padding: 12px 14px;
458
+ display: flex;
459
+ flex-direction: column;
460
+ gap: 8px;
461
+ font-size: 13px;
462
+ }
463
+ .dialog h2 {
464
+ margin: 0;
465
+ font-size: 14px;
466
+ }
467
+ .dialog ul.unsent-list {
468
+ margin: 0;
469
+ padding-left: 18px;
470
+ display: flex;
471
+ flex-direction: column;
472
+ gap: 4px;
473
+ }
474
+ .dialog fieldset {
475
+ border: 0;
476
+ padding: 0;
477
+ margin: 0;
478
+ display: flex;
479
+ flex-wrap: wrap;
480
+ gap: 4px 14px;
481
+ }
482
+ .dialog textarea {
483
+ width: 100%;
484
+ min-height: 56px;
485
+ resize: vertical;
486
+ padding: 6px 8px;
487
+ border: 1px solid var(--line);
488
+ border-radius: 5px;
489
+ background: var(--input);
490
+ }
491
+ .confirm {
492
+ border: 1px solid var(--removed);
493
+ background: var(--removed-background);
494
+ border-radius: 6px;
495
+ padding: 8px 10px;
496
+ }
497
+ .segmented {
498
+ display: inline-flex;
499
+ flex-wrap: wrap;
500
+ align-self: flex-start;
501
+ border: 1px solid var(--line);
502
+ border-radius: 5px;
503
+ overflow: hidden;
504
+ }
505
+ .segmented button {
506
+ border: 0;
507
+ background: transparent;
508
+ padding: 2px 9px;
509
+ font-size: 12px;
510
+ color: var(--muted);
511
+ min-height: 24px;
512
+ }
513
+ .segmented button + button {
514
+ border-left: 1px solid var(--line);
515
+ }
516
+ .segmented button[aria-pressed="true"] {
517
+ background: var(--accent);
518
+ color: var(--accent-text);
519
+ }
520
+ .thread-list {
521
+ list-style: none;
522
+ margin: 0;
523
+ padding: 0;
524
+ }
525
+ .thread-list li + li {
526
+ border-top: 1px solid var(--line);
527
+ }
528
+ .thread-list button {
529
+ display: flex;
530
+ flex-direction: column;
531
+ gap: 1px;
532
+ width: 100%;
533
+ text-align: left;
534
+ border: 0;
535
+ background: transparent;
536
+ padding: 6px 4px;
537
+ }
538
+ .thread-list button:hover,
539
+ .thread-list button:focus-visible {
540
+ background: color-mix(in srgb, var(--muted) 12%, transparent);
541
+ }
542
+ .thread-list .where {
543
+ font-size: 11.5px;
544
+ color: var(--muted);
545
+ }
546
+ .thread-list .first {
547
+ overflow: hidden;
548
+ text-overflow: ellipsis;
549
+ white-space: nowrap;
550
+ }
551
+
552
+ .flash {
553
+ animation: flash 1.4s ease-out;
554
+ }
555
+ @keyframes flash {
556
+ from {
557
+ box-shadow: 0 0 0 3px var(--accent);
558
+ }
559
+ to {
560
+ box-shadow: 0 0 0 0 transparent;
561
+ }
562
+ }
563
+ @media (prefers-reduced-motion: reduce) {
564
+ .flash {
565
+ animation: none;
566
+ outline: 2px solid var(--accent);
567
+ }
568
+ }
569
+ `;
570
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/overlay/style.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,+EAA+E;AAC/E,kDAAkD;AAElD,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmjB1B,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { LocatedThread } from "../place/place.js";
2
+ import type { Author } from "../shared/types.js";
3
+ /** `"1 comment"`, `"2 comments"`. */
4
+ export declare function plural(count: number, one: string, many?: string): string;
5
+ /** The last segment of a content path. */
6
+ export declare function fileName(path: string): string;
7
+ /** `rollouts.md:28`, or `rollouts.md:28-30`. */
8
+ export declare function linesLabel(path: string, lines: {
9
+ first: number;
10
+ last: number;
11
+ }): string;
12
+ /** Where a thread is, for its card's header. */
13
+ export declare function whereLabel(thread: LocatedThread): string;
14
+ /** Where a thread is, for a list of them: shorter, and naming removed text. */
15
+ export declare function listLabel(thread: LocatedThread): string;
16
+ /** Whether the thread is on removed text. */
17
+ export declare function onRemovedText(thread: LocatedThread): boolean;
18
+ /** Whether any comment of the thread is unsent. */
19
+ export declare function hasUnsent(thread: LocatedThread): boolean;
20
+ /** A comment's author's name, `"you"` for the viewer. */
21
+ export declare function authorName(author: Author | null, viewer: string): string;
22
+ /** Two letters standing for an author, for the avatar's place. */
23
+ export declare function initials(author: Author | null): string;
24
+ /** `"just now"`, `"5 minutes ago"`, `"yesterday"`, or a date. */
25
+ export declare function relativeTime(iso: string, now: number): string;
26
+ /**
27
+ * A block's text as a reader sees it, for quoting: links as their text, a
28
+ * line for each paragraph, list item, or row, numbered items with their
29
+ * numbers, images as their alt text, and code as written. What the marks and
30
+ * the overlay add is left out, but for the words a change inserted, and so
31
+ * is anything a reader can't see.
32
+ */
33
+ export declare function blockText(block: Element): string;