@llumi/design-system 1.0.1 → 2.1.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 (48) hide show
  1. package/LICENSE +51 -0
  2. package/NOTICE +66 -0
  3. package/README.md +15 -205
  4. package/adopt-global-styles-D9108lqB.js +15 -0
  5. package/base.css +2 -0
  6. package/base.md +59 -0
  7. package/bpmn.md +113 -0
  8. package/bpmn.mjs +5076 -0
  9. package/copy-button.md +128 -0
  10. package/copy-button.mjs +161 -0
  11. package/custom-elements.json +1135 -18
  12. package/download-button.md +106 -0
  13. package/download-button.mjs +177 -0
  14. package/highlighter.md +45 -0
  15. package/highlighter.mjs +403 -0
  16. package/icon-button-BwB11RGC.js +5 -0
  17. package/icons-BaUbjt-v.js +42 -0
  18. package/index-BEhA78nX.js +7733 -0
  19. package/llumi-element-BWRwgzW5.js +22 -0
  20. package/mermaid.md +58 -0
  21. package/mermaid.mjs +254 -0
  22. package/package.json +16 -50
  23. package/review.md +141 -0
  24. package/review.mjs +2044 -0
  25. package/slot-text-mSWBdWBc.js +51 -0
  26. package/theme.css +2 -0
  27. package/dist/review.cjs +0 -172
  28. package/dist/review.css +0 -98
  29. package/dist/review.js +0 -172
  30. package/dist/review.mjs +0 -1710
  31. package/dist/types/components/review/comment-dialog.element.d.ts +0 -29
  32. package/dist/types/components/review/custom-target.utils.d.ts +0 -16
  33. package/dist/types/components/review/default-editor.element.d.ts +0 -19
  34. package/dist/types/components/review/highlight-manager.d.ts +0 -21
  35. package/dist/types/components/review/index.d.ts +0 -8
  36. package/dist/types/components/review/overall-comment-dialog.element.d.ts +0 -22
  37. package/dist/types/components/review/review-bar.element.d.ts +0 -26
  38. package/dist/types/components/review/review.element.d.ts +0 -60
  39. package/dist/types/components/review/review.machine.d.ts +0 -234
  40. package/dist/types/components/review/review.persistence.d.ts +0 -16
  41. package/dist/types/components/review/review.type.d.ts +0 -37
  42. package/dist/types/components/review/selection-comment-icons.element.d.ts +0 -17
  43. package/dist/types/components/review/selection-range.utils.d.ts +0 -6
  44. package/dist/types/components/review/sort-comments.utils.d.ts +0 -6
  45. package/dist/types/index.d.ts +0 -1
  46. package/dist/types/shared/cn.d.ts +0 -2
  47. package/dist/types/shared/icons.d.ts +0 -7
  48. 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/highlighter/highlighter.element.ts",
