@llumi/design-system 1.0.0 → 2.0.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 (50) hide show
  1. package/LICENSE +51 -0
  2. package/NOTICE +66 -0
  3. package/README.md +15 -205
  4. package/custom-elements.json +1184 -18
  5. package/dist/LICENSE +51 -0
  6. package/dist/NOTICE +66 -0
  7. package/dist/README.md +29 -0
  8. package/dist/adopt-global-styles-DykTxdm8.js +15 -0
  9. package/dist/base.css +2 -0
  10. package/dist/base.md +59 -0
  11. package/dist/bpmn.md +113 -0
  12. package/dist/bpmn.mjs +5076 -0
  13. package/dist/copy-button.md +128 -0
  14. package/dist/copy-button.mjs +161 -0
  15. package/dist/download-button.md +106 -0
  16. package/dist/download-button.mjs +177 -0
  17. package/dist/highlighter.md +45 -0
  18. package/dist/highlighter.mjs +403 -0
  19. package/dist/icon-button-BeLaqJmK.js +5 -0
  20. package/dist/icons-DBLWcA83.js +42 -0
  21. package/dist/index-elWLeWLs.js +7733 -0
  22. package/dist/llumi-element-DTeRDxao.js +22 -0
  23. package/dist/mermaid.md +58 -0
  24. package/dist/mermaid.mjs +254 -0
  25. package/dist/review.md +141 -0
  26. package/dist/review.mjs +1039 -690
  27. package/dist/slot-text-DW3pDxNK.js +51 -0
  28. package/dist/theme.css +2 -0
  29. package/package.json +49 -26
  30. package/dist/review.cjs +0 -172
  31. package/dist/review.css +0 -98
  32. package/dist/review.js +0 -172
  33. package/dist/types/components/review/comment-dialog.element.d.ts +0 -21
  34. package/dist/types/components/review/custom-target.utils.d.ts +0 -16
  35. package/dist/types/components/review/default-editor.element.d.ts +0 -19
  36. package/dist/types/components/review/highlight-manager.d.ts +0 -21
  37. package/dist/types/components/review/index.d.ts +0 -8
  38. package/dist/types/components/review/overall-comment-dialog.element.d.ts +0 -22
  39. package/dist/types/components/review/review-bar.element.d.ts +0 -26
  40. package/dist/types/components/review/review.element.d.ts +0 -56
  41. package/dist/types/components/review/review.machine.d.ts +0 -234
  42. package/dist/types/components/review/review.persistence.d.ts +0 -16
  43. package/dist/types/components/review/review.type.d.ts +0 -37
  44. package/dist/types/components/review/selection-comment-icons.element.d.ts +0 -17
  45. package/dist/types/components/review/selection-range.utils.d.ts +0 -6
  46. package/dist/types/components/review/sort-comments.utils.d.ts +0 -6
  47. package/dist/types/index.d.ts +0 -1
  48. package/dist/types/shared/cn.d.ts +0 -2
  49. package/dist/types/shared/icons.d.ts +0 -7
  50. package/dist/types/shared/tailwind-element.d.ts +0 -4
@@ -2,6 +2,1126 @@
2
2
  "schemaVersion": "1.0.0",
3
3
  "readme": "",
4
4
  "modules": [
5
+ {
6
+ "kind": "javascript-module",
7
+ "path": "src/components/bpmn/bpmn.element.ts",
8
+ "declarations": [
9
+ {
10
+ "kind": "class",
11
+ "description": "",
12
+ "name": "LlumiBpmn",
13
+ "members": [
14
+ {
15
+ "kind": "field",
16
+ "name": "autoLayout",
17
+ "type": {
18
+ "text": "boolean"
19
+ },
20
+ "default": "true",
21
+ "description": "Run auto-layout to generate DI/positions (the pug syntax carries none).",
22
+ "attribute": "auto-layout"
23
+ },
24
+ {
25
+ "kind": "field",
26
+ "name": "highlight",
27
+ "type": {
28
+ "text": "string[]"
29
+ },
30
+ "default": "[]"
31
+ },
32
+ {
33
+ "kind": "field",
34
+ "name": "focusId",
35
+ "type": {
36
+ "text": "string | undefined"
37
+ }
38
+ },
39
+ {
40
+ "kind": "field",
41
+ "name": "errors",
42
+ "type": {
43
+ "text": "string[]"
44
+ },
45
+ "default": "[]"
46
+ },
47
+ {
48
+ "kind": "field",
49
+ "name": "warnings",
50
+ "type": {
51
+ "text": "string[]"
52
+ },
53
+ "default": "[]"
54
+ },
55
+ {
56
+ "kind": "field",
57
+ "name": "centerOn",
58
+ "type": {
59
+ "text": "string | undefined"
60
+ }
61
+ },
62
+ {
63
+ "kind": "field",
64
+ "name": "_prevCenterOn",
65
+ "type": {
66
+ "text": "string | undefined"
67
+ },
68
+ "privacy": "private"
69
+ },
70
+ {
71
+ "kind": "field",
72
+ "name": "_centerAnim",
73
+ "type": {
74
+ "text": "number"
75
+ },
76
+ "privacy": "private",
77
+ "default": "0"
78
+ },
79
+ {
80
+ "kind": "field",
81
+ "name": "_resizeObs",
82
+ "type": {
83
+ "text": "ResizeObserver | null"
84
+ },
85
+ "privacy": "private",
86
+ "default": "null"
87
+ },
88
+ {
89
+ "kind": "field",
90
+ "name": "_userAdjusted",
91
+ "type": {
92
+ "text": "boolean"
93
+ },
94
+ "privacy": "private",
95
+ "default": "false"
96
+ },
97
+ {
98
+ "kind": "field",
99
+ "name": "_markAdjusted",
100
+ "privacy": "private",
101
+ "readonly": true
102
+ },
103
+ {
104
+ "kind": "field",
105
+ "name": "_error",
106
+ "type": {
107
+ "text": "string | null"
108
+ },
109
+ "privacy": "protected",
110
+ "default": "null"
111
+ },
112
+ {
113
+ "kind": "field",
114
+ "name": "_viewer",
115
+ "type": {
116
+ "text": "BpmnViewer | null"
117
+ },
118
+ "privacy": "protected",
119
+ "default": "null"
120
+ },
121
+ {
122
+ "kind": "field",
123
+ "name": "_clickHandler",
124
+ "type": {
125
+ "text": "| ((e: { element: { type: string; id: string } }) => void)\n\t\t| null"
126
+ },
127
+ "privacy": "private",
128
+ "default": "null"
129
+ },
130
+ {
131
+ "kind": "field",
132
+ "name": "_container",
133
+ "type": {
134
+ "text": "HTMLDivElement | null"
135
+ },
136
+ "privacy": "protected",
137
+ "default": "null"
138
+ },
139
+ {
140
+ "kind": "field",
141
+ "name": "_seq",
142
+ "type": {
143
+ "text": "number"
144
+ },
145
+ "privacy": "protected",
146
+ "default": "0"
147
+ },
148
+ {
149
+ "kind": "field",
150
+ "name": "_renderTask",
151
+ "type": {
152
+ "text": "Promise<void>"
153
+ },
154
+ "privacy": "protected"
155
+ },
156
+ {
157
+ "kind": "field",
158
+ "name": "_slot",
159
+ "privacy": "private",
160
+ "readonly": true,
161
+ "default": "new SlotTextController(this, () => this._scheduleRender(), )"
162
+ },
163
+ {
164
+ "kind": "field",
165
+ "name": "whenRendered",
166
+ "type": {
167
+ "text": "Promise<void>"
168
+ },
169
+ "description": "Test hook: resolves after the in-flight render settles.",
170
+ "readonly": true
171
+ },
172
+ {
173
+ "kind": "method",
174
+ "name": "_scheduleRender",
175
+ "privacy": "protected",
176
+ "return": {
177
+ "type": {
178
+ "text": "void"
179
+ }
180
+ }
181
+ },
182
+ {
183
+ "kind": "method",
184
+ "name": "_ensureContainer",
185
+ "privacy": "protected",
186
+ "return": {
187
+ "type": {
188
+ "text": "void"
189
+ }
190
+ }
191
+ },
192
+ {
193
+ "kind": "method",
194
+ "name": "_destroyViewer",
195
+ "privacy": "protected",
196
+ "return": {
197
+ "type": {
198
+ "text": "void"
199
+ }
200
+ }
201
+ },
202
+ {
203
+ "kind": "method",
204
+ "name": "_render",
205
+ "privacy": "protected",
206
+ "return": {
207
+ "type": {
208
+ "text": "Promise<void>"
209
+ }
210
+ }
211
+ },
212
+ {
213
+ "kind": "method",
214
+ "name": "_onViewerReady",
215
+ "privacy": "protected",
216
+ "return": {
217
+ "type": {
218
+ "text": "void"
219
+ }
220
+ },
221
+ "description": "Extension point: wire interaction, apply markers, and apply an initial centerOn once the async viewer is ready."
222
+ },
223
+ {
224
+ "kind": "method",
225
+ "name": "_wireInteraction",
226
+ "privacy": "protected",
227
+ "return": {
228
+ "type": {
229
+ "text": "void"
230
+ }
231
+ }
232
+ },
233
+ {
234
+ "kind": "method",
235
+ "name": "_applyMarkers",
236
+ "privacy": "protected",
237
+ "return": {
238
+ "type": {
239
+ "text": "void"
240
+ }
241
+ }
242
+ },
243
+ {
244
+ "kind": "method",
245
+ "name": "_sizeCanvasSvg",
246
+ "privacy": "private",
247
+ "return": {
248
+ "type": {
249
+ "text": "void"
250
+ }
251
+ },
252
+ "description": "Pin the canvas svg to fill the container. bpmn-js sizes it with a\n`height=\"100%\"` attribute, which a consumer's global `svg { height: auto }`\nreset overrides — collapsing the diagram. The viewer is light DOM, so neither\nshadow styles nor `::slotted` can reach the svg; an inline style is the most\ntargeted fix and outranks any non-`!important` page reset."
253
+ },
254
+ {
255
+ "kind": "method",
256
+ "name": "_fitViewport",
257
+ "privacy": "private",
258
+ "return": {
259
+ "type": {
260
+ "text": "void"
261
+ }
262
+ }
263
+ },
264
+ {
265
+ "kind": "method",
266
+ "name": "_onResize",
267
+ "privacy": "private",
268
+ "return": {
269
+ "type": {
270
+ "text": "void"
271
+ }
272
+ },
273
+ "description": "Re-fit when the host resizes, unless the user has taken viewport control."
274
+ },
275
+ {
276
+ "kind": "field",
277
+ "name": "_fit",
278
+ "privacy": "private"
279
+ },
280
+ {
281
+ "kind": "method",
282
+ "name": "_animateCenterOn",
283
+ "privacy": "private",
284
+ "return": {
285
+ "type": {
286
+ "text": "void"
287
+ }
288
+ }
289
+ }
290
+ ],
291
+ "events": [
292
+ {
293
+ "name": "llumi-bpmn-deselect",
294
+ "type": {
295
+ "text": "CustomEvent"
296
+ }
297
+ },
298
+ {
299
+ "name": "llumi-bpmn-select",
300
+ "type": {
301
+ "text": "CustomEvent"
302
+ }
303
+ }
304
+ ],
305
+ "attributes": [
306
+ {
307
+ "name": "auto-layout",
308
+ "type": {
309
+ "text": "boolean"
310
+ },
311
+ "default": "true",
312
+ "description": "Run auto-layout to generate DI/positions (the pug syntax carries none).",
313
+ "fieldName": "autoLayout"
314
+ }
315
+ ],
316
+ "superclass": {
317
+ "name": "LlumiElement",
318
+ "module": "/src/shared/llumi-element"
319
+ },
320
+ "tagName": "llumi-bpmn",
321
+ "customElement": true
322
+ }
323
+ ],
324
+ "exports": [
325
+ {
326
+ "kind": "js",
327
+ "name": "LlumiBpmn",
328
+ "declaration": {
329
+ "name": "LlumiBpmn",
330
+ "module": "src/components/bpmn/bpmn.element.ts"
331
+ }
332
+ },
333
+ {
334
+ "kind": "custom-element-definition",
335
+ "name": "llumi-bpmn",
336
+ "declaration": {
337
+ "name": "LlumiBpmn",
338
+ "module": "src/components/bpmn/bpmn.element.ts"
339
+ }
340
+ }
341
+ ]
342
+ },
343
+ {
344
+ "kind": "javascript-module",
345
+ "path": "src/components/copy-button/copy-button.element.ts",
346
+ "declarations": [
347
+ {
348
+ "kind": "class",
349
+ "description": "`<llumi-copy-button>` — copy-to-clipboard icon button with success/error feedback.\nRenders in light DOM; styled by the shared icon-button rules in `base.css`.",
350
+ "name": "LlumiCopyButton",
351
+ "members": [
352
+ {
353
+ "kind": "field",
354
+ "name": "value",
355
+ "type": {
356
+ "text": "string"
357
+ },
358
+ "default": "\"\"",
359
+ "description": "Static string source (lowest precedence before the empty-string fallback).",
360
+ "attribute": "value"
361
+ },
362
+ {
363
+ "kind": "field",
364
+ "name": "title",
365
+ "type": {
366
+ "text": "string"
367
+ },
368
+ "default": "\"Copy to clipboard\"",
369
+ "description": "Tooltip + mirrored to the button's aria-label.",
370
+ "attribute": "title"
371
+ },
372
+ {
373
+ "kind": "field",
374
+ "name": "getValue",
375
+ "type": {
376
+ "text": "() => string | undefined"
377
+ },
378
+ "description": "Function source (highest precedence), JS property only — no attribute."
379
+ },
380
+ {
381
+ "kind": "field",
382
+ "name": "instance",
383
+ "type": {
384
+ "text": "ReturnType<typeof copyButtonMachine.newInstance> | undefined"
385
+ },
386
+ "privacy": "private"
387
+ },
388
+ {
389
+ "kind": "field",
390
+ "name": "unsubscribe",
391
+ "type": {
392
+ "text": "() => void | undefined"
393
+ },
394
+ "privacy": "private"
395
+ },
396
+ {
397
+ "kind": "method",
398
+ "name": "onTransition",
399
+ "privacy": "private",
400
+ "parameters": [
401
+ {
402
+ "name": "_state",
403
+ "type": {
404
+ "text": "CopyButtonState"
405
+ }
406
+ },
407
+ {
408
+ "name": "event",
409
+ "type": {
410
+ "text": "CopyButtonEvent | undefined"
411
+ }
412
+ }
413
+ ]
414
+ },
415
+ {
416
+ "kind": "method",
417
+ "name": "resolveText",
418
+ "privacy": "private",
419
+ "return": {
420
+ "type": {
421
+ "text": "string"
422
+ }
423
+ },
424
+ "description": "Resolve the text to copy, by precedence:\n getValue() (function prop)\n → get-value (attribute: dotted path to a function on globalThis, resolved at click time)\n → value (string attr)\n → \"\""
425
+ },
426
+ {
427
+ "kind": "method",
428
+ "name": "onClick",
429
+ "privacy": "private"
430
+ },
431
+ {
432
+ "kind": "method",
433
+ "name": "viewFor",
434
+ "privacy": "private",
435
+ "return": {
436
+ "type": {
437
+ "text": "{\n\t\ticon: TemplateResult;\n\t\tcls: string;\n\t}"
438
+ }
439
+ },
440
+ "parameters": [
441
+ {
442
+ "name": "name",
443
+ "type": {
444
+ "text": "CopyButtonState[\"name\"]"
445
+ }
446
+ }
447
+ ]
448
+ }
449
+ ],
450
+ "events": [
451
+ {
452
+ "name": "llumi-copy",
453
+ "type": {
454
+ "text": "CustomEvent"
455
+ },
456
+ "description": "on success; detail `{ text }`"
457
+ },
458
+ {
459
+ "name": "llumi-copy-error",
460
+ "type": {
461
+ "text": "CustomEvent"
462
+ },
463
+ "description": "on failure; detail `{ error }`"
464
+ }
465
+ ],
466
+ "attributes": [
467
+ {
468
+ "name": "value",
469
+ "type": {
470
+ "text": "string"
471
+ },
472
+ "default": "\"\"",
473
+ "description": "Static string source (lowest precedence before the empty-string fallback).",
474
+ "fieldName": "value"
475
+ },
476
+ {
477
+ "name": "title",
478
+ "type": {
479
+ "text": "string"
480
+ },
481
+ "default": "\"Copy to clipboard\"",
482
+ "description": "Tooltip + mirrored to the button's aria-label.",
483
+ "fieldName": "title"
484
+ }
485
+ ],
486
+ "superclass": {
487
+ "name": "LlumiElement",
488
+ "module": "/src/shared/llumi-element"
489
+ },
490
+ "tagName": "llumi-copy-button",
491
+ "customElement": true
492
+ }
493
+ ],
494
+ "exports": [
495
+ {
496
+ "kind": "js",
497
+ "name": "LlumiCopyButton",
498
+ "declaration": {
499
+ "name": "LlumiCopyButton",
500
+ "module": "src/components/copy-button/copy-button.element.ts"
501
+ }
502
+ },
503
+ {
504
+ "kind": "custom-element-definition",
505
+ "name": "llumi-copy-button",
506
+ "declaration": {
507
+ "name": "LlumiCopyButton",
508
+ "module": "src/components/copy-button/copy-button.element.ts"
509
+ }
510
+ }
511
+ ]
512
+ },
513
+ {
514
+ "kind": "javascript-module",
515
+ "path": "src/components/download-button/download-button.element.ts",
516
+ "declarations": [
517
+ {
518
+ "kind": "class",
519
+ "description": "`<llumi-download-button>` — download-a-string-as-a-file icon button with\nsuccess/error feedback. Renders in light DOM; styled by the shared\nicon-button rules in `base.css`.",
520
+ "name": "LlumiDownloadButton",
521
+ "members": [
522
+ {
523
+ "kind": "field",
524
+ "name": "filename",
525
+ "type": {
526
+ "text": "string"
527
+ },
528
+ "default": "\"\"",
529
+ "description": "Name of the downloaded file. Required — a click with no filename is a no-op.",
530
+ "attribute": "filename"
531
+ },
532
+ {
533
+ "kind": "field",
534
+ "name": "mimeType",
535
+ "type": {
536
+ "text": "string"
537
+ },
538
+ "default": "\"text/plain\"",
539
+ "description": "MIME type for the Blob.",
540
+ "attribute": "mime-type"
541
+ },
542
+ {
543
+ "kind": "field",
544
+ "name": "title",
545
+ "type": {
546
+ "text": "string"
547
+ },
548
+ "default": "\"Download file\"",
549
+ "description": "Tooltip + mirrored to the button's aria-label.",
550
+ "attribute": "title"
551
+ },
552
+ {
553
+ "kind": "field",
554
+ "name": "getValue",
555
+ "type": {
556
+ "text": "() => string | undefined"
557
+ },
558
+ "description": "Content source (highest precedence), JS property only — no attribute."
559
+ },
560
+ {
561
+ "kind": "field",
562
+ "name": "instance",
563
+ "type": {
564
+ "text": "ReturnType<typeof downloadButtonMachine.newInstance> | undefined"
565
+ },
566
+ "privacy": "private"
567
+ },
568
+ {
569
+ "kind": "field",
570
+ "name": "unsubscribe",
571
+ "type": {
572
+ "text": "() => void | undefined"
573
+ },
574
+ "privacy": "private"
575
+ },
576
+ {
577
+ "kind": "method",
578
+ "name": "onTransition",
579
+ "privacy": "private",
580
+ "parameters": [
581
+ {
582
+ "name": "_state",
583
+ "type": {
584
+ "text": "DownloadButtonState"
585
+ }
586
+ },
587
+ {
588
+ "name": "event",
589
+ "type": {
590
+ "text": "DownloadButtonEvent | undefined"
591
+ }
592
+ }
593
+ ]
594
+ },
595
+ {
596
+ "kind": "method",
597
+ "name": "onClick",
598
+ "privacy": "private"
599
+ },
600
+ {
601
+ "kind": "method",
602
+ "name": "viewFor",
603
+ "privacy": "private",
604
+ "return": {
605
+ "type": {
606
+ "text": "{\n\t\ticon: TemplateResult;\n\t\tcls: string;\n\t}"
607
+ }
608
+ },
609
+ "parameters": [
610
+ {
611
+ "name": "name",
612
+ "type": {
613
+ "text": "DownloadButtonState[\"name\"]"
614
+ }
615
+ }
616
+ ]
617
+ }
618
+ ],
619
+ "events": [
620
+ {
621
+ "name": "llumi-download",
622
+ "type": {
623
+ "text": "CustomEvent"
624
+ },
625
+ "description": "on success; detail `{ filename }`"
626
+ },
627
+ {
628
+ "name": "llumi-download-error",
629
+ "type": {
630
+ "text": "CustomEvent"
631
+ },
632
+ "description": "on failure; detail `{ error }`"
633
+ }
634
+ ],
635
+ "attributes": [
636
+ {
637
+ "name": "filename",
638
+ "type": {
639
+ "text": "string"
640
+ },
641
+ "default": "\"\"",
642
+ "description": "Name of the downloaded file. Required — a click with no filename is a no-op.",
643
+ "fieldName": "filename"
644
+ },
645
+ {
646
+ "name": "mime-type",
647
+ "type": {
648
+ "text": "string"
649
+ },
650
+ "default": "\"text/plain\"",
651
+ "description": "MIME type for the Blob.",
652
+ "fieldName": "mimeType"
653
+ },
654
+ {
655
+ "name": "title",
656
+ "type": {
657
+ "text": "string"
658
+ },
659
+ "default": "\"Download file\"",
660
+ "description": "Tooltip + mirrored to the button's aria-label.",
661
+ "fieldName": "title"
662
+ }
663
+ ],
664
+ "superclass": {
665
+ "name": "LlumiElement",
666
+ "module": "/src/shared/llumi-element"
667
+ },
668
+ "tagName": "llumi-download-button",
669
+ "customElement": true
670
+ }
671
+ ],
672
+ "exports": [
673
+ {
674
+ "kind": "js",
675
+ "name": "LlumiDownloadButton",
676
+ "declaration": {
677
+ "name": "LlumiDownloadButton",
678
+ "module": "src/components/download-button/download-button.element.ts"
679
+ }
680
+ },
681
+ {
682
+ "kind": "custom-element-definition",
683
+ "name": "llumi-download-button",
684
+ "declaration": {
685
+ "name": "LlumiDownloadButton",
686
+ "module": "src/components/download-button/download-button.element.ts"
687
+ }
688
+ }
689
+ ]
690
+ },
691
+ {
692
+ "kind": "javascript-module",
693
+ "path": "src/components/highlighter/highlighter.element.ts",
694
+ "declarations": [
695
+ {
696
+ "kind": "class",
697
+ "description": "`<llumi-highlighter>` — syntax-highlighted code block (Prism via refractor),\n4 themes, optional copy button, and line-range dimming. Shadow DOM.",
698
+ "name": "LlumiHighlighter",
699
+ "members": [
700
+ {
701
+ "kind": "field",
702
+ "name": "language",
703
+ "type": {
704
+ "text": "string"
705
+ },
706
+ "default": "\"\"",
707
+ "attribute": "language"
708
+ },
709
+ {
710
+ "kind": "field",
711
+ "name": "theme",
712
+ "type": {
713
+ "text": "string"
714
+ },
715
+ "default": "\"ghcolors\"",
716
+ "attribute": "theme",
717
+ "reflects": true
718
+ },
719
+ {
720
+ "kind": "field",
721
+ "name": "code",
722
+ "type": {
723
+ "text": "string"
724
+ },
725
+ "default": "\"\"",
726
+ "attribute": "code"
727
+ },
728
+ {
729
+ "kind": "field",
730
+ "name": "highlight",
731
+ "type": {
732
+ "text": "LineRange[] | undefined"
733
+ }
734
+ },
735
+ {
736
+ "kind": "field",
737
+ "name": "copyButton",
738
+ "type": {
739
+ "text": "boolean"
740
+ },
741
+ "default": "true",
742
+ "attribute": "copy-button"
743
+ },
744
+ {
745
+ "kind": "field",
746
+ "name": "_tokenLines",
747
+ "type": {
748
+ "text": "Line[]"
749
+ },
750
+ "privacy": "private",
751
+ "default": "[]"
752
+ },
753
+ {
754
+ "kind": "field",
755
+ "name": "_seq",
756
+ "type": {
757
+ "text": "number"
758
+ },
759
+ "privacy": "private",
760
+ "default": "0"
761
+ },
762
+ {
763
+ "kind": "field",
764
+ "name": "_highlightTask",
765
+ "type": {
766
+ "text": "Promise<void>"
767
+ },
768
+ "privacy": "private"
769
+ },
770
+ {
771
+ "kind": "field",
772
+ "name": "_warnedLang",
773
+ "type": {
774
+ "text": "string"
775
+ },
776
+ "privacy": "private",
777
+ "default": "\"\""
778
+ },
779
+ {
780
+ "kind": "field",
781
+ "name": "resolvedCode",
782
+ "type": {
783
+ "text": "string"
784
+ },
785
+ "description": "Code source: `code` property, else light-DOM text content.",
786
+ "readonly": true
787
+ },
788
+ {
789
+ "kind": "field",
790
+ "name": "whenHighlighted",
791
+ "type": {
792
+ "text": "Promise<void>"
793
+ },
794
+ "description": "Test hook: resolves when the in-flight highlight pass has finished.",
795
+ "readonly": true
796
+ },
797
+ {
798
+ "kind": "method",
799
+ "name": "runHighlight",
800
+ "privacy": "private",
801
+ "return": {
802
+ "type": {
803
+ "text": "Promise<void>"
804
+ }
805
+ }
806
+ },
807
+ {
808
+ "kind": "method",
809
+ "name": "renderLines",
810
+ "privacy": "private",
811
+ "return": {
812
+ "type": {
813
+ "text": "TemplateResult[]"
814
+ }
815
+ }
816
+ }
817
+ ],
818
+ "attributes": [
819
+ {
820
+ "name": "language",
821
+ "type": {
822
+ "text": "string"
823
+ },
824
+ "default": "\"\"",
825
+ "fieldName": "language"
826
+ },
827
+ {
828
+ "name": "theme",
829
+ "type": {
830
+ "text": "string"
831
+ },
832
+ "default": "\"ghcolors\"",
833
+ "fieldName": "theme"
834
+ },
835
+ {
836
+ "name": "code",
837
+ "type": {
838
+ "text": "string"
839
+ },
840
+ "default": "\"\"",
841
+ "fieldName": "code"
842
+ },
843
+ {
844
+ "name": "copy-button",
845
+ "type": {
846
+ "text": "boolean"
847
+ },
848
+ "default": "true",
849
+ "fieldName": "copyButton"
850
+ }
851
+ ],
852
+ "superclass": {
853
+ "name": "LlumiElement",
854
+ "module": "/src/shared/llumi-element"
855
+ },
856
+ "tagName": "llumi-highlighter",
857
+ "customElement": true
858
+ }
859
+ ],
860
+ "exports": [
861
+ {
862
+ "kind": "js",
863
+ "name": "LlumiHighlighter",
864
+ "declaration": {
865
+ "name": "LlumiHighlighter",
866
+ "module": "src/components/highlighter/highlighter.element.ts"
867
+ }
868
+ },
869
+ {
870
+ "kind": "custom-element-definition",
871
+ "name": "llumi-highlighter",
872
+ "declaration": {
873
+ "name": "LlumiHighlighter",
874
+ "module": "src/components/highlighter/highlighter.element.ts"
875
+ }
876
+ }
877
+ ]
878
+ },
879
+ {
880
+ "kind": "javascript-module",
881
+ "path": "src/components/mermaid/mermaid.element.ts",
882
+ "declarations": [
883
+ {
884
+ "kind": "class",
885
+ "description": "`<llumi-mermaid>` — renders a Mermaid diagram from a definition string.\nShadow DOM; async render guarded by a `_seq` cancellation token. Custom\ntheming is delegated to mermaid's in-diagram directives; `theme` selects a\nbuilt-in theme name. Pan/zoom + fit button are wired via d3-zoom and\nMacGesturesController.",
886
+ "name": "LlumiMermaid",
887
+ "members": [
888
+ {
889
+ "kind": "field",
890
+ "name": "theme",
891
+ "type": {
892
+ "text": "string"
893
+ },
894
+ "default": "\"default\"",
895
+ "attribute": "theme",
896
+ "reflects": true
897
+ },
898
+ {
899
+ "kind": "field",
900
+ "name": "_source",
901
+ "type": {
902
+ "text": "string"
903
+ },
904
+ "privacy": "protected",
905
+ "default": "\"\""
906
+ },
907
+ {
908
+ "kind": "field",
909
+ "name": "_error",
910
+ "type": {
911
+ "text": "string | null"
912
+ },
913
+ "privacy": "protected",
914
+ "default": "null"
915
+ },
916
+ {
917
+ "kind": "field",
918
+ "name": "_hasDiagram",
919
+ "type": {
920
+ "text": "boolean"
921
+ },
922
+ "privacy": "protected",
923
+ "default": "false"
924
+ },
925
+ {
926
+ "kind": "field",
927
+ "name": "_slot",
928
+ "privacy": "private",
929
+ "readonly": true,
930
+ "default": "new SlotTextController(this, (text) => { this._source = text; })"
931
+ },
932
+ {
933
+ "kind": "field",
934
+ "name": "_container",
935
+ "type": {
936
+ "text": "HTMLDivElement"
937
+ },
938
+ "privacy": "protected"
939
+ },
940
+ {
941
+ "kind": "field",
942
+ "name": "_uid",
943
+ "privacy": "protected",
944
+ "readonly": true,
945
+ "default": "`llumi-mermaid-${++uidCounter}`"
946
+ },
947
+ {
948
+ "kind": "field",
949
+ "name": "_seq",
950
+ "type": {
951
+ "text": "number"
952
+ },
953
+ "privacy": "protected",
954
+ "default": "0"
955
+ },
956
+ {
957
+ "kind": "field",
958
+ "name": "_renderTask",
959
+ "type": {
960
+ "text": "Promise<void>"
961
+ },
962
+ "privacy": "private"
963
+ },
964
+ {
965
+ "kind": "field",
966
+ "name": "_gestures",
967
+ "privacy": "private",
968
+ "readonly": true,
969
+ "default": "new MacGesturesController(this)"
970
+ },
971
+ {
972
+ "kind": "field",
973
+ "name": "_zoomCtx",
974
+ "type": {
975
+ "text": "{\n\t\tsvgSelection: Selection<SVGSVGElement, unknown, null, undefined>;\n\t\tzoomBehavior: ZoomBehavior<SVGSVGElement, unknown>;\n\t} | null"
976
+ },
977
+ "privacy": "private",
978
+ "default": "null"
979
+ },
980
+ {
981
+ "kind": "field",
982
+ "name": "resolvedCode",
983
+ "type": {
984
+ "text": "string"
985
+ },
986
+ "privacy": "protected",
987
+ "description": "Diagram source: dedented light-DOM text content.",
988
+ "readonly": true
989
+ },
990
+ {
991
+ "kind": "field",
992
+ "name": "whenRendered",
993
+ "type": {
994
+ "text": "Promise<void>"
995
+ },
996
+ "description": "Test hook: resolves when the in-flight render has settled.\nChains through `updateComplete` so that calling this immediately after a\nproperty change (before the next Lit update cycle) still awaits the render\nthat `willUpdate` schedules for that change.",
997
+ "readonly": true
998
+ },
999
+ {
1000
+ "kind": "method",
1001
+ "name": "cleanupOrphans",
1002
+ "privacy": "protected",
1003
+ "return": {
1004
+ "type": {
1005
+ "text": "void"
1006
+ }
1007
+ }
1008
+ },
1009
+ {
1010
+ "kind": "method",
1011
+ "name": "onSvgRendered",
1012
+ "privacy": "protected",
1013
+ "return": {
1014
+ "type": {
1015
+ "text": "void"
1016
+ }
1017
+ },
1018
+ "parameters": [
1019
+ {
1020
+ "name": "container",
1021
+ "type": {
1022
+ "text": "HTMLDivElement"
1023
+ }
1024
+ }
1025
+ ],
1026
+ "description": "Attach d3-zoom + gestures to the freshly rendered SVG."
1027
+ },
1028
+ {
1029
+ "kind": "method",
1030
+ "name": "teardownZoom",
1031
+ "privacy": "protected",
1032
+ "return": {
1033
+ "type": {
1034
+ "text": "void"
1035
+ }
1036
+ },
1037
+ "description": "Tear down zoom/gesture state on error/disconnect."
1038
+ },
1039
+ {
1040
+ "kind": "method",
1041
+ "name": "zoomTo",
1042
+ "return": {
1043
+ "type": {
1044
+ "text": "void"
1045
+ }
1046
+ },
1047
+ "parameters": [
1048
+ {
1049
+ "name": "k",
1050
+ "type": {
1051
+ "text": "number"
1052
+ }
1053
+ }
1054
+ ],
1055
+ "description": "Test hook: jump the zoom to scale `k` (no transition)."
1056
+ },
1057
+ {
1058
+ "kind": "field",
1059
+ "name": "fitToContent",
1060
+ "privacy": "private",
1061
+ "readonly": true
1062
+ },
1063
+ {
1064
+ "kind": "method",
1065
+ "name": "renderDiagram",
1066
+ "privacy": "protected",
1067
+ "return": {
1068
+ "type": {
1069
+ "text": "Promise<void>"
1070
+ }
1071
+ }
1072
+ }
1073
+ ],
1074
+ "events": [
1075
+ {
1076
+ "name": "llumi-mermaid-render",
1077
+ "type": {
1078
+ "text": "CustomEvent"
1079
+ }
1080
+ },
1081
+ {
1082
+ "name": "llumi-mermaid-error",
1083
+ "type": {
1084
+ "text": "CustomEvent"
1085
+ }
1086
+ }
1087
+ ],
1088
+ "attributes": [
1089
+ {
1090
+ "name": "theme",
1091
+ "type": {
1092
+ "text": "string"
1093
+ },
1094
+ "default": "\"default\"",
1095
+ "fieldName": "theme"
1096
+ }
1097
+ ],
1098
+ "superclass": {
1099
+ "name": "LlumiElement",
1100
+ "module": "/src/shared/llumi-element"
1101
+ },
1102
+ "tagName": "llumi-mermaid",
1103
+ "customElement": true
1104
+ }
1105
+ ],
1106
+ "exports": [
1107
+ {
1108
+ "kind": "js",
1109
+ "name": "LlumiMermaid",
1110
+ "declaration": {
1111
+ "name": "LlumiMermaid",
1112
+ "module": "src/components/mermaid/mermaid.element.ts"
1113
+ }
1114
+ },
1115
+ {
1116
+ "kind": "custom-element-definition",
1117
+ "name": "llumi-mermaid",
1118
+ "declaration": {
1119
+ "name": "LlumiMermaid",
1120
+ "module": "src/components/mermaid/mermaid.element.ts"
1121
+ }
1122
+ }
1123
+ ]
1124
+ },
5
1125
  {
6
1126
  "kind": "javascript-module",
7
1127
  "path": "src/components/review/comment-dialog.element.ts",
@@ -19,6 +1139,15 @@
19
1139
  },
20
1140
  "default": "null"
21
1141
  },