516
+ "declarations": [
517
+ {
518
+ "kind": "class",
519
+ "description": "`<llumi-highlighter>` — syntax-highlighted code block (Prism via refractor),\n4 themes, optional copy button, and line-range dimming. Shadow DOM.",
520
+ "name": "LlumiHighlighter",
521
+ "members": [
522
+ {
523
+ "kind": "field",
524
+ "name": "language",
525
+ "type": {
526
+ "text": "string"
527
+ },
528
+ "default": "\"\"",
529
+ "attribute": "language"
530
+ },
531
+ {
532
+ "kind": "field",
533
+ "name": "theme",
534
+ "type": {
535
+ "text": "string"
536
+ },
537
+ "default": "\"ghcolors\"",
538
+ "attribute": "theme",
539
+ "reflects": true
540
+ },
541
+ {
542
+ "kind": "field",
543
+ "name": "code",
544
+ "type": {
545
+ "text": "string"
546
+ },
547
+ "default": "\"\"",
548
+ "attribute": "code"
549
+ },
550
+ {
551
+ "kind": "field",
552
+ "name": "highlight",
553
+ "type": {
554
+ "text": "LineRange[] | undefined"
555
+ }
556
+ },
557
+ {
558
+ "kind": "field",
559
+ "name": "copyButton",
560
+ "type": {
561
+ "text": "boolean"
562
+ },
563
+ "default": "true",
564
+ "attribute": "copy-button"
565
+ },
566
+ {
567
+ "kind": "field",
568
+ "name": "_tokenLines",
569
+ "type": {
570
+ "text": "Line[]"
571
+ },
572
+ "privacy": "private",
573
+ "default": "[]"
574
+ },
575
+ {
576
+ "kind": "field",
577
+ "name": "_seq",
578
+ "type": {
579
+ "text": "number"
580
+ },
581
+ "privacy": "private",
582
+ "default": "0"
583
+ },
584
+ {
585
+ "kind": "field",
586
+ "name": "_highlightTask",
587
+ "type": {
588
+ "text": "Promise<void>"
589
+ },
590
+ "privacy": "private"
591
+ },
592
+ {
593
+ "kind": "field",
594
+ "name": "_warnedLang",
595
+ "type": {
596
+ "text": "string"
597
+ },
598
+ "privacy": "private",
599
+ "default": "\"\""
600
+ },
601
+ {
602
+ "kind": "field",
603
+ "name": "resolvedCode",
604
+ "type": {
605
+ "text": "string"
606
+ },
607
+ "description": "Code source: `code` property, else light-DOM text content.",
608
+ "readonly": true
609
+ },
610
+ {
611
+ "kind": "field",
612
+ "name": "whenHighlighted",
613
+ "type": {
614
+ "text": "Promise<void>"
615
+ },
616
+ "description": "Test hook: resolves when the in-flight highlight pass has finished.",
617
+ "readonly": true
618
+ },
619
+ {
620
+ "kind": "method",
621
+ "name": "runHighlight",
622
+ "privacy": "private",
623
+ "return": {
624
+ "type": {
625
+ "text": "Promise<void>"
626
+ }
627
+ }
628
+ },
629
+ {
630
+ "kind": "method",
631
+ "name": "renderLines",
632
+ "privacy": "private",
633
+ "return": {
634
+ "type": {
635
+ "text": "TemplateResult[]"
636
+ }
637
+ }
638
+ }
639
+ ],
640
+ "attributes": [
641
+ {
642
+ "name": "language",
643
+ "type": {
644
+ "text": "string"
645
+ },
646
+ "default": "\"\"",
647
+ "fieldName": "language"
648
+ },
649
+ {
650
+ "name": "theme",
651
+ "type": {
652
+ "text": "string"
653
+ },
654
+ "default": "\"ghcolors\"",
655
+ "fieldName": "theme"
656
+ },
657
+ {
658
+ "name": "code",
659
+ "type": {
660
+ "text": "string"
661
+ },
662
+ "default": "\"\"",
663
+ "fieldName": "code"
664
+ },
665
+ {
666
+ "name": "copy-button",
667
+ "type": {
668
+ "text": "boolean"
669
+ },
670
+ "default": "true",
671
+ "fieldName": "copyButton"
672
+ }
673
+ ],
674
+ "superclass": {
675
+ "name": "LlumiElement",
676
+ "module": "/src/shared/llumi-element"
677
+ },
678
+ "tagName": "llumi-highlighter",
679
+ "customElement": true
680
+ }
681
+ ],
682
+ "exports": [
683
+ {
684
+ "kind": "js",
685
+ "name": "LlumiHighlighter",
686
+ "declaration": {
687
+ "name": "LlumiHighlighter",
688
+ "module": "src/components/highlighter/highlighter.element.ts"
689
+ }
690
+ },
691
+ {
692
+ "kind": "custom-element-definition",
693
+ "name": "llumi-highlighter",
694
+ "declaration": {
695
+ "name": "LlumiHighlighter",
696
+ "module": "src/components/highlighter/highlighter.element.ts"
697
+ }
698
+ }
699
+ ]
700
+ },
701
+ {
702
+ "kind": "javascript-module",
703
+ "path": "src/components/download-button/download-button.element.ts",
704
+ "declarations": [
705
+ {
706
+ "kind": "class",
707
+ "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`.",
708
+ "name": "LlumiDownloadButton",
709
+ "members": [
710
+ {
711
+ "kind": "field",
712
+ "name": "filename",
713
+ "type": {
714
+ "text": "string"
715
+ },
716
+ "default": "\"\"",
717
+ "description": "Name of the downloaded file. Required — a click with no filename is a no-op.",
718
+ "attribute": "filename"
719
+ },
720
+ {
721
+ "kind": "field",
722
+ "name": "mimeType",
723
+ "type": {
724
+ "text": "string"
725
+ },
726
+ "default": "\"text/plain\"",
727
+ "description": "MIME type for the Blob.",
728
+ "attribute": "mime-type"
729
+ },
730
+ {
731
+ "kind": "field",
732
+ "name": "title",
733
+ "type": {
734
+ "text": "string"
735
+ },
736
+ "default": "\"Download file\"",
737
+ "description": "Tooltip + mirrored to the button's aria-label.",
738
+ "attribute": "title"
739
+ },
740
+ {
741
+ "kind": "field",
742
+ "name": "getValue",
743
+ "type": {
744
+ "text": "() => string | undefined"
745
+ },
746
+ "description": "Content source (highest precedence), JS property only — no attribute."
747
+ },
748
+ {
749
+ "kind": "field",
750
+ "name": "instance",
751
+ "type": {
752
+ "text": "ReturnType<typeof downloadButtonMachine.newInstance> | undefined"
753
+ },
754
+ "privacy": "private"
755
+ },
756
+ {
757
+ "kind": "field",
758
+ "name": "unsubscribe",
759
+ "type": {
760
+ "text": "() => void | undefined"
761
+ },
762
+ "privacy": "private"
763
+ },
764
+ {
765
+ "kind": "method",
766
+ "name": "onTransition",
767
+ "privacy": "private",
768
+ "parameters": [
769
+ {
770
+ "name": "_state",
771
+ "type": {
772
+ "text": "DownloadButtonState"
773
+ }
774
+ },
775
+ {
776
+ "name": "event",
777
+ "type": {
778
+ "text": "DownloadButtonEvent | undefined"
779
+ }
780
+ }
781
+ ]
782
+ },
783
+ {
784
+ "kind": "method",
785
+ "name": "onClick",
786
+ "privacy": "private"
787
+ },
788
+ {
789
+ "kind": "method",
790
+ "name": "viewFor",
791
+ "privacy": "private",
792
+ "return": {
793
+ "type": {
794
+ "text": "{\n\t\ticon: TemplateResult;\n\t\tcls: string;\n\t}"
795
+ }
796
+ },
797
+ "parameters": [
798
+ {
799
+ "name": "name",
800
+ "type": {
801
+ "text": "DownloadButtonState[\"name\"]"
802
+ }
803
+ }
804
+ ]
805
+ }
806
+ ],
807
+ "events": [
808
+ {
809
+ "name": "llumi-download",
810
+ "type": {
811
+ "text": "CustomEvent"
812
+ },
813
+ "description": "on success; detail `{ filename }`"
814
+ },
815
+ {
816
+ "name": "llumi-download-error",
817
+ "type": {
818
+ "text": "CustomEvent"
819
+ },
820
+ "description": "on failure; detail `{ error }`"
821
+ }
822
+ ],
823
+ "attributes": [
824
+ {
825
+ "name": "filename",
826
+ "type": {
827
+ "text": "string"
828
+ },
829
+ "default": "\"\"",
830
+ "description": "Name of the downloaded file. Required — a click with no filename is a no-op.",
831
+ "fieldName": "filename"
832
+ },
833
+ {
834
+ "name": "mime-type",
835
+ "type": {
836
+ "text": "string"
837
+ },
838
+ "default": "\"text/plain\"",
839
+ "description": "MIME type for the Blob.",
840
+ "fieldName": "mimeType"
841
+ },
842
+ {
843
+ "name": "title",
844
+ "type": {
845
+ "text": "string"
846
+ },
847
+ "default": "\"Download file\"",
848
+ "description": "Tooltip + mirrored to the button's aria-label.",
849
+ "fieldName": "title"
850
+ }
851
+ ],
852
+ "superclass": {
853
+ "name": "LlumiElement",
854
+ "module": "/src/shared/llumi-element"
855
+ },
856
+ "tagName": "llumi-download-button",
857
+ "customElement": true
858
+ }
859
+ ],
860
+ "exports": [
861
+ {
862
+ "kind": "js",
863
+ "name": "LlumiDownloadButton",
864
+ "declaration": {
865
+ "name": "LlumiDownloadButton",
866
+ "module": "src/components/download-button/download-button.element.ts"
867
+ }
868
+ },
869
+ {
870
+ "kind": "custom-element-definition",
871
+ "name": "llumi-download-button",
872
+ "declaration": {
873
+ "name": "LlumiDownloadButton",
874
+ "module": "src/components/download-button/download-button.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",
@@ -134,8 +1254,8 @@
134
1254
  }
135
1255
  ],
136
1256
  "superclass": {
137
- "name": "TailwindElement",
138
- "module": "/src/shared/tailwind-element"
1257
+ "name": "LlumiElement",
1258
+ "module": "/src/shared/llumi-element"
139
1259
  },
140
1260
  "tagName": "llumi-comment-dialog",
141
1261
  "customElement": true
@@ -263,8 +1383,8 @@
263
1383
  }
264
1384
  ],