1142
+ {
1143
+ "kind": "field",
1144
+ "name": "anchor",
1145
+ "type": {
1146
+ "text": "ReferenceElement | null"
1147
+ },
1148
+ "default": "null",
1149
+ "description": "Optional positioning reference that overrides `targetElement` — used for\ntext-selection comments, where the dialog must anchor to the selected\nrange's rect rather than the whole (potentially tall) selectable element.\nA floating-ui virtual element (`{ getBoundingClientRect() }`) is accepted."
1150
+ },
22
1151
  {
23
1152
  "kind": "field",
24
1153
  "name": "value",
@@ -125,8 +1254,8 @@
125
1254
  }
126
1255
  ],
127
1256
  "superclass": {
128
- "name": "TailwindElement",
129
- "module": "/src/shared/tailwind-element"
1257
+ "name": "LlumiElement",
1258
+ "module": "/src/shared/llumi-element"
130
1259
  },
131
1260
  "tagName": "llumi-comment-dialog",
132
1261
  "customElement": true
@@ -254,8 +1383,8 @@
254
1383
  }
255
1384
  ],
256
1385
  "superclass": {
257
- "name": "TailwindElement",
258
- "module": "/src/shared/tailwind-element"
1386
+ "name": "LlumiElement",
1387
+ "module": "/src/shared/llumi-element"
259
1388
  },
260
1389
  "tagName": "llumi-default-editor",
261
1390
  "customElement": true
@@ -381,8 +1510,8 @@
381
1510
  }
382
1511
  ],
383
1512
  "superclass": {
384
- "name": "TailwindElement",
385
- "module": "/src/shared/tailwind-element"
1513
+ "name": "LlumiElement",
1514
+ "module": "/src/shared/llumi-element"
386
1515
  },
387
1516
  "tagName": "llumi-overall-comment-dialog",
388
1517
  "customElement": true
@@ -589,8 +1718,8 @@
589
1718
  }
590
1719
  ],
591
1720
  "superclass": {
592
- "name": "TailwindElement",
593
- "module": "/src/shared/tailwind-element"
1721
+ "name": "LlumiElement",
1722
+ "module": "/src/shared/llumi-element"
594
1723
  },
595
1724
  "tagName": "llumi-review-bar",
596
1725
  "customElement": true
@@ -666,9 +1795,11 @@
666
1795
  },
667
1796
  {
668
1797
  "kind": "field",
669
- "name": "rangeMap",
670
- "privacy": "private",
671
- "default": "new Map<string, Range>()"
1798
+ "name": "painter",
1799
+ "type": {
1800
+ "text": "ReviewHighlightPainter"
1801
+ },
1802
+ "privacy": "private"
672
1803
  },