265
1385
  "superclass": {
266
- "name": "TailwindElement",
267
- "module": "/src/shared/tailwind-element"
1386
+ "name": "LlumiElement",
1387
+ "module": "/src/shared/llumi-element"
268
1388
  },
269
1389
  "tagName": "llumi-default-editor",
270
1390
  "customElement": true
@@ -390,8 +1510,8 @@
390
1510
  }
391
1511
  ],
392
1512
  "superclass": {
393
- "name": "TailwindElement",
394
- "module": "/src/shared/tailwind-element"
1513
+ "name": "LlumiElement",
1514
+ "module": "/src/shared/llumi-element"
395
1515
  },
396
1516
  "tagName": "llumi-overall-comment-dialog",
397
1517
  "customElement": true
@@ -598,8 +1718,8 @@
598
1718
  }
599
1719
  ],
600
1720
  "superclass": {
601
- "name": "TailwindElement",
602
- "module": "/src/shared/tailwind-element"
1721
+ "name": "LlumiElement",
1722
+ "module": "/src/shared/llumi-element"
603
1723
  },
604
1724
  "tagName": "llumi-review-bar",
605
1725
  "customElement": true
@@ -675,9 +1795,11 @@
675
1795
  },
676
1796
  {
677
1797
  "kind": "field",
678
- "name": "rangeMap",
679
- "privacy": "private",
680
- "default": "new Map<string, Range>()"
1798
+ "name": "painter",
1799
+ "type": {
1800
+ "text": "ReviewHighlightPainter"
1801
+ },
1802
+ "privacy": "private"
681
1803
  },
682
1804
  {
683
1805
  "kind": "field",
@@ -893,11 +2015,6 @@
893
2015
  }
894
2016
  }
895
2017
  },
896
- {
897
- "kind": "method",
898
- "name": "updateSelectionHighlights",
899
- "privacy": "private"
900
- },
901
2018
  {
902
2019
  "kind": "method",
903
2020
  "name": "isAnnotating",
@@ -1074,8 +2191,8 @@
1074
2191
  }
1075
2192
  ],
1076
2193
  "superclass": {
1077
- "name": "TailwindElement",
1078
- "module": "/src/shared/tailwind-element"
2194
+ "name": "LlumiElement",
2195
+ "module": "/src/shared/llumi-element"
1079
2196
  },
1080
2197
  "tagName": "llumi-selection-comment-icons",
1081
2198
  "customElement": true