673
1804
  {
674
1805
  "kind": "field",
@@ -714,6 +1845,15 @@
714
1845
  "privacy": "private",
715
1846
  "default": "null"
716
1847
  },
1848
+ {
1849
+ "kind": "field",
1850
+ "name": "commentDialogAnchorId",
1851
+ "type": {
1852
+ "text": "string | null"
1853
+ },
1854
+ "privacy": "private",
1855
+ "default": "null"
1856
+ },
717
1857
  {
718
1858
  "kind": "field",
719
1859
  "name": "overallDialog",
@@ -818,6 +1958,30 @@
818
1958
  },
819
1959
  "description": "Clears the persisted draft for this element. No-op when persistence is off."
820
1960
  },
1961
+ {
1962
+ "kind": "method",
1963
+ "name": "selectionAnchor",
1964
+ "privacy": "private",
1965
+ "return": {
1966
+ "type": {
1967
+ "text": "ReferenceElement | null"
1968
+ }
1969
+ },
1970
+ "parameters": [
1971
+ {
1972
+ "name": "target",
1973
+ "type": {
1974
+ "text": "HTMLElement"
1975
+ }
1976
+ },
1977
+ {
1978
+ "name": "selection",
1979
+ "type": {
1980
+ "text": "SelectionRange"
1981
+ }
1982
+ }
1983
+ ]
1984
+ },
821
1985
  {
822
1986
  "kind": "method",
823
1987
  "name": "mountChrome",
@@ -851,11 +2015,6 @@
851
2015
  }
852
2016
  }
853
2017
  },
854
- {
855
- "kind": "method",
856
- "name": "updateSelectionHighlights",
857
- "privacy": "private"
858
- },
859
2018
  {
860
2019
  "kind": "method",
861
2020
  "name": "isAnnotating",
@@ -951,6 +2110,13 @@
951
2110
  },
952
2111
  {
953
2112
  "name": "default-mode"
2113
+ },
2114
+ {
2115
+ "type": {
2116
+ "text": "string"
2117
+ },
2118
+ "description": "When set to a non-empty value, persists the review draft to localStorage under that key and restores it on load. Read once on connect.",
2119
+ "name": "persist"
954
2120
  }
955
2121
  ],
956
2122
  "superclass": {
@@ -1025,8 +2191,8 @@
1025
2191
  }
1026
2192
  ],
1027
2193
  "superclass": {
1028
- "name": "TailwindElement",
1029
- "module": "/src/shared/tailwind-element"
2194
+ "name": "LlumiElement",
2195
+ "module": "/src/shared/llumi-element"
1030
2196
  },
1031
2197
  "tagName": "llumi-selection-comment-icons",
1032
2198
  "customElement": true